function fn_LectureParametreUnitaire(as_Liste, as_Parametre) {
	ls_Parametres=as_Liste;
	li_PositionParametre=ls_Parametres.indexOf(as_Parametre+'=');
	if (li_PositionParametre!=-1) {
		li_PositionValeur=li_PositionParametre+as_Parametre.length+1;
		li_PositionFinValeur=ls_Parametres.indexOf('|',li_PositionValeur);
		if (li_PositionFinValeur!=-1) {
			return ls_Parametres.substring(li_PositionValeur,li_PositionFinValeur);
		} else {
			return ls_Parametres.substring(li_PositionValeur,ls_Parametres.length);
		}
	}
	return '';
}

function sb_Select(as_NomFormulaire,as_NomChamp) {
	for (var cptFormulaire=0; cptFormulaire<document.forms.length;cptFormulaire++) {
		if (document.forms[cptFormulaire].name==as_NomFormulaire) {
			for (var cptElement=0; cptElement<document.forms[cptFormulaire].length;cptElement++) {
				if (document.forms[cptFormulaire].elements[cptElement].name==as_NomChamp) {
					document.forms[cptFormulaire].elements[cptElement].select();
				}
			}
		}
	}
	return;
}
		
function sb_Focus(as_NomFormulaire,as_NomChamp) {
	for (var cptFormulaire=0; cptFormulaire<document.forms.length;cptFormulaire++) {
		if (document.forms[cptFormulaire].name==as_NomFormulaire) {
			for (var cptElement=0; cptElement<document.forms[cptFormulaire].length;cptElement++) {
				if (document.forms[cptFormulaire].elements[cptElement].name==as_NomChamp) {
					document.forms[cptFormulaire].elements[cptElement].focus();
				}
			}
		}
	}
	return;
}

function sb_FocusObjet(ao_Champ) {
	if (ao_Champ.name.substring(0,3)!='hd_') {
		if (ao_Champ.disabled!=true) {
			ao_Champ.focus();
		}
	}
	return;
}

function sb_InitFormat(as_NomFormulaire) {
	for (var cptFormulaire=0; cptFormulaire<document.forms.length;cptFormulaire++) {
		if (document.forms[cptFormulaire].name==as_NomFormulaire) {
			for (var cptElement=0; cptElement<document.forms[cptFormulaire].length;cptElement++) {
				document.forms[cptFormulaire].elements[cptElement].formatIn='';
				document.forms[cptFormulaire].elements[cptElement].formatOut='';
				document.forms[cptFormulaire].elements[cptElement].libelle='';
			}
		}
	}
	return;
}

function sb_Format(as_NomFormulaire, as_NomChamp, as_LibelleChamp, as_FormatIn, as_FormatOut) {
	for (var cptFormulaire=0; cptFormulaire<document.forms.length;cptFormulaire++) {
		if (document.forms[cptFormulaire].name==as_NomFormulaire) {
			for (var cptElement=0; cptElement<document.forms[cptFormulaire].length;cptElement++) {
				if (document.forms[cptFormulaire].elements[cptElement].name==as_NomChamp) {
					document.forms[cptFormulaire].elements[cptElement].formatIn=as_FormatIn;
					document.forms[cptFormulaire].elements[cptElement].formatOut=as_FormatOut;
					document.forms[cptFormulaire].elements[cptElement].libelle=as_LibelleChamp;
				}
			}
		}
	}
	return;
}

