function MM_validateForm() { //v4.2
  var obj;
  var objNaam;
  var objWaarde;
  var uitTeVoerenValidaties;
  var validatieArgs;
  var errors = '';
  var args = MM_validateForm.arguments;
  var i,j;
  var pos;
  var test, testArgs;
  var num,min,max;
  var landcode;
  var postcode;
  var datumFormaatComponenten, datumComponenten;
  var aantalFormaatComponenten, aantalComponenten;
  var dag, maand, jaar, dagindex;
  var som;
  var ch;
  var aantalTeCumCijfers;
  var lenObjWaarde, lenMaxLength;
  var minLength;
  var exactLength;
  var minValue;
  var maxValue;

  for (i=0; i<(args.length-2); i+=3) { 

    // bepaal het te valideren object 
    obj = document.all(args[i]);
    if (obj) { 
      objNaam = obj.name;
      objWaarde = obj.value;

      uitTeVoerenValidaties = args[i+2].split(";");
      validatieArgs = args[i+1].split(';');
      aantalValidaties = uitTeVoerenValidaties.length;
      
      for (j=0; j<aantalValidaties; j++) {
        test = uitTeVoerenValidaties[j];
        testArgs = validatieArgs[j];

        if (test == 'R') {
          // verplicht veld
          if (objWaarde == "") {
            errors += '- ' + objNaam + ' is verplicht.\n'; 
            break;
          }
        }
        
        if (objWaarde != "") {
  if (test == 'isEmail') {
            // e-mail adres
      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(objWaarde));
       if (check!=true)  {
            errors += '- ' + objNaam + ' moet een e-mail addres bevatten.\n';
              break;
            }
          } 



          if (test == 'MaxLength') {
            // postcode
            lenObjWaarde = objWaarde.length;
            maxLength = testArgs;

            if (lenObjWaarde > maxLength) {
              errors += '- ' + objNaam + ' mag maximaal ' + maxLength + ' posities groot zijn.\n';
              break;
            }
          }


          if (test == 'MinLength') {
            // postcode
            lenObjWaarde = objWaarde.length;
            minLength = testArgs;

            if (lenObjWaarde < minLength) {
              errors += '- ' + objNaam + ' moet minimaal ' + minLength + ' posities groot zijn.\n';
              break;
            }
          }



          if (test == 'ExactLength') {
            // postcode
            lenObjWaarde = objWaarde.length;
            exactLength = testArgs;

            if (lenObjWaarde != exactLength) {
              errors += '- ' + objNaam + ' moet precies ' + exactLength + ' posities groot zijn.\n';
              break;
            }
          }


          if (test == 'MinValue') {
            // range-check met minimum
            minValue = testArgs;
            if (objWaarde < minValue) {
              errors += '- ' + objNaam + ' moet een nummer bevatten groter of gelijk aan ' + minValue + '.\n';
              break;
            }
          }


          if (test == 'MaxValue') {
            // range-check met maximum
            maxValue = testArgs;
            if (objWaarde > maxValue) {
              errors += '- ' + objNaam + ' moet een nummer bevatten kleiner of gelijk aan ' + maxValue + '.\n';
              break;
            }
          }

          if (test == 'inRange') {
            // range-check
            pos = testArgs.indexOf(':');
            min = testArgs.substring(0,pos); 
            max = testArgs.substring(pos+1);
            if (objWaarde <= min || max <= objWaarde) {
              errors += '- ' + objNaam + ' moet een nummer bevatten groter of gelijk aan ' + min + ' en kleiner of gelijk aan ' + max + '.\n';
              break;
            }
          }


          if (test == 'isNumber') {
            // numeric
            if (isNaN(objWaarde)) {
              errors += '- ' + objNaam + ' moet numeriek zijn.\n';
              break;
            }
          }

          if (test == 'isLegecombobox') {
             if (objWaarde == 'GEEN' || objWaarde == '0') {
              errors += '- Uit de lijst ' + objNaam + ' moet een waarde gekozen worden.\n';
              break;	
            }
          }


          if (test == 'isDate') {
            // datum
            datumFormaatComponenten = testArgs.split("-");
            aantalFormaatComponenten = datumFormaatComponenten.length;
            datumComponenten = objWaarde.split("-");
            aantalComponenten = datumComponenten.length;



            if (aantalComponenten == aantalFormaatComponenten) {
              for (dc=0; dc<aantalComponenten; dc++) {
                if (!isNaN(datumComponenten[dc])) {
                  if (datumFormaatComponenten[dc] == "dd" || datumFormaatComponenten[dc] == "d") {
                    if (datumComponenten[dc] > 0 && datumComponenten[dc] <= 31) {
                      dag = true;
                      dagindex = dc;
                    }
                  }
                  if (datumFormaatComponenten[dc] == "yyyy") {
                    if (datumComponenten[dc] > 999) {
                      jaar = true;
                    }
                  }
                  if (datumFormaatComponenten[dc] == "yy") {
                    if (datumComponenten[dc] >= 0 && datumComponenten[dc] <= 99) {
                      jaar = true;
                    }
                  }
                }
              } // next
              if (dag && jaar) {
                kalender = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
                for (dc=0; dc<aantalComponenten; dc++) {
                  if (!isNaN(datumComponenten[dc])) {
                    if (datumFormaatComponenten[dc] == "mm" || datumFormaatComponenten[dc] == "m") {
                      if (datumComponenten[dc] > 0 && datumComponenten[dc] <= 12) {
                        maand = true;

                        if (kalender[datumComponenten[dc]-1] >= datumComponenten[dagindex]) {
                          dag = true;
                        }
                        else {
                          dag = false;
                        }
                        break;
                      }
                    }
                  }
                } // next
              }

              if (!(dag && maand && jaar)) {
                errors += '- ' + objNaam + ' moet een geldige datum bevatten.\n';
                break;
              }
            }
            else {
                errors += '- ' + objNaam + ' moet in het formaat "' + testArgs + '" worden ingevoerd.\n';
                break;
            }
          }



          if (test == 'isProof11') {
            // 11-proef voor ISBN- en bankrekeningnummers
            lenObjWaarde = objWaarde.length;

            if (testArgs == 'B' || testArgs == 'S' || testArgs == 'ISBN') {
              // voer 11-proof uit.
              if (lenObjWaarde == 9 && (testArgs == 'B' || testArgs == 'S') || lenObjWaarde == 10 && testArgs == 'ISBN') {
                aantalTeCumCijfers = lenObjWaarde;
                if (testArgs == 'B') { // bankrekeningnr
                  controleGetal = 0;
                }
                if (testArgs == 'S') { // sofinummer
                  ch = objWaarde.charAt(8);
                  controleGetal = parseInt(ch);
                  aantalTeCumCijfers--;
                }
                if (testArgs == 'ISBN') { // ISBN-nummer
                  objWaarde = objWaarde.replace(/[- ]/g, "");
                  ch = (objWaarde.charAt(9)).toUpperCase();
                  if (ch=='X') {
                    controleGetal = 10;
                  }
                  else {
                    controleGetal = parseInt(ch);
                  }
                }
                som = 0;
                for (c=0; c<aantalTeCumCijfers; c++) {
                  cijfer = objWaarde.charAt(c);
  
                  if (isNaN(cijfer)) {
                    som = controleGetal + 1;
                    break;
                  }
                  som += cijfer * (lenObjWaarde - c);
                }
 
                if (som % 11 != controleGetal) {
                  errors += '- ' + objNaam + ' ' + objWaarde + ' voldoet niet aan de 11-proef.\n';
                  break;
                }
              }
              else  {
                errors += '- ' + objNaam + ' ' + objWaarde + ' voldoet niet aan de 11-proef.\n';
                break;
              }
            }
          }

          if (test == 'isPostcode') {
            // postcode
            landcode = testArgs;
            if (landcode == '6030' || landcode == 'NL') {
              objWaarde = objWaarde.toUpperCase();
              objWaarde = objWaarde.replace(' ', '');
              postcode = objWaarde;
              if (postcode.length == 6) {
                if (!isNaN(postcode.substring(1, 4))) {
                  if (postcode.substr(4,2) >= 'AA' && postcode.substr(4,2) <= 'ZZ') {
                    // geldige NL-postcode
                    break;
                  }
                }
              }
              errors += '- ' + objNaam + ' moet het formaat 9999AA hebben.\n';
              break;
            }
          }

        } 
      } // next
    }
  } 
  if (errors) 
     alert('De volgende fouten treden op:\n'+errors);
  document.MM_returnValue = (errors == '');
}