//Fonction permettant de sauter d'un champs a l'autre lors de la saisie du numero de telephone ou d'une date dans un formulaire
function autotab(inputObj, longueur, valeur)
{
    if (valeur.length > longueur-1) {
        document.getElementById(inputObj).focus();
		document.getElementById(inputObj).select();
    }
}




//**************************************************//
//				VALIDATION DE FORMULAIRES			//
//**************************************************//

function Formulaire(formulaire)
// constructeur de la classe (en entre : l'attribut "name" du formulaire  valider)
{
   // variables membres
   this.form=formulaire; // nom du formulaire
   this.erreurs=new Array(); // tableau des champs contenant des erreurs de saisie

   // tableaux des rgles de validation appliques aux champs
   this.regles=new Array();
   this.messages=new Array();
   this.validations=new Array();
   this.params=new Array();

   // mthodes
   this.regle=regleChamp;
   this.nettoyer=nettoyerChaine;
   this.valider=validerForm;
   this.liste=listeErreurs;
}



function regleChamp(champ, type, message, param)
/* ajoute une rgle de validation :
- "champ" est la valeur de l'attribut "name" du champ
- "type" est la rgle de validation proprement dite
- "message" est le message d'erreur en cas de validation errone
- "param" est un paramtre facultatif, utilis par ceratines rgles */
{
   this.regles.push(champ);
   this.validations.push(type);
   this.messages.push(message);
   this.params.push(param);
}



function listeErreurs()
// retourne la liste des erreurs
{
   var x, liste="";
   
   // construction de la chane
   for(x=0; x<this.erreurs.length; x++) liste+="- "+this.erreurs[x]+"\n";
   
   return liste;
}



function nettoyerChaine(chaine)
// supprime les espaces en dbut et fin de chane (quivalent  la fonction PHP "trim()")
{
   regex=new RegExp("(^ +)|( +$)", "g");
   chaine=chaine.replace(regex, "");

   return chaine;
}



function validerForm()
// valide le formulaire : chaque champ doit vrifier les rgles qui lui ont t dfinies
{
   var x, regex, msg="";
   eval("var formulaire = document."+this.form+";");
  
   // si aucune rgle n'a t dfinie, la validation est toujours vraie
   if(!this.regles.length) return true;

   // on examine chaque champ
   for(x=0; x < this.regles.length; x++)
   {
      // on effectue au pralable un petit nettoyage sur le champ  valider
      eval("formulaire."+this.regles[x]+".value=this.nettoyer(formulaire."+this.regles[x]+".value);");
      
      switch(this.validations[x])
      {
         // le champ doit avoir le mme contenu qu'un autre
         case "comparaison":
		 	var temp = this.params[x].split(",");
            type = temp[0];	// type de comparaison (= ou > ou <)
            var2 = temp[1];	// deuxieme champ pour la comparaison, si vide = date du jour
			
			var strDate1 = eval("formulaire."+this.regles[x]+".value;");
			var intDate1 = parseInt(strDate1.substring(0,4) + strDate1.substring(5,7) + strDate1.substring(8,10));
			
			if (var2 == "") {
			
				var dateCour = new Date();
				var intDate2 = parseInt(dateCour.getYear() + dateCour.getMonth() + dateCour.getDate());
				
			} else {
			
				var strDate2 = eval("formulaire." + var2 + ".value");
				var intDate2 = parseInt(strDate2.substring(0,4) + strDate2.substring(5,7) + strDate2.substring(8,10));
			}

            eval("if(" + intDate2 + type + intDate1 + ") this.erreurs.push(this.regles[x],this.messages[x]);");
            break;
            
         /* le champ doit avoir une certaine longueur : c'est le dernier paramtre sous la forme "min,max"
         (0 signifiant pas de minimum ou de maximum) */
         case "longueur":
            eval("var longueur=formulaire."+this.regles[x]+".value.length;");
            if(longueur)
            {
               var temp=this.params[x].split(",( +)?");
               mini=parseInt(temp[0]);
               maxi=parseInt(temp[1]);
               
               if((mini && longueur<mini) || (maxi && longueur>maxi)) this.erreurs.push(this.regles[x],this.messages[x]);
            }
            break;

         // le champ (uniquement s'il est rempli) doit vrifier une expression rgulire
         case "regex":
            switch(this.params[x])
            {
               // quelques exemples...
               case "mail":
                  //regex=new RegExp("^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$", "gi");
				  regex=new RegExp("^(.+)@(.+)\\.(.+)$", "gi");
                  break;
                  
               case "alpha_num":
                  regex=new RegExp("^[_a-z0-9]+$", "gi");
                  break;
				  
			   case "numeric":
				  regex=new RegExp("^[0-9]+$", "g");
				  break; 
                  
               case "code_postal":
                  regex=new RegExp("^\s*[a-ceghj-npr-tvxy]\d[a-z](\s)?\d[a-z]\d\s*$", "gi");
                  break;
                  
               case "date":
                  regex = new RegExp("^[0-9]{4}[\-](0[1-9]|1[0-2])[\-][0-3][0-9]$", "g");
                  break;
              
			   case "http":
                  //regex=new RegExp("^(http://|https://){0,1}[A-Za-z0-9][A-Za-z0-9\-\.]+[A-Za-z0-9]\.[A-Za-z]{2,}[\43-\176]*$", "gi");
				  regex=new RegExp("^(http://|https://)", "gi");
				  break;
				  
               // par dfaut (non vide)
               default:
                  regex=new RegExp("^.+$", "g");

            }
            
            eval('if(formulaire.'+this.regles[x]+'.value!="" && !regex.exec(formulaire.'+this.regles[x]+'.value)) this.erreurs.push(this.regles[x],this.messages[x]);');
            break;
            
         case "requis":
		 // le champ doit juste tre rempli	
			if (document.getElementById(this.regles[x]).value == "") {
				this.erreurs.push(this.regles[x],this.messages[x]);
			}
			break;
      }
   }
   
   // en cas d'erreur, on affiche le premier message de la liste
   if(this.erreurs.length)
   {
      //var msg="Le formulaire comporte des erreurs :\n\n"+this.liste()+"\nVeuillez remplir correctement les champs.";
	 
	  //alert(decoderAccents(this.erreurs[1]));
	  alert(this.erreurs[1]);
	  document.getElementById("errorMsg").innerHTML = this.erreurs[1];
	  document.getElementById(this.erreurs[0]).select();
	  
      return false;
   }
   
   // en cas de succs, on envoie le formulaire
   return true;
}
