// ----------------------------------------------
// edit_discussion.js
// ----------------------------------------------

// ----------------------------------------------
FORUM.DiscussionDetailView_cl = Class.create({
    // ----------------------------------------------
    initialize: function () {
        // Basis-Markup des Formulars anfordern
        var that = this;
        $.get('/html/edit_discussion.html', function (data_spl) {
            $("#idContentOuter").append(data_spl);
            $("#idDiscussionEditContent").hide();
            that.initHandler_p();

            that.storeFormContent_p();
        });

    },
    canClose_px: function () {
        // Prüfen, ob Formularinhalt verändert wurde
        return (this.isModified_p() ? confirm("Es gibt nicht gespeicherte Änderungen - verwerfen?") : true);
    },
    close_px: function () {
        $("#idDiscussionEditContent").hide();
    },
    render_px: function (ids) {
        tId_ = ids[0];
        id_ = ids[1];
        $.ajax({
            dataType: "json",
            url: '/discussion/' + tId_ + '/' + (id_ == null?'0':id_),
            type: 'GET'
        })
        .done($.proxy(this.doRender_p, this))
        .fail(function (jqXHR_opl, textStatus_spl) {
            alert("[Form] Fehler bei Anforderung: " + textStatus_spl);
        });
    },
    doRender_p: function (data_opl) {
        // in das Formular übertragen
        var data_o = data_opl['data'];
        $('#dEditName').val(data_o['name']);
        this.id_s = data_opl['id'];
        this.tId = data_opl['tId'];

        this.storeFormContent_p();

        $("#idDiscussionEditContent").show();
    },
    initHandler_p: function () {
        // Ereignisverarbeitung für das Formular einrichten
        $("#idDiscussionEditContent").on("click", "button", $.proxy(this.onClickButtons_p, this));
    },
    onClickButtons_p: function (event_opl) {
        var do_b = false;
        var path_s;
        var action_s = $(event_opl.target).attr("data-action");
        switch (action_s) {
            case "back":
                // Weiterleiten
                  FORUM.es_o.publish_px('ContentChanged', ['discussionList', this.tId]);
                break;
            case "save":
                // Formularinhalt prüfen
                if (this.isModified_p()) {
                    if (this.checkContent_p()) {
                        // kein klassisches submit, es wird auch keine neue Anzeige vorgenommen
                        var data_s = $("#idDiscussionDetail").serialize();
                        data_s += "&owner=" + FORUM.user_o.name_s;
                        $.ajax({
                            context: this,
                            dataType: "json",
                            data: data_s,
                            url: '/discussion/' + this.tId + '/' + (this.id_s != 0?'/' + this.id_s:''),
                            type: (this.id_s != 0?'POST':'PUT')
                        })
                        .done(function (data_opl) {
                            // aktuellen Formularinhalt speichern
                            // (das Formular wird ja nicht mehr neu geladen!)
                            this.storeFormContent_p();
                            alert("Speichern ausgeführt!");
                            FORUM.es_o.publish_px('ContentChanged', ['discussionList', this.tId]);
                        })
                        .fail(function (jqXHR_opl, textStatus_spl) {
                            alert("Fehler bei Anforderung: " + textStatus_spl);
                        });

                    } else {
                        alert("Bitte prüfen Sie die Eingaben in den Formularfeldern!")
                    }
                }
                else {
                    FORUM.es_o.publish_px('ContentChanged', ['discussionList', null]);
                }
                break;
        }
        // Weiterleitung und Standardbearbeitung unterbinden
        event_opl.stopPropagation();
        event_opl.preventDefault();
    },
    isModified_p: function () {
        // Prüfen, ob Formularinhalt verändert wurde
        return (this.FormContentOrg_s != $("#idDiscussionDetail").serialize());
    },
    checkContent_p: function () {
        // hier nur zur Demonstration Prüfung des Typs gegen eine Werteliste
        // (das realisiert man besser mit einer Liste)
        var status_b = true;
        return status_b;
    },
    storeFormContent_p: function () {
        this.FormContentOrg_s = $("#idDiscussionDetail").serialize();
    }
});
// EOF