﻿

$(document).ready(function() {
    //MultiSelect
    $('div.required input[Type=checkbox]').addClass('required_group');
    //CheckBoxes
    $('.CheckBox.required input[Type=checkbox]').addClass('required');


    var tempCheckedValue;
    $(':input.required_group').click(function() {

        var el = $(this), existingIcon = $('img.icon', el.parents('.group'));

        if (el.parents('.group').find('input[Type=checkbox]:checked').length == 0) {
            el.parents('.group').addClass('error').removeClass('checked');
        }
        else {
            el.parents('.group').removeClass('error').addClass('checked');
        }
        if (el.attr('id') !== el.parents('div.group').find('input[Type=checkbox]').eq(0).attr('id')) {
            tempCheckedValue = !el.parents('div.group').find('input[Type=checkbox]').eq(0).is(':checked')
            el.parents('div.group').find('input[Type=checkbox]').eq(0).click();
        }
        if (el.attr('id') == el.parents('div.group').find('input[Type=checkbox]').eq(0).attr('id')) {
            if (!(tempCheckedValue == undefined)) {
                el.attr('checked', tempCheckedValue);
                tempCheckedValue == undefined;
            };
        };
    });


    jQuery.validator.addMethod('required_group', function(val, el) {
        $el = $(el);
        var $group = $el.parents('.group');
        if ($group.hasClass('checked')) {
            return true;
        }
        else {
            $group.addClass('checked');
            return false;
        }

    }, 'Please select at least one.');
    jQuery.validator.addClassRules('required_group', { 'required_group': true });

    jQuery.extend(jQuery.validator.messages, { equalTo: 'Fields must match' });
    jQuery.validator.setDefaults({
        errorElement: 'a',
        wrapper: 'li',
        errorLabelContainer: '#form-messages ul',
        focusInvalid: false,
        onfocusout: false,
        groups: { CheckBoxList: "input" },

        highlight: function(element, errorClass) {
            var errorContainer = $(element).parents('div').eq(0);

            if ($(element).parents('.group').size()) {
                errorContainer = $(element).parents('.group');
                errorContainer.addClass('error').removeClass('checked');
                errorContainer.children(0).addClass('error');

            }
            if ($(element).parents('.WrapField').size()) {
                errorContainer = $(element).parents('.WrapField');
                errorContainer.addClass('DateError');
                errorContainer.children(0).addClass('error');

            }
            var existingIcon = $('img.icon', errorContainer);
            if (existingIcon.size()) {
                existingIcon.replaceWith('<img src="/App/CSS/images/icon-error.gif" alt="error" class="icon" />');
            }
            else {
                errorContainer.append('<img src="/App/CSS/images/icon-error.gif" alt="error" class="icon" />');
            }

            $(element).addClass(errorClass);
        },
        unhighlight: function(element, errorClass) {
            var errorContainer = $(element).parents('div').eq(0);
            if ($(element).parents('.group').size()) {
                errorContainer = $(element).parents('.group');
                var $fields = errorContainer.find('input[Type="checkbox"]:checked')
                if ($fields.length) {
                    errorContainer.removeClass('error').addClass('checked');
                    errorContainer.children(0).removeClass('error');
                }

            }
            if ($(element).parents('.WrapField').size()) {
                errorContainer = $(element).parents('.WrapField');
                errorContainer.removeClass('DateError');
                errorContainer.children(0).removeClass('error');

            }
            if ($(':input.error', errorContainer).size() <= 1 && !$(errorContainer).hasClass('group')) {
                $('img.icon', errorContainer).replaceWith('<img src="/App/CSS/images/icon-valid.gif" alt="Valid" class="icon" />');
            }
            if ($(errorContainer).hasClass('group') && !$(errorContainer).hasClass('error')) {
                $('img.icon', errorContainer).replaceWith('<img src="/App/CSS/images/icon-valid.gif" alt="Valid" class="icon" />');
            }

            $(element).removeClass(errorClass);
        },

        showErrors: function(errorMap, errorList) {

            var numErrors = this.numberOfInvalids();

            this.defaultShowErrors();
            if (!$('h2', errorContainer).size()) {
                errorContainer.prepend('<h2></h2>');
            }
            if (numErrors) {
                $('h2', errorContainer).html('Your form contains ' + numErrors + " error" + ((numErrors == 1) ? '' : 's') + ':');
                $(this.currentForm).removeClass('valid');
            }
            else {
                $('h2', errorContainer).text('All errors have been corrected, please continue');
                $(this.currentForm).addClass('valid');
            }
            $('a', errorContainer).each(function() {
                var el = $(this),
                fieldID = el.attr('htmlfor'),
                field = $('#' + fieldID);
                el.attr('href', '#' + fieldID);
                el.bind('click', function() {
                    field.trigger('focus');
                    $('html,body').animate(
                    { scrollTop: field.offset().top - 20 }, 100
                );
                    return false;
                });
            });
        }
    });
    var message = $('<div id="form-header"><p>Fields marked with a <abbr>*</abbr> are required.</p></div>');
    var numberOfRequiredFields = $("#aspnetForm .required").size();
    if (numberOfRequiredFields > 0) {

        message.insertBefore('fieldset:first');
    }
    var errorContainer = $('<div id="form-messages" class="ui-state-error"><ul></ul></div>').hide();
    errorContainer.insertBefore('fieldset div:first');
    $("form").bind("invalid-form.validate", function(e, validator) {
        errorContainer.show();
        $('html,body').animate(
    { scrollTop: errorContainer.offset().top - 20 }, 100
    );
        errorContainer.focus();
    });

    $("#aspnetForm").validate();
});

