﻿Cwo.RegisterNamespace("Cwo.Validation");

Cwo.Validation = function () {
    // private variables
    var validate = this,
        tickStyle = "url(/images/modal/check-tick.gif)",
        crossStyle = "url(/images/modal/check-cross.gif)";

    // public functions
    this.Bind = function (ControlID, Regex, Optional) {
        // Check if validation is needed
        if ((Regex === null) || (Regex.length === 0)) {
            return;
        }

        // Bind the events for when to validate        
        var control = $("#" + ControlID);
        control.bind("change", function () { validate.CheckValid(ControlID, Regex, Optional); });
        control.bind("keyup", function () { validate.CheckValid(ControlID, Regex, Optional); });
    };
    this.BindPasswordMatch = function (ControlID1, ControlID2) {
        var control1 = $("#" + ControlID1),
            control2 = $("#" + ControlID2);

        control1.bind("change", function () { validate.PasswordMatch(ControlID1, ControlID2); });
        control1.bind("keyup", function () { validate.PasswordMatch(ControlID1, ControlID2); });

        control2.bind("change", function () { validate.PasswordMatch(ControlID1, ControlID2); });
        control2.bind("keyup", function () { validate.PasswordMatch(ControlID1, ControlID2); });
    };
    this.BindPasswords = function (ControlID1, ControlID2, Regex) {
        var control1 = $("#" + ControlID1),
            control2 = $("#" + ControlID2);

        control1.bind("change", function () { validate.CheckValidPasswords(ControlID1, ControlID2, Regex); });
        control1.bind("keyup", function () { validate.CheckValidPasswords(ControlID1, ControlID2, Regex); });

        control2.bind("change", function () { validate.CheckValidPasswords(ControlID1, ControlID2, Regex); });
        control2.bind("keyup", function () { validate.CheckValidPasswords(ControlID1, ControlID2, Regex); });
    };
    this.CheckValid = function (ControlID, Regex, Optional) {
        // Get the value and RegExp
        var control = $("#" + ControlID),
            controlValue = control.val(),
            regex = new RegExp(Regex, "i");

        control.css("background-repeat", "no-repeat");

        // Show the correct icon
        if (Optional === true) {
            if ((controlValue === "") || (regex.test(controlValue))) {
                control.css("background-image", tickStyle);
                return true;
            } else {
                control.css("background-image", crossStyle);
                return false;
            }
        } else {
            if (regex.test(controlValue)) {
                control.css("background-image", tickStyle);
                return true;
            } else {
                control.css("background-image", crossStyle);
                return false;
            }
        }
    };

    this.MakeValid = function (ControlID) {
        // Get the value and RegExp
        var control = $("#" + ControlID);
        control.css("background", tickStyle);
    };

    this.PasswordMatch = function (ControlID1, ControlID2) {
        var control1 = $("#" + ControlID1),
            control2 = $("#" + ControlID2);

        if (control1.val() === control2.val()) {
            return true;
        } else {
            return false;
        }
    };
    this.CheckValidPasswords = function (ControlID1, ControlID2, Regex) {
        var control1 = $("#" + ControlID1),
            control2 = $("#" + ControlID2),
            regex = new RegExp(Regex),
            isValid = true;

        if (control1.val().length === 0 && !regex.test(control1.val())) {
            isValid = false;
        }
        if (control2.val().length === 0 && !regex.test(control2.val())) {
            isValid = false;
        }
        return isValid;
    };
    this.ValidateFields = function (Message, FormFields, ShowFieldErrors) {
        var errors = [],
            i,
            control,
            error,
            oneChecked = false,
            tabbed = $("#TabbedFieldSet input[type='checkbox']"),
            regex;

        if ((FormFields !== null) && (FormFields !== undefined)) {
            for (i = 0; i < FormFields.length; i += 1) {
                // Check if validation is needed
                if ((FormFields[i].RegularExpression === null) || (FormFields[i].RegularExpression.length === 0)) {
                    continue;
                }

                regex = new RegExp(FormFields[i].RegularExpression);

                if ((FormFields[i].Value !== null) && (FormFields[i].Value !== undefined)) {
                    control = $("#" + FormFields[i].HtmlControlID);
                    if (control.is(":checkbox")) {
                        window.alert(control.is(":checked"));
                        FormFields[i].Value = control.is(":checked");
                    } else {
                        FormFields[i].Value = control.val();
                    }
                }

                if (!regex.test(FormFields[i].Value)) {
                    error = {};

                    if (FormFields[i].Name === "Message") {
                        error.Message = "Message is limited to 500 characters";
                    } else if (FormFields[i].Name === "CurrentPassword") {
                        error.Message = "Existing Password is invalid";
                    } else if (FormFields[i].Name === "NewPassword") {
                        error.Message = "New Password is invalid";
                    } else if (FormFields[i].Name === "ConfirmPassword") {
                        error.Message = "Re-Entered Password is invalid";
                    } else {
                        error.Message = FormFields[i].Name + " is invalid";
                    }

                    errors[errors.length] = error;
                }
            }
        }

        if (tabbed.length > 0) {
            tabbed.each(function () { if ($(this).attr("checked")) { oneChecked = true; } });
        } else {
            oneChecked = true;
        }

        if (!oneChecked) {
            error = {};
            error.Message = "You must check one of the Service boxes";
            errors[errors.length] = error;
        }

        if (errors.length > 0) {
            if (ShowFieldErrors === false) {
                errors = null;
            }
            new Cwo.Modal().ShowErrors(Message, errors);
            return false;
        } else {
            return true;
        }
    };
};

