//<script language=javascript>
/*'---------------------------------------------------------------------------
' Projet           : MokaSofa
' Fichier          : fctValChamps.js
' Version ToolsBox : v2.0.0
' Auteur           : Marcotte Multimédia
' Date             : avril 2001
'
' Description      : la fonction de validation
'
' (c) 2002 Marcotte Multimédia, Inc. Tous droits reservés.
'---------------------------------------------------------------------------

'---------------------------------------------------------------------------
' Modifié par      : +AUTEURMODIF+
' En date du       : +DATEMODIF+
'
' Modification     : +MODIFICATION+
'-------------------------------------------------------------------------*/



function gf_ValiderFormatDate(pd_Date, ps_Format)
{
/*************************************
  Quatre formats de date: 
		- UC :(USA_COURT): MM/JJ/AA
		- UL :(USA_LONG):  MM/JJ/AAAA
		- CC :(CAN_COURT): JJ/MM/AA
		- CL :(CAN_LONG):  JJ/MM/AAAA
	
	Pays: C ou U (Canada ou USA)
	Longueur: C ou L (Court ou Long)
***************************************/
var s_Pays = ps_Format.substring(0,1);
var s_Longueur = ps_Format.substring(1,2);

var b_DateOk  = true
var Temp  = pd_Date.toString();

	if (Temp.length >10 && Temp.length < 8)
	{
		b_DateOk = false;	
	}
	else
	{
		/********************************
			ASSIGNATION DES VALEURS
		*********************************/	
	
		var i_PositionOblique1 = Temp.indexOf('/')
		var i_PositionOblique2 = Temp.lastIndexOf('/')
			
		if (s_Pays == 'C')
		{
			//format de date pour le Canada :JJ/MM/AAAA
			var i_Jour = Temp.substring(0,i_PositionOblique1);
			var i_Mois = Temp.substring(i_PositionOblique1+1,i_PositionOblique2);
			var i_Annee = Temp.substring(i_PositionOblique2+1,Temp.length);
		}
		else
		{
			//format de date pour les États-Unis : MM/JJ/AAAA
			var i_Mois = Temp.substring(0,i_PositionOblique1);
			var i_Jour = Temp.substring(i_PositionOblique1+1,i_PositionOblique2);
			var i_Annee = Temp.substring(i_PositionOblique2+1,Temp.length);
			
		}	
				// vérifie si les variables contiennent des valeurs
				if  ( ( i_PositionOblique1 == '' && i_PositionOblique2 == '' && i_PositionOblique1 == i_PositionOblique2 && i_Jour == '' && i_Mois == '' && i_Annee == '') ||
					// Vérifie si le jour, mois ou année contient des lettres
						(i_Jour / 1 != i_Jour || i_Mois / 1 != i_Mois || i_Annee / 1 != i_Annee) ||
					// Vérifie la limites max du nombre de jour, de mois et d'année
						(i_Jour > 31  || i_Jour < 1 || i_Mois > 12 || i_Mois < 1 || (s_Longueur == 'L' && i_Annee > 2200) || ( s_Longueur == 'L' && i_Annee < 1800) || (s_Longueur == 'C' && i_Annee > 99 ) ) ||
					// Vérifie les mois impairs
					//	(i_Mois % 2 != 0 && i_Jour > 30) ||
					// Vérifie les années bisextiles
						((i_Mois == 2 && i_Annee % 4 == 0 && i_Jour > 29) || (i_Mois == 2 && i_Annee % 4 != 0 && i_Jour > 28)) )
						{
							b_DateOk = false;
						}
						
								
	}
	
	return b_DateOk;
}



/* ??????????????????????????????????????????????????????????????????????
	 function remplacé la function gf_ValiderFormatDate(pd_Date, ps_Format)
??????????????????????????????????????????????????????????????????????????*/
function gf_ValiderDateQc(pd_Date)
{
// format de date acceptable : 12/06/1981

var b_DateOk  = true
var Temp  = pd_Date.toString();

	if (Temp.length >10 && Temp.length < 8)
	{
		b_DateOk = false;	
	}
	else
	{
		var i_PositionOblique1 = Temp.indexOf('/')
		var i_PositionOblique2 = Temp.lastIndexOf('/')
		var i_Jour = Temp.substring(0,i_PositionOblique1);
		var i_Mois = Temp.substring(i_PositionOblique1+1,i_PositionOblique2);
		var i_Annee = Temp.substring(i_PositionOblique2+1,Temp.length);
		
	
			// vérifie si les variables contiennent des valeurs
		if  ( ( i_PositionOblique1 == '' && i_PositionOblique2 == '' && i_PositionOblique1 == i_PositionOblique2 && i_Jour == '' && i_Mois == '' && i_Annee == '') ||
			// Vérifie si le jour, mois ou année contient des lettres
				(i_Jour / 1 != i_Jour || i_Mois / 1 != i_Mois || i_Annee / 1 != i_Annee) ||
			// Vérifie la limites max du nombre de jour, de mois et d'année
				(i_Jour > 31  || i_Jour < 1 || i_Mois > 12 || i_Mois < 1 || i_Annee > 2200 || i_Annee < 1800) ||
			// Vérifie les mois impairs
				(i_Mois % 2 == 0 && i_Jour > 30) ||
			// Vérifie les années bisextiles
				((i_Mois == 2 && i_Annee % 4 == 0 && i_Jour > 29) || (i_Mois == 2 && i_Annee % 4 != 0 && i_Jour > 28)) )
				{
						b_DateOk = false;
				}
			
				
	}
	
	return b_DateOk;
}
		

