﻿/* ----------- Useful JQuery Functions ----------- */

(function ($) {

    /* ----------- Primary Navigation ----------- */

    show_nav = function (obj) {
        pos = $("#nav_" + obj).offset().left - $(".main_nav").offset().left;
        $("#nav_" + obj).addClass("hover");
        $("#sub_nav_" + obj).css('display', 'block');
        $("#sub_nav_" + obj).css('position', 'absolute');
        if (pos < 560) {
            $("#sub_nav_" + obj).css('left', pos + "px");
        }
        else {
            width = $("#sub_nav_" + obj).width() - $("#nav_" + obj).width() - 18;
            $("#sub_nav_" + obj).css('left', (pos - width) + "px");
        }
    }

    hide_nav = function (obj) {
        $("#nav_" + obj).removeClass("hover");
        $("#sub_nav_" + obj).css('position', 'static');
        $("#sub_nav_" + obj).css('display', 'none');
    }

    /* ----------- Other ----------- */

    DoAjaxFormSubmission = function (operationname, form, submitname) {
        var dataString = "";
        var formdata = "&";
        formdata = formdata + $(form).serialize();
        dataString = dataString + '&ajaxoperationame=' + operationname + formdata;

        $.ajax({
            type: "post",
            url: "/resources/ajax/AjaxOperations.aspx",
            data: dataString,
            dataType: "json",
            success: function (data) {
                $('.ajaxerror').hide();

                //was the operation success full, data.IsValid equivalent of ConductIT.InvalidFields.IsValid
                if (data.IsValid) {
                    $(form).append('<input type="hidden" name="' + submitname + '" value="Submit" />');
                    form.submit();
                } else {
                    //loop over every invalid field and show the predefined error message
                    if (data.InvalidFieldsArray != null && data.InvalidFieldsArray.length > 0) {
                        for (i = 0; i <= data.InvalidFieldsArray.length; i++) {
                            if (data.InvalidFieldsArray[i] != null) {
                                var selector = '#msg_' + data.InvalidFieldsArray[i];
                                $(selector).show();
                            }
                        }
                    }
                }
            }
        });
    }

    /* ----------- Form Field Validation ----------- */

    //Validate a required field
    ValidateRequiredField = function (field) {
        var fieldname = $(field).attr('name');
        var selector = '#msg_' + fieldname; //normal error message based on id of field

        if ($(field).val().length > 0) {
            $(selector).hide();
        } else {
            $(selector).show();
        }
    }

    //Validate email address
    ValidateEmailFormat = function (field) {
        var fieldname = $(field).attr('name');
        var selector = '#msg_format_' + fieldname;

        if ($(field).val().length > 0) {
            if (!IsValidEmail($(field).val())) {
                $(selector).show();
                return false;
            } else {
                $(selector).hide();
            }
        } else {
            $(selector).show();
        }
        return true;
    }

    //Validate field format
    ValidateFieldFormat = function (field, regex) {
        var fieldname = $(field).attr('name');
        var selector = '#msg_format_' + fieldname;

        var pattern = new RegExp(regex);

        if ($(field).val().length > 0) {
            if (pattern.test($(field).val())) {
                $(selector).hide();
            } else {
                $(selector).show();
            }
        }
    }

    //Validate postcode BFPO format
    ValidatePostcodeBFPOFormat = function (field) {
        var fieldname = $(field).attr('name');
        var selector = '#msg_bfpo_' + fieldname;

        var pattern = new RegExp('^(BFPO).*?', 'i');

        if ($(field).val().length > 0) {
            if (pattern.test($(field).val())) {
                $(selector).show();
            } else {
                $(selector).hide();
            }
        }
    }

    //Validate field length
    ValidateFieldLength = function (field, minlength) {
        var fieldname = $(field).attr('name');
        var selector = '#msg_length_' + fieldname;

        var value = $(field).val().replace(/\s/g, '');

        if (value.length > 0) {
            if (value.length >= minlength) {
                $(selector).hide();
            } else {
                $(selector).show();
            }
        } else {
            $(selector).show();
        }
    }

    //Check if field values match
    ValidateComparisonField = function (field) {
        var fieldid = $(field).attr('id');
        var field1 = fieldid;
        var field2 = field1.replace('_conf', '');

        var selector = '#msg_' + field1;
        var comparisonSelector = '#msg_comparison_' + field2;

        field1 = '#' + field1;
        field2 = '#' + field2;

        if ($(field).val().length > 0) {
            $(selector).hide();

            if ($(field1).val() !== $(field2).val()) {
                $(comparisonSelector).show();
            } else {
                $(comparisonSelector).hide();
            }
        } else {
            $(selector).show();
            $(comparisonSelector).hide();
        }
    }

    //Validate email format
    IsValidEmail = function (emailvalue) {
        var pattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9][a-zA-Z0-9.-]+[\.]{1}[a-zA-Z]{2,4}$/;
        return pattern.test(emailvalue);
    }

    //Validate field via AJAX call
    DoAjaxFieldValidation = function (operationname, field, operationtype) {
        var dataString = "";
        var fieldname = $(field).attr('name');
        var fielddata = "&";
        var errormessage = operationtype + '_' + fieldname;

        fielddata = fielddata + fieldname + '=' + $(field).val();
        dataString = dataString + '&ajaxoperationame=' + operationname + fielddata;

        $.ajax({
            type: "post",
            url: "/resources/ajax/AjaxOperations.aspx",
            data: dataString,
            dataType: "json",
            success: function (data) {
                //was the operation success full, data.IsValid equivalent of ConductIT.InvalidFields.IsValid
                if (data.IsValid) {
                    $('#msg_' + errormessage).hide();
                } else {
                    //loop over every invalid field and show the predefined error message
                    if (data.InvalidFieldsArray != null && data.InvalidFieldsArray.length > 0) {
                        for (i = 0; i <= data.InvalidFieldsArray.length; i++) {
                            if (data.InvalidFieldsArray[i] != null) {
                                var selector = '#msg_' + data.InvalidFieldsArray[i];
                                $(selector).show();
                            }
                        }
                    }
                }
            }
        });
    }

})(jQuery);
