function showOptions() {
    var options = document.getElementById("options");
    var optionsShown = document.getElementById("optionsShown");
    if (options.style.display == "block") {
        options.style.display = "none";
        optionsShown.innerHTML = "+";
    } else {
        options.style.display = "block";
        optionsShown.innerHTML = "-";
    }
}

function numericField(inputField, inputEvent) {
    var key = inputEvent.which;
    if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) ) {
       return true;
    }
    var letter = String.fromCharCode(key);
    var regExpr = new RegExp("\\d");
    return (letter == "." || letter == "," || regExpr.test(letter));
}

function validateEmail(value) {
    var regexp = new RegExp("(\\w|-|\\.)+@((\\w|-)+\\.)+\\w+");
    return value.match(regexp);
}

function validateAmount(value) {
    var priceValue = value.replace(",", ".");
    if (isNaN(priceValue)) {
        return false;
    }
    return (priceValue >= 0);
}

function validateTrue(value) {
    return true;
}

function validateLoginForm() {
    var formName = "login";
    var formFields = new Array("username", "password");
    var validators = new Array(validateEmail, validateTrue);
    return validateFields(formName, formFields, validators);
}

function validateForgotPwdForm() {
    return validateFields("forgotpwd", new Array("email"), new Array(validateEmail));
}

function validateRegistrationForm() {
    return validateFields("registration", new Array("email", "name"), new Array(validateEmail, validateTrue));
}

function validateNewPurposeForm() {
    var formName = "purpose";
    var formFields = new Array("name", "amountString");
    var validators = new Array(validateTrue, validateAmount);
    return validateFields(formName, formFields, validators);
}

function validatePaymentForm() {
    var formName = "payment";
    var formFields = new Array("name");
    var validators = new Array(validateTrue);
    var formValid = validateFields(formName, formFields, validators);
    var dateDay = getFieldValue(formName, "dateDay");
    var dateMonth = getFieldValue(formName, "dateMonth");
    var dateYear = getFieldValue(formName, "dateYear");
    if (dateDay == "" || isNaN(dateDay) ||
        dateMonth == "" || isNaN(dateMonth) ||
        dateYear == "" || isNaN(dateYear)) {
        document.getElementById("paymentDate_error").innerHTML = "veld is ongeldig";
        formValid = false;
    } else {
        document.getElementById("paymentDate_error").innerHTML = "";
    }
    var paymentMethods = document.getElementById(formName)["paymentMethods"];
    var paymentMethodsChecked = false;
    for (var i = 0; i < paymentMethods.length; i++) {
        if (paymentMethods[i].checked) {
            paymentMethodsChecked = true;
        }
    }
    if (!paymentMethodsChecked) {
        document.getElementById("paymentMethods_error").innerHTML = "Geef ten minste een betaalmethode";
        formValid = false;
    } else {
        document.getElementById("paymentMethods_error").innerHTML = "";
    }
    return formValid;
}

function validateSavePurpose() {
    var formName = "purpose";
    var fieldNames = new Array("owner.email");
    var validators = new Array(validateEmail);
    return validateFields(formName, fieldNames, validators);
}

function validateFields(formName, formFields, validators) {
    var fieldsFilled = validateRequiredFields(formName, formFields);
    var fieldsValid = validateFieldsFormat(formName, formFields, validators);
    return (fieldsFilled && fieldsValid);
}

function validateRequiredFields(formName, formFields) {
    var formValid = true;
    for (var i = 0; i < formFields.length; i++) {
        var value = getFieldValue(formName, formFields[i]);
        var errorField = document.getElementById(formFields[i] + "_error");
        if (value == null || value == "") {
            errorField.innerHTML = "veld is verplicht";
            formValid = false;
        } else {
            errorField.innerHTML = "";
        }
    }
    return formValid;
}

function validateFieldsFormat(formName, formFields, validatorFunctions) {
    var formValid = true;
    for (var i = 0; i < formFields.length; i++) {
        var value = getFieldValue(formName, formFields[i]);
        var errorField = document.getElementById(formFields[i] + "_error");
        if (value == null || value == "") {
            continue;
        }
        if (!validatorFunctions[i](value)) {
            errorField.innerHTML = "veld is ongeldig";
            formValid = false;
        } else {
            errorField.innerHTML = "";
        }
    }
    return formValid;
}

function getFieldValue(formName, fieldName) {
    return document.getElementById(formName)[fieldName].value;
}

function getErrorsContainer() {
    return document.getElementById("errors");
}


