/**
 *  Stellt Methoden und Handler bereit für das Bearbeiten von Terminen im Reiter  Termine in den Kursdetails; hier
 *  handelt sich um zentrale Methoden die im Mitarbeiter-, im Dozenten- u. Teilnehmertool verwendet werden.
 *  Für die Sammeländerung von Terminen wird ein Prototype KTSammelDialog bereitgestellt wird, der in den 
 *  Skripten kursemitarbeiter.js (für MA) und kursplanung.js (für Dozenten) verwendet wird. Die speziellen
 *  Methoden bzw. Handler für die Terminbearbeitung im MA Tool bzw. Doztool werden jeweils in den Skripten
 *  kursemitarbeiter.js (für MA) und kursplanung.js (für Dozenten) bereitgestellt.  
 */  
 //entspricht ready
jQuery(function() {
  
  $('.reiter_content').on('click', '.terminUpdate', function () {

    var selectedKtIds = KuferTools.GetSelectedIds();

    var abrechenbareKtIds = [];
    var nichtAbrechenbareKtIds = [];

    jQuery.each(selectedKtIds, function (index, ktId) {
      if ($('#kt_rs_abrechenbar_' + ktId).length > 0) {
        abrechenbareKtIds[abrechenbareKtIds.length] = ktId;
      } else {
        nichtAbrechenbareKtIds[nichtAbrechenbareKtIds.length] = ktId;
      }
    });

    if (selectedKtIds.length == 0) {
      KuferTools.showMessage({
        title: 'Kurstage abrechnen',
        meldung: 'Sie müssen mindestens einen Kurstag auswählen, der den Status "noch keine Abrechnung erstellt" besitzt und bereits statt gefunden hat.'
      });

    } else if (selectedKtIds.length < 2) {
        window.location.replace('index.php?tool_id=' + KuferTools.ToolId + '&action=terminbearbeiten&ktId=' + selectedKtIds.toString() + '&knr=' + KuferTools.Knr);
    } else {
      return;

      var buttons = {
        'Speichern': function () {
          var $form = jQuery(this).find('form');
          $form.trigger('submit');
          jQuery(this).dialog('close');
        }, //getTeilnehmerDatenSendenCallBack(true),
        'Abbrechen': function () {
          $(this).dialog('close');
          // Das ist ja kacke, wenn das hier so spezifisch angegeben werden muss. Ist bereits in personendetails.js genau so.
          // KuferTools.removeHinterlegungen();
        }
      };

      KuferTools.Utils.AjaxLadebildschirm.Start();
      jQuery.post('index.php?tool_id=' + KuferTools.ToolId + '&action=terminBearbeiten&updateDozent=1&ktIds=' + selectedKtIds.join(':')
              + '&knr=' + KuferTools.Knr, function (data) {
                KuferTools.showMessage({meldung: data, title: 'Dozentendetails bearbeiten', buttons: buttons, width: '800', pressEnterFunc: buttons['Speichern']});
                KuferTools.Utils.AjaxLadebildschirm.Stop();

              });
    }
    //  KuferTools.Utils.loadAndDisplayPage('usertools.php', 'tool_id=11&toolsection_id=42&action=newTeilnehmer', buttons, 800);
  });
  
  
  
  //  Hängt den aktuellen Tabreiter an die URL des SMS Grafik Klick Links auf das SMS Formular und zwar im Terminreiter
  //  der Kursdetails des Teilnehmertools
  $(document).on('click', 'a.smsgrafik', function() {
    KuferTools.KursDetails.AddReiterTab2Url($(this));
    return true; 
  })
  
    //Gibt für das Teilnehmertool den 'Termineplan' aus, wobei nach Kursen gefiltert werden kann
    $('.terminplanlink4einzelneKurstageDetails').on('click', function(e) {
	    e.preventDefault();
      var selected = KuferTools.GetIdsToSelect4Tab(KuferTools.Utils.Tabs.GetActiveTab());
      // selected gibt alle Ids der Seite zurück, falls nichts ausgewählt wurde. Deshalb muss separat abgefragt werden, ob keine markiert wurden.
      if($('input.markable:checked', KuferTools.Utils.Tabs.GetActiveTab()).length === 0) {
        var alleText = 'alle Termine in der Tabelle anzeigen';
      } else {
        var alleText = 'alle ausgewählten Termine anzeigen';
      }
      
      openDialog4TerminButtonsTerminplanEinzelneTage( (KuferTools.ToolId == 20)?304:312, 'TN', alleText, selected );
      return false;  
    });//ende clickHandler ('.terminplanlink') 
  
  /*
   * Aktualisiert bei der Sammeländerung für Kurstage die UE und die Minuten, wenn sich die Uhrzeiten oder die Pause ändert.
   */
  $(document).on('change', '#ajaxResponse #wt_kt_changeBeginn_val,'+
    '#ajaxResponse #wt_kt_changeEnde_val,'+
    '#ajaxResponse #wt_kt_changePause_val,'+
    '#kurstag_zeit_beg, #kurstag_zeit_ende, #kurstag_pause', function() {
    
    if(!getZeiten())
      return;
    
    var beginn = KuferTools.KurstagPlanung.Beginn;
    var ende = KuferTools.KurstagPlanung.Ende;
    var pause = KuferTools.KurstagPlanung.Pause;
    
    var minuten = timeToMinutes(ende) - timeToMinutes(beginn) - ((pause != '')?pause:0);
    var ue = KuferTools.Utils.minToUe(minuten);
    
    KuferTools.KurstagPlanung.Minuten = Math.round(minuten);
    KuferTools.KurstagPlanung.Ue = String(ue).replace(/\./,',');
    
    aktualisiereZeiten();
  });
  
  /*
   * Aktualisiert bei der Sammeländerung für Kurstage die UE und die Pause, falls sich die Minuten ändern
   */
  $(document).on('change', '#ajaxResponse #wt_kt_changeMinuten_val, #kurstag_minuten', function() {
    if(!getZeiten())
      return;
    
    var beginn = KuferTools.KurstagPlanung.Beginn;
    var ende = KuferTools.KurstagPlanung.Ende;
    var minuten = KuferTools.KurstagPlanung.Minuten;
    
    var minutenMax = timeToMinutes(ende) - timeToMinutes(beginn);
    if(minuten > minutenMax) minuten = minutenMax;
    var ue = String( KuferTools.Utils.minToUe(minuten) ).replace(/\./,',')
    
    KuferTools.KurstagPlanung.Pause = Math.round(minutenMax - minuten);
    KuferTools.KurstagPlanung.Ue = ue;
    if(minuten.val == '') 
      KuferTools.KurstagPlanung.Minuten = 0;
    else
      KuferTools.KurstagPlanung.Minuten = minuten;
    
    aktualisiereZeiten();
  });
  
  /*
   * Aktualisiert bei der Sammeländerung für Kurstage die Minuten und die Pause, falls sich die UE ändern
   */
  $(document).on('change', '#ajaxResponse #wt_kt_changeUe_val, #kurstag_ue', function() {
    
    if(!getZeiten())
      return;
    
    var beginn = KuferTools.KurstagPlanung.Beginn;
    var ende = KuferTools.KurstagPlanung.Ende;
    var ue = KuferTools.KurstagPlanung.Ue;
    
    var ueFloat = ((ue != '') ? ue.replace(/,/,'.') : 0);
    var minuten =  KuferTools.Utils.UeToMin(ueFloat);
    var minutenMax = timeToMinutes(ende) - timeToMinutes(beginn);
      
    KuferTools.KurstagPlanung.Pause = minutenMax - minuten;
    KuferTools.KurstagPlanung.Minuten = minuten;
    
    aktualisiereZeiten();
  });


 //Prototype für die den Dialog zur Sammeländerung von Terminen; etspricht der Basisklasse; ist durch Vererbung
  //verwendbar für das Bearbeiten von Terminen in den Tools Kurse MA, Reiter Kursdetails/ Termine (Tool 8) u. in 
  //Tool Kursplanung / meine Termine (Tool 3)
  KTSammelDialog = function() {
  
    this.kurstag = KuferTools.Spracheinstellungen.Kurstag.Singular.Nominativ;
    // this.buttonlink = ''; //usertools.php?tool_id=3&toolsection_id=378&ktid=
    //wird beim Instantiieren des Objekts korrekt besetzt (siehe KTSammelDialogMA)
    this.buttonlink = '';
    //Um bei den Kursdetails wieder aufs richtige Tab springen zu können
    this.tabId = '';
   
    this.kursnr = KuferTools.KurstagPlanung.Knr + KuferTools.GetUrlPartForIdSelection();
    this.bearbeitenLinksNoetig = false; 
    this.bearbeitenLinksVorhanden = false; // (jQuery('a.tool3_ktbearbeiten') > 0) Tool in Kursplanung Doz

    //selektierte Termine per Sammeländerung ändern; die hier definierte private Methode kann auf die privaten Variablen (und Methoden)
    //zugreifen und ist für öffentliche Methoden zugänglich
    this._changeSelectedTermine = function($pAktobj) {
    var zuAenderndeKurstage = KuferTools.GetSelectedIds();

    //console.log("kts: " + zuAenderndeKurstage.join(" "));
    if (zuAenderndeKurstage.length < 1) {
      showMessage('Es muss mindestens ein '+ this.kurstag +' markiert werden.', 'Achtung');
      return false;
    }
    
    if (this.buttonlink == undefined || this.buttonlink.length == 0) {
      showMessage('Der Link zur Seite für die Sammeländerung ist nicht vorhanden. Bitte informieren Sie Ihren Administrator', 'Achtung');
    }
    
    if (zuAenderndeKurstage.length < 2) { 
      if (!this.bearbeitenLinksNoetig || this.bearbeitenLinksVorhanden) {
        //genau einer ausgewählt => auf die Kurstage-Details, wenn die Links zum Kurstag Bearbeiten da sind
        // ersetzt $(this).prop('href', this.buttonlink + '&ktid=' + zuAenderndeKurstage[0]);
        $pAktobj.prop('href', this.buttonlink + '&ktid=' + zuAenderndeKurstage[0] + '&tab=' + this.tabId);
        return true;
      }
    }
      
    //action ist z.B. tool_id=8&toolsection_id=378&action=sammelFormular&items=41134;41135&knr=112-3202
    var action = this.buttonlink.substring(this.buttonlink.indexOf('?')+1) +  "&action=sammelFormular&items=" + zuAenderndeKurstage.join(';') + 
           "&knr=" + this.kursnr;
                 
    
    KuferTools.Utils.AjaxLadebildschirm.Start();  
      $.ajax({
        type: "POST",
        url: "usertools.php",
        data: action,
        success: function(response){
        
        var $response = $(response);//Wenn der komplette HTMLText von PHP generiert wurde
        //  var responseObject = KuferTools.Utils.getObjectFromJson(response);//falls ein Objekt per JSON kommt
        
        //Ggf. responseObject verarbeiten und in $response stecken
        var $caption = $response.find('caption');
        var titel = $caption.html();
        $caption.remove();
        
        KuferTools.Utils.AjaxLadebildschirm.Stop();
        
        var buttons = { "Ok": function() {
                          var $form = $(this).find('#kurstagSammelaenderung');
                          //hier kann this.tabId nicht verwendet werden, da es sich auf jetzt auf den Inhalt des div#ajaxResponse
                          //bezieht
                          if (KuferTools.KurstagPlanung.Bearbeiten.Dialog.tabId !== '') {   
                            var newaction = $form.prop('action') + '#' +  KuferTools.KurstagPlanung.Bearbeiten.Dialog.tabId;
                            $form.prop('action',newaction);
                          }
                          //$(this).find('#kurstagSammelaenderung').trigger('submit'); 
                          $form.trigger('submit')
                        },
                        "Abbrechen": function() {  $(this).dialog("close"); } 
                      };
        var $div = $('<div id="ajaxResponse"></div>').append($response);
        
        showMessage($div, titel, buttons, 550).then(() => {
          var ckbBeginn = '#ajaxResponse #wt_kt_changeBeginn';
          var ckbEnde = '#ajaxResponse #wt_kt_changeEnde';
          KuferTools.Utils.UiFunctions.setzeCheckboxNachChanged('#ajaxResponse #wt_kt_changeDate_val'   , '#ajaxResponse #wt_kt_changeDate');
          KuferTools.Utils.UiFunctions.setzeCheckboxNachChanged('#ajaxResponse #wt_kt_changeBeginn_val' , ckbBeginn + ', ' + ckbEnde, true);
          KuferTools.Utils.UiFunctions.setzeCheckboxNachChanged('#ajaxResponse #wt_kt_changeUe_val'     , ckbBeginn + ', ' + ckbEnde);
          KuferTools.Utils.UiFunctions.setzeCheckboxNachChanged('#ajaxResponse #wt_kt_changeEnde_val'   , ckbEnde, true);
          KuferTools.Utils.UiFunctions.setzeCheckboxNachChanged('#ajaxResponse #wt_kt_changeMinuten_val', ckbBeginn + ', ' + ckbEnde);
          KuferTools.Utils.UiFunctions.setzeCheckboxNachChanged('#ajaxResponse #wt_kt_changePause_val'  , ckbBeginn + ', ' + ckbEnde);
          KuferTools.Utils.UiFunctions.setzeCheckboxNachChanged('#ajaxResponse #wt_kt_changeAusfall_val', '#ajaxResponse #wt_kt_changeAusfall');
          KuferTools.Utils.UiFunctions.setzeCheckboxNachChanged('#ajaxResponse #wt_kt_changeBemerkung_val', '#ajaxResponse #wt_kt_changeBemerkung');
          KuferTools.Utils.UiFunctions.setzeCheckboxNachChanged('#ajaxResponse #wt_kt_changeKursort_val', '#ajaxResponse #wt_kt_changeKursort');

          //Aktuallisiert Minuten und UE, nachdem die Uhrzeiten durch die Hinterlegung geändert wurden.
          jQuery('#ajaxResponse #wt_kt_changeEnde_val').on('fromHLwindow', function() {
            $('#ajaxResponse #wt_kt_changeEnde_val').trigger('change');
          });
        })
        },
        error: function(a,b,c) {
          showMessage('Bei der Verarbeitung Ihrer Anfrage ist ein Fehler aufgetreten - bitte versuchen Sie es später erneut.', 'Fehler');
        }
      
      });
      return false;
    } //end  _changeSelectedTermine
  }//end KTSammelDialog
}); //end JQuery(function) (readyHandler)
  
 
/**
 * Lädt die Werte der Eingabefelder in KuferTools.KurstagPlanung
 * return bool Gibt an, ob validateInput bei allen Feldern keine Fehler meldet.
 */
