// GEMINI-1371 VC 25/11/2008: deplacé de javascript.js
// NOUVELLE VERSION
function js_displayLayer (layerId, toShowId, refValue, index, champs) {
	var tableau, nombre, drap
	var i=0;
	var elem = document.getElementById(toShowId);
	tableau=refValue.split(",");
	nombre=tableau.length;
	drap=false;
	do 
	{ 
		if (index==true)
		{
			if (document.formulaire[layerId].selectedIndex == tableau[i]) 
			{
				drap=true;
			}				 
		}
		else
		{
			if (document.formulaire[layerId].options[document.formulaire[layerId].selectedIndex].value == tableau[i]) 
			{
				drap=true;
			}
		}
		
   		i++
	} while (i<nombre) //condition soit fausse On peut forcer la sortie par un break; 
		
	if (drap==true) {
			elem.style.display = 'block';
			elem.style.visibility = 'visible';
			if (champs) {
					champs.focus();
			}
			
		}
	else {				
		elem.style.display = 'none';
		elem.style.visibility = 'hidden';
		if (champs) {
					champs.value="";
		}
	}

}
//GEMINI-436 CR 28/09/2006

//GEMINI-1371 VC 25/11/2008: deplacer de javascript.js
/*GEMINI-435 CR 28/09/2006
nomform : nom du formulaire
index : numero de l'index de l'element selectionner dans la liste 1 ou si val:on met directement val du champs
listechamps : liste des champs qui sont touchées séparer par des virgules, ils doivent etre dans l'ordre chronologique des modif
listechoix : liste des choix pour generer les bonnes listes, les mettre desn l'ordre chronologique et séparr par des ,
*/
function liste(nomform,valindex,listechamps,listechoix,parametres) 
{
	var listechoix2,listechamps2;
	var tablistechamps	= listechamps.split(",");
	var nb	= tablistechamps.length;
	var tablistechoix	= listechoix.split(",");
	var choix = tablistechoix[0];
	var continuer = false;
	var i;
	var champs;
	var index;
	if (isNaN(valindex) == true){	
		champs=valindex.substr(4);
		index=0;
	}
	else {
		index=valindex;
	}
	
	if ((parametres==false)&&(parametres!="0")){
		parametres="";
	};
	
	//Liste secondaire si l'on doit generer un autre liste
	if (listechamps.indexOf(",")!=0){	
		listechamps2 = listechamps.substr(listechamps.indexOf(",")+1);
	}
	else {
		listechamps2=""
	}
	
	if (listechoix.indexOf(",")!=0)	{	
		listechoix2 = listechoix.substr(listechoix.indexOf(",")+1);
	}
	else {
		listechoix2=""
	}
		
	//liste des select à mettre à zero
	for (i=1;i<nb;i++)
	{
		//Si le champs est un select
		if (document.forms[""+nomform+""].elements[tablistechamps[i]].options) 
		{
   			document.forms[""+nomform+""].elements[tablistechamps[i]].options.length = 0;
			if (i==1){
			document.forms[""+nomform+""].elements[tablistechamps[i]].options[0] = new Option('Chargement en cours','-1');
			}
			else {
			document.forms[""+nomform+""].elements[tablistechamps[i]].options[0] = new Option('Sélectionnez votre réponse','-1');
			}
		}
	}
	if (isNaN(valindex) == false) {
		if (document.forms[""+nomform+""].elements[tablistechamps[0]].tagName=='SELECT') {
			document.forms[""+nomform+""].elements[tablistechamps[0]].options[index].selected=true;
			champs=escape(document.forms[""+nomform+""].elements[tablistechamps[0]].options[index].value);
		}
		else{
			champs=escape(document.forms[""+nomform+""].elements[tablistechamps[0]].value);
		}
	}
	
	if(index > -1) 
	{
		var xhr_object = null;
	
		if(window.XMLHttpRequest) // Firefox
		{
			xhr_object = new XMLHttpRequest();
		}	
		else if(window.ActiveXObject) // Internet Explorer
		{
			xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
		}
		else // XMLHttpRequest non supporté par le navigateur
			{ 
			alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
			return;
			}
	
		xhr_object.open("POST", "../../includes/ao/AOlistederoulanteLP.asp?choix="+choix, true);
		
				//alert(xhr_object.status);
		xhr_object.onreadystatechange = function() 
			{
				if(xhr_object.readyState == 4)
				{
				   //alert(xhr_object.responseText);
	               eval(xhr_object.responseText);
				   //on met à jour la liste suivante si nécessaire
				   if ((continuer)&&(listechoix2!="")&&(listechamps2!=""))
				   {			   		
				   		liste(""+nomform+"",0,""+listechamps2+"",""+listechoix2+"",""+parametres+"");
				   }
				}
			}
		
		xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");  
		//var data = "champ="+escape(document.forms[""+nomform+""].elements[tablistechamps[0]].options[index].value)+"&form="+document.forms[""+nomform+""].name+"&select="+tablistechamps[1]+"&listechoix="+listechoix+"&parametres="+parametres;
		var data = "champ="+champs+"&form="+document.forms[""+nomform+""].name+"&select="+tablistechamps[1]+"&listechoix="+listechoix+"&parametres="+parametres;
		xhr_object.send(data);		
	}
}
//GEMINI-435 CR 28/09/2006


