﻿function ValidateForm(button, validationUrl, summaryContainerClass) {

    var formFieldErrorClass = "validation-error";
    var errorMessageClass = "panel-error-message";

    // Hole Button Object
    var jbutton = $(button);
    jbutton.attr("disabled", "disabled");

    // Hole zuständige Form
    var form = jbutton.closest("form");

    // Hole alle Forumlarfelder innerhalb der Form
    var data = form.serialize();

    // Setze ein POST an den Server ab.
    $.ajax({
        type: "POST",
        url: validationUrl,
        data: data,
        success: function (data) {
            // Durchlaufe alle zurückgegebenen Validierungsobjekte
            var summaryText = "";
            var globalValid = true;
            for (var i = 0; i < data.length; i++) {

                // Hole JSON Daten
                var formField = $("[name=\"" + data[i]["Name"] + "\"]", form);
                var summaryMessage = data[i]["SummaryMessage"];
                var panelMessage = data[i]["PanelMessage"];
                var isValid = data[i]["IsValid"];
                var messageClass = data[i]["Name"].replace(".", "_").replace("[", "_").replace("]", "_") + "_Message";

                // Löschen der bisher eingefügten Element und Klassen
                formField.removeClass(formFieldErrorClass);

                // Verstecke alle Message Panels
                $("#" + messageClass).hide();

                // Ein Fehler ist aufgetreten
                if (isValid == false) {

                    // Zuständig dass die Summary eingeblendet wird
                    globalValid = false;

                    // Error Klasse dem Formfield hinzufügen
                    formField.addClass(formFieldErrorClass);

                    // Speichern der SummaryMessage für eine spätere Ausgabe
                    if (summaryMessage != null)
                        summaryText += summaryMessage + "<br />";

                    // Ausgabe der Validierungsmessage, wenn vorhanden
                    if (panelMessage.length)
                        $("#" + messageClass).html(panelMessage).show();
                }
            }

            // Ausgabe der Summery und Hochscrollen oder abschicken des Formulars
            if (globalValid == false) {
                $("." + summaryContainerClass).html(summaryText).show();
                $('html, body').animate({ scrollTop: 0 }, 'slow');
            }
            else {
                form.submit();
            }

            jbutton.removeAttr("disabled");
        }
    });

    // Verhindert das abschicken des Formulars
    return false;
}


