var coche = true;

// Modif PM du 07-02-07, paramètre optionnel pour ne pas cocher les coches disabled
// Exemple d'appel : cocher(this.form,1);
// Nota : cocher(this.form); fonctionne toujours
// 1.5.005 PS 25/03/09 paramètre 3 = préfixe du nom de la coche pour gérer plusieurs colonnes de coches
//++1.5.006 PM 07-04-09, doctech 971, appel de cocher() avec un nom de coche différent coche_rlv[] donc je modifie la fonction javascript cocher(), on donne le nom complet de la coche et non pas le prefixe de la coche
function cocher(frm){
	// Ajout PM du 07-02-07, récupération du paramètre optionnel...
	var etat="";
	if(cocher.arguments.length>1)etat=cocher.arguments[1];
	
	//var prefixe="";// 1.5.005 PS 25/03/09
	//if(cocher.arguments.length>2)prefixe=cocher.arguments[2];// 1.5.005 PS 25/03/09
	var nom_coche="coche";//++1.5.006 PM 07-04-09, doctech 971
	if(cocher.arguments.length>2)nom_coche=cocher.arguments[2];//++1.5.006 PM 07-04-09, doctech 971
	//...Fin ajout PM du 07-02-07
	
	for(i=0;i<frm.length;i++)
    {
		//if (frm.elements[i].name.substring(0,prefixe.length+5)==prefixe+"coche")// 1.5.005 PS 25/03/09
		if (frm.elements[i].name.substring(0,nom_coche.length)==nom_coche)//++1.5.006 PM 07-04-09, doctech 971
		{
			e=frm.elements[i];
			if (e.type=='checkbox') 
			{
				// Ajout PM du 07-02-07...
				if(etat!="") {
					if(!e.disabled)e.checked=coche;
				}
				// ...Fin ajout PM du 07-02-07
				else e.checked = coche;
			}
		}
    }
    coche = !(coche);
}

function cocher_(frm){
	// Ajout PM du 07-02-07, récupération du paramètre optionnel...
	var etat="";
	if(cocher_.arguments.length>1)etat=cocher_.arguments[1];
	
	//var prefixe="";// 1.5.005 PS 25/03/09
	//if(cocher_2.arguments.length>2)prefixe=cocher_2.arguments[2];// 1.5.005 PS 25/03/09
	var nom_coche="coche";//++1.5.006 PM 07-04-09, doctech 971
	if(cocher_.arguments.length>2)nom_coche=cocher_.arguments[2];//++1.5.006 PM 07-04-09, doctech 971
	//...Fin ajout PM du 07-02-07
	if(cocher_.arguments.length>3)
	{
		arg_this=cocher_.arguments[3];
		for(i=0;i<frm.length;i++)
	    {
			//if (frm.elements[i].name.substring(0,prefixe.length+5)==prefixe+"coche")// 1.5.005 PS 25/03/09
			if (frm.elements[i].name.substring(0,nom_coche.length)==nom_coche)//++1.5.006 PM 07-04-09, doctech 971
			{
				e=frm.elements[i];
				if (e.type=='checkbox') 
				{
					// Ajout PM du 07-02-07...
					if(etat!="") {
						if(!e.disabled)e.checked=arg_this.checked;
					}
					// ...Fin ajout PM du 07-02-07
					else e.checked = arg_this.checked;
				}
			}
	    }
	    coche = !(coche);
	}
	else
	{
		for(i=0;i<frm.length;i++)
	    {
			//if (frm.elements[i].name.substring(0,prefixe.length+5)==prefixe+"coche")// 1.5.005 PS 25/03/09
			if (frm.elements[i].name.substring(0,nom_coche.length)==nom_coche)//++1.5.006 PM 07-04-09, doctech 971
			{
				e=frm.elements[i];
				if (e.type=='checkbox') 
				{
					// Ajout PM du 07-02-07...
					if(etat!="") {
						if(!e.disabled)e.checked=coche;
					}
					// ...Fin ajout PM du 07-02-07
					else e.checked = coche;
				}
			}
	    }
	    coche = !(coche);
	}
}

//++1.5.006 PM 07-04-09, doctech 971, ajout d'un parametre optionnel , recherche si le formulaire contient des objets du nom donné en paramètre
function confirm_suppr_coche(frm)
{
	var nom_coche="coche[]";//++1.5.006 PM 07-04-09, doctech 971
	if(confirm_suppr_coche.arguments.length>1)nom_coche=confirm_suppr_coche.arguments[1];//++1.5.006 PM 07-04-09, doctech 971
	
	for (i=0;i<frm.length;i++)
	{
		//if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))
		if ((frm.elements[i].name==nom_coche) && (frm.elements[i].checked==true))//++1.5.006 PM 07-04-09, doctech 971
		{
			if (confirm("Confirmez-vous la suppression des lignes cochées ?"))
				{return true;}
			else
				{return false;}
		}
	}
	alert("Aucune ligne n'est cochée pour la suppression...");
	return false;
}

function confirm_rub_sup_coche(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche_imp[]") && (frm.elements[i].checked==true))
		{
			if (confirm("Confirmez-vous la suppression des rubriques cochées ?"))
				{return true;}
			else
				{return false;}
		}
	}
	alert("Aucune rubrique n'est cochée pour la suppression...");
	return false;
}

function confirm_imp_coche(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))
		{
			if (confirm("Confirmez-vous l'impression des lignes cochées ?"))
				{return true;}
			else
				{return false;}
		}
	}
	alert("Aucune ligne n'est cochée pour l'impression...");
	return false;
}

function confirm_etat_coche(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))
		{
			if (confirm("Confirmez-vous l'impression des états cochés ?"))
				{return true;}
			else
				{return false;}
		}
	}
	alert("Aucune ligne n'est cochée pour l'impression...");
	return false;
}

function confirm_dedouble_coche(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))
		{
			return true;
		}
	}
	alert("Aucune ligne n'est cochée pour la suppression des doublons...");
	return false;
}

// Ouverture popup pour afficher une liste de choix
function liste(nom_table)
{
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=screen.width-750;
		toppos=screen.height-300;
	}
	// Modif CG le 17-07-06 : Agrandissement des popups possibles sous Firefox
	//newfenetre=window.open('html/'+nom_table+'.html',nom_table,'width=700,height=200,left='+leftpos+',top='+toppos+',scrollbars=yes')
	newfenetre=window.open('html/'+nom_table+'.html',nom_table,'width=700,height=200,left='+leftpos+',top='+toppos+',resizable=yes,scrollbars=yes');	
}

//****************************************************************************************************
// Date création : 17/11/04
// Auteur : CG
// Description : Ouverture popup pour afficher une liste de choix. La taille de la fenêtre popup est 
// paramétrable.
// Paramètres : arg_table = nom de la table dont on veut afficher la liste des enregistrements
//				arg_largeur = largeur de la fenêtre popup
//				arg_hauteur = hauteur de la fenêtre popup
//****************************************************************************************************
//
function liste2(arg_table,arg_largeur,arg_hauteur)
{
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=screen.width-arg_largeur-50;
		toppos=screen.height-arg_hauteur-100;
	}
	newfenetre=window.open('html/'+arg_table+'.html',arg_table,'width='+arg_largeur+',height='+arg_hauteur+',left='+leftpos+',top='+toppos+',scrollbars=yes')
}


function testchoix(selection,event,f,tab_amont,aff_rub,aff_table_rub,aff_arbo_rub) {

//testchoix('libelle---rubpa_alpha','onChange',document.formulaire2,'od_4','rubrique 3','rubpa_od',compteod/od/)
// testchoix(document.formulaire2.choixmenu.value,'onClick')
//
// "selection"=valeur de la ligne sélectionnée dans le menu
// "event" contient "onChange" ou vide : vide si appel de la fonction à la validation du formulaire et donc il ne faut pas écraser la valeur saisie dans "titresaisi"
// "f"=document.nomformulaire 
// "tab_amont"=table en amont de la table du champ sélectionné dans le cas d'une liaison de table par clé secondaire/clé primaire
//	exemple : table1 liée avec clé secondaire liée à table2, si on sélectionne un champ de table2, "tab_amont" = table1
//++ 1.1.034 CP 14/01/2008 ajout des paramètres optionnels "aff_rub" et "aff_table" qui contiennent le libelle de la rubrique param et le nom de leur table pour editeur de recherche
//++ 1.4.019 PM 15-01-09, ajout du paramèrtre arborescence pour les rubriques ajoutées : rubparam, quotient, question, formule (arbo_rub dans editeruretat,
	tablechoisi=selection.substring(0,selection.indexOf("-",0));
	champchoisi=selection.substring(selection.lastIndexOf("-")+1,selection.length);
	if (selection.indexOf("---",0)<0)
	{
		alert("Veuillez sélectionner un champ...");
		return false;
	}
	if (champchoisi=="")
	{
		alert("Veuillez sélectionner un champ...");
		return false;
	}
	if (event=="onChange") {
	
		switch(f) {
			case (document.formulaire4) :			// Editeur d'états : modif champ d'une colonne
				if (aff_rub && aff_rub!='')f.titresaisi.value=aff_rub; // ++JMT 1.6.009 24-09-09 Bug 6640 Si rubrique paramétrable, indiquer le nom de la rubrique param
				else f.titresaisi.value=champchoisi;
				f.largeursaisi.value=50;
				f.choixmenu.value=tablechoisi+"---"+champchoisi;
				f.tabmodif.value=tablechoisi;
				f.chmodif.value=champchoisi;
				f.tab_amont.value=tab_amont;
				if (f.formule)
				{
					f.formule.value="";
				}
				break;
			case (document.f1_editeurrecherche) :	// Editeur de recherches
				//++AP
				if (tablechoisi=="*fonction*")
				{
					f.ligne_formule.value=f.aff_champ.value;
				}
				//++AP (fin modif)
				f.aff_tab.value=tablechoisi;
				f.aff_champ.value=champchoisi;
				if(testchoix.arguments[4] && aff_rub!="" && testchoix.arguments[5] && aff_table_rub!="")//++ 1.1.034 CP 14/01/2008
				{
					f.aff_rub.value=aff_rub; //++ 1.1.034 CP 14/01/2008
					f.aff_table_rub.value=aff_table_rub; //++ 1.1.034 CP 14/01/2008
				}
				f.aff_tab_amont.value=tab_amont;
				if (document.f1_editeurrecherche.aff_champ.value!=""){
					var liaison="";
					if (document.f1_editeurrecherche.conjonction){
						if (document.f1_editeurrecherche.conjonction[0].checked){liaison="ET     ";}
						if (document.f1_editeurrecherche.conjonction[1].checked){liaison="OU     ";}
					}
					if(testchoix.arguments[4] && aff_rub!="" && testchoix.arguments[5] && aff_table_rub!="")//++ 1.1.034 CP 14/01/2008
					{
						document.f1_editeurrecherche.ligne_formule.value=liaison+"["+aff_table_rub+"]"+aff_rub+"     "+document.f1_editeurrecherche.operateur.value+"     "+document.f1_editeurrecherche.valeur.value;
					}else{
						document.f1_editeurrecherche.ligne_formule.value=liaison+"["+document.f1_editeurrecherche.aff_tab.value+"]"+document.f1_editeurrecherche.aff_champ.value+"     "+document.f1_editeurrecherche.operateur.value+"     "+document.f1_editeurrecherche.valeur.value;
					}
				}
				//document.f1_editeurrecherche.submit();
				break;
			case (document.formulaire6):		// Saisie d'une formule
				if (tablechoisi=="*fonction*")
				{
					if(navigator.appName=='Netscape') //++1.7.007 PB 21-10-10 DocTech 1382
					{
						pos_curseur = document.getElementById("curseur_formule").value;
						avant=f.formule.value.substr(0,pos_curseur);
						apres=f.formule.value.substr(pos_curseur);
						f.formule.value=avant+tab_amont+champchoisi+apres;
					}
					else{
						f.formule.value+=tab_amont+champchoisi;
					}
				}
				else
				{
					if(navigator.appName=='Netscape') //++1.7.007 PB 21-10-10 DocTech 1382
					{
						pos_curseur = document.getElementById("curseur_formule").value;
						avant=f.formule.value.substr(0,pos_curseur);
						apres=f.formule.value.substr(pos_curseur);
						
						if (tablechoisi=="libelle" || tablechoisi=="quotient")  // tab_amont="nom table_n° rubrique"...
						{
							f.formule.value=avant+"[RUBPARAM_"+tab_amont+"]"+apres;
						}
						else if (tablechoisi=="question_val")  //++ 1.3.006 ST 19/05/2008 : BUG 1611 // tab_amont="nom table_n° rubrique"...
						{
							f.formule.value=avant+"[QUESTION_"+tab_amont+"]"+apres;
						}
						else if (tablechoisi=="question_val_dolig")  //++ 1.3.006 ST 19/05/2008 : BUG 1611 // tab_amont="nom table_n° rubrique"...
						{
							f.formule.value=avant+"[QUESTION_DOLIG_"+tab_amont+"]"+apres;
						}
						else
						{
							f.formule.value=avant+"["+tab_amont+champchoisi+"]"+apres;
						}
					}
					else{
						if (tablechoisi=="libelle" || tablechoisi=="quotient")  // tab_amont="nom table_n° rubrique"...
						{
							f.formule.value+="[RUBPARAM_"+tab_amont+"]";
						}
						else if (tablechoisi=="question_val")  //++ 1.3.006 ST 19/05/2008 : BUG 1611 // tab_amont="nom table_n° rubrique"...
						{
							f.formule.value+="[QUESTION_"+tab_amont+"]";
						}
						else if (tablechoisi=="question_val_dolig")  //++ 1.3.006 ST 19/05/2008 : BUG 1611 // tab_amont="nom table_n° rubrique"...
						{
							f.formule.value+="[QUESTION_DOLIG_"+tab_amont+"]";
						}
						else
						{
							f.formule.value+="["+tab_amont+champchoisi+"]";
						}
					}
				}
				document.formulaire6.submit();
				break;
			case (document.formulaire7):		// Modif d'une formule
				if (tablechoisi=="*fonction*")
				{
					f.formule.value+=tab_amont+champchoisi;
				}
				else
				{
					if (tablechoisi=="libelle" || tablechoisi=="quotient")  // tab_amont="nom table_n° rubrique"...
					{
						f.formule.value+="[RUBPARAM_"+tab_amont+"]";
					}
					else if (tablechoisi=="question_val")  //++ 1.3.006 ST 19/05/2008 : BUG 1611 // tab_amont="nom table_n° rubrique"...
					{
						f.formule.value+="[QUESTION_"+tab_amont+"]";
					}
					else if (tablechoisi=="question_val_dolig")  //++ 1.3.006 ST 19/05/2008 : BUG 1611 // tab_amont="nom table_n° rubrique"...
					{
						f.formule.value+="[QUESTION_DOLIG_"+tab_amont+"]";
					}
					else
					{
						f.formule.value+="["+tab_amont+champchoisi+"]";
					}
				}
				document.formulaire7.submit();
				break;
			case(document.f1_editeurtri):
				if (tablechoisi=="*fonction*")
				{
					f.formule.value+=champchoisi;//++1.1.033.001 FF 19/12/07 tab_amont+ 
				}
				else
				{
					if (tablechoisi=="libelle" || tablechoisi=="quotient")  // tab_amont="nom table_n° rubrique"...
					{
						f.formule.value+="[RUBPARAM_"+tab_amont+"]";
					}
					else if (tablechoisi=="question_val")  //++ 1.3.006 ST 19/05/2008 : BUG 1611 // tab_amont="nom table_n° rubrique"...
					{
						f.formule.value+="[QUESTION_"+tab_amont+"]";
					}
					else if (tablechoisi=="question_val_dolig")  //++ 1.3.006 ST 19/05/2008 : BUG 1611 // tab_amont="nom table_n° rubrique"...
					{
						f.formule.value+="[QUESTION_DOLIG_"+tab_amont+"]";
					}
					else
					{
						f.formule.value+="["+tab_amont+champchoisi+"]";
					}
				}
				document.f1_editeurtri.submit();
				break;
			default :							// Editeur d'états : ajout champ
				if (aff_rub && aff_rub!='')f.titresaisi.value=aff_rub; // ++JMT 1.6.009 24-09-09 Bug 6640 Si rubrique paramétrable, indiquer le nom de la rubrique param
				else f.titresaisi.value=champchoisi;
				f.largeursaisi.value=50;
				f.choixmenu.value=tablechoisi+"---"+champchoisi;
				f.tab_amont.value=tab_amont;
				if(aff_arbo_rub && aff_arbo_rub!='')f.arbo_rub.value=aff_arbo_rub;
				else f.arbo_rub.value='';
				break;
		}
	}
}


