/**
 * 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.
 * - iform, nom du formulaire a valider
 * - msgerr, le message d'erreur general a afficher avant le(s) message(s) particulier(s) ("" n'affiche pas de message general)
 * - maxmsg, le nombre de message maximum a afficher
 * - focus, si "1", set le focus sur le premier champs valide qui comporte une erreur
 * - Le select-multiple est maintenant supporté
       Dans le cas d'un SELECT multiple, la valeur testée sera le NOMBRE D'ITEMS SELECTIONNÉS ayant un VALUE non NULL 
       donc validés préférablement en type 'int'. On pourrait par exemple valider "Entre 1 et 5 valeurs sélectionnées"
 * - Si iform est undef, valider tout les formulaire de la page
 * - Faire la validation est éléments radio
 */ 
function validForm(iform,msgerr,maxmsg,focus){

   if(typeof(msgerr) != 'undefined'){ errBase = msgerr; }
   else{ 

    var langueAdmin = 'fra';
    
    if (langueAdmin == 'eng')
        errBase = 'An error prevents submitting the form.\n';
    else
        errBase = 'Une erreur empêche de soumettre le formulaire.\n';
   };

   var err = '';
   var iregx = new RegExp();
   var nbrerr = 0;
   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;

            case 'select-multiple' :
            val = 0;
            for(var j = 0; j < valref.options.length; j++)
            {
              if(valref.options[j].selected && valref.options[j].value != '')
              {
                val++;
              }
            }
            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 'date' :
                  iregx.compile('^[0-9]{2}-[0-9]{2}-[0-9]{4}$','');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  else {
                     var day = val.substr(0,2);
                     var month = val.substr(3,2);
                     var year = val.substr(6,4);
                     var leap = 0;

                     if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
                        leap = 1;
                     };

                     if( (year <= 0) || ((month < 1) || (month > 12)) || (day < 1) ||
                         ((month == 2) && (leap == 1) && (day > 29)) || ((month == 2) && (leap != 1) && (day > 28)) ||
                         ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) ||
                         ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11")))
                        ) {
                        if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                        nbrerr += 1;
                        if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                     };
                  };
                  break;
               case 'date2' :
                  iregx.compile('^[0-9]{4}(-|\/)[0-9]{2}(-|\/)[0-9]{2}$','');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  else {
                     var day = val.substr(8,2);
                     var month = val.substr(5,2);
                     var year = val.substr(0,4);
                     var leap = 0;

                     if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
                        leap = 1;
                     };

                     if( (year <= 0) || ((month < 1) || (month > 12)) || (day < 1) ||
                         ((month == 2) && (leap == 1) && (day > 29)) || ((month == 2) && (leap != 1) && (day > 28)) ||
                         ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) ||
                         ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11")))
                        ) {
                        if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                        nbrerr += 1;
                        if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                     };
                  };
                  break;
               case 'doc' :
                  iregx.compile('^[a-zA-Z0-9\-_/.]+\.(doc|DOC|zip|ZIP|pdf|PDF|xls|XLS|txt|TXT|pps|PPS|ppt|PPT|AVI|avi|wmv|WMV|wma|WMA)$','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 'domain' :
                  iregx.compile('^[a-zA-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;
               case 'email' :
                  iregx.compile('^[a-zA-Z0-9]+[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+[.][a-zA-Z]{2,4}$','');
                  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-fA-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 'hour' :
                  iregx.compile('^[0-9]{1,2}:[0-5][0-9]$','');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  else {
                     if(val.length == 4) { val = '0' + val; }
                     var hour = val.substr(0,2);
                     var min = val.substr(3,2);
                     if( (hour < 0 || hour > 24) || (min < 0 || min >59) ) {
                        if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                        nbrerr += 1;
                        if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                     };
                  }
                  break;
               case 'img' :
                  iregx.compile('^[a-zA-Z0-9\-_/.]+\.(gif|GIF|jpg|JPG|jpeg|JPEG|png|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 'int' :
                  iregx.compile('^[0-9]+$','');
                  if(!iregx.test(val) || (parseInt(ver[2]) > 0 && parseInt(val) < parseInt(ver[2])) || (parseInt(ver[3]) > 0 && parseInt(val) > parseInt(ver[3]))){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'multi' :
                  iregx.compile('^[a-z0-9\-_/.]+\.(swf|SWF|rm|RM|ram|RAM|mp3|MP3|mpg|MPG|mpeg|MPEG|avi|AVI|wmv|WMV|mov|MOV|wma|WMA)$','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 '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) || (parseInt(ver[2]) > 0 && parseInt(val) < parseInt(ver[2])) || (parseInt(ver[3]) > 0 && parseInt(val) > parseInt(ver[3]))){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'regexp' :
                  iregx.compile(ver[2],'');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  };
                  break;
               case 'user' :
                  iregx.compile('^[a-zA-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');

      $.floatingMessage(Base.encapsulerMessageErreur("<strong>" + errBase + "</strong>" + err),{
            align:"right",
            verticalAlign:"top",
            time:6000
      });

      if( fieldfocus != '' && focus ) { eval('document.' + iform.name + '.' + fieldfocus + '.focus();'); };
      return false;
   }
}


// Radio Button Validation
// copyright Stephen Chapman, 15th Nov 2004,14th Sep 2005
// you may copy this function but please keep the copyright notice with it
//
// var btn = validRadioButton(form.group1);
// if (btn == null) alert('No radio button selected');
// else alert('Button value ' + btn + ' selected');
function validRadioButton(btn) {
    var cnt = -1;
    for (var i=btn.length-1; i > -1; i--) {
        if (btn[i].checked) {cnt = i; i = -1;}
    }
    if (cnt > -1) return btn[cnt].value;
    else return null;
}



