//********************************************************************************************
// Javascript contenant des fonctions g?n?rales
//*********************************************** *******************************************
var dom = (document.getElementById)? true:false;	  //DOM
var w3c=(document.getElementById)?true:false;
var ns4=(document.layers)?true:false;
var ie4=(document.all && !w3c)?true:false;
var ie5=(document.all && w3c)?true:false;
var ns6=(w3c && navigator.appName.indexOf("Netscape")>=0)?true:false;

/* -------------------------------------------------------------------------------
/* Transforme toutes les occurences d'un caractÃ¨re par une valeur de remplacement.
/* Cette valeur de remplacement est la valeur unicode correspondante et sera 
/* prÃ©fixÃ©e d'un prÃ©fixe.
/* La valeur de remplacement doit Ãªtre sur 4 caractÃ¨res.
/* IN  :s = la chaine de caractÃ¨res Ã  traiter
/*		charToPrefix = le caractÃ¨re Ã  remplacer 
/*		prefix = le prÃ©fixe Ã  utiliser
/*		unicodeValue = la valeur de remplacement 
/* ------------------------------------------------------------------------------- */
/*
function convertToUnicodePrefixedValue(s,charToPrefix,prefix,unicodeValue)
{
	if (unicodeValue.length != 4)
	{
		return null;
	}
	var _s = s;
	var prefixedValue = ''; 
	var index = _s.indexOf(charToPrefix);
	while (index > -1)
	{
		prefixedValue = prefixedValue + _s.substring(0,index) + prefix + unicodeValue;
		_s = _s.substring(index+1,_s.length);
		index = _s.indexOf(charToPrefix);
	}	
	prefixedValue += _s;
	return prefixedValue;
}
*/
/* ----------------------------------------------
/* Recupere un DIV en tenant compte du 
/* navigateur utilise
/* ---------------------------------------------- */
function getDivById(divId)
{
	return document.all ? document.all[divId] : document.getElementById(divId);
}

/* ---------------------------------------------------------------------------------------
/* Ajax - VÃ©rifie si la requÃªte XmlHttp a Ã©tÃ© entiÃ¨rement satisfaite 
/* (200 = requÃªte entiÃ¨rement satisfaite). 
/* Rem : Sous Safari 2, le statut est undefined car le navigateur utilise la mise en cache
/* (bug connu du navigateur probablement rÃ©solu dans Safari 3)
/* --------------------------------------------------------------------------------------- */
function isHTTPStatusOk(status)
{
	return (status == undefined) || (status == 0) || (status >= 200 && status < 300);
}

/* ---------------------------------------------------------------------------------------
/* Ajax - VÃ©rifie s'il y a eu un time-out dans l'application 
/*
/* En cas de time-out, Ajax retourne un status 200 (=ok) et non un status 401 ou 403
/* (accÃ¨s interdit) et comme rÃ©ponse, le contenu de login.jsp ! 
/* Pour savoir ce qu'on reÃ§oit (login.jsp ou une page jsp "normale"), on doit donc tester 
/* un texte spÃ©cifique Ã  login.jsp, Ã  savoir :  '<!--NEXTCARTOLOGINPAGE-->' 
/* obligatoirement prÃ©sent dans cette page
/* --------------------------------------------------------------------------------------- */
function isTimedOut(response)
{
	var i = response.indexOf('<!--NEXTCARTOLOGINPAGE-->');
	return (i > 0);
}

/* ----------------------------------------------
/* Ajax - Appel ASYNCHRONE + eval du resultat
/* url : URL de la page a evaluer
/* ---------------------------------------------- */
function sendAndEvalRequest(url) {
	setHourGlassOn();
	var oXmlHttp = zXmlHttp.createRequest();
	oXmlHttp.open('get', url, true);
	// fdh: Mantis 2637 - evite d'utiliser la cache
	oXmlHttp.setRequestHeader("Cache-Control","no-cache");
	oXmlHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	oXmlHttp.onreadystatechange=function() {
		if(oXmlHttp.readyState==4) {
			if (isHTTPStatusOk(oXmlHttp.status))
			{
				if (isTimedOut(oXmlHttp.responseText))
				{
					document.location.href = 'index.jsp';
				}
				else
				{ 
					eval(oXmlHttp.responseText);
				}	
			}
			else
			{
				alert("sendAndEvalRequest(url) Erreur : "+oXmlHttp.status +" sending "+url);
			}
		}
	}
	oXmlHttp.send(null);
}

