/* Validation de formulaire*/
var messErr="";
function valideForm(nomForm,sub){
  /*
    nomForm   : nom du formulaire
    sub       : indique s'il faut soumettre le formulaire ou non
    nomC     : nom de champ
    typeD     : type de demande
      - nnc champ nécessaire
      - ve  email valide
      - nf  pas la première option
      - ch  checké obligatoirement
      - vd  date valide
      - mi  minimum de check pour un tableau de résultat
      - ma  maximum de check pour un tableau de résultat
      - test  test libre
     mess     : message de d'erreur 
  */
  var form=document.getElementById(nomForm);
  if(form!=undefined){
    var messE="";
    
    //on repasse tous les champs à blanc
    goToWhite(nomForm);
    
    for(var i=2;i<arguments.length;i+=3){
      var nomC=arguments[i];
      if(form[nomC]!=undefined){
        var typeC=form[nomC].type;
        var typeD=arguments[(i+1)];
        var tabD=typeD.split(" ");
        var mess=arguments[(i+2)];
        
        switch(tabD[0]){
          case "nnc":{
            if((typeC=="text" || typeC=="textarea" || typeC=="hidden") && form[nomC].value==""){
              messE+="\t- "+mess+"\n";
              goToPink(form[nomC]);
            }
          }break;
          case "ve":{
            if(typeC=="text"){
              var erreur=false;
              
              pos=form[nomC].value.indexOf("@")
              if(pos<2)
                erreur=true;
              
              pos2=form[nomC].value.lastIndexOf(".")
              if(pos2<5 || (pos2+2)>(form[nomC].value.length-1))
                erreur=true;
              
              if(erreur){
                messE+="\t- "+mess+"\n";
                goToPink(form[nomC]);
              }
            }
          }break;
          case "nf":{
            if(typeC=="select-one" && form[nomC][0].selected){
              messE+="\t- "+mess+"\n";
              goToPink(form[nomC]);
            }
          }break;
          case "vd":{
            var erreur=false;
            tab=form[nomC].value.split("/");
            //on regarde si le dernier élèment est l'année sur 4 chiffres
            if(tab[(tab.length-1)].length!=4)
              erreur=true;
            else{
              //on parcourt tous les élèments du tableau pour vérifier leur validité, dabord s'ils sont entier puis s'ils sont valide
              if((tab.length==2 && (isNaN(tab[0]) || isNaN(tab[1]))) || (tab.length==3 && (isNaN(tab[0]) || isNaN(tab[1]) || isNaN(tab[1]))))
                erreur=true
              else{
                lst30=new Array(4,6,9,11);
                switch(tab.length){
                  case 2:{  //format mm/aaaa
                    if(tab[0]>12)
                      erreur=true;
                  }break;
                  case 3:{  //format jj/mm/aaaa
                    //on regarde le nombre de jour dans le mois correspondant
                    if(tab[0]>31 || (tab[1]==2 && tab[0]>29))
                      erreur=true;
                    else{
                      //on parcourt le tableau des mois à 30 jours
                      for(var cpt =0; cpt<lst30.length; cpt++){
                        if(lst30[cpt]==tab[1] && tab[0]>30)
                          erreur=true;
                      }
                    }
                  }break;
                  default:{
                    erreur=true;
                  }break;
                }
              }
            }
            
            if(erreur){
              messE+="\t- "+mess+"\n";
              goToPink(form[nomC]);
            }
          }break;
          case "ch":{
            if(!form[nomC].checked){
              messE+="\t- "+mess+"\n";
              goToPink(form[nomC]);
            }
          }break;
          case "mi":{
            var cpt=0;
            for(var j=0;j<form[nomC].length;j++){
              if(form[nomC][j].checked)
                cpt++;
            }
            if(cpt<tabD[1]){
              messE+="\t- "+mess+"\n";
              goToPink(form[nomC]);
            }
          }break;
          case "ma":{
            var cpt=0;
            for(var j=0;j<form[nomC].length;j++){
              if(form[nomC][j].checked)
                cpt++;
            }
            if(cpt>tabD[1]){
              messE+="\t- "+mess+"\n";
              goToPink(form[nomC]);
            }
          }break;
          case "sup":{
            if(form[nomC].value<tabD[1]){
              messE+="\t- "+mess+"\n";
              goToPink(form[nomC]);
            }
          }break;
          case "inf":{
            if(form[nomC].value>tabD[1]){
              messE+="\t- "+mess+"\n";
              goToPink(form[nomC]);
            }
          }break;
        }
      }
    }
    if(messE!=""){
      if(document.getElementById("wErr")){
        //c'est un message au format HTML donc on change les \n en <br>
        messErr=messErr.replace("\n","<br />");
        messErr="<h4>"+messErr+"</h4>";
        while(messE.search("\n")!=-1 || messE.search("\t")!=-1){
          messE=messE.replace("\t","&nbsp;&nbsp;&nbsp;");
          messE=messE.replace("\n","<br />");
        }
        //wErreur(messE,"erreur",false);
        wErreur(messErr+messE,"erreur",false);
      }else
        alert(messErr+messE);
      return false;
    }else{
      if(sub)
        form.submit();
      return true;
    }
  }else{
    return true
  }
  
}

var dmcCouleur = {
  setHexa : function (valeur){
  	var test = this.test(valeur);
  	if(typeof test =="object"){
  		var n = (Number(test[0])<<16) + (Number(test[1])<<8) + Number(test[2]);
  		var iValColor=this.dec2hex(n);
  		var sChaineColor='';
  		for(iCharChaineColor=iValColor.length;iCharChaineColor<6;iCharChaineColor++){
  			sChaineColor='0'+sChaineColor;
  		}
  		return '#' + sChaineColor + iValColor;
  	}
  		return "#".test;
  },
	dec2hex:function (dec){
		var hexa='0123456789ABCDEF',hex=''
		while (dec>15){
			tmp=dec-(Math.floor(dec/16))*16;
			hex=hexa.charAt(tmp)+hex;
			dec=Math.floor(dec/16);
		}
		hex=hexa.charAt(dec)+hex;
		return(hex);
	},
	test:function (valeur){
		if(result = valeur.match(/rgb\((.*)\)/)){
		 if(result[1]){ return result[1].split(",");}
		}
		return (valeur.replace(/#/gi,''));
	}
};

function goToPink(elem){
  if(elem.style)
    elem.style.backgroundColor="#FFA7A7";
}

function goToWhite(nomForm){
  var form=document.getElementById(nomForm);
  if(form!=undefined){
    for(var i=0;i<form.length;i++){
      if(dmcCouleur.setHexa(form[i].style.backgroundColor)=='#FFA7A7' || form[i].style.backgroundColor=='#ffa7a7')
        if(form[i].style)
          form[i].style.backgroundColor="#ffffff";
    }
  }
}

