// ----------------------------------------------
// Beispiel lit-8
// litform.js
// ----------------------------------------------

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

         that.storeFormContent_p();
      });

   },
   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;
   },
   close_px: function () {
      $("#idForm").hide();
   },
   render_px: function (data_opl) {
      var path_s;
      if (data_opl != null) {
         path_s = '/lit/' + data_opl;
      } else {
         path_s = '/lit/0';
      }
      $.ajax({
         dataType: "json",
         url: path_s,
         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'];
      $('#id_s').val(data_o['id']);
      $('#name_s').val(data_o['name'])
      $('#typ_s').val(data_o['typ']);
      $('#referenz_s').val(data_o['referenz']);

      this.storeFormContent_p();

      $("#idForm").show();
   },
   initHandler_p: function () {
      // Ereignisverarbeitung für das Formular einrichten
      $("#idForm").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
         LITAPP.es_o.publish_px('app', [action_s, 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
      event_opl.stopPropagation();
      event_opl.preventDefault();
   },
   isModified_p: function () {
      // Prüfen, ob Formularinhalt verändert wurde
      var mod_b = this.FormContentOrg_s != $("#idForm").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 typ_s = $("#typ_s").val();
      if ((typ_s != "Typ1") && (typ_s != "Typ2")) {
         status_b = false;
      }
      return status_b;
   },
   storeFormContent_p: function () {
      this.FormContentOrg_s = $("#idForm").serialize();
   }
});
// EOF