/*global PEDGE $ */

PEDGE.validation = function ()
{
    var thisValidation = this;
    thisValidation.form = PEDGE.form;

    // needed to remove the error message after each radio button
    thisValidation.validateErrorPlacement = function (error, element) {};

    thisValidation.findParentTd = function (element, level)
    {
        var retVal,
        parentTd;
        level += 1;
        if (('TD' === element[0].tagName) || (5 === level))
        {
            retVal = element;
        }
        else
        {
            parentTd = element.parent();
            retVal = this.findParentTd(parentTd, level);
        }
        return retVal;
    };

    thisValidation.highlight = function (element, errorClass)
    {
        var width,
        parent,
        container;
        element = $(element);
        if (element.is(':radio'))
        {
            container = thisValidation.findParentTd(element);
            if (container)
            {
                container.addClass('error');
            }
        }
        // dropdowns
        else if (element[0].options)
        {
            // don't duplicate adding the div multiple times
            element.removeClass('error');
            parent = element.parent();
            if (!parent.hasClass('error'))
            {
                width = element.width() + 4;
                element.wrap("<div></div>");
                parent = element.parent();
                parent.css('width', width + 'px');
                parent.addClass('error');
            }
        }
        else
        {
            element.addClass(errorClass);
        }
    };

    thisValidation.unhighlight = function (element, errorClass)
    {
        var parent,
        container;
        element = $(element);
        if (element.is(':radio'))
        {
            container = thisValidation.findParentTd(element);
            if (container)
            {
                container.removeClass('error');
            }
        }
        // dropdown
        else if (element[0].options)
        {
            // don't duplicate adding the div multiple times
            element.removeClass('error');
            parent = element.parent();
            if (parent.hasClass('error'))
            {
                parent.removeClass('error');
            }
        }
        else
        {
            element.removeClass(errorClass);
        }
    };

    thisValidation.validate = function ()
    {   
        this.form.validate(PEDGE.validateOptions);
    };

    $.validator.setDefaults({
        highlight: this.highlight,
        unhighlight: this.unhighlight,
        errorPlacement: this.validateErrorPlacement
    });

    thisValidation.validationFailed = function (e, validator)
    {
        var errors = validator.numberOfInvalids(),
        message,
        errorSummary = $('#errorSummary');
        if (errors) 
        {
            if (0 < errors)
            {
                message = 'Please complete the required fields highlighted below';
            }
            errorSummary.html(message);
            errorSummary.show();
        } 
        else 
        {
            errorSummary.hide();
        }
    };
    this.form.bind("invalid-form.validate", this.validationFailed);
    this.validate();
};

PEDGE.eform = function ()
{
    var thisEform = this;
    PEDGE.form = $('#Form1');
    thisEform.validation = PEDGE.validation;

    thisEform.init = function ()
    {
        if (undefined !== $.validator)
        {
            this.validation();
        }
        if (undefined !== $.datepicker)
        {
            var datepickerWithCalendarImageOptions = { buttonImage: 'images/SmallCalendar.gif' };
            $('.datepickerWithCalendarImage').datepicker(datepickerWithCalendarImageOptions);
            $('.datepicker').datepicker();
        }
    };
    this.init();
};

PEDGE.uploadImage = function ()
{
    var thisUploadImage = this;

    thisUploadImage.showSpinner = function ()
    {
        $('#spinner').show();
    };

    var init = function ()
    {
        var upload = $('#upload');
        upload.click(thisUploadImage.showSpinner);
    };			
    init();
};

$().ready(PEDGE.eform);


