// JavaScript Document

/*


installation:
1. lier ce script � la page du formulaire:
	<script language="javascript" type="text/javascript" src="validations.js"></script>


2. faire son appel dans la valitation du formulaire:
	<form method="GET"  onsubmit="return validerInscrip(this.elements,'fr')"> 


3. specifier les champs n�cessaire � valider:
	<input name="_toValid" type="hidden" id="_toValid" value="NomComplet|nomagence|courriel:courriel|adresseagence:adresse|villeAgence|codePostalAgence:postalCA|teldomicile:telCA">

4. faire les �l�ments css pour le surlignement d'erreurs
	Input, TEXTAREA, Combobox, combo{
	background-color:#FAFAFA;
	border:  solid #003030;
	font-size:14px;
	padding:2px;
	
	}
	
	.formProblem{
	background-color:#FFCCCC;
	border:  solid #FF0000;
	}
	
	Input:focus, TEXTAREA:focus{
		background-color:#FFFFFF;
	
	}
	
	Input:hover, TEXTAREA:hover{
	border-color:#214C42;
	border-color:#214C42;
	border:solid #214C42;
	background-color:#FFFFFF;
	}

*/




///////////////////////////////////////////////////////////////////////////////////
///////  custom client functions ////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

	// fonction pour le formulaire de selection resto. qui ajoute la confirmation de mot de passe selon 2 champs.
	function doubleValid(theForm){
	var  returnflag= true;
		if (theForm.password.value != theForm.confirm.value)
			{
				alert("Les deux mots de passes ne sont pas identiques.");
				returnflag= false;
			}
			
	 	if(! (validerInscrip(theForm.elements,'fr'))){
			returnflag= false;
		}
		return returnflag;
	}
	
	
	function entrepreneurGroupe(theForm){
		var  returnflag= true;
		if (theForm.email.value != theForm.confirmationEmail.value)
			{
				alert("Les adresses courriel ne sont pas identiques.");
				returnflag= false;
			}
			
	 	if(! (validerInscrip(theForm.elements,'fr'))){
			returnflag= false;
		}
		
		return returnflag;
		
	}
	
	
	
	
///////////////////////////////////////////////////////////////////////////////////
///////  general functions ////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

function foundElementByName(myItem, elements) {
	//we make a variable, result, equal to minus one, so if nothing changes it, we will get -1 from this function
	var result=-1;
	//check whether the array has any items or the function has the wrong number of arguments
		//if ((elements.length<1)||(arguments.length!=1)){
			if (elements.length<1){
				//alert("scrap: pas d'�l�ment dans le dans le formulaire");
			return -1;
			exit;
		}
		//alert(elements.length + " =?= "+myItem);
	//having checked whether we have any items in the array and whether we have the right number of arguments, we can procede.
		for (var i=0;i<elements.length;i++) {
		//check each item beginning at the beginning
		//alert(elements[i].name + " =?= "+myItem);
			if (elements[i].name == myItem) {
				
				//alert("on a trouv� l'�l�ment de forumlaire :" + elements[i].name);
				// We could do various things here, such as using the indexOf and lastIndexOf (methods for a string) to find out if the string was contained in the item, and convert to the same case to be case insentive... here we used equality
				result=i;
				break;
			}
		}
	return result;
}




function validerInscrip(elem, lang){
	defaultValidation = "notNull";
	var validFlag = true;
	//ar validFlag = false;
	var nbErreur = 0;
	var strFormValid = elem["_toValid"].value;

	var tValid = new Array();
	tValid = strFormValid.split('|');
		
		// on loop les element a verifier
		// si c'est present dans la page, on passe leur DOM en parametre � al 
		// fonction de validation qui nous renvoira (true/false)
		// la fonctione de validation se charge des messages d'erreur propre aux �l�ments
		// on flag si on a eu une erreur dans l'une de cet fonction
		//en revois true si aucune erreur a ete trouv�
		
		for (var k=0; k<=tValid.length-1 ; k++){
			//alert(k);
			var strElem = tValid[k];
			tValid[k] = new Array();
			tValid[k] = strElem.split(':');
			var indexElem = foundElementByName(tValid[k][0], elem);
			if (indexElem < 0){
				alert("La d&eacute;finition dans le champs invisible de validation est erron&eacute;e:  "+ tValid[k][0]);
			}else{
				
				
				
				elem[indexElem].setAttribute('validType',tValid[k][1]);
				
				//prevoir ici tout les types de validations (text, radio, checkbox)
				
				//input
				
				//checkbox
				
				//elem[indexElem].type. 
				//ca c'est la validation text
				if (! validateInput(elem[indexElem])) {
					if (nbErreur == 0 ){ //si c'est la 1ere erreur
							//elem[indexElem]).focus();
						}
					nbErreur++;
					validFlag = false;
				}
			}
		}
		
		//faire ici un message d'erreur qui apparaitera en entete selon lang
		if (!validFlag) {
			//alert( nbErreur + " erreur dans le formulaire");
		}
		return validFlag;
}


