// THE validate function
function MM_validateForm()
    {
    // validaties

    var valVereist = "veldVoorwaarde.charAt(0) == 'R'";

    var valEmail = "veldVoorwaarde.indexOf('isEmail') != -1";
    var valPostcode = "veldVoorwaarde.indexOf('isPostcode') != -1";
    var valDatum = "veldVoorwaarde.indexOf('isDatum') != -1";
    var valTelefoon = "veldVoorwaarde.indexOf('isTelefoon') != -1";
    var valSpeciaal = "veldVoorwaarde.indexOf('isSpecial') != -1";

    // fout berichten
    var errVoor = "- het veld '";
    var errEenFout = "De volgende fout is opgetreden:\n";
    var errMeerFouten = "De volgende fouten zijn opgetreden:\n";
    var errVereist = "' is vereist\n";

    var errEmail = "' bevat geen geldig e-mailadres\n";
    var errPostcode = "' bevat geen geldige postcode\n";
    var errDatum = "' bevat geen geldige datum\n";
    var errTelefoon = "' bevat geen geldig telefoonnummer\n";
    var errAangevinkt = "' is niet aangevinkt\n";
    var errMaxtekensBegin = "' bevat meer dan ";
    var errMaxtekensEind = " tekens\n";
    var errType = "' bevat tekens die niet geaccepteerd worden\n";
    var errScheidingstekens = errType;
    
    var i, p, q, num, min, max, errors = '', args = document.MM_args, intFouten = 0;

    var veldVoorwaarde, veldNaam, veldType, val;
    for (i=0; i<(args.length-2); i+=3)
        {
        veldNaam = args[i]
        veldType = args[i+1];
        veldVoorwaarde = args[i+2];
        val = MM_findObj(args[i]);
    
        // check of veld bestaat
        if (val) {
            switch (veldType) {
                case "radio": {
                    if(eval(valVereist)) {
						var clk = 0;
                        for (j=0;j<val.length;j++) {
                            if (val[j].checked) var clk = 1; }
                        if (clk!=1)  {
                            errors += errVoor+veldNaam+errVereist;
                            intFouten++; } }
                    break; }
		case "check": {
			if(eval(valVereist)) {
                        	if (!val.checked)  {
                            		errors += errVoor+veldNaam+errAangevinkt;
                            		intFouten++;
				}
			}
                    	break;
		}
                default: {
                    if ((val = val.value)!="") {
                        // email validatie
                        if (eval(valEmail)) {
                            var enter = "\n";
                            var pAt = val.indexOf('@');
                            var pPoint = val.lastIndexOf('.');
                            var tBeforeAt = val.substring(0,pAt).length;
                            var tBetweenAtPoint = val.substring(pAt+1,pPoint).length;
                            var tAfterPoint = val.substring(pPoint+1,val.length).length;
        
                            if (!((pAt != -1) && (pPoint != -1) && (pPoint > pAt) && (tBeforeAt > "0") && (tBetweenAtPoint > "1") && (tAfterPoint > "1")))
                                { errors += errVoor+veldNaam+errEmail;
                                intFouten++; } }

                        // diverse voorwaarden validatie
                        else if (eval(valSpeciaal)) {
                                var arrVoorwaarde = veldVoorwaarde.split("|");
                                for (v=(arrVoorwaarde.length - 1);v>=0;v--)
                                    {
                                    switch (arrVoorwaarde[v].charAt(0))
                                        {
                                        case "s":
                                            {
                                            // var arrS = arrVoorwaarde[v].split("¦");
                                            // var varS = arrS[1];
                                            // var arrS = null;
                                            var varS = arrVoorwaarde[v].substring(1,arrVoorwaarde[v].length)
                                            var regS = eval('/[' + varS + ']/gi');
                                            val = val.replace(regS,""); break;
                                            }
                                        case "m":
                                            {
                                            // var arrM = arrVoorwaarde[v].split("¦");
                                            // var varM = arrM[1];
                                            // var arrM = null;
                                            var varM = arrVoorwaarde[v].substring(1,arrVoorwaarde[v].length)
                                            if (val.length > parseFloat(varM)) 
                                                {errors += errVoor+veldNaam+errMaxtekensBegin+varM+errMaxtekensEind;
                                                intFouten++;}
                                            break;
                                            }
                                        case "t":
                                            {
                                            // var arrT = arrVoorwaarde[v].split("¦");
                                            // var varT = arrT[1];
                                            // var arrT = null;
                                            var varT = arrVoorwaarde[v].substring(1,arrVoorwaarde[v].length)
                                            var regT = null;
                                            switch (varT)
                                                {
						case "a": {var regT = /[a-zA-Z]/gi; break;}
                                                case "an": {var regT = /[a-zA-z0-9]/gi; break;}
                                                case "n": {var regT = /[0-9]/gi; break;}
                                                }
                                            for (t=0;t<val.length;t++)
                                                { if (val.charAt(t).search(regT)==-1) {errors += errVoor+veldNaam+errType; intFouten++; break;} }
                                            break;
                                            }
                                        }
                                    }
                                }

                        // telefoon validatie
                        else if (eval(valTelefoon)) {
                            var IsTelefoon = false;
                            if ((isSignedInteger(stripCharsInBag(val,telScheidingstekens))) && (stripCharsInBag(val,telScheidingstekens).length == 10)) IsTelefoon = true;
                            if (!IsTelefoon) {
                            errors+=errVoor+veldNaam+errTelefoon;
                            intFouten++; } }

                        // datum validatie
                        else if (eval(valDatum)) {
                            var IsDatum = false;
                            if (isNumber(stripCharsInBag(val,datScheidingstekens))) {
                                var datScheidingsteken = " ";
                                for (x=0;x<val.length;x++) {
                                    var c = val.charAt(x);
                                    if (datScheidingstekens.indexOf(c) != -1) {
                                        datScheidingsteken = c;
                                        break; } }
                                if (datScheidingsteken != " ") {
                                    var arrDatum = val.split(datScheidingsteken);
                                    if ((arrDatum.length <= 3) && (arrDatum.length >= 2)) {
                                        if (arrDatum.length == 2) IsDatum = isDate(arrDatum[0],arrDatum[1]);
                                        else IsDatum = ((isYear(arrDatum[2])) & (isDate(arrDatum[0],arrDatum[1],arrDatum[2])));
                                            } } }

                            if (!IsDatum) {
                            errors+=errVoor+veldNaam+errDatum;
                            intFouten++; } }

                        // validatie postcode
                        else if (eval(valPostcode)) {
                            if (val.length < 6 || val.length > 7) {
                                errors+=errVoor+veldNaam+errPostcode;
                                intFouten++; }
                            else {
                                var isCorrect = 1;
                                for (j = 0; (j < 4) && (isCorrect == 1); j++) {
                                    if (val.charAt(j) < "0" || val.charAt(j) > "9") {
                                        errors+=errVoor+veldNaam+errPostcode;
                                        intFouten++;
                                        isCorrect = 0; } }
                                if (isCorrect = 1) {
                                    if (val.indexOf(' ') != -1) {
                                        var startAt = 5 }
                                    else {
                                        var startAt = 4 }
                                    for (j=startAt; (j < (startAt + 2)) && (isCorrect == 1); j++) {
                                        var letter = val.charAt(j)
                                        if ((letter < "a" || letter > "z") && (letter < "A" || letter > "Z")) {
                                            errors+=errVoor+veldNaam+errPostcode;
                                            intFouten++;
                                            isCorrect = 0; } } } }
                            } // einde validaties met waarde
                        } // waarde is leeg: is waarde vereist?
                    else if (eval(valVereist)) {
                        errors += errVoor+veldNaam+errVereist;
                        intFouten++; }
                    } // einde validaties
                } // einde switch
            } // einde object val
        } // einde for ... next loop van alle args

    // als er fouten zijn: alert(fouten)
    if (errors) {
        if (intFouten > 1) alert(errMeerFouten+errors);
        else alert(errEenFout+errors); }

    document.MM_returnValue = (errors == '');
    return document.MM_returnValue; 
    }