/* ----------------------------------------------
/* Ajax - Appel SYNCHRONE + eval du resultat
/* url : URL de la page a evaluer
/* ---------------------------------------------- */
function sendAndEvalSyncRequest(url) {
	var oXmlHttp = zXmlHttp.createRequest();
	oXmlHttp.open('get', url, false);
	// fdh: Mantis 2637 - evite d'utiliser la cache
	oXmlHttp.setRequestHeader("Cache-Control","no-cache");
	oXmlHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	
	oXmlHttp.send(null);
	if (isHTTPStatusOk(oXmlHttp.status))
	{
		if (isTimedOut(oXmlHttp.responseText))
		{
			document.location.href = 'index.jsp';
		}
		else
		{ 
			eval(oXmlHttp.responseText);
		}		
	}
	else
	{
		alert("sendAndEvalSyncRequest(url) Erreur :"+oXmlHttp.status +" sending "+url);
	}
}

/* -----------------------------------------------------------------
/* Ajax - ASYNCHRONE
/* On ne fait rien et on active juste le sablier + message d'attente
/* ----------------------------------------------------------------- */
function sendRequest(url) {
	setHourGlassOn();
	var undefined;
	var oXmlHttp = zXmlHttp.createRequest();
	
	oXmlHttp.open('get', url, true);
	// fdh: Mantis 2637 - evite d'utiliser la cache
	oXmlHttp.setRequestHeader("Cache-Control","no-cache");
	oXmlHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	oXmlHttp.onreadystatechange=function() {
		if(oXmlHttp.readyState==4) {
			if (isHTTPStatusOk(oXmlHttp.status))
			{
				if (isTimedOut(oXmlHttp.responseText))
				{
					document.location.href = 'index.jsp';
				}
				else
				{ 
					setWaitingOff();
					//alert("reponse obtenue :"+oXmlHttp.responseText);
				}		
			}
			else
			{
				alert("sendRequest(url) Erreur :"+oXmlHttp.status +" sending "+url);
			}
		}
	}
	oXmlHttp.send(null);
}


/* ----------------------------------------------
/* Ajax - ASYNCHRONE
/* on n'active pas le sablier
/* ---------------------------------------------- */
function sendRequestNoWait(url) {
	var undefined;
	var oXmlHttp = zXmlHttp.createRequest();
	
	oXmlHttp.open('get', url, true);
	// fdh: Mantis 2637 - evite d'utiliser la cache
	oXmlHttp.setRequestHeader("Cache-Control","no-cache");
	oXmlHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
	
	oXmlHttp.onreadystatechange=function() {
		if(oXmlHttp.readyState==4) {
			if (isHTTPStatusOk(oXmlHttp.status))
			{
				if (isTimedOut(oXmlHttp.responseText))
				{
					document.location.href = 'index.jsp';
				}
				else
				{
					//alert("reponse obtenue :"+oXmlHttp.responseText);
				}	
			}
			else
			{
				alert("sendRequestNoWait(url) Erreur :"+oXmlHttp.status +" sending "+url);
			}
		}
	}
	oXmlHttp.send(null);
}

/* -------------------------------------------------------------------------------------------------
/* Ajax - Appel ASYNCHRONE et envoi du resultat dans un element HTML
/* divId : Identifiant du DIV dont le contenu sera mis a jour avec le resultat de l'appel (Cfr. url)
/* url : URL de la page,action,etc... a appeller
/* ------------------------------------------------------------------------------------------------- */
function sendRequestToDiv(divId,url) {
	if (getDivById(divId))
	{
		setHourGlassOn();
		var oXmlHttp = zXmlHttp.createRequest();
		oXmlHttp.open('get', url, true);
		// fdh: Mantis 2637 - evite d'utiliser la cache
		oXmlHttp.setRequestHeader("Cache-Control","no-cache");
		oXmlHttp.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");	
		oXmlHttp.onreadystatechange=function() {
			if(oXmlHttp.readyState==4) {
			if (isHTTPStatusOk(oXmlHttp.status))
				{
					if (isTimedOut(oXmlHttp.responseText))
					{
						if (parent.document)
						{
							parent.document.location.href = 'index.jsp';
						}
						else
						{
							document.location.href = 'index.jsp';
						}	
					}
					else
					{
						getDivById(divId).innerHTML = oXmlHttp.responseText;
					}	
				}
				else
				{
					alert("sendRequestToDiv(divId,url) Erreur :"+oXmlHttp.status+" url: "+url);
				}
			}
		}
		oXmlHttp.send(null);
	}
} 	