function selection_fonctionMySql(chMaj,index,chMenu)
//
// Date création : 13/05/2004 
// Auteur : CG
// Description : Mise à jour d'un champ de formulaire correspondant à une
// formule, à partir du choix d'une fonction MySql dans un menu déroulant
// Paramètres : chMaj = nom du champ à mettre à jour (sous la forme :
// document.nomformulaire.nomchamp)
// index = Index de la ligne choisie dans le menu (sous la forme : 
// document.nomformulaire.nommenudéroulant.selectedIndex)
// chMenu = Nom du champ correspondant au menu déroulant (sous la forme : 
// document.nomformulaire.nomchampmenudéroulant)
{
	//numchoix=document.formulaire6.fonctionMySql.selectedIndex;
	numchoix=index;
	//switch (document.formulaire6.fonctionMySql.options[numchoix].value)
	switch (chMenu.options[numchoix].value)
	{
		case ("Date au format jj-mm-aaaa"):
		chMaj.value+="date(\"d/m/Y\",mktime(0,0,0,12,31,2004))";
		break;
		case ("Date au format jj-mm-aa"):
		chMaj.value+="date(\"d/m/y\",mktime(0,0,0,12,31,2004))";
		break;
		case ("Arrondi d'un nombre"):
		chMaj.value+="round(15.155,2)";
		break;
		case ("Extraction d'une sous-chaine dans une chaine"):
		chMaj.value+="substr(\"CEWEO\",0,4)";
		break;
		case ("Longueur d'une chaine"):
		chMaj.value+="strlen(\"CEWEO\")";
		break;
		case ("Conversion en minuscule"):
		chMaj.value+="strtolower(\"CEWEO\")";
		break;
		case ("Conversion en majuscule"):
		chMaj.value+="strtoupper(\"ceweo\")";
		break;
		case ("Premier caractère en majuscule"):
		chMaj.value+="ucfirst(\"ceweo\")";
		break;
	default :
		break;
	}
}

function a_propos(id)
{
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=(screen.width-500)/2;
		toppos=(screen.height-200)/2;
	}
	newfenetre=window.open('divers_a_propos.php?id='+id,'a_propos','width=550,height=210,left='+leftpos+',top='+toppos+',scrollbars=yes');
}

//******************************************************************************************************
// Auteur : CG
// Date création : 23/08/04
// Date modification : 20-12-2005 par CG
// Description : Test de la validité d'une date saisie dans un formulaire
// La date saisie doit être sous la forme jj-mm-aa ou jj-mm-aaaa ou jjmmaa ou jjmmaaaa
// Paramètres : arg_dmini(numérique sur 4 chiffres)=l'année de la date à tester doit être > à arg_dmini
//				Indiquer 0 pour autoriser n'importe quelle année
//				arg_dmaxi(numérique sur 4 chiffres)=l'année de la date à tester doit être < à arg_dmaxi
//				arg_siecle = siecle sur 4 chiffres à ajouter à l'année de la date à tester 
//				si celle-ci est fournie sur 2 chiffres			
//******************************************************************************************************

function test_date_js(arg_date,arg_dmini,arg_dmaxi,arg_siecle)
{
	if (arg_date=="")
	{
		return true;
	}
    var amin=arg_dmini; // année mini
    var amax=arg_dmaxi; // année maxi
	var siecle=arg_siecle;  // Chiffres à ajouter devant l'année si celle si est fournie sur 2 chiffres
	date_courante=new Date;
	annee_courante=date_courante.getFullYear();
	if (!amax || amax==""){amax=annee_courante;}
	if (!amin){amin=0;}
    var separateur="-"; // separateur entre jour/mois/annee

	var reg=new RegExp("[-/]+", "g");
	var tab_date=arg_date.split(reg);
	if(tab_date.length==1)
	{
		// Date saisie sans séparateur
		var j=parseInt(tab_date[0].substring(0,2));
		if (j==0)
		{
			  j=parseInt(tab_date[0].substring(1,2));
		}
		else
		{
			  j=parseInt(tab_date[0].substring(0,2));
		}
		var m=(parseInt(tab_date[0].substring(2,3))*10)+parseInt(tab_date[0].substring(3,4));
		if(tab_date[0].length!=6 && tab_date[0].length!=8){alert("L'année n'est pas correcte...");return false;}
		var a=parseInt(tab_date[0].substring(4,tab_date[0].length));
	}
	else
	{
		// Date saisie avec séparateur
		if(tab_date.length!=3){alert("La date saisie est incorrecte...");return false;}
		var j=parseInt(tab_date[0].substring(0,2));
		if (j==0)
		{
			  j=parseInt(tab_date[0].substring(1,2));
		}
		else
		{
			  j=parseInt(tab_date[0].substring(0,2));
		}
		var m=parseInt(tab_date[1].substring(0,2));
		if (m==0)
		{
			  m=parseInt(tab_date[1].substring(1,2));
		}
		else
		{
			  m=parseInt(tab_date[1].substring(0,2));
		}
		if(tab_date[2].length==3 || tab_date[2].length>4){alert("L'année n'est pas correcte...");return false;}
		var a=parseInt(tab_date[2].substring(0,tab_date[2].length));
		if (a==0)
		{
			  a=parseInt(tab_date[2].substring(1,2));
		}
		else
		{
			  a=parseInt(tab_date[2].substring(0,tab_date[2].length));
		}
	}

     /* var j=parseInt(arg_date.substring(0,2));
	  if (j==0)
	  {
		  j=parseInt(arg_date.substring(1,2));
	  }
	  else
	  {
		  j=parseInt(arg_date.substring(0,2));
	  }
	  var m=(parseInt(arg_date.substring(3,4))*10)+parseInt(arg_date.substring(4,5));
	  var a=parseInt(arg_date.substring(6),10);*/

	  if(j==0 && m==0 && a==0){return true;}
	  if (!siecle || siecle=="")
	  {
			siecle=1900;
	  }
	  if (a<100)
	  {
		  a=siecle+a;
	  }
      if ((isNaN(j))||(j<1)||(j>31)) {
         alert("Le jour n'est pas correct...");return false;
      }
      if ((isNaN(m))||(m<1)||(m>12)) {
         alert("Le mois n'est pas correct...");return false;
      }
      if ((isNaN(a))||(a<amin)||(a>amax)) {
         alert("L'année n'est pas correcte...");return false;
      }
      /*if ((arg_date.substring(2,3)!=separateur)||(arg_date.substring(5,6)!=separateur)) {
         alert("Les séparateurs doivent être des "+separateur); return false;
      }*/
       var d2=new Date(a,m-1,j);
       j2=d2.getDate();
       m2=d2.getMonth()+1;
       a2=d2.getFullYear();
	   //alert(j);alert(j2);alert(m);alert(m2);alert(a);alert(a2);
       if ( (j!=j2)||(m!=m2)||(a!=a2) ) {
           alert("La date "+arg_date+" n'existe pas ...");
           return false;
       }
     return true;
}

//***************************************************************************
// Auteur : CG
// Date création : 24/08/04
// Description : Test de la validité d'une adresse email saisie dans 
// un formulaire
// Modif ST le 26/07/06
// emailsaisi : correspond a la valeur du champs de l'email saisie
// arg_nom : correspond au champs du formulaire où il faudra réaffecter le 
// focus (Utilité sous Firefox et IE5) en cas d'erreur sur le mail
//***************************************************************************

function test_email_js()// Modif ST le 26/07/06
{
	/*var emailsaisi=arguments[0]; //1er argument de la fonction
	if (arguments.length == 2) var arg_nom=arguments[1];//2eme argument de la fonction s'il existe
	if (emailsaisi=="")
	{
		return true;
	}
	var correcte=1;
	invalidcar=" /:,;[]";
	for(var i=0;i<invalidcar.length;i++)
	{
		badcar=invalidcar.charAt(i);
		if (emailsaisi.indexOf(badcar,0)>-1) correcte=0;
	}
	atpos=emailsaisi.indexOf("@",1)
	if (atpos==-1) correcte=0;
	if (emailsaisi.indexOf("@",atpos+1)!=-1) correcte=0;
	var point=emailsaisi.indexOf(".",atpos);
	if (point==-1) correcte=0;
	if (point+3>emailsaisi.length) correcte=0;
	if (correcte==0)
	{
		if (arguments.length == 2)alert("L'adresse e-mail est incorrecte...");
		// Si on a 2 arguments dans la fonction : Message d'erreur + gestion du focus sous Firefox
		if (navigator.appName!="Microsoft Internet Explorer")
		{
			if (arguments.length == 2)setTimeout("document.getElementById('"+arg_nom+"').focus();",1);
		}
		else
		{
			if (arguments.length == 2)setTimeout("document.forms[0]."+arg_nom+".focus();",1);
		}
		return false;
	}
	return true;*/
	
	//++ 1.1.027.004 PM 12-09-07
	var emailsaisi=arguments[0]; //1er argument de la fonction
	if(emailsaisi!="") {
		var exp= new RegExp("^[a-zA-Z0-9_\-]+[a-zA-Z0-9_\.\-]*@[a-zA-Z0-9_\-]+\.[a-zA-Z_\.\-]{1,}[a-zA-Z_\-]+$","g"); //++ 1.7.003 PS 24/11/09 mettre les caractères spéciaux \X juste avant les crochets
		return exp.test(emailsaisi);
	}
	else return 1;
}

//***************************************************************************
// Auteur : CG
// Date création : 01/09/04
// Description : Test du contenu d'une rubrique numérique
//***************************************************************************
function test_numerique_js(arg_nom) {
	//re=/^\d*[\.]?\d*$/;		// Modif CG le 27-04-06
	if(arg_nom!='') {
		re=/^-?\d+[\.]?\d*$/;
		test_rub=re.exec(arg_nom);
		if (!test_rub) {
			alert("Vous devez saisir une valeur numérique...");
			return false;
		}
	}
	return true;
}