//GEMINI-1371 VC 31/10/2008: deplacer de javascript.js
function ChangementPeriode(simple) 
{
    var f = document.getElementById("formulaire");
	if (f) 
	{        
		f["periode"][0].checked=simple
		f["periode"][1].checked=!simple
    }
}

//GEMINI-1371 VC 03/11/2008: deplacé de javascript.js
//Revoi si une date est valide ou non
//celine 6/10/05
function DateValide(ladate) {
	var tab
	var nombre
	var retour
	var jour
	var mois
	var annee
	
	retour=true;
	tab=ladate.split("/");	
	nombre=tab.length;
	if (nombre==3)	{
		jour = parseInt(tab[0],10);
		mois = parseInt(tab[1],10);
		annee = parseInt(tab[2],10);
		if ((annee>=1900 && annee<2079)||(annee>=0 && annee<100)) {
			if ((mois>0) && (mois<13)) 			{
				if (mois==1 || mois==3 || mois==5 || mois==7 || mois==8 || mois==10 || mois==12) {
					if ((jour<1) || (jour>31)) {
						retour=false;
					}
				}
				else {
					if ((jour<1) || (jour>30)) {
						retour=false;
					}
				}
			}
			else {
				retour=false;
			}
		}
		else {
			retour=false;
		}
	}
	else {
		retour=false;
	}

	return retour
}

function isArray(obj){
if (typeof obj!="undefined")
{
	return(typeof(obj.length)=="undefined")?false:true;
}
else
{
	return(false);
}


}

function verif_vide(champ,message_erreur,erreur_origine)
{

	if (!(isArray(champ)))
	{
		
		if (champ.value.length==0)
		{

			champ.focus();
			return(message_erreur+'\n');
		}
		else return('');
	}
	else
	{
		if (champ[0].value.length==0)
		{
			champ[0].focus();
			return(message_erreur+'\n');
		}
		else return('');
	}

}