function getZeiten()
{
  var zObj = zeitenSelectorObj();
  var $beginn = zObj.$Beginn;
  var $ende = zObj.$Ende;
  var $ue = zObj.$Ue;
  var $minuten = zObj.$Minuten;
  var $pause = zObj.$Pause;
  
  // BUG-Fix: Damit wird eine falsche Vorbesetzung mit '' und damit ein Validierungsfehler verhindert; KuferTools.KurstagPlanung.Ue 
  // wurde in Methode JSDeclarations der Page mit 0 vorbesetzt
  // Ue kann Input oder Span Element sein; falls das Feld  nicht editierbar ist, ist es ein <span>
  if ($ue.val() == "") {
    if ($ue.is('input')) {
      $ue.val(KuferTools.KurstagPlanung.Ue);
    }
    //$ue Element ist ein Span
    else  {
      $ue.text(KuferTools.KurstagPlanung.Ue);
    }
  }
  //Bug-Fix: Falls Beginn- oder Ende-Uhrzeit keine Pflichtfelder sind (per Admin Einstellung), müssen sie zumindest
  // nicht leer sein; Klasse 'nicht_leer' sorgt dafür, das die Validierung für leere Felder scheitert. Damit 
  // wird eine Neuberechnung der Minuten, UEs etc., die einen Fehler liefert (nämlich NaN) vermieden.
  if (!$beginn.hasClass('form_mandatory')) {
    $beginn.addClass('nicht_leer')
  }
  
  if (!$ende.hasClass('form_mandatory')) {
    $ende.addClass('nicht_leer')
  }
  
  
  
  //validInput gibt true zurück, falls das Feld nicht existiert
  //Achtung: Falls ein Feld Span Element (statt Inputfeld) ist, liefert die Validierung immer true, da hier
  // keine Filterklasse (z.B. val_int) eingestellt ist 
  var isOk = true;
  isOk = validateInput($beginn)  && isOk;
  isOk = validateInput($ende)    && isOk;
  isOk = validateInput($ue)      && isOk;
  isOk = validateInput($minuten) && isOk;
  isOk = validateInput($pause)   && isOk;
  
  if(isOk) {
    if($beginn.length != 0 ) {
      if ($beginn.is('input'))
        KuferTools.KurstagPlanung.Beginn  = $beginn.val();
      else
        KuferTools.KurstagPlanung.Beginn  = $beginn.text();
    }
    
    if($ende.length != 0) {
      if ($ende.is('input'))
        KuferTools.KurstagPlanung.Ende    = $ende.val();
      else
        KuferTools.KurstagPlanung.Ende    = $ende.text();
    }
    
    if($ue.length != 0) {   
      if ($ue.is('input'))
        KuferTools.KurstagPlanung.Ue      = $ue.val();
      else 
        KuferTools.KurstagPlanung.Ue      = $ue.text(); // UE ist Span Element
    }
    
    if($minuten.length != 0) {
      if ($minuten.is('input'))
        KuferTools.KurstagPlanung.Minuten = $minuten.val();
      else
        KuferTools.KurstagPlanung.Minuten = $minuten.text();
    }
    if($pause.length != 0) {
      if ($pause.is('input'))
        KuferTools.KurstagPlanung.Pause   = $pause.val();
      else
        KuferTools.KurstagPlanung.Pause   = $pause.text();  
    }
  } //end if (isOK)
  
  return isOk;
} //end getZeiten()