//***************************************************************************
// Auteur : DOD
// Date création : 10/03/2011
// Description : Test du contenu d'une rubrique numérique
//***************************************************************************
function test_numerique_js2(arg_this) {
	//re=/^\d*[\.]?\d*$/;		// Modif CG le 27-04-06
	if(typeof(arg_this)!='undefined') {
		var value=jQuery(arg_this).val();
		re=/^-?\d+[\.]?\d*$/;
		var test_rub=re.exec(value);
		if (!test_rub) {
			jQuery(arg_this).focus();
			alert("Vous devez saisir une valeur numérique...");
			return false;
		}
	}
	return true;
}

//***************************************************************************
// Auteur : AP
// Date création : 24/07/08
// Description : Test du contenu d'une rubrique numérique contenant une année devant etre > à 2000
//***************************************************************************
function test_numannee_js(arg_nom) {
	if(arg_nom!='') {
		re=/^\d+[\.]?\d*$/;
		test_rub=re.exec(arg_nom);
		if (test_rub)
		{ // ultérieurement : mettre l'année minimum comme paramètre en entrée
			if (arg_nom<2000) valid=false;
			else valid=true;
		}
		else valid=false;
		
		if (!valid) {
			alert("Vous devez saisir une valeur numérique supérieure ou égale à 2000...");
			return false;
		}
	}
	return true;
}

//***************************************************************************
// Auteur : PM
// Date création : 28/10/05
// Description : Test du contenu d'une rubrique numérique signée ou non
//***************************************************************************

function test_numerique_signe_js(arg_nom)
{
	if (arg_nom!='') {
		re=/^[-+]?\d+[\.]?\d*$/;		
		test_rub=re.exec(arg_nom);
		if (!test_rub)
		{
			alert("Vous devez saisir une valeur numérique \npositive ou négative (ex: 26,-15.23)...");
			return false;
		}
		else {return true;}
	}
	else return true;
}
//***************************************************************************
// Auteur : CG
// Date création : 01/09/04
// Description : Test si une ligne est cochée lorsqu'on veut insérer une 
// nouvelle ligne
//***************************************************************************

function test_coche_insert(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true)){return true;}
	}
	alert("Vous devez cocher la ligne avant laquelle la nouvelle ligne sera insérée...");
	return false;
}

//***************************************************************************
// Auteur : CG
// Date création : 07/10/04
// Description : Affichage du popup de liste si la touche de fonction 
// enfoncée est F12 
// Remarque : ne fonctionne QUE sous ie
// pour gérer sous firefox ET ie, appel à effectuer : "detection_touche(event)"
// et décommenter le code commenté 
//***************************************************************************

function detection_touche(evenement){	
	if(navigator.appName=='Netscape') {var touche= evenement.which;}
	else {var touche=evenement.keyCode;}
	//var touche=window.event.keyCode; // ligne à supprimer si gestion sous firefox ET ie	
	if (touche==123) {return true;}
	return false;
}

//*********************************************************************************************
// Auteur : CG
// Date création : 07/10/04
// Date modification : 20-12-05 par CG
// Description : Test validité d'une date saisie dans un formulaire et
// formattage de la date avec 4 chiffres pour l'année (date sur 10 caractères)
// Paramètres : arg_champ=nomp complet du champ de saisie, 
//				arg_siecle= siecle sur 4 chiffres à ajouter à l'année (soit 1900, soit 2000)
//				arg_amini = l'année de la date saisie doit être > à arg_amini
//				arg_amaxi = l'année de la date saisie doit être < à arg_amaxi
//*********************************************************************************************
//
function affiche_date_10(arg_champ,arg_amini,arg_amaxi,arg_siecle)
{
	if(arg_champ.value!="" && arg_champ.value!="00-00-0000" && arg_champ.value!="00-00-00")
	{
		if(!test_date_js(arg_champ.value,arg_amini,arg_amaxi,arg_siecle))
		{
			arg_champ.focus();
		}
		else
		{
			var j=(arg_champ.value.substring(0,2));
			var m=(arg_champ.value.substring(3,5));
			var a=parseInt(arg_champ.value.substring(6),10);
			if (a<100)
			{
				a=arg_siecle+a;
				arg_champ.value=j+"-"+m+"-"+a;
			}
		}
	}
}

//********************************************************************************************
// Auteur : CG
// Date création : 19-01-05
// Description : Formattage d'une valeur numérique avec deux décimales
// Ajout du paramêtre lg_max, qui donne la longueur maximum du champ à formatter, PM le 06-06-06
// Nota : lg_max est facultatif à l'appel
//********************************************************************************************
function format_decimal_js(arg_nom,lg_max,sgn)
{	
	if(arg_nom.value=="")arg_nom.value=0;
	arg_nom.value=(parseFloat(arg_nom.value)); // PM le 12-01-07, élimine les zéros superflus	
	if(format_decimal_js.arguments.length>=2){
		var lg=format_decimal_js.arguments[1];
		var chaine=arg_nom.value;
		
		if(chaine!=""){
			/*var signe; var entier; var point; var decim;		
			var tab_elem= chaine.replace(/^([-+]?)([0-9]*)([.]?)([0-9]*$)/,
				function($0,$1,$2,$3,$4){
					signe=$1; entier=$2; point=$3; decim=$4; 
					return "$1$2$3$4"; }
			);*/
			re=/^([-+]?)([0-9]*)([.]?)([0-9]*)$/;
			tab=re.exec(chaine);
			var signe='';var entier='';var point='';var decim='';		
			if(tab[1])signe=tab[1];
			if(tab[2])entier=tab[2];
			if(tab[3])point=tab[3];
			if(tab[4])decim=tab[4];				

			var nb_car=3;
			if(format_decimal_js.arguments[2] && format_decimal_js.arguments[2]==true){
				nb_car=4;if(signe=='')signe="+";
			}
			else signe='';
		
			if(decim=='')decim='00';
			else if(decim.length==1)decim=decim+"0";
			else if(decim.length>2)decim=Math.round(("0."+decim)*100); 
		
			if((entier.length+nb_car)<=lg_max)arg_nom.value=signe+""+entier+"."+decim;
			else alert("La valeur saisie doit être inférieure à "+(Math.pow(10,(lg_max-nb_car))-1+".99")); 				
		}
		else arg_nom.value="0.00";
	}
	else {
		var valeur=arg_nom.value;
		var valeur_formatee="";
		var reg=new RegExp("[\.]+","g");
		if(valeur!="" && isNaN(valeur)==false)
		{		
			var tableau=valeur.split(reg);
			var entier=tableau[0];
			var decimal=tableau[1];
			
			if(parseInt(entier)==0 && parseInt(decimal,10)==0)//++ 1.3.027 ST 23/09/2008 : BUG 2657
			{
				valeur_formatee="0.00";
			}
			else
			{
				//if(isNaN(decimal))
				if(isNaN(parseInt(decimal,10)))	// Modif CG le 26-04-06
				{
					valeur_formatee=entier+".00";
				}
				else
				{
					if (parseInt(decimal,10)<10)
					{
						if(decimal.length==2)  // Traitement "0" comme 1er chiffre des décimals (25.07 par exemple)
						{
							valeur_formatee=entier+"."+decimal;
						}
						else
						{
							if(decimal.length<2)
							{
								valeur_formatee=entier+"."+decimal+"0";
							}
							else
							{
								valeur_formatee=entier+".00";	// Modif CG le 26-04-06
							}
						}
					}
					if (parseInt(decimal,10)>=10 && parseInt(decimal,10)<100)
					{
						valeur_formatee=entier+"."+decimal;
					}
					if (parseInt(decimal,10)>=100)
					{
						valeur_arrondi=Math.round(valeur*100)/100;
						if (Math.round(valeur_arrondi)==valeur_arrondi) valeur_formatee=valeur_arrondi+".00";
						else if (Math.round(valeur_arrondi*10)==valeur_arrondi*10) valeur_formatee=valeur_arrondi+"0";
						else valeur_formatee=valeur_arrondi;
					}
				}
			}
		}
		else
		{
			valeur_formatee="0.00";
		}
		arg_nom.value=valeur_formatee;
	}
}

