//********************************************************************************************
// 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 le statut de la reponse à une requête XmlHttp 
/* 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 - 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))
			{
				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))
	{
		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))
			{
				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))
			{
				//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))
				{
					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))
	{
		//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))
	{
        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);
}
