//********************************************************************************************
// 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 - 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 (oXmlHttp.status == 200)
			{
				eval(oXmlHttp.responseText);
			}
			else
			{
				alert("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 (oXmlHttp.status == 200)
	{
		eval(oXmlHttp.responseText);
	}
	else
	{
		alert("erreur :"+oXmlHttp.status +" sending "+url);
	}
}

/* ----------------------------------------------
/* Ajax - ASYNCHRONE
/* On ne fait rien
/* ---------------------------------------------- */
function sendRequest(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 (oXmlHttp.status == 200)
			{
				//alert("reponse obtenue :"+oXmlHttp.responseText);
			}
			else
			{
				alert("erreur :"+oXmlHttp.status +" sending "+url);
			}
		}
	}
	oXmlHttp.send(null);
}

/* ----------------------------------------------
/* Ajax - ASYNCHRONE
/* on n'active pas le sablier
/* ---------------------------------------------- */
function sendRequestNoWait(url) {
	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 (oXmlHttp.status == 200)
			{
				//alert("reponse obtenue :"+oXmlHttp.responseText);
			}
			else
			{
				alert("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 (oXmlHttp.status == 200)
				{
					//alert("divId: "+divId+" / url "+url);
					getDivById(divId).innerHTML = oXmlHttp.responseText;
				}
				else
				{
					alert("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 (oXmlHttp.status == 200)
	{
		//alert("reponse obtenue :"+oXmlHttp.responseText);
	}
	else
	{
		alert("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 (oXmlHttp.status == 200)
	{
        getDivById(divId).innerHTML = oXmlHttp.responseText;
	}
	else
	{
		alert("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 X,Y qu'un autre 
/* ?l?ment (appell? ancre).
/* Cet 'autre ?l?ment' doit poss?der les attributs 'id' et 'name' 
/* ------------------------------------------------------------------------------ */
function setToAnchor(ID_Anchor,Name_Anchor,ID_Div)
{
	var divHelpLeft = 0;	//Position du Div par rapport au c?t? gauche de la page
	var divHelpTop = 0;	  	//Position du Div par rapport au haut de la page
    if (dom)
    {
        pos = document.getElementById(ID_Anchor);
        divHelpLeft = getLeft(pos);
        divHelpTop = getTop(pos);
        document.getElementById(ID_Div).style.left = divHelpLeft;
        document.getElementById(ID_Div).style.top = divHelpTop;
    }
    else if (ie4)
    {
        pos = document.all[ID_Anchor];
        divHelpLeft = getLeft(pos);
        divHelpTop = getTop(pos);
        document.all[ID_Div].style.posLeft = divHelpLeft;
        document.all[ID_Div].style.posTop = divHelpTop;
    }
    else if (ns4)
    {
        pos = document.anchors[Name_Anchor];
        divHelpLeft = pos.x;
        divHelpTop = pos.y;
        document.layers[ID_Div].pageX = divHelpLeft;
        document.layers[ID_Div].pageY = divHelpTop;
    }
}

/* -----------------------------------------------------------
/* Rend un DIV visible
/* ----------------------------------------------------------- */
function showDiv(divName)
{
	if (document.getElementById(divName))
		{document.getElementById(divName).style.visibility="visible";}
}

/* -----------------------------------------------------------
/* Rend un DIV 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 elmt = get_element(id_name);
	

    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);
}
