﻿$(function() {
    formHelper.bindButton($("#subscribe_button"));
});

function subscriberSaved(result) {
    if (result.Success == true) {
        $("#newsletter_msg").text("Bedankt voor uw inschrijving!");
        $("#newsletter_form").hide();
    } else {
        alert(result.Error);
    }
}

function subscriberError(error) {
    alert("Er is een fout opgetreden. Probeer opnieuw.");
}

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);

                    saveSubscriber($form, subscriberSaved, subscriberError);

                    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();

                $("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().show();

                return;
            }
        },

        bindButton: function(button) {
            $(button).click(function() {
                $("#validation_error").hide();
                formHelper.submitForm($(button)[0].form, $(button).attr("name")); return false;
            });
        }
    };
