﻿$(function() {
    formHelper.bindButton($("#register_button"));

    $("#register_email").change(function() {
        Register.ValidateUniqueEmail($("#register_email")[0].form, registerEmailChanged);
    });

    $("#register_username").change(function() {
        Register.ValidateUniqueUsername($("#register_username")[0].form, registerUsernameChanged);
    });
});

function registerEmailChanged(result) {
    if (result.Error != null) {
        $("#email_unique").attr("innerHTML", result.Error).show();
    } else {
        $("#email_unique").attr("innerHTML", "").hide();
    }
}

function registerUsernameChanged(result) {
    if (result.Error != null) {
        $("#username_unique").attr("innerHTML", result.Error).show();
    } else {
        $("#username_unique").attr("innerHTML", "").hide();
    }
}

function registerSubmitted(result) {
    if (result.Error == null) {
        $("#register_form").hide();

        $("#register_success").fadeIn("2000");

        // Track registration successes
        pageTracker._trackPageview("/registreer2");
    } else {
        $("#register_failed").attr("innerHTML", result.Error).fadeIn("2000");

        $("#register_button").removeAttr("disabled");
    }
}

var formHelper =
    {
        Stage: { Start: 1, ErrorReceived: 2, AllErrorsReceived: 3, NoErrors: 4 },

        submitForm: function(form, submitButtonName, errorCallback) {
            $("#register_button").attr("disabled", "disabled");

            if (!errorCallback)
                errorCallback = this.ajaxValidationErrorCallback;

            var $form = $(form);

            errorCallback(formHelper.Stage.Start);

            $ProMesh.ValidateForm($form, function(valResult) {
                if (valResult.Success) {
                    errorCallback(formHelper.Stage.NoErrors);

                    Register.Submit(form, registerSubmitted);

                    return;
                }
                
                $("#register_button").removeAttr("disabled");

                $.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();

                $("#register_failed").attr("innerHTML", "").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; });
        }
    }