function fn_ControleIn(ao_Champ) {

	ls_Format=ao_Champ.formatIn;
	ls_ValeurOut=ao_Champ.value;
	
	ls_Valeur=ls_ValeurOut;
	if (ls_Format!='') {
		// ## TELF ## Mise en forme d'un numéro de téléphone français ou étranger / OUI à positionner
		ls_Telf=fn_LectureParametreUnitaire(ls_Format,'TELF');
		if (ls_Telf=='OUI') {
			// => Suppression de l'indicatif international
			if (ls_Valeur.substring(0,2)=='00') ls_Valeur='+'+ls_Valeur.substring(2,ls_Valeur.length);
			// => Suppression de tout autre caractère que 0 à 9 pour toute position et + en première position
			for (var cptLettre=0; cptLettre<ls_Valeur.length;cptLettre++) {
				if (((ls_Valeur.charAt(cptLettre)<'0')||(ls_Valeur.charAt(cptLettre)>'9'))&&((cptLettre!=0)||(ls_Valeur.charAt(cptLettre)!='+'))) {
					ls_Valeur=ls_Valeur.substring(0,cptLettre)+' '+ls_Valeur.substring(cptLettre+1,ls_Valeur.length);
				}
			}
			// => Suppression de tous les couples d'espaces
			lb_Modifier=true;
			while (lb_Modifier) {
				lb_Modifier=false;
				for (var cptLettre=0; cptLettre<(ls_Valeur.length)-1;cptLettre++) {
					if (ls_Valeur.substring(cptLettre,cptLettre+2)=='  ') {
						ls_Valeur=ls_Valeur.substring(0,cptLettre)+' '+ls_Valeur.substring(cptLettre+2,ls_Valeur.length);
						lb_Modifier=true;
					}
				}
			}
			// => Mise sous la forme n nnn nnn nnn des numéros français
			if (ls_Valeur.charAt(0)!='+') {
				for (var cptLettre=0; cptLettre<ls_Valeur.length;cptLettre++) {
					if (ls_Valeur.charAt(cptLettre)==' ') ls_Valeur=ls_Valeur.substring(0,cptLettre)+ls_Valeur.substring(cptLettre+1,ls_Valeur.length);
				}
				if (ls_Valeur.length==10) {
					ls_Valeur=ls_Valeur.charAt(0)+' '+ls_Valeur.substring(1,4)+' '+ls_Valeur.substring(4,7)+' '+ls_Valeur.substring(7,10);
					ls_ValeurOut=ls_Valeur;
				}
			} else {
				// Suppression de l'espace éventuel après le +
				if (ls_Valeur.charAt(1)==' ') ls_Valeur=ls_Valeur.charAt(0)+ls_Valeur.substring(2,ls_Valeur.length);
				ls_ValeurOut=ls_Valeur;
			}
		}
		ls_Valeur=ls_ValeurOut;
		// ## TRIM ## Suppression des espaces à droite et à gauche / OUI à positionner
		ls_Trim=fn_LectureParametreUnitaire(ls_Format,'TRIM');
		if (ls_Trim=='OUI') {
			while (ls_Valeur.substring(0,1)==' ') ls_Valeur = ls_Valeur.substring(1,ls_Valeur.length);
			while (ls_Valeur.substring(ls_Valeur.length-1,ls_Valeur.length)==' ') ls_Valeur = ls_Valeur.substring(0,ls_Valeur.length-1);
			ls_ValeurOut=ls_Valeur;
		}
		ls_Valeur=ls_ValeurOut;
		// ## DATE ## Mise en forme d'une date / Séparateur
		ls_Sep=fn_LectureParametreUnitaire(ls_Format,'DATE');
		if (ls_Sep!='') {
			// ----------------------------------
			// Mise en forme de paires de nombres
			// ----------------------------------
			ls_Nombre='';
			ls_NvDate='';
			for (li_Cpt=0;li_Cpt<ls_Valeur.length;li_Cpt++) {
				if ((ls_Valeur.substring(li_Cpt,li_Cpt+1)<'0')||(ls_Valeur.substring(li_Cpt,li_Cpt+1)>'9')) {
					if (ls_Nombre.length!=0) {
						if (ls_Nombre.length<2) ls_NvDate+='0'+ls_Nombre+ls_Valeur.substring(li_Cpt,li_Cpt+1);
						else ls_NvDate+=ls_Nombre+ls_Valeur.substring(li_Cpt,li_Cpt+1);
						ls_Nombre='';
					}
				} else {
					ls_Nombre+=ls_Valeur.substring(li_Cpt,li_Cpt+1);
				}
			}
			if (ls_Nombre.length!=0) {
				if (ls_Nombre.length<2) {
					ls_NvDate+='0'+ls_Nombre;
				} else {
					ls_NvDate+=ls_Nombre;
				}
			}
			if (ls_NvDate.length!=0) ls_Valeur=ls_NvDate;
		
			// -----------------------------------------------------------------------------------------------------------------------------
			// Si le séparateur est '/'
			// Date sur 1 caractère - format supposé : J - format déduit JJ/MM/SSAA où MM et SSAA correspondent au mois et l'année du jour
			// Date sur 2 caractères - format supposé : JJ - format déduit JJ/MM/SSAA où MM et SSAA correspondent au mois et l'année du jour
			// Date sur 5 caractères - format supposé : JJ?MM - format déduit JJ/MM/SSAA où SSAA correspondent à l'année du jour
			// Date sur 6 caractères - format supposé : JJMMAA - format déduit JJ/MM/SSAA où SS = 20
			// Date sur 8 caractères - format possible : JJ?MM?AA - format déduit JJ/MM/SSAA où SS = 20
			//                                           JJMMSSAA - format déduit JJ/MM/SSAA
			// Date sur 10 caractères - format supposé : JJ?MM?SSAA - format déduit JJ/MM/SSAA
			lb_CtrlDate=false;
			ld_Aujourdhui=new Date();
			ls_Annee=''+ld_Aujourdhui.getFullYear();
			switch (ls_Valeur.length) {
			case 1:
				if (ls_Valeur==parseInt(ls_Valeur,10)) {
					ls_NvDate='0'+ls_Valeur+((ld_Aujourdhui.getMonth()<9)?'0':'')+(ld_Aujourdhui.getMonth()+1)+ld_Aujourdhui.getFullYear();
					lb_CtrlDate=true;
				}
				break;
			case 2:
				if (ls_Valeur==parseInt(ls_Valeur,10)) {
					ls_NvDate=ls_Valeur+((ld_Aujourdhui.getMonth()<9)?'0':'')+(ld_Aujourdhui.getMonth()+1)+ld_Aujourdhui.getFullYear();
					lb_CtrlDate=true;
				}
				break;
			case 5:
				if ((ls_Valeur.substring(2,3)<'0')||(ls_Valeur.substring(2,3)>'9')) {
					ls_NvDate=ls_Valeur.substring(0,2)+ls_Valeur.substring(3,5)+ld_Aujourdhui.getFullYear();
					lb_CtrlDate=true;
				}
				break;
			case 6:
				if (ls_Valeur==parseInt(ls_Valeur,10)) {
					ls_NvDate=ls_Valeur.substring(0,2)+ls_Valeur.substring(2,4)+ls_Annee.substring(0,2)+ls_Valeur.substring(4,6);
					lb_CtrlDate=true;
				}
				break;
			case 8:
				lb_CtrlDate=true;
				if (((ls_Valeur.substring(2,3)<'0')||(ls_Valeur.substring(2,3)>'9'))&&((ls_Valeur.substring(5,6)<'0')||(ls_Valeur.substring(5,6)>'9'))) {
					ls_NvDate=ls_Valeur.substring(0,2)+ls_Valeur.substring(3,5)+ls_Annee.substring(0,2)+ls_Valeur.substring(6,8);
					lb_CtrlDate=true;
				}
				break;
			case 10:
				if (((ls_Valeur.substring(2,3)<'0')||(ls_Valeur.substring(2,3)>'9'))&&((ls_Valeur.substring(5,6)<'0')||(ls_Valeur.substring(5,6)>'9'))) {
					ls_NvDate=ls_Valeur.substring(0,2)+ls_Valeur.substring(3,5)+ls_Valeur.substring(6,10);
					lb_CtrlDate=true;
				}
				break;
			}
			if (lb_CtrlDate) {
				if (!isNaN(Date.parse(ls_NvDate.substring(2,4)+'/'+ls_NvDate.substring(0,2)+'/'+ls_NvDate.substring(4,8)))) {
					ls_Valeur=new Date(Date.parse(ls_NvDate.substring(2,4)+'/'+ls_NvDate.substring(0,2)+'/'+ls_NvDate.substring(4,8)));
					ls_Valeur=((ls_Valeur.getDate()<10)?'0':'')+ls_Valeur.getDate()+ls_Sep+((ls_Valeur.getMonth()<9)?'0':'')+(ls_Valeur.getMonth()+1)+ls_Sep+ls_Valeur.getFullYear();
					ls_ValeurOut=ls_Valeur;
				}
			}
		}
		ls_Valeur=ls_ValeurOut;
		// ## HEUR ## Mise en forme d'une heure / Séparateur
		ls_SepH=fn_LectureParametreUnitaire(ls_Format,'HEUR');
		if (ls_SepH!='') {
			if (ls_Valeur.length!=0) {
				li_CptSep=0;
				for (li_Cpt=0;li_Cpt<ls_Valeur.length;li_Cpt++) {
					if ((ls_Valeur.charAt(li_Cpt)<'0')||(ls_Valeur.charAt(li_Cpt)>'9')) {
						li_SepH=li_Cpt;
						li_CptSep++;
					}
				}
				if (li_CptSep==0) {
					switch (ls_Valeur.length) {
					case 1:
						ls_Valeur='0'+ls_Valeur+ls_SepH+'00';
						break;
					case 2:
						ls_Valeur=ls_Valeur+ls_SepH+'00';
						break;
					case 4: 
						ls_Valeur=ls_Valeur.substring(0,2)+ls_SepH+ls_Valeur.substring(2,4);
					}
				}
				if (li_CptSep==1) {
					switch (ls_Valeur.length) {
					case 3:
						if (li_SepH==1) ls_Valeur='0'+ls_Valeur.substring(0,1)+ls_SepH+'0'+ls_Valeur.substring(2,3);
						break;
					case 4:
						if (li_SepH==1) ls_Valeur='0'+ls_Valeur.substring(0,1)+ls_SepH+ls_Valeur.substring(2,4);
						if (li_SepH==2) ls_Valeur=ls_Valeur.substring(0,2)+ls_SepH+'0'+ls_Valeur.substring(3,4);
						break;
					case 5:
						if (li_SepH==2) ls_Valeur=ls_Valeur.substring(0,2)+ls_SepH+ls_Valeur.substring(3,5);
					}
				}
				ls_ValeurOut=ls_Valeur;
			}
		}
		ls_Valeur=ls_ValeurOut;
		// ## CMAJ ## Passage du texte en majuscule / OUI à positionner
		ls_Cmax=fn_LectureParametreUnitaire(ls_Format,'CMAJ');
		if (ls_Cmax=='OUI') {
			
			ls_Valeur=ls_Valeur.toUpperCase();
			ls_ValeurOut=ls_Valeur;
		}
		ls_Valeur=ls_ValeurOut;
		// ## CMIN ## Passage du texte en minuscule / OUI à positionner
		ls_Cmin=fn_LectureParametreUnitaire(ls_Format,'CMIN');
		if (ls_Cmin=='OUI') {
			ls_Valeur=ls_Valeur.toLowerCase();
			ls_ValeurOut=ls_Valeur;
		}
		ls_Valeur=ls_ValeurOut;
		// ## PMAJ ## Passage de la première lettre du texte en majuscule et du reste en minuscule / OUI à positionner
		ls_Pmaj=fn_LectureParametreUnitaire(ls_Format,"PMAJ");
		if (ls_Pmaj=="OUI") {
			ls_PrmLettre=ls_Valeur.charAt(0);
			ls_Valeur=ls_Valeur.substring(1,ls_Valeur.length);
			ls_Valeur=ls_PrmLettre.toUpperCase()+ls_Valeur.toLowerCase();
			ls_ValeurOut=ls_Valeur;
		}
		ls_Valeur=ls_ValeurOut;
		// ## PMAJ ## Passage de la première lettre du texte en majuscule. Le reste est inchangé / PRE à positionner
		if (ls_Pmaj=="PRE") {
			ls_PrmLettre=ls_Valeur.charAt(0);
			ls_Valeur=ls_Valeur.substring(1,ls_Valeur.length);
			ls_Valeur=ls_PrmLettre.toUpperCase()+ls_Valeur;
			ls_ValeurOut=ls_Valeur;
		}
	}
	ao_Champ.value=ls_ValeurOut;
	return true;
}

