// ----------------------------------------------
STUNDENPLAN.EditDayView_cl = Class.create({
// ----------------------------------------------
    initialize: function () {
        this.className = "EditDayView_cl";
        this.viewElement = ".cl_editDayView";
        this.data = {};
        this.backData = {};
        this.storage = new STORAGE.Storage_cl(false);
        var that = this;
        $.ajax({
            url: 'templates/EditDayView.html',
            type: 'GET'
        }).done(function (data_opl) {
            $('#page-wrapper').append(data_opl);
            $(that.viewElement).hide();
            that.initHandler_p();
        }).fail(function (jqXHR_opl, textStatus_spl) {
            alert("[" + that.className + "] Fehler bei Anforderung: " + textStatus_spl);
        });
        STUNDENPLAN.es_o.subscribe_px(this, this.className);
    },
    canClose_px: function () {
        // Prüfen, ob Formularinhalt verändert wurde
        var mod_b = this.isModified_p();
        if (mod_b) {
            if (confirm("Es gibt nicht gespeicherte Änderungen - verwerfen?")) {
                mod_b = false;
            }
        }
        return !mod_b;
    },
    onClickButtons_p: function (event_opl) {
        event_opl.stopPropagation();
        event_opl.preventDefault();
        var do_b = false;
        var path_s;
        var action_s = $(event_opl.target).attr("data-action");
        switch (action_s) {
            case "back":
                //this.backData = {Back: {listener: this.viewName, args: ['show',this.viewName, {jahr: nSelectedYear, monat: nSelectedMonth}]}};
                // Weiterleiten

                if (this.backData !== null || this.backData !== undefined || this.backData !== "") {
                    console.log("[" + this.className + "] Gehe zurück zu %s mit Daten: %o", this.backData.listener, this.backData);
                    STUNDENPLAN.es_o.publish_px('app', this.backData.args);
                } else {
                    console.log("[" + this.className + "] Gehe zurück zu mainView keine Daten vorhanden.");
                    STUNDENPLAN.es_o.publish_px('app', ['show', 'mainView', null]);
                }
                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 path_s = '/lit';
                        var data_s = $("#idForm").serialize();
                        var type_s = 'POST';
                        var id_s = $('#id_s').val();
                        if (id_s == '') {
                            type_s = 'PUT';
                        } else {
                            path_s += '/' + id_s;
                        }
                        //var that = this;
                        $.ajax({
                            context: this,
                            dataType: "json",
                            data: data_s,
                            url: path_s,
                            type: type_s
                        })
                                .done(function (data_opl) {
                                    // Umwandlung der JSON-Daten vom Server bereits erfolgt
                                    $('#id_s').val(data_opl['id']);
                                    // aktuellen Formularinhalt speichern
                                    // (das Formular wird ja nicht mehr neu geladen!)
                                    this.storeFormContent_p();
                                    alert("Speichern ausgeführt!");
                                })
                                .fail(function (jqXHR_opl, textStatus_spl) {
                                    alert("Fehler bei Anforderung: " + textStatus_spl);
                                });
                    } else {
                        alert("Bitte prüfen Sie die Eingaben in den Formularfeldern!")
                    }
                }
                break;
        }
        // Weiterleitung und Standardbearbeitung unterbinden
    },
    isModified_p: function () {
        // Prüfen, ob Formularinhalt verändert wurde
        var mod_b = this.FormContentOrg_s != $("#EditDayForm").serialize();
        return mod_b;
    },
    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;
        var regExTime = "(([0-1]?[0-9])|([2][0-3])):([0-5]?[0-9])(:([0-5]?[0-9]))?/g";
        var fStundenlohn_s = $("#EditDayFormInputStundenlohn").val();
        var fNachtschichtzulage_s = $("#EditDayFormInputNachtschichtzulage").val();
        var fSonntagszulage_s = $("#EditDayFormInputSonntagszulage").val();
        var timeVon_s = $("#EditDayFormInputVon").val();
        var timeBis_s = $("#EditDayFormInputBis").val();
        var timePausen_s = $("#EditDayFormInputPausen").val();
        var timeGesamt_s = $("#EditDayFormInputGesamt").val();
        console.log("[" + this.className + "] checkContent_p ZeitFormat: %o %o", timeVon_s, !timeVon_s.match(regExTime));
        var errorFelder = "";
        if (
                (parseFloat(fStundenlohn_s) < 0 || parseFloat(fStundenlohn_s) > 1000 || fStundenlohn_s === "") ||
                (parseFloat(fNachtschichtzulage_s) < 0 || parseFloat(fNachtschichtzulage_s) > 100 || fNachtschichtzulage_s === "") ||
                (parseFloat(fSonntagszulage_s) < 0 || parseFloat(fSonntagszulage_s) > 100 || fSonntagszulage_s === "") ||
                (!timeVon_s.match(regExTime) === false) ||
                (!timeBis_s.match(regExTime) === false) ||
                (!timePausen_s.match(regExTime) === false)
                ) {




            status_b = false;
        }

        return status_b;
    },
    storeFormContent_p: function () {
        this.FormContentOrg_s = $("#EditDayForm").serialize();
    },
    notify_px: function (self_opl, message_spl, data_apl) {
        switch (message_spl) {
            case 'list':
                switch (data_apl[0]) {
                    case 'refresh':
                        // Liste aktualisieren
                        self_opl.render_px(null);
                        break;
                    default:
                        console.log('[' + this.className + '] unbekannte list-Notification: ' + data_apl[0]);
                        break;
                }
                break;
            default:
                console.log('[' + this.className + '] unbekannte Notification: ' + message_spl);
                break;
        }
    },
    close_px: function () {
        $(this.viewElement).hide();
    },
    showView_px: function (data_opl) {
        $(this.viewElement).show();
    },
    render_px: function (data_opl) {
        // Parameter data_opl wird hier nicht benötigt
        // Anforderung an den Server senden
        console.log("[" + this.className + "] render_px data_opl: %o", data_opl);
        this.backData = (data_opl === null || data_opl === undefined || data_opl === "") ? null : data_opl.Back;
        this.data = (data_opl === null || data_opl === undefined || data_opl === "") ? null : data_opl.Daten;
        console.log("[" + this.className + "] Back-Data: %o", this.backData);
        if (this.data === {})
            this.data = null;
        
        var fStundenlohn = this.storage.getItemWithDefault_px('stundenlohn', 8.50);
        var fNachtschichtzulage = this.storage.getItemWithDefault_px('nachtschichtzulage', 25);
        var fSonntagszulage = this.storage.getItemWithDefault_px('sonntagszulage', 50);
        var fFeiertagszulage = this.storage.getItemWithDefault_px('feiertagszulage', 125);

        $("#EditDayForm").find('input[name="EditDayFormInputStundenlohn"]').val(fStundenlohn);
        $("#EditDayForm").find('input[name="EditDayFormInputNachtschichtzulage"]').val(fNachtschichtzulage);
        $("#EditDayForm").find('input[name="EditDayFormInputSonntagszulage"]').val(fSonntagszulage);
        $("#EditDayForm").find('input[name="EditDayFormInputFeiertagszulage"]').val(fFeiertagszulage);

        //Schon befüllte Daten eintragen (Beim Editieren)
        if (this.data !== null) {

            //$("#SettingsForm").find('input[name="EditDayFormInputStundenlohn"]').val(fStundenlohn);
            //$("#SettingsForm").find('input[name="EditDayFormInputNachtschichtzulage"]').val(fNachtschichtzulage);
            //$("#SettingsForm").find('input[name="EditDayFormInputSonntagszulage"]').val(fSonntagszulage);


        }

        this.storeFormContent_p();
    },
    doRender_p: function (data_opl) {
        $('#page-wrapper').append(data_opl);
    },
    initHandler_p: function () {
        $(this.viewElement).on('click', 'button', $.proxy(this.onClickButtons_p, this));
        $(this.viewElement).on('click change', 'input', $.proxy(this.calculateGesamtzeit_p, this));
        $(this.viewElement).find('[data-toggle="tooltip"]').tooltip();

    },
    calculateGesamtzeit_p: function (event) {
        event.preventDefault();
        var timeVon_s = $("#EditDayFormInputVon").val();
        var timeBis_s = $("#EditDayFormInputBis").val();
        var timePausen_s = $("#EditDayFormInputPausen").val();
        //
        // Überprüfen ob Pause > gesamt arbeitszeit ist
        //
        //
        console.log("[" + this.className + "] calculated time %o", this.timeDiff_p(timeVon_s, this.timeSub_p(timeBis_s, timePausen_s)));
        var calculatedTime = this.timeDiff_p(timeVon_s, this.timeSub_p(timeBis_s, timePausen_s));

        $("#EditDayFormInputGesamt").val(calculatedTime + ":00.000");
        //console.log("[" + this.className + "] Nachtschichtzeit: " + this.extractTime_p('nachtschicht', timeVon_s,'23:59',timeBis_s,'06:00'));



        console.log("[" + this.className + "] Nachtschichtzulage: " + this.calculateZulage_p($("#EditDayFormInputStundenlohn").val(), $("#EditDayFormInputNachtschichtzulage").val()));

    },
    timeDiff_p: function (time1, time2) {
        var t1 = time1.split(':');
        var t2 = time2.split(':');

        var d1 = new Date(2015, 04, 28, t1[0], t1[1]);
        var d2 = new Date(2015, 04, 28, t2[0], t2[1]);
        //(parseInt(t1[0]) * 100) + (parseInt(t1[1])) > (parseInt(t2[0]) * 100) + (parseInt(t2[1])) ? 1 : 0
        var diff = new Date(d2 - d1);

        return (diff.getUTCHours().toString().length === 1 ? "0" + diff.getUTCHours().toString() : diff.getUTCHours().toString()) + ":" + (diff.getMinutes().toString().length === 1 ? "0" + diff.getMinutes().toString() : diff.getMinutes());
    },
    timeSub_p: function (time1, timeToSub) {
        var t1 = time1.split(':');
        var t2 = timeToSub.split(':');

        var d1 = new Date(2015, 04, 28, t1[0], t1[1]);
        var d2 = new Date(2015, 04, 28, t2[0], t2[1]);
        return (d1.getUTCHours() - d2.getUTCHours()) + ":" + (d1.getMinutes() - d2.getMinutes());
    },
    timeAdd_p: function (time1, timeToAdd) {
        var t1 = time1.split(':');
        var t2 = timeToAdd.split(':');

        var d1 = new Date(2015, 04, 28, t1[0], t1[1]);
        var d2 = new Date(2015, 04, 28, t2[0], t2[1]);
        return (d1.getUTCHours() + d2.getUTCHours()) + ":" + (d1.getMinutes() + d2.getMinutes());
    },
    calculateZulage_p: function (stundenlohn, prozentsatz) {
        var fProzentsatz = parseFloat(prozentsatz);
        var fStundenlohn = parseFloat(stundenlohn);

        return (fProzentsatz / 100) * fStundenlohn;
    },
    extractTime_p: function (strType, time1, time1Ref, time2, time2Ref) {
        switch (strType) {
            case 'nachtschicht':
                return this.timeAdd_p(this.timeDiff_p(time1, time1Ref), this.timeDiff_p(time2, time2Ref));
                break;
            case 'sonntag':
                break;
            case 'feiertag':
                break;
            default:
                return "00:00";
                break;
        }
    }
});
// EOF