var eersteKeer = true;
var EMPTY = 0;
var EMAIL = 1;
var INTEGER = 2;
var URL = 3;
var SELECT = 4;
var URLSTRING = 5;
var UNIQUE = 6;
var PASSWORD = 7;

window.onload = function() {
    for (i = 0; i < document.forms.length; i++) {
        if (document.forms[i].elements['actie']) {
            if (document.forms[i].elements['actie'].className.indexOf('notallowed') != -1) {
                document.forms[i].elements['submit'].parentNode.className = 'error';
            }
        }
        document.forms[i].onsubmit = function() {
            return validate(this)
        }
    }
}

function validate(frm) {
    if (frm.elements['actie']) {
        if (frm.elements['actie'].className.indexOf('notallowed') != -1) {
            alert('U heeft geen rechten om dit te doen');
            return false;
        }
    }
    var gelukt = true;
    eersteKeer = true;
    for (i = 0;i < frm.length; i++) {
        var cls = frm.elements[i].className.toLowerCase();
        if (cls != '') {
            field = frm.elements[i];
            if (cls.indexOf('required') != -1) {
                if (field.value == '' || trim(field.value) == '') {
                    maakError(field, EMPTY);
                    gelukt = false;
                }
            }
            if (trim(field.value) != '') {
                if (cls.indexOf('email') != -1) {
                    var ptrn = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
                    if (!ptrn.test(field.value)) {
                        if (ptrn.test(trim(field.value))) {
                            field.value = trim(field.value);
                        } else {
                            maakError(field, EMAIL);
                            gelukt = false;
                        }
                    }
                }
                if (cls.indexOf('integer') != -1) {
                    var ptrn = /^([0-9])+$/;
                    if (!ptrn.test(field.value)) {
                        if (ptrn.test(trim(field.value))) {
                            field.value = trim(field.value);
                        } else {
                            maakError(field, INTEGER);
                            gelukt = false;
                        }
                    }
                }
                if (cls.indexOf('urlstring') != -1) {
                    var ptrn = /^([a-zA-Z0-9\._-])*$/;
                    if (!ptrn.test(field.value)) {
                        if (ptrn.test(trim(field.value))) {
                            field.value = trim(field.value);
                        } else {
                            maakError(field, URLSTRING);
                            gelukt = false;
                        }
                    }
                }
                if (cls.indexOf('notfirst') != -1) {
                    if (field.value < -10) {
                        maakError(field, SELECT);
                        gelukt = false;
                    }
                }
                if (cls.indexOf('unique') != -1) {
                    if (document.getElementById('unique').value.indexOf('|' + field.value + '|') != -1) {
                        maakError(field, UNIQUE);
                        gelukt = false;
                    }
                }
                if (cls.indexOf('md5') != -1) {
                    if (document.getElementById('unique').value.indexOf('|' + hex_md5(field.value) + '|') != -1) {
                        maakError(field, UNIQUE);
                        gelukt = false;
                    }
                }
                if (cls.indexOf('password') != -1) {
                    var passwordField = field;
                }
                if (cls.indexOf('pwcheck') != -1) {
                    if (passwordField) {
                        if (passwordField.value != field.value) {
                            maakError(passwordField, PASSWORD);
                            maakError(field, PASSWORD);
                            gelukt = false;
                        }
                    }
                }
            }
            if (gelukt && cls.indexOf('confirm') != -1) {
                var test = confirm('Weet u het zeker?');
                if (!test) {
                    return false;
                }
            }
        }
    }
    return gelukt;
}
function removeError(obj) {
    obj.parentNode.className = '';
    if (obj.error) {
        obj.parentNode.parentNode.removeChild(obj.error);
        obj.error = null;
    }
}
function maakError(field, type) {
    var cls = field.className.toLowerCase();
    field.parentNode.className = 'error';
    field.onkeydown = function() {
        removeError(this);
    };
    field.onchange = function() {
        removeError(this);
    };
    if (cls.indexOf('alert') != -1 && eersteKeer) {
        if (field.title) {
            if (type == EMPTY) {
                alert('U bent vergeten het veld \'' + field.title + '\' in te vullen');
            } else if (type == EMAIL) {
                alert('Het door u ingevoerde e-mailadres bij \'' + field.title + '\' blijkt niet te kloppen');
            } else if (type == INTEGER) {
                alert('Het door u ingevoerde getal bij \'' + field.title + '\' blijkt niet te kloppen');
            } else if (type == SELECT) {
                alert('Selecteer een andere optie bij \'' + field.title + '\'');
            } else if (type == URLSTRING) {
                alert('De ingevoerde tekst bij \'' + field.title + '\' is niet geldig');
            } else if (type == UNIQUE) {
                alert('De ingevoerde naam bij \'' + field.title + '\' is al in gebruik');
            } else if (type == PASSWORD) {
                alert('Deze wachtwoorden zijn niet hetzelfde');
            }
        } else {
            if (type == EMPTY) {
                alert('U bent vergeten een veld in te vullen.');
            } else if (type == EMAIL) {
                alert('Dit e-mailadres klopt niet');
            } else if (type == INTEGER) {
                alert('Dit is geen getal');
            } else if (type == SELECT) {
                alert('Selecteer een andere optie');
            } else if (type == URLSTRING) {
                alert('De ingevoerde tekst is niet geldig');
            } else if (type == UNIQUE) {
                alert('De ingevoerde naam is al in gebruik');
            } else if (type == PASSWORD) {
                alert('Deze wachtwoorden zijn niet hetzelfde');
            }
        }
    }
    if (cls.indexOf('nohelp') == -1) {
        if (!field.error) {
            var hulpTekstVeld = document.createElement('td');
            hulpTekstVeld.className = 'hulp';
            if (type == EMPTY) {
                hulpTekstVeld.appendChild(document.createTextNode('Dit veld moet ingevuld worden'));
            } else if (type == EMAIL) {
                hulpTekstVeld.appendChild(document.createTextNode('Dit e-mailadres klopt niet'));
            } else if (type == INTEGER) {
                hulpTekstVeld.appendChild(document.createTextNode('Dit is geen getal'));
            } else if (type == SELECT) {
                hulpTekstVeld.appendChild(document.createTextNode('Selecteer een andere optie'));
            } else if (type == URLSTRING) {
                hulpTekstVeld.appendChild(document.createTextNode('Ongeldige tekst'));
            } else if (type == UNIQUE) {
                hulpTekstVeld.appendChild(document.createTextNode('Deze naam is al in gebruik'));
            } else if (type == PASSWORD) {
                hulpTekstVeld.appendChild(document.createTextNode('Deze wachtwoorden zijn niet hetzelfde'));
            }
            field.parentNode.parentNode.appendChild(hulpTekstVeld);
            field.error = hulpTekstVeld;
        }
    }
    if (eersteKeer) {
        if (field.select) field.select();
        field.focus();
        eersteKeer = false;
    }
}

function trim(tekst) {
    var tmpLeeg = new String(" \t\n\r");
    var tmpString = new String(tekst);
    if (tmpLeeg.indexOf(tmpString.charAt(0)) != -1) {
        var j = 0;
        var i = tmpString.length;
        while (j < i && tmpLeeg.indexOf(tmpString.charAt(j)) != -1) {
            j++;
        }
        tmpString = tmpString.substring(j, i);
   }
   if (tmpLeeg.indexOf(tmpString.charAt(tmpString.length-1)) != -1) {
        var i = tmpString.length - 1;
        while (i >= 0 && tmpLeeg.indexOf(tmpString.charAt(i)) != -1) {
            i--;
        }
        tmpString = tmpString.substring(0, i + 1);
   }
   return tmpString;
}
