﻿function ValidateForm(formContainer) {
    var isValid = ValidateRules(formContainer);

    return isValid;
}

function ValidateRules(formContainer, rules) {
    if (rules == null || rules == undefined) {
        rules = 'required,numeric,email,cprnumber,zipcode,phonenumber';
    }
    HideErrorMessages(formContainer, rules);
    var ruleList = rules.split(',');
    var isValid = false;
    for (var index = 0; index < ruleList.length; index++) {
        isValid = ValidateRule(formContainer, ruleList[index]);
        if (!isValid) {
            break;
        }
    }

    return isValid;
}

function HideErrorMessages(container, rules) {
    var ruleList = rules.split(',');
    var isValid = false;
    for (var index = 0; index < ruleList.length; index++) {
        $(container).find('span.' + ruleList[index]).hide();
    }
}

function ValidateRule(container, validationRule) {
    var isValid = true;
    $(container).find('input.' + validationRule).each(function (index) {
        var inputValue = $(this).val();
        if (validationRule == 'required' && inputValue == '') {
            isValid = false;
        }
        else if (validationRule == 'numeric' && inputValue != '' && isNaN(inputValue)) {
            isValid = false;
        }
        else if (validationRule == 'email') {
            var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
            if (inputValue != '' && !pattern.test(inputValue)) {
                isValid = false;
            }
        }
        else if (validationRule == 'cprnumber') {
            var pattern = new RegExp(/^\d{10,10}$/i);
            if (inputValue != '' && !pattern.test(inputValue)) {
                isValid = false;
            }
        }
        else if (validationRule == 'zipcode') {
            var pattern = new RegExp(/^\d{3}[0-9]$/i);
            if (inputValue != '' && !pattern.test(inputValue)) {
                isValid = false;
            }
        }
        else if (validationRule == 'phonenumber') {
            var pattern = new RegExp(/^\d{8}$/i);
            if (inputValue != '' && !pattern.test(inputValue)) {
                isValid = false;
            }
        }
        else if (validationRule == 'date') {
       
            var pattern = new RegExp(/^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$/i);
            if (!pattern.test(inputValue)) {
                isValid = false;
            }
        }

        if (!isValid) {
            var errorSpan = $($(this)[0].parentNode.parentNode).find('span.' + validationRule);
            if (errorSpan.length > 0) {
                errorSpan.show();
            }
        }
    });
    return isValid;
}