/*18-******************************************************************************
* Fonction:	isValidCP
* 
* Auteur : JF Lanouette 6 février
* Entree(s):	inputVal -> string code postal
*				
* 
* Description:	Permet de valider le champs code postal Canadien
*
*
* Modifié par      : +Dave Farrell+
* En date du       : +26 novembre 2002+
*
* Modification     : +Pattern match avec des RegExp...+
*********************************************************************************/
function isValidCP(inputVal)
{
	//Patterns des codes postaux possibles
	var cpCan=new RegExp("[A-Z][0-9][A-Z][0-9][A-Z][0-9]","gi");
	var cpUS=new RegExp("[0-9][0-9][0-9][0-9][0-9]","gi");
	
	inputStr = inputVal.toString();
	inputStr = gf_EnleverEspaces(inputStr);
	
	//Code postal canadien
	if (inputStr.match(cpCan)==inputStr && inputStr.length==6) return true;
	//Code postal US
	if (inputStr.match(cpUS)==inputStr && inputStr.length==5) return true;
	
	if(inputVal.length==0) return true;
	
	return false;
}



/*19-******************************************************************************
* Fonction:	isValidTel
* 
* Auteur : JF Lanouette 6 février 2001
* Entree(s):	inputVal -> Numero de telephone
*				
* 
* Description:	Permet de verifier si la string est formater comme un numero de telephone valide
*
*
* Modifié par      : +Dave Farrell+
* En date du       : +26 novembre 2002+
*
* Modification     : +Pattern match avec des RegExp...+
*********************************************************************************/
function isValidTel(inputVal)
{
	//Patterns des telephones possibles
	var phoneUSCanEU=new RegExp("[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]","g");
	var phoneUSCanCourt=new RegExp("[0-9][0-9][0-9][0-9][0-9][0-9][0-9]","g");
	
	var s_CaracteresInvalides=new String("-().");
	var s_CleanString=new String("");
		
	inputStr = inputVal.toString()
	inputStr = gf_EnleverEspaces(inputStr);
	
	//On purge la string pour enlever les caracteres de formattage...
	for (var i_cpt=0;i_cpt<inputStr.length;i_cpt++)
		if (s_CaracteresInvalides.indexOf(inputStr.charAt(i_cpt))==-1)
			s_CleanString+=inputStr.charAt(i_cpt);
	
	//Numero US, Can ou EU
	if (s_CleanString.match(phoneUSCanEU)==s_CleanString && s_CleanString.length==10) return true;
	//Numero court
	if (s_CleanString.match(phoneUSCanCourt)==s_CleanString && s_CleanString.length==7) return true;
	
	if(inputVal.length==0) return true;
	
	return false;
}

/*20-******************************************************************************
* Fonction:	isValidWWW
* 
* Auteur : Dave Farrell 7 janvier 2003
* Entree(s):	inputVal -> string adresse site web
*				
* 
* Description:	Permet de valider les adresses de site web
*
*********************************************************************************/
function isValidWWW(inputVal)
{
	//Debut des adresses possibles
	var http=new String("HTTP://");
	var https=new String("HTTPS://");
	var ftp=new String("FTP://");
	
	inputStr = inputVal.toString();
	inputStr = inputStr.toUpperCase();
	
	//Verification
	if(inputStr.indexOf(http)==0) return true;
	if(inputStr.indexOf(https)==0) return true;
	if(inputStr.indexOf(ftp)==0) return true;
	
	if(inputVal.length==0) return true;
	
	return false;
}