/**
 * Aktualisiert die Felder anhand von KuferTools.KurstagPlanung
 * Achtung: Diese Felder können Input Felder oder auch nur Spans (falls nicht bearbeitbar) sein;
 * daher muss dies beim Besetzen des jQuery Elements berücksichtigt werden
 */
function aktualisiereZeiten()
{
  var zObj = zeitenSelectorObj();
  //Die Klassenattribute sind jQuery Objekte; daher die Bezeichnungen: $Beginn, $Ende, etc.
  // Beginn, Ende, Ue etc. können Input oder Span Elemente sein; falls ein Feld  nicht editierbar ist, ist es ein <span>
  if (zObj.$Beginn.is('input'))
    zObj.$Beginn.val(KuferTools.KurstagPlanung.Beginn);
  else
    zObj.$Beginn.text(KuferTools.KurstagPlanung.Beginn);
  
  if (zObj.$Ende.is('input'))
    zObj.$Ende.val(KuferTools.KurstagPlanung.Ende);
  else
    zObj.$Ende.text(KuferTools.KurstagPlanung.Ende);
  
  if (zObj.$Ue.is('input')) {
    zObj.$Ue.val(KuferTools.KurstagPlanung.Ue);
  }
  else {
    zObj.$Ue.text(KuferTools.KurstagPlanung.Ue);
  }
  
  if (zObj.$Minuten.is('input'))
    zObj.$Minuten.val(KuferTools.KurstagPlanung.Minuten);
  else 
     zObj.$Minuten.text(KuferTools.KurstagPlanung.Minuten);
  
  if (zObj.$Pause.is('input'))
    zObj.$Pause.val(KuferTools.KurstagPlanung.Pause);
  else
    zObj.$Pause.text(KuferTools.KurstagPlanung.Pause)
}

/**
 * Objekt, welches die Selektoren zu den entsprechenden Kurstag-Feldern enthält.
 */
function zeitenSelectorObj()
{
  if(KuferTools.KurstagPlanung.Sammelaenderung == true) {
    this.$Beginn  = $('#ajaxResponse #wt_kt_changeBeginn_val');
    this.$Ende    = $('#ajaxResponse #wt_kt_changeEnde_val');
    this.$Ue      = $('#ajaxResponse #wt_kt_changeUe_val');
    this.$Minuten = $('#ajaxResponse #wt_kt_changeMinuten_val');
    
    this.$Pause   = $('#ajaxResponse #wt_kt_changePause_val');
  } else {
    this.$Beginn  = $('#kurstag_zeit_beg');
    this.$Ende    = $('#kurstag_zeit_ende');
    this.$Ue      = $('#kurstag_ue');
    this.$Minuten = $('#kurstag_minuten');
    this.$Pause   = $('#kurstag_pause');
  }
  return this;
}
