//<script language=javascript>
/*'---------------------------------------------------------------------------
' Projet           : +PROJET+
' Fichier          : fctValChamps.asp
' Version ToolsBox : v2.0.0
' Auteur           : Marcotte Multimédia
' Date             : avril 2001
'
' Description      : la fonction de validation
'
' (c) 2001 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
*********************************************************************************/
function isValidCP(inputVal)
{
	
	inputStr = inputVal.toString()
	inputStr = inputStr.toUpperCase()
	if(inputStr.length == 6 )
	{	//Validation de code postal sans espace
		for (var i =0; i <inputStr.length; i++){
			var oneChar = inputStr.charAt(i)
			if ( i % 2 )
			{
				if ((oneChar < "0" || oneChar > "9")){
					return false
				}
			}
			else
			{
				if (oneChar < "A" || oneChar > "Z"){
					return false
				}
			}
		}
		return true
	}
	else
	{	//Validation de code postal avec espace au milieu
		if(inputStr.length == 7 )
		{
			for (var i =0; i <inputStr.length; i++){
				var oneChar = inputStr.charAt(i)
				if ( i == 1 || i == 4 || i == 6  || i == 3  )
				{
					
					if ((oneChar < "0" || oneChar > "9") && !(oneChar == " " && i == 3)){
						return false
					}
				}
				else
				{
					if (oneChar < "A" || oneChar > "Z"){
						return false
					}
				}
			}
			return true
		}
		else
		{
			if(inputStr.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 temlephone valide
*********************************************************************************/
function isValidTel(inputVal)
{
	inputStr = inputVal.toString()
	if(inputStr.length > 0 && inputStr != "--")
	{		
		for (var i =0; i <inputStr.length; i++){
			var oneChar = inputStr.charAt(i)
			if ((oneChar < "0" || oneChar > "9") && !( i == 0 && oneChar == "(") && !( i == 4 && oneChar == ")") && !( i == 3 && oneChar == "-") && !( i == 3 && oneChar == " ") && !( i == 5 && oneChar == " ") && !( i == 7 && oneChar == "-") && !( i == 8 && oneChar == "-") && !( i == 9 && oneChar == "-") ){
				return false
			}
		}
		return true
	}
	else
	{
		return true
	}		

	
}


/*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
*********************************************************************************/
function gf_ValiderCourriel(frm_Nom,txt_Nom)
{
var b_CourrielOk  = true
var Temp  = document.forms[frm_Nom].elements[txt_Nom]
var i_PositionArobas   = Temp.value.indexOf('@')
var i_PositionPoint  = Temp.value.lastIndexOf('.')
var i_Espace   = Temp.value.indexOf(' ')
var i_LongueurCourriel =  Temp.value.length - 1   // Tableau de 0 à longeur -1 
var s_message

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_Espace != -1))                            // Doit contenir aucun espace
   {  
      b_CourrielOk = false
     
      alert(fctMessages('STR_COURRIEL',"x",i_LongueurCourriel));
      Temp.focus()
   }
	return b_CourrielOk
}



/*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 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 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			
					*********************************************************************************************************/				
					if (i_Obligatoire == 1 || i_LongueurChamp != 0)  
					{			
						// 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
					if (champ.elements[i].value.length > 0)
					{												
						//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 champ texte
							********************************/
							case 'TX':	
											
																		
								switch (s_TypeContenu.toUpperCase())
								{
										
								
									/**********************
									* COURRIEL
									***********************/
									case 'CO':
										if (!gf_ValiderCourriel(ps_Form,champ.elements[i].name))
										{	
											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",varTemp,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",varTemp,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 'CC':
																							
										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'un radio button					   
							case 'RB':
			
									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();
		
}
// End -->