function validateInput(myElem){
	//routine de v�rification des champs textes ET Textarea
	var flagValid = true
	var validType = myElem.getAttribute('validType');
	if ((validType == "") || (validType == null)|| (validType == undefined)|| (validType == "undefined")) validType= defaultValidation ;
		
		if(validType=="notNull"){
		  	if(myElem.value == "")flagValid = false;
			if(myElem.value == " ")flagValid = false;
				
		}else if(validType=="decimal"){
			var strreplace = myElem.value;
			strreplace = replace2(strreplace,".", ",");
			if (!( /^\d+(\,\d+)*$/.test(strreplace))) flagValid = false;
			
		}else if(validType=="entier"){
			//un nombre suivi d'au moins 2 autre caractere
			if (!( /^\d+$/.test(myElem.value))) flagValid = false;
		}else if(validType=="nas"){
			var strreplace = myElem.value;
			strreplace = replace2(strreplace," ", "");
			strreplace = replace2(strreplace,"-", "");			
			if (!( /^\d{9}$/.test(strreplace))) flagValid = false;
		}else if(validType=="adresse"){
			//un nombre suivi d'au moins 2 autre caractere
			if (!( /^\d+.{2,}/.test(myElem.value))) flagValid = false;
		}else if(validType=="postalCA"){
			var strreplace = myElem.value;
			strreplace = replace2(strreplace," ", "");
			strreplace = replace2(strreplace,"-", "");//.toUpperCase();
			//alert("strreplace = "+strreplace);
		 	 if (!( /^[a-zA-Z]\d[a-zA-Z]\d[a-zA-Z]\d$/.test(strreplace))) flagValid = false;
		}else if(validType=="courriel"){
		  if (!( /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(myElem.value))) flagValid = false;

		}else if(validType=="telCA"){
		  if (!( /^.*\d{3}.*\d{3}.*\d{4}.*$/.test(myElem.value))) flagValid = false;z
		
		}else if(validType=="url"){
			alert("urlValid: todo");
		  //if (!( /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(myElem.value))) flagValid = false;
		}else if(validType=="aaaammjj"){  //*** la validation des dates ne v�rifie pas la journ�e du mois existe r�ellement
		  if (!( /^(19|20)\d\d([- \/.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])/.test(myElem.value))) flagValid = false;
		}else if(validType=="jjmmaaaa"){
		  if (!( /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.](19|20)\d\d/.test(myElem.value))) flagValid = false;
		}else if(validType=="mmjjaaaa"){
		  if (!( /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.](19|20)\d\d/.test(myElem.value))) flagValid = false;
		}else{
		  alert("Le type de validation sp&eacute;cifi&eacute;("+validType+") n'est pas reconnu.");
		}

	if (! flagValid){
		//alert("erreur dans:" + myElem.name);		
		// myElem.style["background-color"] = "#FF9999";
		myElem.setAttribute('class','formProblem');
		myElem.className = "formProblem";  //la bonne maniere! ne pas prendre de setAttribute ;)
		//object.className 
		//alert("inner = "+ myElem.outerHTML); 
	
	//finalement la bonne maniere d'assign� des onChange event!
	myElem.onchange = function () {  
			validateInput(this);
				
			};
		//myElem.setAttribute('onChange','validateInput(this);alert(this);');
		
	}else{
		// ya pas derreur dans ce champ!
		//alert("pas derreur:" + myElem.name);
		
		myElem.className = "none"; //cette classe n'existre pas
		
		//myElem.removeAttribute('class'); //pas compatible dans les 2
		//myElem.removeAttribute('onChange');//marche pas dans IE
		
		
		/*
		***********************************************************
		si on veux desactiv� les champs jug�s corectes
		***********************************************************
			
			myElem.disabled = true;
		*/
			myElem.onchange = function () {  	};
			
		
	}
	
	return flagValid
}	
	
	
function replace2(s, t, u) {
  /*
  **  Replace a string in a string
  **    s  string to be processed
  **    t  sting originl to be found and removed
  **    u  token to be inserted
  **  returns new String
  */
  i = s.indexOf(t);
  r = "";
  if (i == -1) return s;
  r += s.substring(0,i) + u;
  if ( i + t.length < s.length)
    r += replace2(s.substring(i + t.length, s.length), t, u);
  return r;
}
  