/* ----------------------------------------------
/* Ajax - Appel SYNCHRONE 
/* On ne fait rien
/* ---------------------------------------------- */
function sendSyncRequest(url) {
	setHourGlassOn();
	var oXmlHttp = zXmlHttp.createRequest();
	oXmlHttp.open('get', url, false);
	oXmlHttp.send(null);
	if (isHTTPStatusOk(oXmlHttp.status))
	{
		if (isTimedOut(oXmlHttp.responseText))
		{
			document.location.href = 'index.jsp';
		}
		else
		{
			//alert("reponse obtenue :"+oXmlHttp.responseText);
		}
	}
	else
	{
		alert("sendSyncRequest(url) Erreur :"+oXmlHttp.status +" sending "+url);
	}
}

/* -------------------------------------------------------------------------------------------------
/* Ajax - Appel SYNCHRONE et envoi du resultat dans un element HTML
/* divId : Identifiant du DIV dont le contenu sera mis a jour avec le resultat de l'appel (Cfr. url)
/* url : URL de la page,action,etc... a appeller
/* ------------------------------------------------------------------------------------------------- */
function sendSyncRequestToDiv(divId,url) {
	var oXmlHttp = zXmlHttp.createRequest();
	oXmlHttp.open('get', url, false);
	oXmlHttp.send(null);

	if (isHTTPStatusOk(oXmlHttp.status))
	{
		if (isTimedOut(oXmlHttp.responseText))
		{
			if (parent.document)
			{
				parent.document.location.href = 'index.jsp';
			}
			else
			{
				document.location.href = 'index.jsp';
			}	
		}
		else
		{        
	        getDivById(divId).innerHTML = oXmlHttp.responseText;
	    }  
	}
	else
	{
		alert("sendSyncRequestToDiv(divId,url) Erreur :"+oXmlHttp.status+" url: "+url);
	}
	return true;
} 	

/* -----------------------------
/* A-t-on fait un click droit ?
/* ----------------------------- */
function isNotRightClick(e){
	if (navigator.appName == 'Netscape' && 
	 (e.which == 3 || e.which == 2))
	  return false;
	else if (navigator.appName == 'Microsoft Internet Explorer' && 
	 (event.button == 2 || event.button == 3)) {
	   return false;
	}
	return true;
}

/* -------------------------------------------------------
/* Fonction permettant de conna?tre la position d'un objet
/* par rapport au bord gauche de la page.
/* Cet objet peut ?tre ? l'int?rieur d'un autre objet.
/* ------------------------------------------------------- */
function getLeft(MyObject)
{
	if (MyObject)
	{
	    if (MyObject.offsetParent)
	        return (MyObject.offsetLeft + getLeft(MyObject.offsetParent));
	    else
	        return (MyObject.offsetLeft);
	 }       
}

/* -------------------------------------------------------
/* Fonction permettant de conna?tre la position d'un objet
/* par rapport au bord haut de la page.
/* Cet objet peut ?tre ? l'int?rieur d'un autre objet.
/* ------------------------------------------------------- */
function getTop(MyObject)
{
    if (MyObject)
	{
		if (MyObject.offsetParent)
        	return (MyObject.offsetTop + getTop(MyObject.offsetParent));
	    else
    	    return (MyObject.offsetTop);
    }	    
}

