/**
 * Effectue la validation des champs pour la référence au formulaire passé en parametre.
 * Il retourne <code>true</code> si le formulaire est valide, <code>false</code> sinon.
 */
function validForm(iform,msgerr,maxmsg,focus){
   if(typeof(msgerr) != 'undefined'){ errBase = msgerr; }
   else{ errBase = 'Une erreur empêche de soumettre le formulaire.\n\n';};

   var err = '';
   var nbrerr = 0;
   var iregx = new RegExp();
   var fieldfocus = '';

   for(i=0; i < iform.length; i++){
      iregx.compile('^V_.*$','');
      //si le nom du champ match une validation
      //c'est qu'une validation doit être effectué.
      if(iregx.test(iform.elements[i].name)){
         vername = new String(iform.elements[i].name);
         ver = new String(iform.elements[i].value);
         ver = ver.split('|',5);
         valname = vername.substr(2, vername.length - 2);
         eval('valref = iform.' + valname + ';');

         switch(valref.type){
            case 'text' : case 'hidden' : case 'file' : case 'textarea' : case 'password' :
               val = valref.value;
               break;
            //NON SUPPORTÉ PARCE QUE BUG DANS IE 5, à vérifier
            //~ case 'radio' : case 'checkbox' :
               //~ for(j=0; j < valref.length; j++) {
                  //~ if(valref[j].checked) val = valref[j].value;
               //~ };
               //~ break;
            case 'select-one' :
               val = valref.options[valref.selectedIndex].value;
               break;
            default : break;
         }
         if(typeof(val) == 'undefined') val = '';

         if(ver[1] == 1 || val.length > 0){
            //Effectuer la validation sur le champs selon les parametres
            switch(ver[0]){
               case 'char' :
                  if((ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               case 'int' :
                  iregx.compile('^[0-9]+$','');
                  if(!iregx.test(val) || (ver[2] > 0 && val.value < ver[2]) || (ver[3] > 0 && val.value > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               case 'pct' :
                  iregx.compile('%$','');
                  if( iregx.test(val) ) {
                     val = val.substr(0,val.length-1);
                     ver[3] = 100;
                  };
                  iregx.compile('^[0-9]*$','');
                  if(!iregx.test(val) || (ver[2] > 0 && val.value < ver[2]) || (ver[3] > 0 && val.value > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               case 'doc' :
                  iregx.compile('^[^(?|"|\'|<|>|\|)]+\.(doc|zip|pdf|xls|txt)$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               case 'email' :
                  iregx.compile('^.+@.+[.].{2,}$','');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               case 'hexa' :
                  iregx.compile('^(#?[0-9|a-f]{0,6})?$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               case 'img' :
                  iregx.compile('^[^(?|"|\'|<|>|\|)]+\.(gif|jpg|jpeg|png)$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               case 'multi' :
                  iregx.compile('^[^(?|"|\'|<|>|\|)]+\.(swf|rm|ram|mp3)$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               case 'passwd' :
                  eval('val_confirm = iform.' + valname + '_confirmation.value;');
                  if(val != val_confirm || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               case 'user' :
                  iregx.compile('^[a-z|0-9|_]*$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) {
                        err += ver[4] + '\n'; 
                     };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; }; 
                  }
                  break;
               default : break;
            }
         }
      }
   }

   if(err == ''){ return true; }
   else{
      alert(errBase + err + '\n\n'); 
      eval('document.' + iform.name + '.' + fieldfocus + '.focus();');
      return false;
   }
}