/* *********   veilles validations ****************/



function ValiderInfosProducteur(VerifierEmail,lang)
{
	if (document.formMembre.txt_nom.value.length == 0) 
	{
		if (lang=="en")
		{alert("<Name> field must be completed !");}
		else
		{alert("Le champ <Nom> doit &ecirc;tre compl&eacute;t&eacute; !");}
		
		document.formMembre.txt_nom.focus;
		return false;
	}
	
	if (document.formMembre.txt_adresse.value.length == 0) 
	{
		if (lang=="en")
		{alert("<Address> must be completed !");}
		else
		{alert("Le champ <Adresse> doit &ecirc;tre compl&eacute;t&eacute; !");}
		
		document.formMembre.txt_adresse.focus;
		return false;
	}	
	
	if (document.formMembre.txt_ville.value.length == 0) 
	{
		if (lang=="en")
		{alert("<City> field must be completed !");}
		else
		{alert("Le champ <Ville> doit &ecirci;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.txt_ville.focus;
		return false;
	}
	
	if (document.formMembre.txt_codePostal.value.length == 0) 
	{
		if (lang=="en")
		{alert("<Postal code> field must be completed !");}
		else
		{alert("Le champ <Code postal> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.txt_codePostal.focus;
		return false;
	}	
	
	if (document.formMembre.cbo_pays.selectedIndex < 0) 
	{
		if (lang=="en")
		{alert("<Country> field must be completed !");}
		else
		{alert("Le champ <Pays> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.cbo_pays.focus;
		return false;
	}
	
	if (formMembre.cbo_province.selectedIndex < 0 ) 
	{
		if (lang=="en")
		{alert("<State> field must be completed !");}
		else
		{alert("Le champ <Province> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		formMembre.cbo_province.focus;
		return false;
	}
	
	if (document.formMembre.txt_tel1Numero.value.length == 0) 
	{
		if (lang=="en")
		{alert("<Tel #1> field must be completed !");}
		else
		{alert("Le champ <Tel #1> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.txt_tel1Numero.focus;
		return false;
	}
	return true;
}


function ValiderInfosMembre(VerifierEMail,lang)
{
	if (document.formMembre.txt_nom.value.length == 0 )
	{
		if (lang=="en")
		{alert ("<Last name> field must be completed !");}
		else
		{alert ("Le champ <Nom> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.txt_nom.focus();
		return false;
	}
	
	if (document.formMembre.txt_prenom.value.length == 0)
	{
		if (lang=="en")
		{alert ("<First name> field must be completed !");}
		else
		{alert ("Le champ <Pr&eacute;nom> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.txt_prenom.focus();
		return false;
	}
	
	if (document.formMembre.txt_adresse.value.length == 0 )
	{
		if (lang=="en")
		{alert ("<Address> field must be completed !");}
		else
		{alert ("Le champ <Adresse> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.txt_adresse.focus();
		return false;
	}	
	
	if (document.formMembre.txt_ville.value.length == 0)
	{
		if (lang=="en")
		{alert ("<City> field must be completed !");}
		else
		{alert ("Le champ <Ville> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.txt_ville.focus();
		return false;
	}
	
	if (document.formMembre.txt_codePostal.value.length == 0 )
	{
		if (lang=="en")
		{alert ("<Postal code> must be completed !");}
		else
		{alert ("Le champ <Code postal> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.txt_codePostal.focus();
		return false;
	}
	
	if (document.formMembre.cbo_pays.selectedIndex < 0 )
	{
		if (lang=="en")
		{alert ("<Country> must be selected !");}
		else
		{alert ("Le champ <Pays> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.cbo_pays.focus();
		return false;
	}
	
	if (document.formMembre.cbo_province.selectedIndex < 0)
	{ 
		if (lang=="en")
		{alert ("<State> field must be selected !");}
		else
		{alert ("Le champ <Province> doit &ecirc;tre compl&eacute;t&eacute; !");}	
		
		document.formMembre.cbo_province.focus();
		return false;
	}
	
	if (document.formMembre.txt_tel1Numero.value.length == 0 )
	{
		if (lang=="en")
		{alert ("<Tel #1> field must be completed !");}
		else
		{alert ("Le champ <Tel #1> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formMembre.txt_tel1Numero.focus();
		return false;
	}	
	
	if (VerifierEMail==true)
	{
		if (document.formMembre.txt_courriel.value.length  < 8 || (document.formMembre.txt_courriel.value.indexOf("@") < 3) || (document.formMembre.txt_courriel.value.indexOf(".") < 5))
		{
			if (lang=="en")
			{alert("A valid email address is required in order to submit a new subscription  !");}
			else
			{alert("Une adresse de courriel valide est REQUISE afin de pouvoir s'inscrire !");}			
			
			document.formMembre.txt_courriel.focus();
			return false;
		}
	}	
	
	if (document.formMembre.dateAnniv.value.length > 0) 
	{
		if (!checkdate(document.formMembre.dateAnniv))
		{
			if (lang=="en")
			{alert ("Please enter a valid date");}
			else
			{alert ("Veuillez inscrire une date valide s.v.p.");}			
			
			document.formMembre.dateAnniv.focus();
			return false;		
		}
	}
	return true;					
}

function VerifierDonneesContribution(lang)
{
	if (!IsNumeric(document.formNCEtape2.txt_prixCompo.value)) 
	{
		if (lang=="en")
		{alert("<Amount payed> field must contain a numeric value !");}
		else
		{alert("Le champ <Montant pay&eacute;> doit contenir une valeur num&eacute;rique !");}		
		
		document.formNCEtape2.txt_prixCompo.focus();
		return false;
	}
	
	if (parseFloat(document.formNCEtape2.txt_prixCompo.value)<=0) 
	{
		if (lang=="en")
		{alert("<Amount payed> field must contain a valid amount !");}
		else
		{alert("Le champ <Montant pay&eacute;> doit contenir un montant valide !");}		
		
		document.formNCEtape2.txt_prixCompo.focus();
		return false;	
	}
	
	if (document.formNCEtape2.txt_chequeDate.value.length == 0)
	{
		if (lang=="en")
		{alert("<Valid check ...> field must be completed !");}
		else
		{alert("Le champ <Ch&egrave;que ...> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formNCEtape2.txt_chequeDate.focus();
		return false;		
	}
	
	if (!checkdate(document.formNCEtape2.txt_chequeDate)) 
	{
		if (lang=="en")
		{alert("<Valid check ...> field must contain a valid date !");}
		else
		{alert("Le champ <Ch&egrave;que ...> doit contenir une date valide !");}		
		
		document.formNCEtape2.txt_chequeDate.focus();
		return false;
	}	
		
	if (document.formNCEtape2.txt_chequeNum.value.length == 0)  
	{
		if (lang=="en")
		{alert("<Check number> field must be completed !");}
		else
		{alert("Le champ <Num&eacute;ro du ch&egrave;que> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formNCEtape2.txt_chequeNum.focus();
		return false;
	}

	if ((document.formNCEtape2.hidConvSel.value == false) || (document.formNCEtape2.hidConvSel.value == "false")) 
	{
		if (lang=="en")
		{alert("You must select a <Collective agreement> !");}
		else
		{alert("Vous devez s&eacute;lectionner une <Convention collective> !");}		
		
		return false;		
	}
	
	if (document.formNCEtape2.txt_contratNum.value.length == 0) 
	{
		if (lang=="en")
		{alert("<Contract number> field must be completed !");}
		else
		{alert("Le champ <Num&eacute;ro du contrat> doit &ecirc;tre compl&eacute;t&eacute; !");}		
		
		document.formNCEtape2.txt_contratNum.focus();
		return false;
	}	
	return true;
}

function IsNumeric(strString)
   //  check for valid numeric strings	
{
   var strValidChars = "0123456789.-,";
   var strChar;
   var Trouve;

   if (strString.length == 0) return false;

   //  test strString consists of valid characters listed above
   for (i = 0; i < strString.length; i++)
   {
  		strChar = strString.charAt(i);
	
		if (strValidChars.indexOf(strChar)==-1)
		{
			return false;
		}
   }
		  
    Trouve=false;
	//V�rife si on a plus que un carat�res de d�cimale
	for (i = 0; i < strString.length; i++)
	{
		if (strString.charAt(i) == "." || strString.charAt(i) == "," ) 
		{
			if (Trouve==true)
			{
				return false;
			}
			else
			{
				Trouve=true;
			}
		}
	}	  
   	return true;
}

function ValiderInfosProduction(lang)
{
	if (document.formSpacq.nom.value.length == 0) 
	{
		if (lang=="en")
		{
			alert("<Name> field must be completed !");
		}
		else
		{		
			alert("Le champ <Nom> doit &ecirc;tre compl&eacute;t&eacute; !");
		}		
		document.formSpacq.nom.focus();
		return false;
	}

	return true;	
}

