﻿$(function() {
    formHelper.bindButton($("#login_button"));
});

function loginSubmitted(result) {
    if (result.Error == null) {
        $("#login_form").hide();

        $("#login_success").show();

        if (result.LoginUrl != null) {
            location.href = result.LoginUrl;
        }
    } else {
        $loginFailed = $("#login_failed ul");
        $("<li>").appendTo($loginFailed).text(result.Error);
        $loginFailed.parent().fadeIn("2000");
    }
}

var formHelper =
    {
        Stage: { Start: 1, ErrorReceived: 2, AllErrorsReceived: 3, NoErrors: 4 },

        submitForm: function(form, submitButtonName, errorCallback) {
            if (!errorCallback)
                errorCallback = this.ajaxValidationErrorCallback;

            var $form = $(form);

            errorCallback(formHelper.Stage.Start);

            $ProMesh.ValidateForm($form, function(valResult) {
                if (valResult.Success) {
                    errorCallback(formHelper.Stage.NoErrors);

                    Login.Submit(form, loginSubmitted);

                    return;
                }

                $.each(valResult.Messages, function(i, msg) { errorCallback(formHelper.Stage.ErrorReceived, msg.Message, msg.ControlNames); });

                errorCallback(formHelper.Stage.AllErrorsReceived);
            });
        },

        ajaxValidationErrorCallback: function(phase, errorMsg, fieldNames) {
            var $valSummary = $(".validation_summary ul");

            if (phase == formHelper.Stage.Start) {
                $valSummary.parent().hide();
                $valSummary.empty();

                $("#login_failed ul").empty().parent().hide();

                $("form .error").removeClass("error");

                return;
            }

            if (phase == formHelper.Stage.ErrorReceived) {
                $("<li>").appendTo($valSummary).text(errorMsg);

                $.each(fieldNames, function(i, name) { $("input[name=" + name + "]").addClass("error"); });

                return;
            }

            if (phase == formHelper.Stage.AllErrorsReceived) {
                $valSummary.parent().fadeIn("slow");

                return;
            }
        },

        bindButton: function(button) {
            $(button).click(function() { formHelper.submitForm($(button)[0].form, $(button).attr("name")); return false; });
        }
    }