function verif_date(pDate)
{
	var retour;
	retour = false;
	var reg = /^([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{2,4})$/;
	if(reg.exec(pDate)!=null)
	{
		if(RegExp.$1 <= 31)
			if(RegExp.$2 <= 12)
				retour = true;
	}
	return(retour);
}

function verif_emailjs(champ,message_erreur,erreur_origine)
{
	if (champ.value!='')
	{
	 var reg = /^[a-z0-9._-]+@[a-z0-9.-]{2,}[.][a-z]{2,3}$/ ;
	 if (!(reg.exec(champ.value)!=null))
	 {
		 return(message_erreur+'\n');
	 }
	 else
	 {
	 	return('');
	 }
	}
	else
	{
		return('');
	}
}

function verif_longueur_min(champ,longueur, message_erreur,erreur_origine)
{

	if (champ.value.length<longueur)
	{
		champ.focus();
		return(message_erreur+'\n');
	}
	else return('');

}
function verif_longueur_max(champ,longueur, message_erreur,erreur_origine)
{

	if (champ.value.length>longueur)
	{
		
		champ.focus();
		return(message_erreur+'\n');
	}
	else return('');

}
function verif_element_liste(champ,valeur, message_erreur,erreur_origine)
{
	if (champ.options[champ.selectedIndex].value<valeur)
	{
		champ.focus();
		return(message_erreur+'\n');
	}
	else return('');

}
function verif_element_radio(champ,valeur, message_erreur,erreur_origine)
{
	
	nombre_coche=0;
	retour="";
	for(i=0;i<champ.length;i++)
	{
		if (champ[i].checked==true)
		{
			nombre_coche++;
		}
	}
	if (nombre_coche==0)
	{
		return(message_erreur+'\n');
	}	
	else return('');		
}
function verif_chiffre(champ, message_erreur,erreur_origine)
{

		var valeur=champ.value;
		var liste_caract=/(^\d+$)|(^\d+.\d+$)/;
		if (!liste_caract.test(valeur))
		{
			champ.focus();
			return(message_erreur+'\n');
		}
		else return('');

}
function verif_confirmation(champ1, champ2, message_erreur,erreur_origine)
{

		if (champ1.value!=champ2.value)
		{
			champ1.focus();
			return(message_erreur+'\n');
		}
		else return('');

}
function verif_texte_et_chiffre(champ, message_erreur,erreur_origine)
{

		var valeur=champ.value;
		var liste_caract=/\W/g;
		if (liste_caract.test(valeur))
		{
			champ.focus();
			return(message_erreur+'\n');
		}
		else return('');

}

function verif_cocher(champ,message_erreur,erreur_origine)
{
	if (!(isArray(champ)))
	{
		
		if (champ.checked == false)
		{
			champ.focus();
			return(message_erreur+'\n');
		}
		else return('');
	}
	else
	{
		if (champ[0].checked == false)
		{
			champ[0].focus();
			return(message_erreur+'\n');
		}
		else return('');
	}

}

/* function trim GEMINI-1269 VC 16/01/2009
 * 
 * supprime les espaces au debut et a la fin d'une chaine
 *
 * utilisation: ma_chaine.trim();
 *
 * revoie la chaine nettoyer
 */
function trim () {
	return this.replace(/^\s+|\s+$/g,"");
}//trim
String.prototype.trim = trim;

//GEMINI-1782 VC 07/04/2009: Fonction qui renvoie les la liste des 
//	elements HTML en connaissant la classe css et type de balise
function getElementsByClassName(pTag, pClass, parent){
	var pretour = new Array();
	
	if (parent && 'object' == typeof parent)
		var liste_elem = parent.getElementsByTagName(pTag);
	else
		var liste_elem = document.getElementsByTagName(pTag);
	
 	for (i = 0; i < liste_elem.length; ++i)
		if (liste_elem[i].className.indexOf(pClass) > -1)
			pretour.push(liste_elem[i]);
	
	return pretour;
}


function checkChild(id,check,hasChild) {
	if (document.getElementById(check).checked == true) 
		bool = true;
	else 
		bool = false;
	
	if (document.getElementById(check).parentNode.getElementsByTagName('span')[0]) {
		document.getElementById(check).parentNode.getElementsByTagName('span')[0].style.visibility = 'hidden';
	}
	
	if (hasChild == true) {
		if (document.getElementById(id).innerHTML != "" ) {
			cb = document.getElementById(id).getElementsByTagName('input');
			
			carres = document.getElementById(id).getElementsByTagName('span');
			for (i = 0 ; i < cb.length; i++) {
				cb[i].checked = bool;
			}
			for (i = 0; i < carres.length; i++) {
				if (carres[i].className =='carreVert') {carres[i].style.visibility = 'hidden';}
			}
		}
	}
	
	ajout = document.getElementById('Ajout');
	
	val = check.split("-")[1];
	
	//GEMINI-1574 BC 02/09 quelques modifications pour enregistrer correctement les cases cochées
	check = parseFloat(check.split("-")[1]);
	
	if (bool == true) { 
			//si on coche, on supprime les lieux exclus (avec un "-" devant") s'il sont apparentés au courant et on ajoute le lieu coché 
			//GEMINI-1782 VC 10/04/2009: traitement des fam_id
			if (check == parseInt(check))
			{
				ajout.value = ajout.value.replace(eval('/#-?' + check + '\\.\\d*\\$/g'), '');
				ajout.value = ajout.value.replace(eval('/#-?' + check + '\\$/g'), '');
			}
			else
			{
				ajout.value = ajout.value.replace(eval("/#-?"+check.toString().replace(".","\\.").replace("+","\\+")+"\\.?\\d*\\+?\\d*\\$/g"),"");
			}
			
			ajout.value = ajout.value + "#" + val + "$";
	}
	else if (bool == false) { 
		//si on décoche, on va supprimer les lieux apparentés de la liste
		tmpAj = ajout.value;
		//GEMINI-1782 VC 10/04/2009: traitement des fam_id
		//avant = ajout.value;
		if (check == parseInt(check))
		{
			ajout.value = ajout.value.replace(eval('/#-?' + check + '\\.\\d+\\$/g'), '');
			ajout.value = ajout.value.replace(eval('/#-?' + check + '\\$/g'), '');
		}
		else
		{
			if (document.URL.indexOf('typeNiveau=rub') > 0)
			{
				rub = parseInt(check * 100);
				rub /= 100;
				
				//alert(rub + ' == ' + check);
				//si c'est une rubrique
				if (rub == check){
					//si on à un arrondi à 1 chiffre alors on ajoute un 0
					if (check.toString().length == (parseInt(check * 10) / 10).toString().length)
					{
						ajout.value = ajout.value.replace(eval('/#-?' + check + '0\\d*\\$/g'), '');
						//ajout.value = ajout.value.replace(eval('/#-?' + check + '\\$/g'), '');
					}
					else
						ajout.value = ajout.value.replace(eval('/#-?' + check + '\\d*\\$/g'), '');
				}
				else {
					
					if (check.toString().length == (parseInt(check * 1000) / 1000).toString().length)
					{
						ajout.value = ajout.value.replace(eval('/#-?' + check + '0\\d*\\$/g'), '');
						//ajout.value = ajout.value.replace(eval('/#-?' + check + '\\$/g'), '');
					}
					else
						ajout.value = ajout.value.replace(eval('/#-?' + check + '\\d*\\$/g'), '');
				}
			}
			else
			{
				ajout.value = ajout.value.replace(eval('/#-?' + check.toString().replace('.','\\.').replace('+','\\+') + '\\.?\\d*\\+?\\d*\\$/g'),"");
				//si on supprime une sous rub on supprime aussi la rub du champ sinon la deselection ne marche pas
				//ajout.value = ajout.value.replace(eval('/#-?' + rub + '\\$/g'),"");
			}
		}
		//alert(check + '\n\n' + avant + '\n\n' + ajout.value);
		
		if((tmpAj == ajout.value) && (ajout.value != "")) {
			//si rien n'a été enlevé, on exclu le lieu courant
			ajout.value = ajout.value + "#-" + val + "$";
		}
	}
	
	/*if (bool == true) { ajout.value = ajout.value + check.split("-")[1] + "$";}
	else if (bool == false) { 
		alert(eval('/'+check.split("-")[1].replace(".","\\.")+'\\.?\\d*\\+?\\d*\\$/g'));
		ajout.value = ajout.value.replace(eval('/'+check.split("-")[1].replace(".","\\.")+'\\.?\\d*\\+?\\d*\\$/g'),"");				
	}*/
	
}
	
function checkParent(id) {
	if (id.indexOf("+") > -1)
		id2 = id.split("+")[0];
	else
	{
		if (document.URL.indexOf('typeNiveau=rub') > -1) 
		{
			if (id.length == 11)
				id2 = id.substring(0,id.length-4);
			else
				id2 = id.substring(0,id.indexOf('.'));
		}
		else 
		{
			id2 = id.substring(0,id.length-3);
		}
	}
	
	carre = document.getElementById(id2).parentNode.getElementsByTagName('span')[0];
	if (carre.style.visibility == 'hidden') {
		carre.style.visibility = 'visible';
	}
	else {
		cbs = document.getElementById(id).parentNode.parentNode.parentNode.parentNode.getElementsByTagName("input");
		check = 0;
		for (i = 0 ; i < cbs.length; i++) {
			if (cbs[i].checked == true) {check ++;}
		}
		
		divNiv0 = document.getElementById(id).parentNode.parentNode.parentNode.parentNode;
		
		if (divNiv0.getAttribute('id').indexOf('Niv0') > -1)
		{
			listeCarreVert = getElementsByClassName('span', 'carreVert', divNiv0)
	
			for (j = 0; j < listeCarreVert.length; ++j)
				if (listeCarreVert[j].style.visibility == 'visible')
				{
					check = -1;
					break;
				}
		}
		
		if (check == i) {
			carre.style.visibility = 'hidden';
			document.getElementById(id2).checked = true;
		}
		else if (check == 0) {
			carre.style.visibility = 'hidden';
			document.getElementById(id2).checked = false;
		}
	}
	if (carre.parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByTagName("span")[0]) 
	{
		if (document.getElementById(id2.substring(0,id2.length-3)))	
			checkParent(id2);
	}	
}
	
function hideCarre(carre,cb,nom,child) {
	carre.style.visibility = 'hidden';
	document.getElementById("CB-" + cb).checked = true;
	checkChild(nom + '-' + cb,"CB-" + cb,child);
}

/* Permet de faire monter ou descendre une ligne dans un tableau
*  - rowId = id du tr a deplacer
*  - direction ('haut'/'bas') = sens dans lequel on va deplacer la ligne
* 
*  la ligne doit contenir 2 images cliquable appelant cette fonction
*  (une pour monter l'autre pour descendre) 
*  GEMINI-2174 BC 08/2009
*/
function moveRow(rowId,direction) {
	//recuperation de l'index de la ligne choisie
	var clickedRowIndex = document.getElementById(rowId).rowIndex;
				
	//index de la derniere ligne du tableau (pour ne pas aller trop bas
	var maxindex = document.getElementById(rowId).parentNode.getElementsByTagName("tr").length - 1;
	 
	//si on se trouve en haut ou en bas, on empeche de monter ou de descendre (respectivement)
	if(clickedRowIndex == "0" && direction == "haut"){
		return false;
	}
			 				
	if(clickedRowIndex == maxindex && direction == "bas"){
		return false;
	}
	
	//reference a la table parente
	var parentTable = document.getElementById(rowId).parentNode;
				 
	//reference a la ligne choisie
	var clickedrow = parentTable.getElementsByTagName("tr")[clickedRowIndex];
				 
	//on definit l'index de la deuxieme ligne impactee
	if(direction == "haut") {
		var adjacentRowIndex = clickedRowIndex - 1;
	}
				 
	if(direction == "bas") {
		var adjacentRowIndex = clickedRowIndex + 1;
	}
	
	//reference a la deuxieme ligne impactee
	var adjacentrow = parentTable.getElementsByTagName("tr")[adjacentRowIndex];
				 
	//on cree une copie de chaque ligne impactee
	var clickedrow_clone = clickedrow.cloneNode(true);
	var adjacentrow_clone = adjacentrow.cloneNode(true);
	
	//on cache un des liens monter ou descendre si besoin est
	if(adjacentRowIndex == "0")
		clickedrow_clone.getElementsByTagName("img")[0].style.visibility = "hidden";
	else
	 	clickedrow_clone.getElementsByTagName("img")[0].style.visibility = "visible";
		
	if(clickedRowIndex == "0")
		adjacentrow_clone.getElementsByTagName("img")[0].style.visibility = "hidden";
	else
		adjacentrow_clone.getElementsByTagName("img")[0].style.visibility = "visible";
					
	if(adjacentRowIndex == maxindex)
		clickedrow_clone.getElementsByTagName("img")[1].style.visibility = "hidden";
	else
	 	clickedrow_clone.getElementsByTagName("img")[1].style.visibility = "visible";
					
	if(clickedRowIndex == maxindex)
		adjacentrow_clone.getElementsByTagName("img")[1].style.visibility = "hidden";
	else
	 	adjacentrow_clone.getElementsByTagName("img")[1].style.visibility = "visible";
					
	//on intervertit les 2 lignes 
	adjacentrow = parentTable.replaceChild(clickedrow_clone,adjacentrow);
	clickedrow = parentTable.replaceChild(adjacentrow_clone,clickedrow);
}

/* function strtr()
 *	GEMINI-2713 VC 01/06/2010
 *
 * Resume:
 * 	fonction qui remplace chaque caractere du parametre from par son equivalent dans le parametre to.
 * 	from et to peuvent etre une string ou un tableau
 *
 * Utilisation: ma_chaine.strtr(from, to)
 */
function strtr(from, to)
{
	var c0, c1, i, retour;
	retour = this;
	for (i = 0; i < from.length; ++i)
	{
		if (typeof from == 'string')
			c0 = from.substr(i, 1);
		else
			if (typeof from == 'object')
				c0 = from[i];
		
		if (i > to.length)
			c1 = ""
		else
		{
			if (typeof from == 'string')
				c1 = to.substr(i, 1);
			else
				if (typeof to == 'object')
					c1 = to[i];
		}
		regexp = new RegExp(c0, 'g'); 
		retour = retour.replace(regexp, c1);
	}
	return retour;
}
String.prototype.strtr = strtr;

/* function left GEMINI-2762 VC 03/06/2010
 * 
 * renvoi les nb caracteres de gauche d'une chaine de caractere
 *
 * utilisation: ma_chaine.left(1);
 *
 */
function left(nb)
{
	return this.substr(0, nb);
}
String.prototype.left = left;

/* function right GEMINI-2762 VC 03/06/2010
 * 
 * renvoi les nb caracteres de droite d'une chaine de caractere
 *
 * utilisation: ma_chaine.right(1);
 *
 */
function right(nb)
{
	return this.substr(this.length - nb, nb);
}
String.prototype.right = right;