function fn_ControleOut(ao_Formulaire) {
	for (var cptElement=0; cptElement<ao_Formulaire.length;cptElement++) {
		lo_Element=ao_Formulaire.elements[cptElement];
		ls_Format=lo_Element.formatOut;
		ls_Valeur=lo_Element.value;
		
		if (ls_Format!='') {
			// ## OBLG ## Le paramètre est-il obligatoire ? / OUI à positionner
			ls_Obligatoire=fn_LectureParametreUnitaire(ls_Format,'OBLG');
			if ((ls_Obligatoire=='OUI')&&(ls_Valeur.length==0)) { alert('L\'information \''+lo_Element.libelle+'\' doit être renseignée...'); sb_FocusObjet(lo_Element); return false; }
			
			// ## LMIN ## Controle de la longueur minimale / Longueur à préciser
			ls_LongueurMin=fn_LectureParametreUnitaire(ls_Format,'LMIN');
			if ((eval(ls_LongueurMin)>0)&&(ls_Valeur.length>0)&&(ls_Valeur.length<eval(ls_LongueurMin))) { alert('La longueur de l\'information \''+lo_Element.libelle+'\' doit être au minimum de '+eval(ls_LongueurMin)+' caractères.'); lo_Element.focus(); return false; }
			
			// ## LMAX ## Controle de la longueur maximale / Longueur à préciser
			ls_LongueurMax=fn_LectureParametreUnitaire(ls_Format,'LMAX');
			if ((eval(ls_LongueurMax)>0)&&(ls_Valeur.length>0)&&(ls_Valeur.length>eval(ls_LongueurMax))) { alert('La longueur de l\'information \''+lo_Element.libelle+'\' doit être au maximum de '+eval(ls_LongueurMax)+' caractères.'); lo_Element.focus(); return false; }
			
			// ## NINT ## Controle de la numéricité sous la forme d'un entier / OUI à positionner
			ls_NumeriqueEntier=fn_LectureParametreUnitaire(ls_Format,'NINT');
			if ((ls_NumeriqueEntier=='OUI')&&(ls_Valeur.length>0)&&(parseInt(ls_Valeur,10)!=ls_Valeur)) { alert('L\'information \''+lo_Element.libelle+'\' doit être de type entier numérique.'); lo_Element.focus(); return false; }
			
			// ## NDEC ## Controle de la numéricité sous la forme d'un décimal / OUI à positionner
			ls_NumeriqueDecimal=fn_LectureParametreUnitaire(ls_Format,'NDEC');
			if ((ls_NumeriqueDecimal=='OUI')&&(ls_Valeur.length>0)&&(parseFloat(ls_Valeur)!=ls_Valeur)) { alert('L\'information \''+lo_Element.libelle+'\' doit être de type décimal numérique.'); lo_Element.focus(); return false; }
			
			// ## DATE ## Controle de validité de la date qui doit avoir été mise sous la forme JJ/MM/SSAA / OUI à positionner
			ls_Date=fn_LectureParametreUnitaire(ls_Format,'DATE');
			if ((ls_Date=='OUI')&&(ls_Valeur.length>0)&&(isNaN(Date.parse(ls_Valeur.substring(3,5)+'/'+ls_Valeur.substring(0,2)+'/'+ls_Valeur.substring(6,10))))) { alert('L\'information \''+lo_Element.libelle+'\' doit être une date valide.'); lo_Element.focus(); return false; }
			
			// ## HEUR ## Controle de validite de l'heure qui doit avoir été mise sous la forma HH:MM / OUI à positionner
			ls_Heur=fn_LectureParametreUnitaire(ls_Format,"HEUR");
			if ((ls_Heur=='OUI')&&(ls_Valeur.length>0)) {
				lb_ErreurHeur=false;
				if (ls_Valeur.length!=5) lb_ErreurHeur=true;
				if (ls_Valeur.charAt(2)!=':') lb_ErreurHeur=true;
				for (li_Cpt=0;li_Cpt<ls_Valeur.length;li_Cpt++) {
					if ((li_Cpt!=2)&&((ls_Valeur.charAt(li_Cpt)<'0')||(ls_Valeur.charAt(li_Cpt)>'9'))) lb_ErreurHeur=true;
				}
				if (parseInt(ls_Valeur.substring(0,2),10)>23) lb_ErreurHeur=true;
				if (parseInt(ls_Valeur.substring(3,5),10)>59) lb_ErreurHeur=true;
				if (lb_ErreurHeur) { alert("L'information '"+lo_Element.libelle+"' doit être une heure valide."); lo_Element.focus(); return false; }
			}
			
			// ## TELF ## Controle de validité du numéro de téléphone qui doit avoir été mis sous la forme +nnnn nnnnnnnnnnnnnn (étranger) ou n nnn nnn nnn (français) / OUI à positionner.
			ls_Telf=fn_LectureParametreUnitaire(ls_Format,"TELF");
			if ((ls_Telf=="OUI")&&(ls_Valeur.length>0)) {
				lb_ErreurTelf=false;
				if (ls_Valeur.charAt(0)=='+') {
					// Numéro étranger
					if (ls_Valeur.charAt(1)==' ') lb_ErreurTelf=true;
					if ((ls_Valeur.charAt(2)!=' ')&&(ls_Valeur.charAt(3)!=' ')&&(ls_Valeur.charAt(4)!=' ')&&(ls_Valeur.charAt(5)!=' ')) lb_ErreurTelf=true;
					for (li_Cpt=1;li_Cpt<ls_Valeur.length;li_Cpt++) {
						if ((ls_Valeur.charAt(li_Cpt)!=' ')&&((ls_Valeur.charAt(li_Cpt)<'0')||(ls_Valeur.charAt(li_Cpt)>'9'))) lb_ErreurTelf=true;
					}
				} else {
					// Numéro français
					if (ls_Valeur.length!=13) lb_ErreurTelf=true;
					for (li_Cpt=0;li_Cpt<ls_Valeur.length;li_Cpt++) {
						if ((li_Cpt==1)||(li_Cpt==5)||(li_Cpt==9)) {
							if (ls_Valeur.charAt(li_Cpt)!=' ') lb_ErreurTelf=true;
						} else {
							if ((ls_Valeur.charAt(li_Cpt)<'0')||(ls_Valeur.charAt(li_Cpt)>'9')) lb_ErreurTelf=true;
						}
					}
				}
				if (lb_ErreurTelf) { alert("L'information '"+lo_Element.libelle+"' doit être un numéro de téléphone valide...\n => Numéro français : 0 123 456 789 \n => Numéro étranger : +0123 01234567890123"); lo_Element.focus(); return false; }
			}
			
			// ## MAIL ## Controle de validite d'une adresse mail / OUI à positionner.
			ls_Mail=fn_LectureParametreUnitaire(ls_Format,"MAIL");
			if ((ls_Mail=="OUI")&&(ls_Valeur.length>0)&&((ls_Valeur.indexOf('@')==-1)||(ls_Valeur.indexOf('.')==-1)||(ls_Valeur.indexOf('@')>ls_Valeur.lastIndexOf('.')))) { alert("L'information '"+lo_Element.libelle+"' doit être une adresse e-mail valide."); lo_Element.focus(); return false; }
			
		}
	}
}