/*21-******************************************************************************
* Fonction:	gf_ValiderCourriel()
*
* Auteur: Guillaume Proteau, 10 avril 2001
* Entree(s): (frm_Nom) : Nom du form contenant le champ à valider
*		   : (txt_Nom): Nom du champ à valider
* 
* Description:	Fait la validation d'un champ courriel
*
*
* Modifié par      : +Dave Farrell+
* En date du       : +26 novembre 2002+
*
* Modification     : +Ajout des caracteres invalides...+
*********************************************************************************/
function gf_ValiderCourriel(frm_Nom,txt_Nom)
{
var Temp  = document.forms[frm_Nom].elements[txt_Nom].value.toUpperCase()
var i_PositionArobas   = Temp.indexOf('@')
var i_PositionPoint  = Temp.lastIndexOf('.')
var s_CaracteresInvalides=new String(" \',ÀÁÂÃÄÅÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÜÝ"); //Rajoutez les caracteres a ignorer ici...
var i_CaracteresInvalides = 0
var i_LongueurCourriel =  Temp.length - 1   // Tableau de 0 à longeur -1 

for (var i_cpt=0;i_cpt<s_CaracteresInvalides.length;i_cpt++)
	if (Temp.indexOf(s_CaracteresInvalides.charAt(i_cpt))!=-1) i_CaracteresInvalides++;
	
if ((i_PositionArobas < 1) ||                     // '@' ne peut être au premier caractère
    (i_PositionPoint <= i_PositionArobas+1) ||    // Doit avoir un caractère entre le point et l'arobas
    (i_PositionPoint == i_LongueurCourriel ) ||    // Doit avoir un caractère après le point 
    (i_CaracteresInvalides > 0))				   // Si il contient des caractères invalides
   {  
      alert(fctMessages('STR_COURRIEL',"x",i_LongueurCourriel));
      document.forms[frm_Nom].elements[txt_Nom].focus()
      return false;
   }
	return true;
}
function gf_ValiderCourriel2(frm_Nom,txt_Nom)
//function checkfield(loginform)
{

	var Temp  = document.forms[frm_Nom].elements[txt_Nom]
	var i_LongueurCourriel =  Temp.value.length - 1
	
	ok=true
	if(Temp.value=="")
	{
		//alert("Please enter e-mail address.")
		alert(fctMessages('STR_COURRIEL',"x",i_LongueurCourriel));
		Temp.focus()
		ok=false
	}
	else
	{
		mail=Temp.value
		at_pos=mail.indexOf("@")
		dot_pos=mail.indexOf(".")
		if(at_pos<1 || dot_pos<1)
		{
			//alert("Please check position of '@' and '.' in email address.")
			alert(fctMessages('STR_COURRIEL',"x",i_LongueurCourriel));
			Temp.focus()
			ok=false
		}
		else
		{
			mail=Temp.value
			condition="yes"
			var at_count=0
			var dot_count=0
			var temp=0
			for(var i=0;i<mail.length;i++)
			{
				
				if(mail.charAt(i)!= "-" && mail.charAt(i)!= "_" )
				{
					if((mail.charCodeAt(i)>0 && mail.charCodeAt(i)<48)||(mail.charCodeAt(i)>57 && mail.charCodeAt(i)<65)||(mail.charCodeAt(i)>91 && mail.charCodeAt(i)<97)||mail.charCodeAt(i)>122)
					{
						if(mail.charAt(i)=="@"||mail.charAt(i)==".")
						{
								if(mail.charAt(i)=="@"){at_count++}else{dot_count++} // counts the no. of times @ and . appears in email
								if(dot_count>=1)
								{
									dot_pos=i
									if((dot_pos>at_pos) && temp==0)
									{
										pos=dot_pos-at_pos
										temp++
									}								
								}
						}
						else
						{
							condition="no"
							i=mail.length
						}
					}
				}
			}
			if(condition=="no")
			{
				//alert("Your email contains a blank space or special character.")
				alert(fctMessages('STR_COURRIEL',"x",i_LongueurCourriel));
				Temp.focus()
				ok=false
			}
			else
			{
				if(at_count>1)
				{
					//alert("E-mail contains extra @ ")
					alert(fctMessages('STR_COURRIEL',"x",i_LongueurCourriel));
					Temp.focus()
					ok=false
				}
				else
				{
					if(pos<2)
					{
						//alert("Missing domain name between '@' and '.'")
						alert(fctMessages('STR_COURRIEL',"x",i_LongueurCourriel));
						Temp.focus()
						ok=false
						i=mail.length
					}
					else
					{	
						count=dot_pos+1
						domain=""
						for(count;count<mail.length;count++)
						{
							domain=domain+mail.charAt(count)		
						}
						domain=domain.toLowerCase()
						dom=new Array("au","com","net","org","edu","in","mil","gov","arpa","biz","aero","name","coop","info","pro","museum")
						error="yes"
						for(var k=0;k<dom.length;k++)
						{
							if(domain==dom[k])
							{
								k=dom.length
								error="no"
							}
						}
						if((error=="yes" && (domain.length>2)) || (domain.length<2))
						{
							//alert("Domain name must end with well known domains \n or 2-lettered country name. eg com,edu,in etc.")
							alert(fctMessages('STR_COURRIEL',"x",i_LongueurCourriel));
							Temp.focus()
							ok=false
						}								
					}
				}
			}
		}
	}
	return ok
}


/*22-******************************************************************************
* Fonction:	gf_ValiderLongueurTextArea(tx_Champ, hf_Decompte, i_MaxLimite) 
*
* Auteur: Guillaume Proteau, 10 avril 2001
* Entree(s): (tx_Champ) : Nom du champ à valider
*		   : (hf_Decompte): Nom du champ "hidden" contenant le décompte des caractères
*		   : (i_MaxLimite): limite de caractères "maxlenght"
* 
* Description:	Fait la validation de la longueur maximale d'un textarea
*********************************************************************************/
function gf_ValiderLongueurTextArea(tx_Champ, hf_Decompte, i_MaxLimite) 
{
	if (tx_Champ.value.length > i_MaxLimite)               // Si trop long alors on supprime le contenu
		tx_Champ.value = tx_Champ.value.substring(0, i_MaxLimite);
		
		// sinon, on met à jour les caractères
	else 
		hf_Decompte.value = i_MaxLimite - tx_Champ.value.length;
}






