﻿var validatorCollection = [];

function Validator(validate, defaultValue, errorMessage, errorMessageId, expression, validationGroup) {
    this.Id = validate + "_validator";
    this.Validate = validate;
    this.DefaultValue = defaultValue;
    this.ErrorMessage = errorMessage;
    this.ErrorMessageId = errorMessageId;
    this.Expression = expression;
    this.ValidationGroup = validationGroup;
    this.IsValid = function() {
        var isValid = true;
        var $control = $('#' + this.Validate);
        
        if (this.Expression == null) { //Required Field
            if ($control.val() == this.DefaultValue || $control.val() == '') {
                isValid = false;
            }
        } else if ($control.val() != '') { // Regular Expression
            if (!RegExp(this.Expression).test($control.val())) {
                isValid = false;
            }
        }

        var $errorMessageContainer = $('#' + this.ErrorMessageId);
        if (isValid) {
            $errorMessageContainer.hide();
        } else {
            $errorMessageContainer.show();
            $errorMessageContainer.attr("title", this.ErrorMessage);
        }
        return isValid;
    };
}

function WireValidator(obj) {
    $(document).ready(function() {
        if (validatorCollection[obj.ValidationGroup] == undefined) validatorCollection[obj.ValidationGroup] = [];
        validatorCollection[obj.ValidationGroup].push(obj);
        $('#' + obj.Validate).blur(function() { obj.IsValid() });
    });
}

function IsValid(failureId, groupName) {
    var isValid = true;
    jQuery.each(validatorCollection[groupName], function() {
        if (!this.IsValid()) {
            isValid = false;
        }
    });
    if (failureId != null) {
        if (!isValid) {
            $('.' + failureId).show();
        } else {
            $('.' + failureId).hide();
        }
    }
    
    return isValid;
}