//***************************************************************************
// Auteur : CG
// Date création : 15-02-05
// Description : Test de validité d'un horaire saisi dans un formulaire et
// formattage de celui-ci sous la forme hh:mm ou hh:mm:ss
// Paramètres : arg_champ=nomp complet du champ de saisie, 
// arg_seconde = "s" si formattage sous la forme hh:mm:ss, vide si formattage
// sous la forme hh:mm
//***************************************************************************
//
function format_heure_js(arg_champ,arg_seconde)
{
	if(arg_champ.value!="" && arg_champ.value!="00:00:0000" && arg_champ.value!="00:00")
	{
		re=/^\d{1,2}[:]\d{2}[:]?\d{0,2}$/;
		test_rub=re.exec(arg_champ.value);
		if (!test_rub)
		{
			alert("L'horaire n'est pas correct.");
			//arg_champ.focus();
			setTimeout(function(){arg_champ.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
			arg_champ.value="";// ++1.5.010 CN 15-05-09
			return;
		}
		if(arg_champ.value.charAt(2)==":")
		{
			var h=(arg_champ.value.substring(0,2));
			var m=(arg_champ.value.substring(3,5));
			var s=(arg_champ.value.substring(6));
		}
		else
		{
			var h="0"+arg_champ.value.substring(0,arg_champ.value.indexOf(":",0));
			var m=(arg_champ.value.substring(2,4));
			var s=(arg_champ.value.substring(5));
		}
		if (h>24 || m>59 || s>59)
		{
			alert("L'horaire n'est pas correct.");
			//arg_champ.focus();
			setTimeout(function(){arg_champ.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
			arg_champ.value="";// ++1.5.010 CN 15-05-09
			return;
		}
		if(arg_seconde!="")
		{
			if (s==0)
			{
				arg_champ.value=h+":"+m+":00";
			}
			else
			{
				if(s<10)s=s+"0";
				arg_champ.value=h+":"+m+":"+s;
			}
		}
		else
		{
			arg_champ.value=h+":"+m;
		}
	}
}


//***************************************************************************
// Auteur : CG
// Date création : 24-02-05
// Description : Test de validité d'un R.I.B.
// Paramètres : argument 1 = Banque sur 5 chiffres
//				argument 2 = Guichet sur 5 chiffres
//				argument 3 = N° compte sur 11 chiffres
//				argument 4 = Clé RIB sur 2 chiffres
//***************************************************************************
//
function isRIBvalid()
{
  if (isRIBvalid.arguments.length>=3)
    {
    var bqe=isRIBvalid.arguments[0];
    var gui=isRIBvalid.arguments[1];
    var cpt=isRIBvalid.arguments[2].toUpperCase();
	var cle=isRIBvalid.arguments[3];
	if ((bqe=='' && gui=='' && cpt=='' && cle=='')||(bqe=='00000' && gui=='00000' && cpt=='00000000000' && cle=='00'))
	{
		return true;
	}
	// Modif du 22/12/05 par CG
	for (i=0;i<cpt.length;i++)
	{
		if(cpt.charCodeAt(i)<48 || (cpt.charCodeAt(i)>57 && cpt.charCodeAt(i)<65) || (cpt.charCodeAt(i)>90 && cpt.charCodeAt(i)<97) || ( cpt.charCodeAt(i)>122))
		{
			return false;
		}
	}

    // Conversion du numero de compte en chiffres
    var tab= "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    var tab1="123456789123456789234567890123456789".split("");
    
                                while (cpt.match(/\D/) != null)
      cpt=cpt.replace(/\D/, tab1[tab.indexOf(cpt.match(/\D/))]);
    var cp=parseInt  (cpt, 10);

    //Calcul clé RIB
    a=bqe%97;
    a=a*100000+parseInt(gui, 10);
    a=a%97;
    a=a*Math.pow(10, 11) + cp;
    a=a%97
    a=a*100;
    a=a%97
    a=97-a;
    if (isRIBvalid.arguments.length>3)
      return isRIBvalid.arguments[3]==a;
    else
      return a;
    }
  else
    {
	 return false;
    }
}


//*********************************************************************************************
// Auteur : CG
// Date création : 04-03-05
// Description : Test si une ligne est cochée lorsqu'on veut insérer une 
// nouvelle ligne
// Paramètres : arg_frm=nom du formulaire, arg_nom_champ=nom de la boite à cocher du formulaire
//*********************************************************************************************

function test_coche_insert2(arg_frm,arg_nom_champ)
{
	for (i=0;i<arg_frm.length;i++)
	{
		if ((arg_frm.elements[i].name==arg_nom_champ) && (arg_frm.elements[i].checked==true)){return true;}
	}
	alert("Vous devez cocher la ligne avant laquelle la nouvelle ligne sera insérée...");
	return false;
}


//*********************************************************************************************
// Auteur : CG
// Date création : 04-03-05
// Description : Teste si la ou les lignes à supprimer sont coché(es)
// Paramètres : arg_frm=nom du formulaire, arg_nom_champ=nom de la boite à cocher du formulaire
//*********************************************************************************************

function confirm_suppr_coche2(arg_frm,arg_nom_champ) {
	for (i=0;i<arg_frm.length;i++)
	{
		if ((arg_frm.elements[i].name==arg_nom_champ) && (arg_frm.elements[i].checked==true))
		{
			if (confirm("Confirmez-vous la suppression des lignes cochées ?"))
				{return true;}
			else
				{return false;}
		}
	}
	alert("Aucune ligne n'est cochée pour la suppression ...");
	return false;
}


//*********************************************************************************************
// Auteur : CG
// Date création : 04-03-05
// Date modification : 23-11-05 par CG
// Description : Gestion boite à cocher générale : coche automatiquement toutes les boites à cocher
// ayant un nom particulier
// Paramètres : arg_frm=nom du formulaire, arg_nom_champ=nom des boites à cocher à traiter,
// arg_val=valeur à affecter aux boites à cocher (true ou false)
//*********************************************************************************************

function cocher2(arg_frm,arg_nom_champ,arg_val)
{
    for(i=0;i<arg_frm.length;i++)
    {
		if (arg_frm.elements[i].name.substring(0,arg_frm.elements[i].name.indexOf("[",0))==arg_nom_champ)
		{
			e=arg_frm.elements[i];
			if (e.type=='checkbox')  e.checked = arg_val;
		}
    }
    //coche = !(coche);
}


//*********************************************************************************************
// Auteur : CG
// Date création : 10-03-05
// Description : Ouverture popup pour afficher la liste de choix des formules de coût. 
// Particularité : La valeur choisie dans la liste met à jour un champ de saisie appartenant à 
// un tableau.
// Arguments : arg_script = nom du script php qui affiche la liste des formules
//			   arg_indice=indice de l'élément du formulaire à mettre à jour
//*********************************************************************************************

function liste_formule_cout_tb(arg_script,arg_indice)
{
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=screen.width-550;
		toppos=screen.height-300;
	}
	newfenetre=window.open(arg_script+'.php?indice='+arg_indice,arg_script,'width=500,height=200,left='+leftpos+',top='+toppos+',scrollbars=yes')
}


//*********************************************************************************************
// Auteur : CG
// Date création : 10-03-05
// Description : Ouverture popup pour afficher la liste de choix des formules de coût. 
// Idem que la fonction "liste_formule_cout_tb" sauf que le champ de saisie mis à jour n'est pas un tableau
// Arguments : arg_script = nom du script php qui affiche la liste des formules
//			   arg_champ=nom du champ du formulaire à mettre à jour
//*********************************************************************************************

function liste_formule_cout(arg_script,arg_champ)
{
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=screen.width-550;
		toppos=screen.height-300;
	}
	newfenetre=window.open(arg_script+'.php?champ='+arg_champ,arg_script,'width=500,height=200,left='+leftpos+',top='+toppos+',scrollbars=yes')
}


//*********************************************************************************************
// Auteur : CG
// Date création : 16-03-05
// Description : Comparaison de deux dates saisies sous la forme jj-mm-aaaa
// Arguments : arg_d1=date 1, arg_d2=date 2
// Résultat : Renvoie 0 si les 2 dates sont identiques, 1 si arg_d1<arg_d2, 2 si arg_d1>arg_d2
//*********************************************************************************************

function plus_petite_date_js(arg_d1,arg_d2)
{
	if (arg_d1=='' || arg_d2=='')
	{
		return 1;
	}
	var chaine_d1=arg_d1.substr(6,4)+arg_d1.substr(3,2)+arg_d1.substr(0,2);
	var chaine_d2=arg_d2.substr(6,4)+arg_d2.substr(3,2)+arg_d2.substr(0,2);
	var num_d1=parseInt(chaine_d1);
	var num_d2=parseInt(chaine_d2);
	if (num_d1==num_d2)
	{
		return 0;
	}
	if(num_d1>num_d2)return 2;
	if(num_d1<num_d2)return 1;
}

//***************************************************************************
// Auteur : CG
// Date création : 24-03-05
// Description : Test du contenu d'une rubrique de saisie d'un pourcentage
//***************************************************************************

function test_pourcentage_js(arg_val)
{
	// re=/^\d*[\.]?\d*$/;
	// test_rub=re.exec(arg_val);
	//if (!test_rub)
	
	//++1.6.009 GM le 28-09-09 : Modif apportée sur la condition: -100 n'est pas considérer comme un nombre dans l'expression régulière
	//isNaN renvoie "true" si la valeur n'est pas un numéric.
	if(isNaN(arg_val))
	{
		alert("Vous devez saisir une valeur numérique ...");
		return false;
	}
	else
	{
		if(arg_val<0 || arg_val>100)
		{
			alert("La valeur saisie doit être comprise entre 0 et 100 ...");
			return false;
		}
	}
	return true;
}


//***************************************************************************
// Auteur : CG
// Date création : 24-03-05
// Description : Fenêtre PopUp permettant le choix d'un fichier sur le disque
// Paramètre : arg_champ=nom du champ à mettre à jour dans la fenêtre parent
//***************************************************************************
function selection_fichier_com(arg_champ)
{
	var tmp=arg_champ.split('&');
	var form_opener=jQuery('#'+tmp[0]).parents('form:first').attr('name');

	if(screen){leftpos=(screen.width-750)/2;toppos=(screen.height-100)/2;}
	popup=window.open('form_selection_fichier2.php?largeur='+screen.width+'&form_opener='+form_opener+'&champ='+arg_champ,'selection_fichier','width=750,height=100,left='+leftpos+',top='+toppos);//++ 1.2.001 ST 21/02/2008 BUG 250 : ajout de largeur='+screen.width pour avoir la résolution de l'écran
}

//***************************************************************************
// Auteur : TONY
// Date création : 16-06-2010
// Description : Remise de l'ancienne version pour l'ajout des photos dans la fiche od
// Paramètre : arg_champ=nom du champ à mettre à jour dans la fenêtre parent
//***************************************************************************

function selection_fichier_od(arg_champ)
{
	//++PM 21-06-10 utiliser deux applis dans le même navigateur appelé par "od_photo.php"
	var param="";if(selection_fichier_od.arguments.length>1)param="&"+selection_fichier_od.arguments[1];
	
	if(screen){leftpos=(screen.width-750)/2;toppos=(screen.height-100)/2;}
	popup=window.open('form_selection_fichier.php?largeur='+screen.width+'&champ='+arg_champ+param,'selection_fichier','width=750,height=100,left='+leftpos+',top='+toppos);
}

//***************************************************************************
// Auteur : CG
// Date création : 24-03-05
// Description : Fenêtre PopUp affichant une photo
// Paramètre : arg_fichier = nom du fichier de la photo à afficher
//***************************************************************************

function affiche_photo(arg_fichier)
{
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=screen.width-260;
		toppos=screen.height-550;
	}
	newfenetre=window.open('affiche_photo.php?nom_photo='+arg_fichier,'affiche_photo','width=250,height=250,left='+leftpos+',top='+toppos+',scrollbars=yes')
}


//***************************************************************************************
// Auteur : CG
// Date création : 24-03-05
// Description : Test de l'existence d'une photo dans le répertoire "upload/images/"
// Paramètre : arg_photo = nom du fichier de la photo
//***************************************************************************************

function test_existence_photo(arg_photo)
{	
}


//***********************************************************************************************
// Auteur : CG
// Date création : 29-03-05
// Description : Calcul d'un prix TTC à partir d'un prix HT, d'une remise et d'un taux de TVA
// Paramètres : arg_ht = Prix HT
//				arg_remise = Pourcentage de remise
//				arg_tva = Pourcentage de TVA
//				arg_champ_ttc = Nom du champ à mettre à jour correspondant au prix TTC
//***********************************************************************************************

function calcul_pxttc(arg_ht,arg_remise,arg_tva,arg_champ_ttc)
{
	var ht=arg_ht-((arg_ht*arg_remise)/100);
	var ttc=ht+((ht*arg_tva)/100);
	var champ_maj="document.forms[0]."+arg_champ_ttc+".value=Math.round(ttc*100)/100";
	eval(champ_maj);
}


//***********************************************************************************************
// Auteur : CG
// Date création : 15-04-05
// Description : Vérification que l'enregistrement à dupliquer est cochée et confirmation de la 
// duplication
// Paramètres : frm=nom du formulaire
//***********************************************************************************************

function confirm_duplique_coche(frm,term)
{
	var nb=0;
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))
		{
			nb++;
		}
	}
	if(nb==0)
	{
		alert("Veuillez cocher l'élément à dupliquer...");
		return false;
	}
	if(nb>1)
	{
		alert("Vous devez cocher un seul élément à dupliquer...");
		return false;
	}
	if (confirm("Confirmez-vous la duplication de l'élément coché ?"))
		{return true;}
	else
		{return false;}
}


//******************************************************************************
// Auteur : CG
// Date création : 20-07-05
// Description : Test si une ligne est cochée lorsqu'on veut décaler les lignes
// d'une liste.
//******************************************************************************

function test_coche_decale(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true)){return true;}
	}
	alert("Vous devez cocher la ligne à partir de laquelle le décalage doit s'effectuer...");
	return false;
}


//-----------------------------------------------------------------------------------------------
// Auteur : CG
// Date création : 23-08-05
// Description : Amélioration de la fonction "cocher". Doit être utilisée dans le cas où on 
// soumet le formulaire lorsqu'on coche la boite à cocher. Dans ce cas, on n'utilise pas de 
// variable "coche" car elle serait toujours égale à "true"...
// arguments : frm=nom du formulaire, val=valeur que l'on doit attribuer aux cases à cocher 
// ("true" ou "false")
//-----------------------------------------------------------------------------------------------
function cocher3(frm,val)
{
    for(i=0;i< frm.length;i++)
    {
		if (frm.elements[i].name.substring(0,5)=="coche")
		{
			e=frm.elements[i];
			if (e.type=='checkbox') 
			{
				e.checked=val;
			}
		}
    }
}



//-----------------------------------------------------------------------------------------------
// Auteur : CG
// Date création : 23-11-05
// Description : Contrôle si une ligne d'un menu déroulant est sélectionnée pour pouvoir la supprimer
// Argument : champ=nom du champ contenant la valeur choisie dans le menu déroulant
//-----------------------------------------------------------------------------------------------
function confirm_suppr_select(champ)
{
	if (champ.selectedIndex!=-1)
	{
		if (confirm("Confirmez-vous la suppression de la ligne sélectionnée ?"))
			{return true;}
		else
			{return false;}
	}
	alert("Aucune ligne n'est sélectionnée pour la suppression ...");
	return false;
}