function gf_ValidationForm(ps_Form) 
{
			
	if (document.forms.length > 0) 
	{
		var s_Test;
		var temp;	
		var b_ValidationOK = true;
		var s_TypeChamp;      // 1 = Type de champ
		var i_Obligatoire;    // 2 = Obligatoire (0 ou 1)
		var s_TypeDonnees;    // 3 = Type de données
		var i_LongueurChamp;   // 4 = Longueur maximale
		var s_TypeContenu;    // 5 = Type de contenu
		var s_NomChamp;       // 6 = Nom du champ
		var i_checked;		//Validation des radio et checkboxes
		var s_tempName;		//Validation des radio et checkboxes
		var i_topElement;	//Validation des radio et checkboxes
		
		var champ = document.forms[ps_Form];			  		
												
		for (i = 0; i < champ.length; i++) 
		{
			/**********************************************
			* Assignation des valeurs selon le nom du champ
			************************************************/
			
			// Type de champ
			temp = champ.elements[i].name;
			
			
			//si le nom est moins de 15 lettre ne pas valider	
			if(temp.length > 15)
			{	
			
				bundersore =  temp.substring(12,13);
			
				//si le 13e caractere est un underscore
				if(bundersore == "_")
				{
			
					s_TypeChamp = temp.substring(0,2);
							
					// Obligatoire ou non
					i_Obligatoire = temp.substring(2,3);
			
					// Type de données
					s_TypeDonnees = temp.substring(3, 6);
			
					// Longueur maximale
					i_LongueurChamp = temp.substring(6,10);
			
					// Type de contenu	
					s_TypeContenu = temp.substring(10, 12);
			
					// Nom du champ
					s_NomChamp = temp.substring(13, temp.length);
			
					/********************************************************************************************************	
					* Vérifie si le champ est à valider, les autres objets ex: bouton ne doivent pas être vérifiés			
					*********************************************************************************************************/				
					//On ne valide pas la longueur du value d'un radio ou d'un checkbox
					if ((i_Obligatoire == 1 || i_LongueurChamp != 0) && s_TypeChamp.toUpperCase() != 'CK' && s_TypeChamp.toUpperCase() != 'RB')  
					{			
						//A cause du type FILE, on doit utiliser une variable auxiliaire...
						/*if (i_Obligatoire==1)
							s_Test=gf_Trim(champ.elements[i].value);*/
						
						// Vérifie si le champ n'est pas vide
						if (champ.elements[i].value.length  == 0 && i_Obligatoire == 1 && s_TypeChamp != 'lm')
							{
								alert(fctMessages("STR_CHAMP1NOTNULL",s_NomChamp,i_LongueurChamp));
								champ.elements[i].focus();
								return false;
							}
							
						// Vérifie si la liste multiple a au moins un item de sélectionné	
						else 
						{
							if	(champ.elements[i].value.length == 0 && i_Obligatoire == 1 && s_TypeChamp == 'lm')
							{
								alert(fctMessages("STR_CHAMP2NOTNULL",s_NomChamp,i_LongueurChamp));
								champ.elements[i].focus();
								return false;
							}
							
							
							// Vérifie si le contenu du champ ne dépasse pas la longueur maximale
							else 
							{
							
								if (s_TypeContenu.toUpperCase() != 'PS')
								{
									if (champ.elements[i].value.length > i_LongueurChamp && i_LongueurChamp != 0 )
										{
											alert(fctMessages("STR_CHAMP3MAX",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
								}
								else
								{
									if (champ.elements[i].value.length < i_LongueurChamp && i_LongueurChamp != 0 && i_Obligatoire == 1)
										{
											alert(fctMessages("STR_CHAMP4MIN",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}	
								}
							}
						}
					}	
				
					// Fait la validation seulement sur les champs contenant quelque chose
					//Valide aussi les radio buttons et les checkboxes...
					if ((champ.elements[i].value.length > 0 && s_TypeChamp.toUpperCase()!='RB' && s_TypeChamp.toUpperCase()!='CK') || ((s_TypeChamp.toUpperCase()=='RB' || s_TypeChamp.toUpperCase()=='CK') && parseInt(i_Obligatoire) == 1))
					{												
						//alert(champ.elements[i].value.length)
						varTemp=champ.elements[i].name.substring(13, champ.elements[i].name.length).toLowerCase();
										     
						/************************************************************
						*	VALIDATION SUR LE TYPE DE CHAMP (TX, TX, RB, LS, LM)
						*************************************************************/			
						switch (s_TypeChamp.toUpperCase())
						{
							/*************************************
							* validation d'un set de radio buttons
							**************************************/										   
							case 'RB':
								i_checked=-1
								s_tempName=champ.elements[i].name
								i_topElement=i
																
								//On doit boucler dans les elements tant qu'on trouve les radio du meme nom!
								for(i=i;i<champ.length;i++)
									if (s_tempName!=champ.elements[i].name)
										break;
									else
										if (champ.elements[i].checked) i_checked=i;	
								
								//Une fois termine, on retourne au dernier radio button
								--i;
								
								if(i_checked==-1){
									alert(fctMessages("STR_CHAMP3NOTNULL",s_NomChamp,i_LongueurChamp));
									champ.elements[i_topElement].focus(); 
									return false;
								}								
								break;								
							
							/**********************************
							* validation d'un set de checkboxes
							***********************************/
							case 'CK':
								i_checked=0
								s_tempName=champ.elements[i].name;
								i_topElement=i
								
								//On doit boucler dans les elements tant qu'on trouve les checkboxes du meme nom!
								for(i=i;i<champ.length;i++)
									if (s_tempName!=champ.elements[i].name) 
										break;
									else
										if (champ.elements[i].checked) i_checked++; //On compte le nombre de checkboxes coches
								
								//Une fois termine, on retourne au dernier checkbox
								--i;
								
								if(i_checked<parseInt(i_LongueurChamp)){
									alert(fctMessages("STR_CHAMP4NOTNULL",s_NomChamp,parseInt(i_LongueurChamp)));
									champ.elements[i_topElement].focus();
									return false;
								}								
								break;
							
							/*******************************
							* validation champ texte
							********************************/
							case 'TX':	
								switch (s_TypeContenu.toUpperCase())
								{
										
								
									/**********************
									* COURRIEL
									***********************/
									case 'CO':
										if (!gf_ValiderCourriel2(ps_Form,champ.elements[i].name))
										{	
											return false;
											
										}
										break;
								
									/*********************
									* Site Web
									*********************/
									case 'WW':
										if (!isValidWWW(champ.elements[i].value))
										{	
											alert(fctMessages("STR_WWW",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
										break;								
								
									/**********************
									* CODE POSTAL
									***********************/
									case 'CP':
									//document.write(champ.elements[i].value);
									//document.write("test2");
										
															
										if (!isValidCP(champ.elements[i].value))
										{	
											alert(fctMessages("STR_CHAMP5FORMAT",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
										break;
										
									/**********************
									* Téléphone
									***********************/
									case 'TL':
														    									
										if (!isValidTel(champ.elements[i].value))
										{	
											//varTemp=champ.elements[i].name.substring(13, champ.elements[i].name.length).toLowerCase();
											alert(fctMessages("STR_CHAMP6FORMAT",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
										break;
											
										
									/*********************************
									* Date Canada Court JJ/MM/AA
									**********************************/
									case 'CC':
																							
										if (!gf_ValiderFormatDate(champ.elements[i].value, 'CC'))
										{	
											alert(fctMessages("STR_CHAMPDATE1FORMAT",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
										break;
										
									/*********************************
									* Date Canada LONG JJ/MM/AAAA
									**********************************/
									case 'CL':
																							
										if (!gf_ValiderFormatDate(champ.elements[i].value, 'CL'))
										{	
											alert(fctMessages("STR_CHAMPDATE2FORMAT",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
										break;
										
									/*********************************
									* Date USA Court MM/JJ/AA
									**********************************/
									case 'UC':
																							
										if (!gf_ValiderFormatDate(champ.elements[i].value, 'UC'))
										{	
											alert(fctMessages("STR_CHAMPDATE3FORMAT",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
										break;
										
									/*********************************
									* Date USA LONG MM/JJ/AAAA
									**********************************/
									case 'UL':
																							
										if (!gf_ValiderFormatDate(champ.elements[i].value, 'UL'))
										{	
											alert(fctMessages("STR_CHAMPDATE4FORMAT",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
										break;
										
									/*********************************
									* Champs de mot de passe devant contenir des lettre et des chiffre
									**********************************/
									case 'PS':
								
										var c_Char, num, cc;
										cc = 0
										num = 0 
										// Vérifie si tous les caractères du champ sont des lettres
										for (var j=0; j < champ.elements[i].value.length; j++)
										{
											c_Char = champ.elements[i].value.charAt(j);
														
											if ( (c_Char >= "0" && c_Char <= "9" ) )											   
											{ 
											 num =1 
											}
											if ( (c_Char >= "A" && c_Char <= "Z" ) || (c_Char >= "a" && c_Char <= "z" ) )
											{
											 cc =1 
											}											   
										}
										if (num != 1 || cc!= 1 )
										{
											alert(fctMessages("STR_CHAMP7",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
										break;
																						
								break;
						
																			   
							/**************************
							 * Validation d'un textarea
							 **************************/
							case 'TA':
									break;
								   
							// Validation d'une liste simple
							case 'LS':
									break;
								
							// Validation d'une liste multiple
							case 'LM': 
									break;
							}
				
				
			
							/*********************************************************
							* VALIDATION SUR LE TYPE DE DONNÉES ( NUM, TXT, ALN, ALP )
							**********************************************************/
				
							switch(s_TypeDonnees.toUpperCase())	
							{
							case 'MON':
									var c_Char;
									// Vérifie si tous les caractères du champ sont des lettres
									for (var j=0; j < champ.elements[i].value.length; j++)
									{
										c_Char = champ.elements[i].value.charAt(j);
													
										if ( (c_Char < "0" || c_Char > "9" ) && c_Char != "."  && c_Char != "," )
											   
											{
											alert(fctMessages("STR_CHAMP8",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
											}
											   
									}
									break;
									
							case 'NUM':
										// Vérifie si le champ contient des lettres ou autres caractères
										if (champ.elements[i].value / 1 != champ.elements[i].value)
										{
											alert(fctMessages("STR_CHAMP9",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
										}
										
									break;
									
							case 'ALN':
									break;
									
				
							case 'ALP':
									var c_Char;
									// Vérifie si tous les caractères du champ sont des lettres
									for (var j=0; j < champ.elements[i].value.length; j++)
									{
										c_Char = champ.elements[i].value.charCodeAt(j);
										//document.write("ici:====>");
										//document.write(c_Char);
																						
										// reste à ajouter les è à				
										if (   (c_Char < 65 )|| 
											   ((c_Char > 90) && (c_Char < 97)) ||
											   (c_Char > 122))
											{
											alert(fctMessages("STR_CHAMP10",s_NomChamp,i_LongueurChamp));
											champ.elements[i].focus();
											return false;
											}
											   
									}
									break;
									
									
							case 'TXT':
									break;
											
							}
				
								
						} // end if	-- if (champ.elements[i].value.length > 0)		
							
					} // end if -- if (i_Obligatoire == 1 || i_LongueurChamp != 0) 
					
				} // end if	si le 13e carac. = underscore
				
			} // end if	si >15 lettre
			
		} // for
		   
	}
	
	return true;
	
	
}	



/*7-******************************************************************************
* Fonction:	gf_ConfirmSupp(ps_ASupp)
* 
* Entree(s):	ps_ASupp {string} - nom de l'objet a supprimer
* Sortie(s):	True/False - flag Succes/Echec
* 
* Description:	confirmation de suppression 
*********************************************************************************/
function gf_ConfirmSupp(msg) {
	if (confirm(msg) == 0) 
 		return false;
	else 
		return true;
}

//cette fonction fait un submit de la fonction passée en parametre apres l'avoir validé
//ex: <a href="javascript:gf_submitForm(1)"><%=gf_GetImage("ENREGISTRER")%></a>
function gf_submitForm(id)
{
	if (gf_ValidationForm(id))
		document.forms[id].submit();
		
}

		
/*21-******************************************************************************
* Fonction:	gf_EnleverEspaces
* 
* Auteur : Dave Farrell, 26 novembre 2002
* Entree(s):	inputVal -> string quelconque
* Sortie:	string sans espaces				
* 
* Description:	Permet d'enlever tous les espaces d'une string
*********************************************************************************/
function gf_EnleverEspaces(inputVal){
	var s_RetVal = '';
	
	for(var i_cpt=0;i_cpt<inputVal.length;i_cpt++)
		s_RetVal += (inputVal.charAt(i_cpt)!=' ') ? inputVal.charAt(i_cpt) : '';
	
	return s_RetVal;	
}

/*1-******************************************************************************
* Fonction:	gf_Trim(ps_Chaine)
* 
* Entree(s):	ps_Chaine {String} - Chaine à traiter
* Sortie(s):	{String} - Chaîne avec les espaces enlevés
* 
* Description:	Enlève les espaces en blanc dans une chaîne de caractères
*
*
* Modifié par      : +Dave Farrell+
* En date du       : +26 novembre 2002+
*
* Modification     : +Gestion du cas de la chaine avec seulement un espace+
*********************************************************************************/
function gf_Trim(ps_Chaine) {
	var s_RetVal = "";
	var i_Debut = 0;
	var i_Fin = ps_Chaine.length;
	
	while ((i_Debut < ps_Chaine.length) && (ps_Chaine.charAt(i_Debut) == ' ')) 
		++i_Debut;
	
	if (i_Debut==ps_Chaine.length) return "";
	
	while ((i_Fin > 0) && (ps_Chaine.charAt(i_Fin - 1) == ' '))
		--i_Fin;
	
	s_RetVal = ps_Chaine.substring(i_Debut, i_Fin);
	
	return s_RetVal;
}

// End -->


/*21-******************************************************************************
* Fonction:	lib_bwcheck
* 
* Auteur : Nabil Alaoui 
* Entree(s):
*				
* 
* Description:	retourne un objet 'bw' pour faciliter le test des browsers (ex. if bw.ie5 ...)
*********************************************************************************/		

		//Browsercheck ***************
		function lib_bwcheck(){ 
		  this.ver=navigator.appVersion
		  this.agent=navigator.userAgent
		  this.dom=document.getElementById?1:0
		  this.opera5=this.agent.indexOf("Opera 5")>-1
		  this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
		  this.ie55=(this.ver.indexOf("MSIE 5.5")>-1 && this.dom && !this.opera5)?1:0; 
		  this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
		  this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
		  this.ie=this.ie4||this.ie5||this.ie6
		  this.mac=this.agent.indexOf("Mac")>-1
		  this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; 
		  this.ns4=(document.layers && !this.dom)?1:0;
		  this.bw=(this.ie6||this.ie5||this.ie4||this.ns4||this.ns6||this.opera5)
		  return this
		}
		bw=new lib_bwcheck() //Browsercheck object

/*22-******************************************************************************
* Fonction:	calculPremierePosition()
* 
* Auteur : Nabil Alaoui 
* Entree(s):
*				
* 
* Description:	retourne la position du premier element du menu
*********************************************************************************/		
		
		//Position du menu
		function calculPremierePosition(tailleFixe){

			//récupère la largeur de la fenetre
			if (bw.ns4 || bw.ns6)
				var allWidth = window.innerWidth;
			else
				var allWidth = document.body.clientWidth;

			//calcul la position du premier élément
			var firstElPos = (( allWidth - tailleFixe) / 2);
			
			//Ajustement de la position pour netscape 4 / PC
			if (bw.ns4 && !bw.mac)
					firstElPos -=8
			
			if (firstElPos < 0){
				firstElPos = 0;
			}
			
			return firstElPos;
		}

// End -->





////////////////////////////////////////

function gf_ValidationFormWithErrorDisplayInPage(ps_Form, errorContenerId) 
{
			
	if (document.forms.length > 0) 
	{
		var s_Test;
		var temp;	
		var b_ValidationOK = true;
		var s_TypeChamp;      // 1 = Type de champ
		var i_Obligatoire;    // 2 = Obligatoire (0 ou 1)
		var s_TypeDonnees;    // 3 = Type de données
		var i_LongueurChamp;   // 4 = Longueur maximale
		var s_TypeContenu;    // 5 = Type de contenu
		var s_NomChamp;       // 6 = Nom du champ
		var i_checked;		//Validation des radio et checkboxes
		var s_tempName;		//Validation des radio et checkboxes
		var i_topElement;	//Validation des radio et checkboxes
		
		var champ = document.forms[ps_Form];			  	

		var errorContainer = document.getElementById(errorContenerId);
		var bFormIsValid = true;
												
		for (i = 0; i < champ.length; i++) 
		{
			/**********************************************
			* Assignation des valeurs selon le nom du champ
			************************************************/
			
			// Type de champ
			temp = champ.elements[i].name;
			
			
			//si le nom est moins de 15 lettre ne pas valider	
			if(temp.length > 15)
			{	
			
				bundersore =  temp.substring(12,13);
			
				//si le 13e caractere est un underscore
				if(bundersore == "_")
				{
			
					s_TypeChamp = temp.substring(0,2);
							
					// Obligatoire ou non
					i_Obligatoire = temp.substring(2,3);
			
					// Type de données
					s_TypeDonnees = temp.substring(3, 6);
			
					// Longueur maximale
					i_LongueurChamp = temp.substring(6,10);
			
					// Type de contenu	
					s_TypeContenu = temp.substring(10, 12);
			
					// Nom du champ
					s_NomChamp = temp.substring(13, temp.length);
			
					/********************************************************************************************************	
					* Vérifie si le champ est à valider, les autres objets ex: bouton ne doivent pas être vérifiés			
					*********************************************************************************************************/				
					//On ne valide pas la longueur du value d'un radio ou d'un checkbox
					if ((i_Obligatoire == 1 || i_LongueurChamp != 0) && s_TypeChamp.toUpperCase() != 'CK' && s_TypeChamp.toUpperCase() != 'RB')  
					{			
						//A cause du type FILE, on doit utiliser une variable auxiliaire...
						/*if (i_Obligatoire==1)
							s_Test=gf_Trim(champ.elements[i].value);*/
						
						// Vérifie si le champ n'est pas vide
						if (champ.elements[i].value.length  == 0 && i_Obligatoire == 1 && s_TypeChamp != 'lm')
						{								
								errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP1NOTNULL",s_NomChamp,i_LongueurChamp) + "</li>"
								errorContainer.style.display = "block";								
								champ.elements[i].focus();
								bFormIsValid = false;
						}
							
						// Vérifie si la liste multiple a au moins un item de sélectionné	
						else 
						{
							if	(champ.elements[i].value.length == 0 && i_Obligatoire == 1 && s_TypeChamp == 'lm')
							{								
								errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP2NOTNULL",s_NomChamp,i_LongueurChamp) + "</li>"
								errorContainer.style.display = "block";
								champ.elements[i].focus();
								bFormIsValid = false;
							}
							
							
							// Vérifie si le contenu du champ ne dépasse pas la longueur maximale
							else 
							{
							
								if (s_TypeContenu.toUpperCase() != 'PS')
								{
									if (champ.elements[i].value.length > i_LongueurChamp && i_LongueurChamp != 0 )
										{											
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP3MAX",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
								}
								else
								{
									if (champ.elements[i].value.length < i_LongueurChamp && i_LongueurChamp != 0 && i_Obligatoire == 1)
										{											
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP4MIN",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}	
								}
							}
						}
					}	
				
					// Fait la validation seulement sur les champs contenant quelque chose
					//Valide aussi les radio buttons et les checkboxes...
					if ((champ.elements[i].value.length > 0 && s_TypeChamp.toUpperCase()!='RB' && s_TypeChamp.toUpperCase()!='CK') || ((s_TypeChamp.toUpperCase()=='RB' || s_TypeChamp.toUpperCase()=='CK') && parseInt(i_Obligatoire) == 1))
					{												
						//alert(champ.elements[i].value.length)
						varTemp=champ.elements[i].name.substring(13, champ.elements[i].name.length).toLowerCase();
										     
						/************************************************************
						*	VALIDATION SUR LE TYPE DE CHAMP (TX, TX, RB, LS, LM)
						*************************************************************/			
						switch (s_TypeChamp.toUpperCase())
						{
							/*************************************
							* validation d'un set de radio buttons
							**************************************/										   
							case 'RB':
								i_checked=-1
								s_tempName=champ.elements[i].name
								i_topElement=i
																
								//On doit boucler dans les elements tant qu'on trouve les radio du meme nom!
								for(i=i;i<champ.length;i++)
									if (s_tempName!=champ.elements[i].name)
										break;
									else
										if (champ.elements[i].checked) i_checked=i;	
								
								//Une fois termine, on retourne au dernier radio button
								--i;
								
								if(i_checked==-1){
									
									errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP3NOTNULL",s_NomChamp,i_LongueurChamp) + "</li>"
									errorContainer.style.display = "block";
									champ.elements[i_topElement].focus(); 
									bFormIsValid = false;
								}								
								break;								
							
							/**********************************
							* validation d'un set de checkboxes
							***********************************/
							case 'CK':
								i_checked=0
								s_tempName=champ.elements[i].name;
								i_topElement=i
								
								//On doit boucler dans les elements tant qu'on trouve les checkboxes du meme nom!
								for(i=i;i<champ.length;i++)
									if (s_tempName!=champ.elements[i].name) 
										break;
									else
										if (champ.elements[i].checked) i_checked++; //On compte le nombre de checkboxes coches
								
								//Une fois termine, on retourne au dernier checkbox
								--i;
								
								if(i_checked<parseInt(i_LongueurChamp)){
									
									errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP4NOTNULL",s_NomChamp,parseInt(i_LongueurChamp)) + "</li>"
									errorContainer.style.display = "block";
									champ.elements[i_topElement].focus();
									bFormIsValid = false;
								}								
								break;
							
							/*******************************
							* validation champ texte
							********************************/
							case 'TX':	
								switch (s_TypeContenu.toUpperCase())
								{
										
								
									/**********************
									* COURRIEL
									***********************/
									case 'CO':
										if (!gf_ValiderCourriel2(ps_Form,champ.elements[i].name))
										{	
											bFormIsValid = false;											
										}
										break;
								
									/*********************
									* Site Web
									*********************/
									case 'WW':
										if (!isValidWWW(champ.elements[i].value))
										{												
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_WWW",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
										break;								
								
									/**********************
									* CODE POSTAL
									***********************/
									case 'CP':
									//document.write(champ.elements[i].value);
									//document.write("test2");
										
															
										if (!isValidCP(champ.elements[i].value))
										{												
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP5FORMAT",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
										break;
										
									/**********************
									* Téléphone
									***********************/
									case 'TL':
														    									
										if (!isValidTel(champ.elements[i].value))
										{												
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP6FORMAT",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
										break;
											
										
									/*********************************
									* Date Canada Court JJ/MM/AA
									**********************************/
									case 'CC':
																							
										if (!gf_ValiderFormatDate(champ.elements[i].value, 'CC'))
										{												
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMPDATE1FORMAT",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
										break;
										
									/*********************************
									* Date Canada LONG JJ/MM/AAAA
									**********************************/
									case 'CL':
																							
										if (!gf_ValiderFormatDate(champ.elements[i].value, 'CL'))
										{												
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMPDATE2FORMAT",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
										break;
										
									/*********************************
									* Date USA Court MM/JJ/AA
									**********************************/
									case 'UC':
																							
										if (!gf_ValiderFormatDate(champ.elements[i].value, 'UC'))
										{												
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMPDATE3FORMAT",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
										break;
										
									/*********************************
									* Date USA LONG MM/JJ/AAAA
									**********************************/
									case 'UL':
																							
										if (!gf_ValiderFormatDate(champ.elements[i].value, 'UL'))
										{											
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMPDATE4FORMAT",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
										break;
										
									/*********************************
									* Champs de mot de passe devant contenir des lettre et des chiffre
									**********************************/
									case 'PS':
								
										var c_Char, num, cc;
										cc = 0
										num = 0 
										// Vérifie si tous les caractères du champ sont des lettres
										for (var j=0; j < champ.elements[i].value.length; j++)
										{
											c_Char = champ.elements[i].value.charAt(j);
														
											if ( (c_Char >= "0" && c_Char <= "9" ) )											   
											{ 
											 num =1 
											}
											if ( (c_Char >= "A" && c_Char <= "Z" ) || (c_Char >= "a" && c_Char <= "z" ) )
											{
											 cc =1 
											}											   
										}
										if (num != 1 || cc!= 1 )
										{											
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP7",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
										break;
																						
								break;
						
																			   
							/**************************
							 * Validation d'un textarea
							 **************************/
							case 'TA':
									break;
								   
							// Validation d'une liste simple
							case 'LS':
									break;
								
							// Validation d'une liste multiple
							case 'LM': 
									break;
							}
				
				
			
							/*********************************************************
							* VALIDATION SUR LE TYPE DE DONNÉES ( NUM, TXT, ALN, ALP )
							**********************************************************/
				
							switch(s_TypeDonnees.toUpperCase())	
							{
							case 'MON':
									var c_Char;
									// Vérifie si tous les caractères du champ sont des lettres
									for (var j=0; j < champ.elements[i].value.length; j++)
									{
										c_Char = champ.elements[i].value.charAt(j);
													
										if ( (c_Char < "0" || c_Char > "9" ) && c_Char != "."  && c_Char != "," )
											   
										{
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP8",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";											
											champ.elements[i].focus();
											bFormIsValid = false;
										}
											   
									}
									break;
									
							case 'NUM':
										// Vérifie si le champ contient des lettres ou autres caractères
										if (champ.elements[i].value / 1 != champ.elements[i].value)
										{											
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP9",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";	
											champ.elements[i].focus();
											bFormIsValid = false;
										}
										
									break;
									
							case 'ALN':
									break;
									
				
							case 'ALP':
									var c_Char;
									// Vérifie si tous les caractères du champ sont des lettres
									for (var j=0; j < champ.elements[i].value.length; j++)
									{
										c_Char = champ.elements[i].value.charCodeAt(j);
										//document.write("ici:====>");
										//document.write(c_Char);
																						
										// reste à ajouter les è à				
										if (   (c_Char < 65 )|| 
											   ((c_Char > 90) && (c_Char < 97)) ||
											   (c_Char > 122))
										{										
											errorContainer.innerHTML = errorContainer.innerHTML + "<li>" + fctMessages("STR_CHAMP10",s_NomChamp,i_LongueurChamp) + "</li>"
											errorContainer.style.display = "block";
											champ.elements[i].focus();
											bFormIsValid = false;
										}
											   
									}
									break;
									
									
							case 'TXT':
									break;
											
							}
				
								
						} // end if	-- if (champ.elements[i].value.length > 0)		
							
					} // end if -- if (i_Obligatoire == 1 || i_LongueurChamp != 0) 
					
				} // end if	si le 13e carac. = underscore
				
			} // end if	si >15 lettre
			
		} // for
		   
	}
	
	return bFormIsValid;	
}	

function onlyNumberAndSomeChar(someChars)
{
	
}

function onlyNumbersOnKeyPress(e, acceptedChars)
{
	var keynum;
	var keychar;
	var numcheck;	
	
	if (window.event) // IE
	{
		keynum = e.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which;
	}
	
	//alert(String.fromCharCode(keynum));
	
	// Permettre le backspace.
	if (parseInt(keynum, 10) != 8)
	{
		keychar = String.fromCharCode(keynum);
		
		// Vérification des caractères acceptés.
		for (var cpt = 0; cpt < acceptedChars.length; cpt++)
		{
			if (keychar == acceptedChars[cpt])
			{
				return true;
			}
		}		
		
		numcheck = /\d/;
		return numcheck.test(keychar);
	}
	else
	{
		return true;
	}	
}

function noNumbersOnKeyPress(e)
{
	var keynum;
	var keychar;
	var numcheck;

	if(window.event) // IE
	{
		keynum = e.keyCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
	  keynum = e.which;
	}
	keychar = String.fromCharCode(keynum);
	numcheck = /\d/;
	return !numcheck.test(keychar);
}