// variabelen
var telScheidingstekens = "- ";
var datScheidingstekens = "-/";

// dagen per maand
var daysInMonth = new Array(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

// common functions
function checkMaxchars(what,limit) {
    if (what.value.length > limit) return false;
    else return true; }
    
function stripCharsInBag (s, bag) {
    var i, returnString = "";
    for (i = 0; i < s.length; i++) {
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c; }
    return returnString; }
    
function isSignedInteger(s) {
    var IsSignedInteger = true;
    var startPos = 0;
    if ((s.charAt(0) == "-") || (s.charAt(0) == "+")) startPos = 1;
    for (x=startPos;x<s.length;x++) {
        if(!((s.charAt(x) >= "0") && (s.charAt(x) <= "9"))) IsSignedInteger = false; }
    return IsSignedInteger; }

function isNumber(s) {
    for (x=0;x<s.length;x++) {
        if(!((s.charAt(x) >= "0") && (s.charAt(x) <= "9"))) return false; }
    return true; }

function isIntegerInRange(s, a, b) {
    if (!isNumber(s)) return false;
    var num = parseInt(s);
    return ((num >= a) && (num <= b)); }
    
function daysInFebruary (year) {
    return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 ); }
    
function isDate() {
    var intDay = parseInt(isDate.arguments[0]);
    var intMonth = parseInt(isDate.arguments[1]);
    var datCurrent = new Date();
    var intYear = ((isDate.arguments[2]!=null) ? isDate.arguments[2] : datCurrent.getYear());
    if (! isYear(intYear) );
    if (!(isIntegerInRange(intDay,1,31) && isIntegerInRange(intMonth,1,12))) return false;
    if (intDay > daysInMonth[intMonth]) return false; 
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
    return true; }
    
function isYear(s) {
    if (!isNumber(s)) return false;
    return (isIntegerInRange(s,0,99) || isIntegerInRange(s,1900,2100)); }


function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x; }