/* ------------------------------------------------------------------------------
/* Fonction permettant de positionner un DIV aux mÃªmes coordonnÃ©es top,left qu'un 
/* autre Ã©lÃ©ment (appellÃ© ancre/anchor).
/* PrÃ©requis :
/* - L'ancre DOIT possÃ©der les attributs 'id' et 'name' 
/* - Les positions de l'ancre et du DIV Ã  positionner doivent Ãªtre exprimÃ©es en px
/*
/* Si divPosition = 'right', le DIV est positionnÃ© aux coordonnÃ©es top+largeur, 
/* left de l'ancre.
/*
/* anchorId : attribut ID de l'ancre sur lequel se cadrer
/* anchorName : attribut NAME de l'ancre sur lequel se cadrer
/* divId : attribut ID du DIV que l'on veut positionner sur l'ancre
/* divPosition : placement du DIV par rapport Ã  l'ancre 
/* ------------------------------------------------------------------------------ */
function setToAnchor(anchorId, anchorName, divId, divPosition)
{
	var isRightPosition = divPosition.replace(/\s/,'').toLowerCase() == 'right';

	var divHelpLeft = 0;	//Position du Div par rapport au cÃ´tÃ© gauche de la page
	var divHelpWidth = 0;	//Largeur du Div
	var divHelpTop = 0;	  	//Position du Div par rapport au haut de la page
    if (dom)
    {
        pos = document.getElementById(anchorId);
        divHelpLeft = getLeft(pos);
        divHelpTop = getTop(pos);
        if (isRightPosition)
        {
        	divHelpWidth = pos.style.width;
        }

        document.getElementById(divId).style.left = divHelpLeft + divHelpWidth;
        document.getElementById(divId).style.top = divHelpTop;
    }
    else if (ie4)
    {
        pos = document.all[anchorId];
        divHelpLeft = getLeft(pos);
        divHelpTop = getTop(pos);
        if (isRightPosition)
        {
        	divHelpWidth = pos.style.width;
        }
        
        document.all[divId].style.posLeft = divHelpLeft + divHelpWidth;
        document.all[divId].style.posTop = divHelpTop;
    }
    else if (ns4)
    {
        pos = document.anchors[anchorName];
        divHelpLeft = pos.x;
        divHelpTop = pos.y;
        if (isRightPosition)
        {
        	divHelpWidth = pos.clip.width;
        }
        document.layers[divId].pageX = divHelpLeft + divHelpWidth;
        document.layers[divId].pageY = divHelpTop;
    }
}

// ---------------------------------------------------
// GÃ¨re l'affichage/masquage d'un DIV quelconque
// auteur : dba - 12.07.2007
// --------------------------------------------------- 
function shDiv(divName)
{
	var d = document.getElementById(divName);
	if (d)
	{
		done=false;

		// rem : on teste la longueur car visibility n'a pas de valeur la 1Â° fois 
		if (!done && (d.style.visibility.length == 0 || d.style.visibility == 'visible')) 
		{
			hideDiv(divName);
			done=true;
		}
		if (!done && d.style.visibility != 'visible') 
		{
			showDiv(divName);
		}				
	}
}

/* -----------------------------------------------------------
/* Rend un DIV quelconque visible
/* ----------------------------------------------------------- */
function showDiv(divName)
{
	if (document.getElementById(divName))
		{document.getElementById(divName).style.visibility="visible";}
}

/* -----------------------------------------------------------
/* Rend un DIV quelconque invisible
/* ----------------------------------------------------------- */
function hideDiv(divName)
{
	if (document.getElementById(divName))
		{document.getElementById(divName).style.visibility="hidden";}
}


/* -------------------------------
/* Modifie l'opacite d'un element
/* ------------------------------- */
function setOpacity(id_name, opacity)
{
	var undefined;
	var elmt = get_element(id_name);
	if (elmt != undefined)
	{
	    if (ie4 || ie5)
	    {
	    	elmt.style.filter="alpha(opacity="+opacity+")";
	    }
	    	
		if (ns6)
		{
			elmt.style.MozOpacity=opacity/100;
		}	
	}
}

function get_element(lname)
{
	var the_node;
	
	if(document.layers)
		the_node = document.layers[lname];
	if(document.all)
		the_node = document.all[lname];
	if(!document.all && document.getElementById)
  		the_node = document.getElementById(lname);
  	return(the_node);
}


/* -----------------------------------------------------------
/* Coche ou décoche les cases à cocher (permettant d'effectuer des actions, voir FAQ n°2204)
 * correspondant au type donné en paramètre
/* ----------------------------------------------------------- */
function setCheckboxes(featureTypeName)
{
	// On remplace les / par \\/ : nécessaire pour récupérer l'élément via le # de JQuery
	featureTypeName2 = featureTypeName.replace(/\//, "\\/");
	var ftChecked = $("#"+featureTypeName2+":checked").length;
	
	// Extension de JQuery pour définir les méthodes check() et uncheck()
	jQuery.fn.extend({
		check: function() {
			return this.each(function() { this.checked = true; });
		},
		uncheck: function() {
			return this.each(function() { this.checked = false; });
		}
	});

	// On coche ou on décoche tous les éléments
	if (ftChecked > 0)
		$("input[id^="+featureTypeName+"]").check();
	else
		$("input[id^="+featureTypeName+"]").uncheck();
}
