function validate(sender,myarray,err_hd){

var message_erreur = !err_hd?new Array('Les erreurs suivantes sont survenues:\n'):new Array(err_hd+'\n');
var error = false;

for (i=0;i<myarray.length;i++){
  field = document.forms[sender.name].elements[myarray[i][0]];

/* Bloc 1 vérifie les champs qui doivent être renseignés  */
  if (myarray[i][1].indexOf('e')>-1){
    if (!field.value){
      error = true;
      message_erreur.push(myarray[i][2]);
    }
  }

/* Bloc 2 vérifie si l'adresse électronique est correcte dans la forme  */
  else if (myarray[i][1].indexOf('m')>-1) {
    if (field.value) {
      var usr = "([a-zA-Z0-9][a-zA-Z0-9_.-]*|\"([^\\\\\x80-\xff\015\012\"]|\\\\[^\x80-\xff])+\")";
      var domain = "([a-zA-Z0-9][a-zA-Z0-9._-]*\\.)*[a-zA-Z0-9][a-zA-Z0-9._-]*\\.[a-zA-Z]{2,5}";
      var regex = "^"+usr+"\@"+domain+"$";
      var myrxp = new RegExp(regex);
      var check = (myrxp.test(field.value));
        if (check!=true) {
          error=true;
          message_erreur.push(field.value+" "+myarray[i][2]);
        }
      }
    }

/* Bloc 3 vérifie les champs dont la valeur doit être numérique  */
  else if (myarray[i][1].indexOf('n')>-1) {
    var num_error = false;
    if(field.value) {
      var myvalue = field.value;
      var num = myvalue.match(/[^0-9,\.]/gi)
      var dot = myvalue.match(/\./g);
      var com = myvalue.match(/,/g);
        if (num!=null) {
          num_error = true;
        }
        else if ((dot!=null)&&(dot.length>1)) {
          num_error = true;
        }
        else if ((com!=null)&&(com.length>1)) {
          num_error = true;
        }
        else if ((com!=null)&&(dot!=null)) {
          num_error = true;
        }
    }
    if (num_error==true) {
        error = true;
        message_erreur.push(myvalue+" "+myarray[i][2]);
    }
  }

/* Bloc 4 vérifie la valeur à l'aide d'une expression régulière sur un modèle déterminé */
  else if (myarray[i][1].indexOf('r')>-1) {
    var regexp = myarray[i][3];
    if (field.value) {
      if (!regexp.test(field.value)) {
        error = true;
        message_erreur.push(field.value+" "+myarray[i][2]);
      }
    }
  }

/* Bloc 5 vérifie les champs qui doivent être formatés comme des prix et modifie éventuellement le formatage */
  else if (myarray[i][1].indexOf('p')>-1) {
    var myvalue = field.value;
    var reg = /,-{1,}|\.-{1,}/;
    var nantest_value = myvalue.replace(reg,"");
    var num = nantest_value.match(/[^0-9,\.]/gi)
    sep = myarray[i][1].substr(1,1)?myarray[i][1].substr(1,1):',';
    if (field.value) {
      var myvalue = field.value.replace(/\./,',');
      if (myvalue.indexOf(',')==-1) {
        field.value = myvalue+sep+'00';
      }
      else if (myvalue.indexOf(",--")>-1) {
        field.value = myvalue.replace(/,--/,sep+'00');
      }
      else if (myvalue.indexOf(",-")>-1) {
        field.value = myvalue.replace(/,-/,sep+'00');
      }
      else if (!myvalue.substring(myvalue.indexOf(',') + 2)) {
        error=true;
        message_erreur.push(field.value+" "+myarray[i][2]);
      }
      else if (myvalue.substring(myvalue.indexOf(',') + 3)!='') {
        error=true;
        message_erreur.push(field.value+" "+myarray[i][2]);
      }
      else if (num!=null) {
        error=true;
        message_erreur.push(field.value+" "+myarray[i][2]);
      }
    }
  }

/* Bloc 6 vérifie les champs de nom et rectifie éventuellement la casse  */
  else if (myarray[i][1].indexOf('c')>-1) {
    var noble = new Array("d\'","de","von","van","der","d","la","da","of");
    var newvalue='';
    var myvalue = field.value.split(/\b/);
    for (k=0;k<myvalue.length;k++) {
      newvalue+= myvalue[k].substr(0,1).toUpperCase()+myvalue[k].substring(1);
    }
    for(k=0;k<noble.length;k++){
      var reg = new RegExp ("\\b"+noble[k]+"\\b","gi");
      newvalue = newvalue.replace(reg,noble[k]);
    }
    field.value = newvalue;
  }
}

/* En cas d'erreur, les messages d'erreur récoltés sont exploités ici puis affichés. Si le formulaire est correctement rempli, il est transmis */
  if (error) {
    message_erreur = message_erreur.join('\n\xB7 ');
    alert(message_erreur);
    return false;
  }
  else {
    return true;
  }
}