//*********************************************************************************************
// Auteur : PM
// Date création : 20-12-08
// Description : Test de validité d'une date saisie dans un formulaire et
// formattage de la date avec 4 chiffres pour l'année et le caractère "-" comme séparateur
// Paramètres : arg_champ=nomp complet du champ de saisie, 
//		     arg_siecle= siecle sur 4 chiffres à ajouter à l'année (soit 1900, soit 2000)
//		     arg_amini = l'année de la date saisie doit être > à arg_amini
//	               arg_amaxi = l'année de la date saisie doit être < à arg_amaxi
// Codée initialement par PM pour ticketnet, et récupérée de rech_avanceee.html
//*********************************************************************************************
//
function format_date_js(arg_champ,arg_dmini,arg_dmaxi,arg_siecle) {
	arg_date=arg_champ.value;
	if(arg_date!="") {
		var exp=new RegExp("^[0-3]{1}[0-9]{1}[-/]{0,1}[0-1]{1}[0-9]{1}[-/]{0,1}[0-9]{2,4}$","g");
		if(!exp.test(arg_date) || (arg_date.length%2)!=0) { 
			alert("La date saisie est incorrecte..."); 
			setTimeout(function(){arg_champ.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
			arg_champ.value="";// ++1.5.010 CN 15-05-09
			return false; 
		}
		else {			
			var reg=new RegExp("[-/]","g");
			var tab=arg_date.split(reg);
			if(tab.length>1 && tab.length<3) { 
				alert("La date saisie est incorrecte..."); 
				setTimeout(function(){arg_champ.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
				arg_champ.value="";// ++1.5.010 CN 15-05-09
				return false; 
				}
			else if(tab.length==3) {var j=tab[0];var m=tab[1];var a=tab[2];}
			else {var j=arg_date.substr(0,2);var m=arg_date.substr(2,2);var a=arg_date.substr(4);}	
			
			if(arg_siecle!="")var siecle=arg_siecle; else var siecle=1900; // Chiffres à ajouter devant l'année si celle si est fournie sur 2 chiffres			
			if(a.length==2)a=siecle+parseInt(a,10);
			
			if(arg_dmini!='')var amin=arg_dmini; else var amin=0; // année mini			
		    if(arg_dmaxi!='')var amax=arg_dmaxi; else amax=a; // année maxi			
			if(amax<amin) {var save=amax;amax=amin;amin=save;}			
			
			if(j>0 && j<=31 && m>0 && m<=12) {
				var date=new Date(a,m-1,j);
			    j2=date.getDate();m2=date.getMonth()+1;a2=date.getFullYear();
				if(j!=j2 || m!=m2 || a!=a2) { 
					alert("La date "+arg_date+" n'existe pas ...");
					setTimeout(function(){arg_champ.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
					arg_champ.value="";// ++1.5.010 CN 15-05-09 
					return false; 
				}
				else if(a<amin || a>amax) { 
					alert ("L'année doit être comprise entre "+amin+" et "+amax+"..."); 
					setTimeout(function(){arg_champ.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
					arg_champ.value="";// ++1.5.010 CN 15-05-09
					return false; 
				}
				else arg_champ.value=j+"-"+m+"-"+a;
			}
			else { 
				alert("La date saisie est incorrecte..."); 
				setTimeout(function(){arg_champ.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
				arg_champ.value="";// ++1.5.010 CN 15-05-09
			return false;}
		}
	}	
	return true;
}
/*
//*********************************************************************************************
// Auteur : CG
// Date création : 20-12-05
// Description : Test de validité d'une date saisie dans un formulaire et
// formattage de la date avec 4 chiffres pour l'année et le caractère "-" comme séparateur
// Paramètres : arg_champ=nomp complet du champ de saisie, 
//				arg_siecle= siecle sur 4 chiffres à ajouter à l'année (soit 1900, soit 2000)
//				arg_amini = l'année de la date saisie doit être > à arg_amini
//				arg_amaxi = l'année de la date saisie doit être < à arg_amaxi
//*********************************************************************************************
function format_date_js(arg_champ,arg_amini,arg_amaxi,arg_siecle)
{
	if (!arg_siecle || arg_siecle=="")
	{
		arg_siecle=1900;
	}
	// Ajout CG du 03-11-06
	if(arg_champ.value=="000000" || arg_champ.value=="00000000")
	{
		arg_champ.value="00-00-0000";
		return true;
	}
	if(arg_champ.value!="" && arg_champ.value!="00-00-0000" && arg_champ.value!="00-00-00")
	{
		if(!test_date_js(arg_champ.value,arg_amini,arg_amaxi,arg_siecle))
		{
			arg_champ.focus();
			return false;
		}
		else
		{
			var arg_date=arg_champ.value;
			var reg=new RegExp("[-/]+", "g");
			var tab_date=arg_date.split(reg);
			if(tab_date.length==1)
			{
				// Date saisie sans séparateur
				var j=parseInt(tab_date[0].substring(0,2));
				if (j==0)
				{
					  j=parseInt(tab_date[0].substring(1,2));
				}
				else
				{
					  j=parseInt(tab_date[0].substring(0,2));
				}
				var m=(parseInt(tab_date[0].substring(2,3))*10)+parseInt(tab_date[0].substring(3,4));
				var a=parseInt(tab_date[0].substring(4,tab_date[0].length)*1);
			}
			else
			{
				// Date saisie avec séparateur
				var j=parseInt(tab_date[0].substring(0,2));
				if (j==0)
				{
					  j=parseInt(tab_date[0].substring(1,2));
				}
				else
				{
					  j=parseInt(tab_date[0].substring(0,2));
				}
				var m=parseInt(tab_date[1].substring(0,2));
				if (m==0)
				{
					  m=parseInt(tab_date[1].substring(1,2));
				}
				else
				{
					  m=parseInt(tab_date[1].substring(0,2));
				}
				var a=parseInt(tab_date[2].substring(0,2)*1);
				if (a==0)
				{
					if(tab_date[2].substring(1,tab_date[2].length-1)=="")
					{
						a=0;
					}
					else
					{
					  a=parseInt(tab_date[2].substring(1,tab_date[2].length-1)*1);					  
					}
				}
				else
				{
					  a=parseInt(tab_date[2].substring(0,tab_date[2].length)*1);
				}
			}		
			if (a<100)a=arg_siecle+a;
			j_chaine=j;m_chaine=m;
			if(j<10)j_chaine="0"+j;
			if(m<10)m_chaine="0"+m;
			arg_champ.value=j_chaine+"-"+m_chaine+"-"+a;
			return true;
		}
	}
	return true; // Ajout CG le 13/02/06
}
*/
//********************************************************************************************
// Auteur : PM
// Date création : 07-06-06
// Description : Test et Formatage d'une valeur numérique signée ou non avec deux décimales
// Paramêtres : arg_nom: le champ à tester et formater, lg_max: longeur max du champ, 
// sgn: indique si le champ doit être géré signé ou non
//++ 1.1.027.006 CP 17/09/2007 Ajout 2 params:
// nb_min: valeur mini, nb_max: valeur maxi
//
// Nota : lg_max et sgn sont facultatif à l'appel.
// La fonction se charge de redonner le focus.
// La fonction utilise test_numerique_js ou test_numerique_signe_js
//++ 1.1.029.001 ST 01/10/2007, BUG 12755 : Ajout du paramètre nb_decimal pour définir 
// le nombre de décimal de la valeur
//********************************************************************************************
function test_format_decimal_js(arg_nom,lg_max,sgn,nb_min,nb_max,nb_decimal) {
	var lg=15;
	var sg=false;
	var mini='';
	var maxi='';
	var nombre_decimal=2;//++ 1.1.029.001 ST 01/10/2007, BUG 12755
	var mult_decimal=100;//++ 1.1.029.001 ST 01/10/2007, BUG 12755
	var mode = 1;
	if(test_format_decimal_js.arguments.length>=2){
		if(test_format_decimal_js.arguments[1] && lg_max!='')lg=lg_max;
		if(test_format_decimal_js.arguments[2])sg=sgn;		
	}
	if(test_format_decimal_js.arguments.length>=5){
		if(nb_min!='' && nb_max!='')mode = 2;//++ 1.1.029.001 ST 01/10/2007, BUG 12755
		if(test_format_decimal_js.arguments[3] && nb_min!='')mini=nb_min;
		if(test_format_decimal_js.arguments[4] && nb_max!='')maxi=nb_max;
	}
	if(test_format_decimal_js.arguments.length>=6)//++ 1.1.029.001 ST 01/10/2007, BUG 12755
	{
		if(test_format_decimal_js.arguments[5] && nb_decimal!='')
		{
			decim2='';
			for (i=0;i<nb_decimal;i++){decim2='0'+decim2;}
			if(nb_decimal==''){nombre_decimal=2;mult_decimal=100;}
			else{nombre_decimal=nb_decimal;mult_decimal='1'+decim2;}
		}
	}
	var chaine=arg_nom.value;		
	if(chaine!=""){
		if(sg==true){ 
			if(!test_numerique_signe_js(arg_nom.value)){ 
				//arg_nom.focus();
				setTimeout(function(){arg_nom.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
				arg_nom.value="";// ++1.5.010 CN 15-05-09
				return 0;
			}
		}
		else { 
			if(!test_numerique_js(arg_nom.value)){ 
				//arg_nom.focus();
				setTimeout(function(){arg_nom.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
				arg_nom.value="";// ++1.5.010 CN 15-05-09
				return 0;
			} 
		}
		/*var tab_elem= chaine.replace(/^([-+]?)([0-9]*)([.]?)([0-9]*)$/,
			function($0,$1,$2,$3,$4){
				signe=$1; entier=$2; point=$3; decim=$4;
				return "$1$2$3$4"; }
		);*/
		re=/^([-+]?)([0-9]*)([.]?)([0-9]*)$/;
		tab=re.exec(chaine);
		var signe='';var entier='';var point='';var decim='';		
		if(tab[1])signe=tab[1];
		if(tab[2])entier=tab[2];
		if(tab[3])point=tab[3];
		if(tab[4])decim=tab[4];		
		if(entier!='' && (entier>0 || (entier==0 && decim>0))) {
			var nb_car=0; 
			var num_min=0;var num_max=0;
			if(mini!='' && maxi!=''){
				
				num_min = mini;
				num_max = maxi;			
			}else{
				nb_car=3;
				num_min=0;num_max=(Math.pow(10,(lg-nb_car))-1+'.99'); 
				if(sg==true){
					nb_car=4;if(signe=='')signe='+';
					num=(Math.pow(10,(lg-nb_car))-1+'.99')
					num_min=("-"+num);num_max=('+'+num); 
				}			
				else signe='';

			}

			if(decim=='')decim='00';
			else if(decim.length==1)decim=decim+'0';
			else if(decim.length>nombre_decimal)
			{
				//++ 1.1.029.004 ST 07/11/2007, BUG 9.999 => 9.100
				var decim_test='';
				var decim_test2='';
				var decim_test3='';
				for (i=0;i<decim.length-1;i++){decim_test='9'+decim_test;}
				decim_test2=decim.substring(0,decim.length-1);
				decim_test3=decim.substring(decim.length-1,decim.length)
				if(decim_test2==decim_test && decim_test3>=5)
				{
					entier=String(parseInt(entier)+1);
					decim='00';
				}//++ 1.1.029.004 ST 07/11/2007, BUG (Fin)
				else decim=Math.round(('0.'+decim)*mult_decimal);
				
			}
			//else if(decim.length>2)decim=Math.round(('0.'+decim)*100);//++ 1.1.029.001 ST 01/10/2007, BUG 12755
		
			if(mode == 1 && (entier.length+nb_car)<=lg){ 
					if(signe=='-')arg_nom.value=signe+''+entier+'.'+decim; 
					else arg_nom.value=entier+'.'+decim; 
					return 1;
			}
			else if(mode == 2 && chaine>=num_min && chaine<=num_max){ 
					if(signe=='-')arg_nom.value=signe+''+entier+'.'+decim; 
					else arg_nom.value=entier+'.'+decim; 
					return 1;
			}
			else {
				alert("La valeur saisie doit être comprise entre "+num_min+" et "+num_max+"...");
				//arg_nom.focus(); 
				setTimeout(function(){arg_nom.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
				arg_nom.value="";// ++1.5.010 CN 15-05-09
				return 0;
			}
			
		}
		else {arg_nom.value='0.00';return 1;}
	}
	else {arg_nom.value='0.00';return 1;}	
}

//--------------------------------------------------------------------------
// PM, Fonction qui renvoie la valeur d'un paramètre de l'url
// Arguments : url : l'url à décortiquer, param : le nom du paramètre
// Exemple : 
//		appel  : var val=get_param("script.php?ch1=val1&ch2=val2","ch2");
//		retour : val vaut val2
//--------------------------------------------------------------------------
function get_param(url,param){
	var tab=url.substr(url.lastIndexOf("?")+1,url.length);
	tab=tab.split("&");
	for(var i=0;i<tab.length;i++){
		lgn=tab[i];
		if(lgn.indexOf(param)!=-1){
			return lgn.substr(lgn.lastIndexOf("=")+1,lgn.length);
		}		
	}
	return -1;
}

//***************************************************************************
// Auteur : PM
// Date création : 17-08-06
// Description : Ouverture popup pour afficher un graphique
//***************************************************************************
function graph(){

	if (screen){
		largeur=screen.width;
		hauteur=screen.height;
	}
	newfenetre=window.open("divers_imp_graph.php","","innerwidth="+largeur+",width="+largeur+",innerheight="+hauteur+",height="+hauteur+",left=0,top=0,resizable=yes,scrollbars=yes,dialog=yes");
}

//***************************************************************************
// Auteur : PM
// Date création : 17-08-06
// Description : Test du contenu d'une rubrique numérique entière
//***************************************************************************
function test_entier_js(arg_nom,taille)
{
	if(arg_nom.value!='')
	{
		if((arg_nom.value.length)>taille){
			alert("Vous devez saisir une valeur numérique de "+taille+" chiffres au plus ...");
			//arg_nom.focus(); // PM le 23-01-07
			setTimeout(function(){arg_nom.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
			arg_nom.value="";// ++1.5.010 CN 15-05-09
			return 0; // PM le 23-01-07
		}
		else {
			re=/^\d*$/;
			test_rub=re.exec(arg_nom.value);
			if (!test_rub)
			{
				alert("Vous devez saisir une valeur numérique entière ...");
				//arg_nom.focus(); // PM le 23-01-07
				setTimeout(function(){arg_nom.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
				arg_nom.value="";// ++1.5.010 CN 15-05-09
				return 0;// PM le 23-01-07
			}		
		}
	}
	return 1;
}

//********************************************************************************************
// Auteur : ST
// Date création : 3-08-06
// Description : Test si au moins une case est cocher
// Paramètres : frm=nom du formulaire
//********************************************************************************************
function confirm_coche(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))	
		{return true;}
	}
	alert("Aucune ligne n'est cochée pour la génération de la commande...");
	return false;
}

//********************************************************************************************
// Auteur : CG
// Date création : 11-08-06
// Description : Détection touche "tabulation" dans champ de saisie d'un formulaire
// Renvoie true si la touche "tabulation" a été tapée.
//********************************************************************************************
function detection_tab(evenement){	
	if(navigator.appName=='Netscape') {var touche= evenement.which;}
	else {var touche=evenement.keyCode;}
	if (touche==9) {return true;}
	return false;
}

//************************************************************************************
// Auteur : ST
// Date création : 24-08-06
// Description : Fenêtre PopUp permettant d'enregistrer un fichier sur le disque
//************************************************************************************

function enregistrement_fichier()
{
	if (screen){leftpos=(screen.width-750)/2;toppos=(screen.height-100)/2;}
	popup=window.open('form_enregistrement_fichier.php','enregistrement_fichier','width=750,height=100,left='+leftpos+',top='+toppos);
}

//*************************************************************************************************
// Auteur : ST
// Date création : 31/08/06
// Description : Test du contenu d'une rubrique contenant uniquement des numériques et des lettres
//*************************************************************************************************

function test_chaine_js(arg_nom)
{
	if(arg_nom!='')
	{
		re=/^\w*$/;
		test_rub=re.exec(arg_nom);
		if (!test_rub)
		{
			alert("Vous devez saisir une valeur contenant uniquement des numériques et des lettres...");
			return false;
		}
	}
	return true;
}

//**************************************************************************
// PM, Modif du 24-05-06.
// Ajout d'une variable pour gérer la touche "Enter" dans les formulaires
// $keypress Annule l'action des frappes clavier dans les formulaires
//**************************************************************************
function keypress(event) {
	if(navigator.appName=='Netscape'){			
		if(event.which==13 && (event.target.type!="textarea" || (event.target.type=="textarea" && event.target.readOnly)))
			return false; 
		else{ 
			if(event.which==34 && event.target.type!="textarea"){ 
				var input=event.target;
				input.focus();
				var start=input.selectionStart;
				var end=input.selectionEnd;
				if(event.target.value.length < event.target.maxLength-1){
					input.value=input.value.substr(0,start)+"\u0027\u0027"+input.value.substr(end);	
					pos=start+2;
				}
				else {
					if(event.target.value.length < event.target.maxLength){
						input.value=input.value.substr(0,start)+"\u0027"+input.value.substr(end);
						pos=start+1;
					}
					else { 
						pos=start; 
					}
				}
				input.selectionStart=pos;
				input.selectionEnd=pos;
				return false;				
			}
		}
		return true;
	}
	else {						
		if(window.event.keyCode==13 && (event.srcElement.type!="textarea" || (event.srcElement.type=="textarea" && event.srcElement.readOnly)))
			return false; 
		else{ 
			if(window.event.keyCode==34 && event.srcElement.type!="textarea"){ 
				window.event.keyCode=39;
				if(event.srcElement.value.length < event.srcElement.maxLength-1){
					var input=event.srcElement;
					input.focus();
					var range=document.selection.createRange();
					var insText=range.text;					
					range.text="\u0027";				
				}
				else return false;
			}
		}
		return true;
	}
}
//**************************************************************************
// PM, Modif du 26-09-06.
// transformation des guillements contenus dans une chaine en deux quotes 
//
// ATTENTION : NE PLUS UTILISER
//**************************************************************************
function trans_quotes(arg_chaine){	
	var chaine=arg_chaine.value;	
	arg_chaine.value=chaine.replace(/\"/g,"' '");	
	code='';obj='';
}

//-------------------------------------------------------------------------------------
// Auteur : ST
// Date création : 02-10-06
// Description : Fonction de génération de mot de passe
// Prédéfini pour mettre 3 majuscules + 3 chiffres
//-------------------------------------------------------------------------------------

function DonneNombreHasard(Minimum, Maximum) 
{
	return (Math.floor(Math.random() * (Maximum - Minimum)) + Minimum);
}

function DonneCaractereHasard(Nombres,Majuscules) 
{
	var LesChiffres 			= "0123456789";
	//var LesMinuscules 		= "abcdefghijklmnopqrstuvwxyz";
	var LesMajuscules 		= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	//var LesAutres 				= "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/? ";
	var ChaineCaracteres 	= ""
	
	if (Nombres == true)	  	ChaineCaracteres += LesChiffres;
	//if (Minuscules == true) 	ChaineCaracteres += LesMinuscules;
	if (Majuscules == true) 	ChaineCaracteres += LesMajuscules;
	//if (Autres == true)     	ChaineCaracteres += LesAutres;
	
	return ChaineCaracteres.charAt(DonneNombreHasard(0, ChaineCaracteres.length));
}

function DonneToutCaractereHasard(Nombres,Majuscules,Minuscules) 
{
	var LesChiffres 			= "0123456789";
	var LesMinuscules 		= "abcdefghijklmnopqrstuvwxyz";
	var LesMajuscules 		= "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	//var LesAutres 				= "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/? ";
	var ChaineCaracteres 	= ""
	
	if (Nombres == true)	  	ChaineCaracteres += LesChiffres;
	if (Minuscules == true) 	ChaineCaracteres += LesMinuscules;
	if (Majuscules == true) 	ChaineCaracteres += LesMajuscules;
	//if (Autres == true)     	ChaineCaracteres += LesAutres;
	
	return ChaineCaracteres.charAt(DonneNombreHasard(0, ChaineCaracteres.length));
}

function ComposerMotPasse(Longueur,NombreEnPremier,MajusculeEnPremier,NombreEnsuite,MajusculeEnsuite) 
{
	var Resultat = "";
	for (var i = 0; i < 3; ++i) 
	{
		Resultat = Resultat + DonneCaractereHasard(NombreEnPremier,MajusculeEnPremier);
	}
	for (var i = 3; i < Longueur; ++i) 
	{
		Resultat = Resultat + DonneCaractereHasard(NombreEnsuite,MajusculeEnsuite);
	}
	return Resultat;
}

function ComposerToutMotPasse(Longueur,NombreEnPremier,MajusculeEnPremier,NombreEnsuite,MajusculeEnsuite,MinusculeEnsuite) 
{
	//for (var i = 0; i < 3; ++i) 
	//{
	//	Resultat = Resultat + DonneToutCaractereHasard(NombreEnPremier,MajusculeEnPremier,MinusculeEnsuite);
	//}
	//for (var i = 3; i < Longueur; ++i) 
	// ++ AP 1.3.021 doctech 635 (mais standard) - On vérifie que le mot de passe contient bien les contraintes demandées avant de le retourner, sinon, on le re-génére
	var exp_chiff= new RegExp("[0-9]{1}","g");
	var exp_majus= new RegExp("[A-Z]{1}","g");
	var exp_minus= new RegExp("[a-z]{1}","g");

	var cond_mdp=false;
	while (cond_mdp==false)
	{
		var Resultat = "";
		cond_mdp=true;
		
		for (var i = 0; i < Longueur; ++i) 
		{
			Resultat = Resultat + DonneToutCaractereHasard(NombreEnsuite,MajusculeEnsuite,MinusculeEnsuite);
		}
		// vérification si le passe généré réunit bien toutes les conditions de constitutions :
		if(NombreEnsuite==true)
		{
		if(!exp_chiff.test(Resultat)) {cond_mdp=false;}
		}
		if(MajusculeEnsuite==true)
		{
		if(!exp_majus.test(Resultat)) {cond_mdp=false;}
		}
		if(MinusculeEnsuite==true)
		{
		if(!exp_minus.test(Resultat)) {cond_mdp=false;}
		}
	}
	
	return Resultat;
}



//-------------------------------------------------------------------------------------
// Auteur : CG
// Date création : 18-10-2006
// Description : Fonction d'affichage d'une liste de choix dans un popup 
// Fonction qui remplace les fonctions "liste" et "liste2"
// La fonction gère l'affichage de la liste à partir d'une valeur et gère l'affichage
// par page.
// Arguments : nom_liste=Identifiant de la liste à gérer
//			   val_ini=Valeur initiale à partir de laquelle la liste doit s'afficher
// Ajout PM du 23-10-06, Ajout d'un paramètre : "arg_indice", optionnel, utilisé pour gérer l'appel
// de la liste à partir d'un tableau afin de reporter les valeurs sur le bon élément du tableau
//-------------------------------------------------------------------------------------
/*function liste_selection(nom_liste,val_ini,arg_indice)
{
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=screen.width-750;
		toppos=screen.height-400;
	}
	var indice="";
	if(arg_indice >= 0)indice="&indice="+arg_indice; // PM le 23-10-06
	newfenetre=window.open('liste_choix.php?nom_liste='+nom_liste+'&val_ini='+val_ini+indice,nom_liste,'width=700,height=300,left='+leftpos+',top='+toppos+',resizable=yes,scrollbars=yes');
	newfenetre.focus(); // PM le 09-05-07
}*/
//++1.1.042.001 PM 04-02-08, evalspec 5363 : CLSH, ajout d'un paramètre donant le nom du champ
function liste_selection(nom_liste,val_ini,arg_indice)//++ 1.1.030 ST 21/11/2007, BUG 13757
{
	var arg_tarif="";
	if(liste_selection.arguments.length>3)var arg_tarif=liste_selection.arguments[3];
	
	//++1.1.042.001 PM 04-02-08, evalspec 5363 : CLSH, ajout d'un paramètre donant le nom du champ
	if(liste_selection.arguments.length>4)var arg_champ=liste_selection.arguments[4];
	
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=screen.width-750;
		toppos=screen.height-400;
	}
	var indice="";var tarif=""; 
	if(arg_indice >= 0)indice="&indice="+arg_indice; // PM le 23-10-06
	if(arg_tarif >= 0)tarif="&tarif="+arg_tarif;
	
	//++1.1.042.001 PM 04-02-08, evalspec 5363 : CLSH, ajout d'un paramètre donant le nom du champ
	var champ="";if(arg_champ !="")champ="&champ="+arg_champ;
	
	//++1.1.042.001 PM 04-02-08, evalspec 5363 : CLSH, ajout d'un paramètre donant le nom du champ
	//newfenetre=window.open('liste_choix.php?nom_liste='+nom_liste+'&val_ini='+val_ini+indice+tarif,nom_liste,'width=700,height=300,left='+leftpos+',top='+toppos+',resizable=yes,scrollbars=yes');
	newfenetre=window.open('liste_choix.php?nom_liste='+nom_liste+'&val_ini='+val_ini+indice+tarif+champ,nom_liste,'width=700,height=300,left='+leftpos+',top='+toppos+',resizable=yes,scrollbars=yes');
	newfenetre.focus(); // PM le 09-05-07
}
//++1.7.028 PM 18-06-10
function web_liste_selection(nom_liste,val_ini,arg_indice) {
	var arg_tarif="";
	if(web_liste_selection.arguments.length>3)var arg_tarif=web_liste_selection.arguments[3];
	if(web_liste_selection.arguments.length>4)var arg_champ=web_liste_selection.arguments[4];	
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=screen.width-750;
		toppos=screen.height-400;
	}
	var indice="";var tarif=""; 
	if(arg_indice >= 0)indice="&indice="+arg_indice;
	if(arg_tarif >= 0)tarif="&tarif="+arg_tarif;
	var champ="";if(arg_champ !="")champ="&champ="+arg_champ;
	newfenetre=window.open('web_liste_choix.php?nom_liste='+nom_liste+'&val_ini='+val_ini+indice+tarif+champ,nom_liste,'width=700,height=300,left='+leftpos+',top='+toppos+',resizable=yes,scrollbars=yes');
	newfenetre.focus();
}

//***************************************************************************
// Auteur : CG
// Date création : 19-10-2006
// Description : Renvoie le code de la touche enfoncée dans un champ
// Fonctionne sous IE et Firefox
//***************************************************************************

function code_touche(evenement){	
	if(navigator.appName=='Netscape') {var touche= evenement.which;}
	else {var touche=evenement.keyCode;}
	return touche;
}

//*************************************************************************************************
// Auteur : ST
// Date création : 02/10/06
// Description : Test du contenu d'une rubrique contenant uniquement des lettres
//*************************************************************************************************
function test_alpha_js(arg_nom)
{
	if(arg_nom!='')
	{
		re=/^[a-zA-Z]+$/;
		test_rub=re.exec(arg_nom);
		if (!test_rub)
		{
			alert("Vous devez saisir une valeur contenant uniquement des lettres...");
			return false;
		}
	}
	return true;
}

//***************************************************************************
// Auteur : ST
// Date création : 15/12/06
// Description : Test du contenu d'une rubrique numérique entière signée
//++ 1.1.029.001 PM 03-10-07 ajout du paramètre de longueur, optionnel
//***************************************************************************
function test_entier_signe_js(arg_nom) {
	if(arg_nom.value!='') {			
		re=/^[-+]?\d*$/;
		if(test_entier_signe_js.arguments.length>1)re=eval("/^[-+]?\\d{1,"+test_entier_signe_js.arguments[1]+"}$/");
		test_rub=re.test(arg_nom.value);		
		if (!test_rub) {
			if(test_entier_signe_js.arguments.length>1) {
				num=Math.pow(10,test_entier_signe_js.arguments[1])-1;
				alert("Vous devez saisir une valeur numérique entière positive ou négative (ex: 26,-15),\ncomprise entre -"+num+" et "+num+"...");
				arg_nom.value="";
			}
			else alert("Vous devez saisir une valeur numérique entière \npositive ou négative (ex: 26,-15)...");
			//arg_nom.focus();
			setTimeout(function(){arg_nom.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
			arg_nom.value="";// ++1.5.010 CN 15-05-09
			return false;//++ 1.1.029.001 PM 03-10-07
		}
		else {return true;}
	}
	else return true;
}


//--------------------------------------------------------------------------------------------------
//	Auteur : CG
//  Date création : 26-12-06
//  Description : Test si un texte est en majuscule
//  Argument : arg_val
//--------------------------------------------------------------------------------------------------
function test_majuscule_js(arg_val)
{
	re=/^[A-Z\s\-\']*$/;
	test_val=re.exec(arg_val);
	if (!test_val)
	{
		return false;
	}
	return true;
}

//--------------------------------------------------------------------------------------------------
//	Auteur : CG
//  Date création : 04-06-2007
//  Description : Test si au moins une ligne est cochée pour le lancement de la mise à jour
//  Argument : frm : nom du formulaire
//--------------------------------------------------------------------------------------------------
function confirm_maj_coche(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))
		{
			if (confirm("Confirmez-vous le lancement de la mise à jour pour les lignes cochées ?"))
				{return true;}
			else
				{return false;}
		}
	}
	alert("Aucune ligne n'est cochée pour le lancement de la mise à jour...");
	return false;
}

//-------------------------------------------------------------------------------------
// Auteur : ST
// Date création : 02/08/2007
// Description : Fonction d'affichage d'une liste de choix dans un popup 
// Fonction qui remplace les fonctions "liste" et "liste2"
// La fonction gère l'affichage de la liste à partir d'une valeur et gère l'affichage
// par page.
// Arguments : nom_liste=Identifiant de la liste à gérer
//			   val_ini=Valeur initiale à partir de laquelle la liste doit s'afficher
// Ajout d'un paramètre : "arg_indice", optionnel, utilisé pour gérer l'appel
// de la liste à partir d'un tableau afin de reporter les valeurs sur le bon élément du tableau
//-------------------------------------------------------------------------------------
function liste_selection_rech(nom_liste,val_ini,arg_indice)
{
	leftpos=0;
	toppos=0;
	if (screen){
		leftpos=screen.width-750;
		toppos=screen.height-400;
	}
	var indice="";
	if(arg_indice >= 0)indice="&indice="+arg_indice; 
	newfenetre=window.open('liste_choix_selec.php?nom_liste='+nom_liste+'&val_ini='+val_ini+indice,nom_liste,'width=700,height=300,left='+leftpos+',top='+toppos+',resizable=yes,scrollbars=yes');
	newfenetre.focus(); 
}

//***************************************************************************
// Auteur : CP
// Date création : 17/09/2007
// Description : Test du contenu d'une rubrique numérique entière et limitation min et max paramétrable
//***************************************************************************
function test_entier_min_max_js(arg_nom,min,max)
{
	if(arg_nom.value!='')
	{
		if(arg_nom.value>max || arg_nom.value<min){
			alert("La valeur saisie doit être comprise entre "+min+" et "+max+"...");
			//arg_nom.focus(); 
			setTimeout(function(){arg_nom.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
			arg_nom.value="";// ++1.5.010 CN 15-05-09
			return 0; 
		}
		else {
			re=/^[-+]?\d*$/;
			test_rub=re.exec(arg_nom.value);
			if (!test_rub)
			{
				alert("Vous devez saisir une valeur numérique entière \npositive ou négative (ex: 26,-15)...");
				//arg_nom.focus();
				setTimeout(function(){arg_nom.focus()},10); // ++1.5.010 CN 15-05-09 gestion focus firefox
				arg_nom.value="";// ++1.5.010 CN 15-05-09
				return 0;
			}	
		}
	}
	return 1;
}


//********************************************************************************************
// Auteur : ST
// Date création : //++ 1.1.042.001 ST 04/02/2008, Evalspec 5364
// Description : Test si au moins une case est cocher
// Paramètres : frm=nom du formulaire
//********************************************************************************************
function confirm_amort_coche(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))	
		{return true;}
	}
	alert("Aucune ligne n'est cochée pour générer les écritures de dotation aux amortissements...");
	return false;
}


//********************************************************************************************
// Auteur : DOD
// Date création : //++ 1.3.003.004 DOD 08-04-2008, DocTech 290
// Description : Test si au moins une case est cocher
// Paramètres : frm=nom du formulaire
//********************************************************************************************
function confirm_export_etat(frm)
{
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))
		{
			if (confirm("Confirmez-vous l'exportation des lignes cochées ?"))
				{return true;}
			else
				{return false;}
		}
	}
	alert("Veuillez cocher le ou les état(s) à exporter...");
	return false;
}
//********************************************************************************************
// Auteur : DOD
// Date création : //++ 1.3.007 DOD 02-06-2008, menu ceweo2
// Description : Test si un user est log pour accéder au logiciel
//********************************************************************************************
function verif_user()
{
	if(document.getElementById('log_user').value != '')
	{
		return true;
	}
	else
	{
		alert("Veuillez vous identifier avant d'utiliser le logiciel...");
		return false;
	}
}
//*************
// Auteur : DOD
//Date créa : 04/06/2008
//Description : Gestion de l'affichage des <select> par dessus la div du menu d'acces rapide
//***************
function putFrame()
{
	var f    = document.createElement("iframe");
	f.id="menu_frame";
	var d    = document.getElementById("menu_d_ok");

	
	with(f.style){
		position	= "absolute";
	 	width    	= d.offsetWidth+"px";
	  	height		= d.offsetHeight+"px";;
	 	top			= d.offsetTop+"px";
	  	left		= d.offsetLeft+"px";
	   	zIndex		= "1";
		opacity		= "0";
		border 		= "0";
		filter		= "alpha(opacity=0)";
	}
	document.body.appendChild(f);
}
function delFrame()
{
	document.body.removeChild(document.getElementById("menu_frame"));
}
//*********************************************************************************************
// Auteur PM
// Création le 02-07-08
// Fonction qui donne le focus à un objet compatible IE's et FF's
function donne_focus(arg_obj) {
	eval('setTimeout(\'document.forms[0].'+arg_obj.name+'.focus(),1\');');
	return true;
}
//*********************************************************************************************
function control_coche_remise(frm)
{
	nb=0;
	for (i=0;i<frm.length;i++)
	{
		if ((frm.elements[i].name=="coche[]") && (frm.elements[i].checked==true))
		{
			nb++;
		}
	}
	if(nb==0){alert("Vous devez cocher le dossier concerné par la remise...");return false;}
	else if(nb>1){alert("Vous ne devez cocher qu'un seul dossier pour effectuer la remise...");return false;}
	else {return true;}
}

//*********************************************************************************************
// Auteur : ST
//Date créa : 27/10/2008
//Fonction qui permet de mettre en majuscules toutes les premières lettres de chaque mot d'un texte
// et tout le reste en minuscules.
//L'option tiret est également gérée, notamment pour les prénoms ou mot composés.
//*********************************************************************************************
function ucWords(chaine, avectirets) 
{
    var valeur="";
    if ((chaine) && (chaine!=""))
    {
		valeur = chaine.toLowerCase();
    
	    // Analyse des mots séparés par des espaces
	    var mots = valeur.split(' ');
	    for(var i = 0; i < mots.length; i++)
	    {
		    if(mots[i].length > 1)
		    {
			    carac = mots[i].split('');
			    carac[0] = carac[0].toUpperCase();
			    mots[i] = carac.join('');
		    }
		    else
		    {
				mots[i] = mots[i].toUpperCase();
		    }
	    }
	    valeur = mots.join(' ');

	    if ((avectirets) && ((avectirets==false) || (avectirets==true)))
	    {
		    if (avectirets==true)
		    {
			    // Analyse des mots séparés par des tirets (si demandé)
			    var mots = valeur.split('-');
			    for(var i = 0; i < mots.length; i++)
			    {
					if(mots[i].length > 1)
				    {
						carac = mots[i].split('');
						carac[0] = carac[0].toUpperCase();
						mots[i] = carac.join('');
				    }
				    else
				    {
						mots[i] = mots[i].toUpperCase();
				    }
			    }
			    valeur = mots.join('-');
		    }
	    }
    }
    return valeur;
}

//*********************************************************************************************
// Auteur : ST
//Date créa : 27/10/2008
//Fonction 'validerIP' permet de tester une suite d'IP séparées par des ';' et renvoie un message
//de la première IP incorrecte qui est trouvée.
//Fonction 'validerIP2' permet de tester une IP et renvoie un message IP valide ou IP invalide.
//*********************************************************************************************
function validerIP(ip)
{
	var tab_adr=ip.split(';');
	
	if(tab_adr.length==1 && tab_adr[0]=="")return true;
	//alert(tab_adr.length);
	for(j=0;j<tab_adr.length;j++) 
	{
		var reg=/^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.](\d{1,3}|\*)$/;
		/*if (tab_adr[j]=="")
		{
			alert(" IP vide...");
			//return false;
		}*/
		if (tab_adr[j]!="")
		{
			if (reg.exec(tab_adr[j])==null)
			{
				alert("Le format de l'adresse IP "+tab_adr[j]+" est incorrect...");
				return false;
			}
			else
			{
				
				var tab=tab_adr[j].split('.');
			
				var compterreur=0;
				for(i=0;i<4;i++)
				{
					if ((tab[i]-'0')>255)
					{
						alert("Le format de l'adresse IP "+tab_adr[j]+" est incorrect...");
						return false;
						compterreur++;
					}				
				}
			}
		}
	}
		
	/*if(compterreur==0)
	{
		alert("IP valide");
		return true;
	}
	else
	{
		alert("IP invalide");
		return false;
	}*/
}

function validerIP2(ip)
{
	var reg=/^\d{1,3}[.]\d{1,3}[.]\d{1,3}[.]\d{1,3}$/;
	if (reg.exec(ip)==null){
	alert("IP invalide");
	return false;
	}else{
	var tab=ip.split('.');
	var compterreur=0;
		for(i=0;i<4;i++){
			if ((tab[i]-'0')>255){
			compterreur++;
			}
		}
		if(compterreur==0){
		alert("IP valide");
		return true;
		}else{
		alert("IP invalide");
		return false;
		}
	}
}

// CN
// Coche tous les éléments à cocher
//
function tousCocher(frm,nom_coche,coche){
    for(i=0;i< frm.length;i++)
    {
		if (frm.elements[i].name.substring(0,nom_coche.length)==nom_coche)
		{
			e=frm.elements[i];
			if (e.type=='checkbox') {
				 e.checked = coche;
			}
		}
    }
}

//++1.5.003 DOD le 03-03-2009 Doctech 903
//fonction qui empeche de cocher tous et aucun en meme temps dans un select multiple
function verif_tous_aucun(arg_sel,arg_opt)
{
	Nom = navigator.appName;
	Version = navigator.appVersion;
	ie6 = (Nom == 'Microsoft Internet Explorer' && Version.substring(0,1) <= 6 )

	if (ie6) //traitement pour ie6 et inferieur (ne reconnait pas l'evenement onclick sur la balise <option>
	{
		var j=0;
		var tab= new Array();
		
		for(i=0;i<arg_sel.length;i++)
		{
			if(arg_sel[i].selected)
			{
				tab[j]=arg_sel[i].value;
				j++;
			}
		}
		if(tab.length>1)
		{	
			for(i=0;i<tab.length;i++)
			{
				if(tab[i]=='' || tab[i]=='-1')
				{
					for(j=0;j<arg_sel.length;j++)arg_sel[j].selected=false;
					arg_sel[0].selected=true;
					alert("Vous ne pouvez pas cumuler *Toutes* ou *Aucune société* avec un autre choix...");
					return false;
				}
			}
		}
		return true;
	}
	else //traitement pour les autres navigateurs (onclick sur <option> reconnu
	{
		var j=0;
		var tab= new Array();
		
		for(i=0;i<arg_sel.length;i++)
		{
			if(arg_sel[i].selected)
			{
				tab[j]=arg_sel[i].value;
				j++;
			}
		}
		
		if(tab.length>1)
		{	
			for(i=0;i<tab.length;i++)
			{
				if(tab[i]=='' || tab[i]=='-1')
				{
					arg_sel[arg_opt].selected=false;
					alert("Vous ne pouvez pas cumuler *Toutes* ou *Aucune société* avec un autre choix...");
					return false;
				}
			}
		}
		return true;
	}
}

//*********************************************************************************************
// Auteur : ST
//Date création : 20/03/2009
//Fonction 'enleve_valeur' permet de supprimer la valeur "arg_value" en début de la chaîne "arg_champ"
//++ 1.5.004 ST 20/03/2009
//*********************************************************************************************

function enleve_valeur(arg_champ,arg_value)
{
	while(arg_champ.charAt(0)==arg_value){arg_champ=arg_champ.substr(1,arg_champ.length);}
	
	return arg_champ;
}
//*********************************************************************************************

//*********************************************************************************************
// Auteur : CNa
//Date création : 25/09/2009
//Fonction 'supprimer_selection_prest' permet de déselectionner la prestation lorsqu'on change de modèle
//Déplacée de prest_doss_choix.html pour permettre un appel pour d'autres pages
//++ 1.6.009 CNa 25/09/2009 CDC 819
//*********************************************************************************************

function supprimer_selection_prest(arg_liste)
{
	for(i=0;i<arg_liste.length;i++)
	{
		arg_liste.options[i].value=0;
	}
}
//*********************************************************************************************

function encodeChar(texte) {
	texte = texte.replace(/À/g,'&Agrave;'); // 192 C0
	texte = texte.replace(/Á/g,'&Aacute;'); // 193 C1
	texte = texte.replace(/Â/g,'&Acirc;'); // 194 C2
	texte = texte.replace(/Ã/g,'&Atilde;'); // 195 C3
	texte = texte.replace(/Ä/g,'&Auml;'); // 196 C4
	texte = texte.replace(/Å/g,'&Aring;'); // 197 C5
	texte = texte.replace(/Æ/g,'&AElig;'); // 198 C6
	texte = texte.replace(/Ç/g,'&Ccedil;'); // 199 C7
	texte = texte.replace(/È/g,'&Egrave;'); // 200 C8
	texte = texte.replace(/É/g,'&Eacute;'); // 201 C9
	texte = texte.replace(/Ê/g,'&Ecirc;'); // 202 CA
	texte = texte.replace(/Ë/g,'&Euml;'); // 203 CB
	texte = texte.replace(/Ì/g,'&Igrave;'); // 204 CC
	texte = texte.replace(/Í/g,'&Iacute;'); // 205 CD
	texte = texte.replace(/Î/g,'&Icirc;'); // 206 CE
	texte = texte.replace(/Ï/g,'&Iuml;'); // 207 CF
	texte = texte.replace(/Ð/g,'&ETH;'); // 208 D0
	texte = texte.replace(/Ñ/g,'&Ntilde;'); // 209 D1
	texte = texte.replace(/Ò/g,'&Ograve;'); // 210 D2
	texte = texte.replace(/Ó/g,'&Oacute;'); // 211 D3
	texte = texte.replace(/Ô/g,'&Ocirc;'); // 212 D4
	texte = texte.replace(/Õ/g,'&Otilde;'); // 213 D5
	texte = texte.replace(/Ö/g,'&Ouml;'); // 214 D6
	texte = texte.replace(/×/g,'&times;'); // 215 D7
	texte = texte.replace(/Ø/g,'&Oslash;'); // 216 D8
	texte = texte.replace(/Ù/g,'&Ugrave;'); // 217 D9
	texte = texte.replace(/Ú/g,'&Uacute;'); // 218 DA
	texte = texte.replace(/Û/g,'&Ucirc;'); // 219 DB
	texte = texte.replace(/Ü/g,'&Uuml;'); // 220 DC
	texte = texte.replace(/Ý/g,'&Yacute;'); // 221 DD
	texte = texte.replace(/Þ/g,'&THORN;'); // 222 DE
	texte = texte.replace(/ß/g,'&szlig;'); // 223 DF
	texte = texte.replace(/à/g,'&agrave;'); // 224 E0
	texte = texte.replace(/á/g,'&aacute;'); // 225 E1
	texte = texte.replace(/â/g,'&acirc;'); // 226 E2
	texte = texte.replace(/ã/g,'&atilde;'); // 227 E3
	texte = texte.replace(/ä/g,'&auml;'); // 228 E4
	texte = texte.replace(/å/g,'&aring;'); // 229 E5
	texte = texte.replace(/æ/g,'&aelig;'); // 230 E6
	texte = texte.replace(/ç/g,'&ccedil;'); // 231 E7
	texte = texte.replace(/è/g,'&egrave;'); // 232 E8
	texte = texte.replace(/é/g,'&eacute;'); // 233 E9
	texte = texte.replace(/ê/g,'&ecirc;'); // 234 EA
	texte = texte.replace(/ë/g,'&euml;'); // 235 EB
	texte = texte.replace(/ì/g,'&igrave;'); // 236 EC
	texte = texte.replace(/í/g,'&iacute;'); // 237 ED
	texte = texte.replace(/î/g,'&icirc;'); // 238 EE
	texte = texte.replace(/ï/g,'&iuml;'); // 239 EF
	texte = texte.replace(/ð/g,'&eth;'); // 240 F0
	texte = texte.replace(/ñ/g,'&ntilde;'); // 241 F1
	texte = texte.replace(/ò/g,'&ograve;'); // 242 F2
	texte = texte.replace(/ó/g,'&oacute;'); // 243 F3
	texte = texte.replace(/ô/g,'&ocirc;'); // 244 F4
	texte = texte.replace(/õ/g,'&otilde;'); // 245 F5
	texte = texte.replace(/ö/g,'&ouml;'); // 246 F6
	texte = texte.replace(/÷/g,'&divide;'); // 247 F7
	texte = texte.replace(/ø/g,'&oslash;'); // 248 F8
	texte = texte.replace(/ù/g,'&ugrave;'); // 249 F9
	texte = texte.replace(/ú/g,'&uacute;'); // 250 FA
	texte = texte.replace(/û/g,'&ucirc;'); // 251 FB
	texte = texte.replace(/ü/g,'&uuml;'); // 252 FC
	texte = texte.replace(/ý/g,'&yacute;'); // 253 FD
	texte = texte.replace(/þ/g,'&thorn;'); // 254 FE
	texte = texte.replace(/ÿ/g,'&yuml;'); // 255 FF
	return texte;
}

function editContentRapide(page){

	var elem='';
	elem+="\n"+'<div id="dialogEditRapide" rel="'+page+'" title="Edition">';
	elem+="\n"+'<form id="formDialogEditRapide" name="formDialogEditRapide" action="inclusion/contenu_aj.php" method="post">';
	//elem+="\n"+'<textarea id="dialogEditRapide_page_contenu" name="page_contenu" style="visibility:hidden"></textarea>';
	elem+="\n"+'<div id="zoneEditRapide">';
	elem+="\n"+'</div>';
	elem+="\n"+'<input type="hidden" name="page_id" value="'+page+'" >';
	elem+="\n"+'<input type="hidden" name="action" value="contenu" >';
	elem+="\n"+'</form>';
	elem+="\n"+'</div>';

	//création de la popup
	jQuery('body').append(elem);

	// Dialog
	jQuery('#dialogEditRapide').dialog({
		autoOpen: false,
		modal:true,
		width: 950,
		height: 630,
		buttons: {
			"Ok": function() {
				//document.all.frame_editor.contentWindow.wp_send_to_html(document.all.frame_editor.contentWindow.myEditorCode);
				//var contenu=encodeChar(jQuery('#frame_editor').contents().find('#myEditorCode').val());
				document.formDialogEditRapide.submit();
				//jQuery('#dialogEditRapide_page_contenu').val(WPro.editors['myEditorCode'].getValue());
//				var contenu=WPro.editors['myEditorCode'].getValue();
//				alert(contenu.length);
//				var test=window.open("about:blank","testContenu");
//				test.document.write(contenu);
//				$.post('inclusion/contenu_aj.php',
//						{
//							action:'contenu',
//							page_id:jQuery('#dialogEditRapide').attr('rel'),
//							page_contenu:contenu
//						},
//						function(){});
				//jQuery('#conteneur_bloc'+jQuery('#dialog').attr('rel')).html(contenu);
				//WPro.deleteEditor('myEditorCode');
				//jQuery(this).dialog("close");
				//jQuery('.wproEditor').remove();
				//jQuery('#dialogEditRapide').remove();
				//location.reload();
			},
			"Cancel": function() {
				WPro.deleteEditor('myEditorCode');
				jQuery(this).dialog("close");
				jQuery('.wproEditor').remove();
				jQuery('#dialogEditRapide').remove();
			}
		}
	});

	jQuery('#dialogEditRapide').attr('rel',page);
	jQuery('#dialogEditRapide').dialog('open');

	if (typeof(WPro) != 'undefined'){
		WPro.deleteEditor('myEditorCode');
	}

	$('#zoneEditRapide').load("admin/contenu/editor_bloc.php", "page_id="+page);
}

function dateConvert(date,sepIn,sepOut){
	if(typeof(sepIn)=='undefined'){
		sepIn='-';
	}
	if(typeof(sepOut)=='undefined'){
		sepOut='-';
	}
	tmp_date = date.split(sepIn);
	return tmp_date.reverse().join(sepOut);


}

function apllyQtip(argLink,argBox,argStyle){
	$("#"+argLink).qtip({
		content: {
			text: $('#'+argLink+'Box'),
			title: {
				text: $("#title"+argLink+'Box'),
				button: true
			}
		},
		show: {
			//event: 'click',
			solo:true,
			effect: function(offset) {
				$(this).fadeIn(500); // "this" refers to the tooltip
			}
		},
		hide: {
			target: $('#'+argLink+'Box'),
			effect: function(offset) {
				$(this).fadeOut(500); // "this" refers to the tooltip
			}
		},
		position: {
			my: 'bottom center',
			at : 'top center'
		},
		style: {
			classes: 'ui-tooltip-rounded ui-tooltip-shadow ui-tooltip-'+$("#style"+argLink+'Box').text() ,
			tip: {
				width: 30,
				height: 10
			}

		}
	});
}

function loadRSS(argIDlink){
	jQuery("#"+argIDlink).after('<div id="'+argIDlink+'Box" style="display:none;"></div>');
	jQuery.get('load_rss.php','flux='+argIDlink,function(res){
		jQuery("#"+argIDlink+"Box").html(res);
		apllyQtip(argIDlink);
	})
	
}

function linkRSS(argSRC,argTITLE){
	jQuery('head').append('<link rel="alternate" type="application/rss+xml" href="'+argSRC+'" title="'+argTITLE+'">');
}

function affColorBoxPerso(url,txt){
			$.colorbox({
				href:url,
				title:txt,
				opacity:0.5,
				maxWidth:'100%',
				maxHeight:'100%'
			})
		}
	
function checkExt(image,oldext) {
	var ClientPC    = navigator.userAgent.toLowerCase();
	var ClientVer   = parseInt(navigator.appVersion);
	var arVersion   = navigator.appVersion.split("MSIE" );
	var MsIeVer     = parseFloat(arVersion[1]);
	var Is_ie       = ( (ClientPC.indexOf('msie')       != -1) && (ClientPC.indexOf('opera')    == -1));
	var Is_nav      = ( (ClientPC.indexOf('mozilla')    != -1) && (ClientPC.indexOf('spoofer')  == -1)
					 && (ClientPC.indexOf('compatible') == -1) && (ClientPC.indexOf('opera')    == -1)
					 && (ClientPC.indexOf('webtv')      == -1) && (ClientPC.indexOf('hotjava')  == -1));
	var Is_moz      = 0;
	var Is_win = ((ClientPC.indexOf('win')!=-1) || (ClientPC.indexOf('16bit') != -1));
	var Is_mac =  (ClientPC.indexOf('mac')!=-1);
	if (Is_ie) {
		if (MsIeVer>=7) {
		 ext = 'png';
		} else {
		 ext = 'gif';
		}
	}
}

function affRech(){


	// Dialog
	jQuery('#zoneRechercher').dialog({
		modal:true,
		width: 'auto',
		height: 'auto',
		buttons: {
			"Ok": function() {
				document.formRech0.submit();
			},
			"Annuler": function() {
				jQuery(this).dialog("close");
			}
		}
	});
	jQuery('#motclef0').val('Recherche...');
	jQuery('#motclef0').select();

}

function rechercher(idRech){

	if(document.forms['formRech'+idRech].motclef.value!="") {
		if(document.forms['formRech'+idRech].motclef.value.length<3){
			alert('La recherche doit comporter au moins 3 charactères...');
		}else{
			document.forms['formRech'+idRech].action="page.php?mode=recherche";
			document.forms['formRech'+idRech].submit();
		}
	}
}

function openPop(chemin) {
	window.open(chemin,'Aperçu', config='height=500, width=500, toolbar=no, menubar=no, scrollbars=no, resizable=yes, location=no, directories=no, status=no')
}

function decode64(input) {
	 var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	 var output = "";
	 var chr1, chr2, chr3;
	 var enc1, enc2, enc3, enc4;
	 var i = 0;

	 // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
	 input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

	 do {
			enc1 = keyStr.indexOf(input.charAt(i++));
			enc2 = keyStr.indexOf(input.charAt(i++));
			enc3 = keyStr.indexOf(input.charAt(i++));
			enc4 = keyStr.indexOf(input.charAt(i++));

			chr1 = (enc1 << 2) | (enc2 >> 4);
			chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
			chr3 = ((enc3 & 3) << 6) | enc4;

			output = output + String.fromCharCode(chr1);

			if (enc3 != 64) {
				 output = output + String.fromCharCode(chr2);
			}
			if (enc4 != 64) {
				 output = output + String.fromCharCode(chr3);
			}
	 } while (i < input.length);

	 return output;
}

var oldCol;
function CH(tr, mode) 
{
	if (mode == 0) 
	{
		 oldCol = tr.className;
		 tr.className = 'trOverPrestations';
	} 
	else 
	{
		 tr.className = oldCol;
	}
}

/**
 * printPage
 */
function printPage() {
	if (window.print) self.print();
}

function myBookmark() {
	if (document.getElementById&&document.getElementById("link_bookmark")) {
		var el=document.getElementById("link_bookmark");
		var operaStr="&lsaquo; Ctrl + T &rsaquo; pour ajouter aux favoris.";
		if (document.all&&navigator.userAgent.indexOf("Opera")==-1) {
			window.external.AddFavorite(document.location,document.title);
		} else if (window.sidebar) {
			window.sidebar.addPanel(document.title,document.location.href,"");
		} else if (navigator.userAgent.indexOf("Opera")!=-1) {
			el.title=operaStr;
			window.status=operaStr;
		}
	}
}

function mailFriend(){
	jQuery("#zoneMailFriend").load('mailFriend.php');
	jQuery('#zoneMailFriend').dialog({
		modal:true,
		width: 400,
		height: 'auto',
		buttons: {
			"Fermer": function() {
				jQuery(this).dialog("close");
			}
		}
	});
}

function sendMailFriend(){
	jQuery('#mailFriend_url').val(document.location.href);
	jQuery.post(
		'mailFriend.php',
		jQuery("#formZoneMailFriend").serialize(),
		function(res){
			jQuery("#divZoneMailFriend").html(res);
		}
	)
}
