/* 
 * Enthält die Events und Funktionen zum Handeln einer PDF Verhaltensliste
 * ist relevant für die Ausgabe der Verhaltensliste im Reiter Teilnehmer des Dozententools
 * und in den Anwesenheiten des elektr.  Klassenbuchs  
 *
 */

//besser, da alle übergeordneten globalen Variablen auch berücksichtigt werden
// registerNamespace( 'KuferTools');
registerNamespace( 'KuferTools.VerhaltenPDFList');


// Initialisiert den Einstelldialog zur Verhaltensliste; ist relevant für den Reiter Teilnehmer des 
// Dozententools und für das elektronische Klassenbuch. 
// Verwendet als Parameter unterschiedliche Funktionen zum initialisieren des Filterdialogs; 
// in anwesenheiten.js:  KuferTools.Anwesenheiten.VerhaltenPDFList.initFilterDialog
// in kursteilnehmer.js:  KuferTools.KursDetails.Teilnehmer.initDialog4Doz
// Aufruf erfolgt durch Einbinden eines Javascripts in Methode _initJS4Verhaltensliste() in 
// TabKursTeilnehmer.php bzw. PageAnwesenheitEinKurstag.php

KuferTools.VerhaltenPDFList.initVerhaltenslisteDialog = function(initFilterDialog) { 
  
  var $einstellDialog =  $('#verhaltensliste_einstellDialog');
  
  //Die Optionen für die Fachauswahl ins Select Feld einfügen (wg. Unterscheidung zwischen Browsern Firefox und Rest).
  //Grund: nur der Firefox kann Optiongroups vernünftig darstellen)
  //Achtung: KuferTools.VerhaltenPDFList.FachOptions ist jetzt ein Array, da die Optionen als Array übergeben wurden in 
  //VerhaltenAPI Methode getSelectOptionsSimple(..) bzw. getSelectOptionsByGroup()
  var fachOptionStr = '';
  $.each(KuferTools.VerhaltenPDFList.FachOptions, function(index,value) {
    fachOptionStr += value;
  });
  $einstellDialog.find('.fachEingabe #fachAuswahl').append(fachOptionStr);
  
  var titel = 'Filter für Verhaltenseinträge'; 
  //Vorbesetzen des Verhaltensliste Objekts für das POST
  KuferTools.VerhaltenPDFList.verhaltListObj = {
    showOnlyTnr: false, 
    ktVon: '', 
    ktBis: '', 
    belIds: '', 
    fachAuswahl: '', 
    dozentenAuswahl: '',
    verhaltenAuswahl:''  };

  initFilterDialog($einstellDialog,'#verhaltensliste',titel, KuferTools.VerhaltenPDFList.handleVerhaltenslisteOutput);
}; //end KuferTools.VerhaltenPDFList.initVerhaltenslisteDialog()


// OK Handler für den Aufruf der PDF-Verhaltensliste
// wird Beim Klick auf OK, also beim Abschicken des Einstelldialogs bzw. -Formulars aufgerufen
// gilt  für die Verhaltensliste in den Anwesenheiten (elektr.  Klassenbuch) und im Telnehmerreiter
// der Kursdetails des Dozententools
KuferTools.VerhaltenPDFList.handleVerhaltenslisteOutput = function($pAktDialog, pMarkedIds) {
  //Fehlerbehandlung 
  if (pMarkedIds.length < 1) {
    console.log('markierte Teilnehmer Ids fehlen');
    //Request via Ajax erst gar nicht anfordern
    showMessage('Daten können nicht ausgegeben werden, weil keine IDs vorhanden sind.','Achtung');
    return false;
  }
 
  
  // $pAktDialog ist $('div#terminkalender_einstellDialog"')
  //Nur zum Test: Werte werden im Formular einfach mitgeschickt
 
  var showOnlyTnr = $pAktDialog.find('#showOnlyTnr').is(':checked');  //liefert true oder false
  
  // verhaltListObj ist das JSON kodierte Objekt für die Einstellungen aus der Verhaltensliste, 
  // das per POST an PHP gesendet wird und in Druckliste VerhaltensListe.php weiterverarbeitet wird
  KuferTools.VerhaltenPDFList.verhaltListObj.ktVon = $pAktDialog.find('#kt_verhvon').val();
  KuferTools.VerhaltenPDFList.verhaltListObj.ktBis = $pAktDialog.find('#kt_verhbis').val();
  KuferTools.VerhaltenPDFList.verhaltListObj.showOnlyTnr = showOnlyTnr;

 
  //Auswahl der Fächer (Übernahme der Optionen aus dem Selectfeld für die Fachauswahl; s.o.)
  KuferTools.VerhaltenPDFList.verhaltListObj.fachAuswahl = new Array();
  //selektierte Fächer zum Fachauswahl Array hinzufügen
  $pAktDialog.find('#fachAuswahl :selected').each(function(key, wert) { 
    KuferTools.VerhaltenPDFList.verhaltListObj.fachAuswahl[key] = $(this).val();
    // KuferTools.Anwesenheiten.VerhaltenPDFList.VerhaltensListeObj.fachAry.push($(this).val());
  })
  
  //Dozentenauswahl: Übernahme der Optionen aus dem Selectfeld für die Dozentenauswahl; s.o.)
  KuferTools.VerhaltenPDFList.verhaltListObj.dozentenAuswahl = new Array();
  $pAktDialog.find('#dozentenAuswahl :selected').each(function(key, wert) { 
    KuferTools.VerhaltenPDFList.verhaltListObj.dozentenAuswahl[key] = $(this).val();
  })
  
  //Verhaltensauswahl: Übernahme der Optionen aus dem Selectfeld für die Verhaltensauswahl; s.o.)
  KuferTools.VerhaltenPDFList.verhaltListObj.verhaltenAuswahl = new Array();
  $pAktDialog.find('#verhaltenAuswahl :selected').each(function(key, wert) { 
    KuferTools.VerhaltenPDFList.verhaltListObj.verhaltenAuswahl[key] = $(this).val();
  })
  
  
  //Teilnehmerauswahl: Übernahme der Optionen aus dem Selectfeld für die Teilenehmerauswahl; s.o.)
  // Die Belegungs Ids werden jetzt zusätzlich nochmals auf die im Teilnehmer Selectfeld ausgewählten
  // Ids eingeschränkt; pMarkedIds enthält die Belegids der  bereits via Checkbox ausgewählten Teilnehmer
  // bzw aller Teilnehmer des Kurses
  var tnBelegIds = pMarkedIds;
  //Nur falls ein Auswahlfeld für Teilnehmer vorhanden ist, wird das Belegungs Array der ausgew.
  // Teilnehmer neu aufgebaut; es ist dann eine Teilmenge von pMarkedIds 
  if ($pAktDialog.find("#tnAuswahl").length == 1) {
    var wert;
    tnBelegIds = new Array();
    $pAktDialog.find('#tnAuswahl :selected').each(function(key, value) {
      wert = $(this).val();
      //"Alle" gewählt
      if (wert == 0) {
        // Alle bisher markierten Ids setzen
        tnBelegIds = pMarkedIds;
        return;
      }
      // wert != 0: nicht "Alle" gewählt) {
      if (in_array(wert,pMarkedIds) === true) {
        tnBelegIds[key] = wert;
      }
    }) //end each
    //Falls das Array der Teilnehmerbelegungen immer noch leer ist, wurde im Auswahlfeld kein 
    //Teilnehmer selektiert; dieser Fall wird jedoch behandelt wie die Auswahl von "Alle"
    if (tnBelegIds.length < 1) {
      tnBelegIds = pMarkedIds;
    }
  } //end if ($pAktDialog.find("#tnAuswahl").length == 1)
 
   //Belegungs Ids als String der Form 12120:13450:45670 darstellen
  KuferTools.VerhaltenPDFList.verhaltListObj.belIds  = tnBelegIds.join(":");
  
  
  // hier einfach das Formular abschicken 
  var $einstellForm = $pAktDialog.find('form');
  //gleich das ganze VerhaltensListeObjekt als objectBase64 codierten JSON string im POST mitschicken (besser als nur escapen)
  var encodedObj = KuferTools.Utils.getJsonFromObjectBase64( KuferTools.VerhaltenPDFList.verhaltListObj); 
  /*******
  // alt via escape
  var y = JSON.stringify(KuferTools.KursDetails.Teilnehmer.TerminKalenderObj);
  var x = escape(y);
  ********************/
  var objInputStr = '<input type="hidden" name="verhaltenslisteobj" value="' + encodedObj + '">';
  $einstellForm.append(objInputStr);

  $einstellForm.submit();
  $pAktDialog.dialog("close");

} //end KuferTools.VerhaltenPDFList.handleVerhaltenslisteOutput()

/**
 * Baut die Optionen für das Teilnehmer Auswahlfeld als String zusammen und hängt diesen in Select ein
 * @param jQuery Object $pEinstellDialog
 * @param array(int) pMarkedIds
 */
KuferTools.VerhaltenPDFList.addTnSelectOptions = function( $pEinstellDialog, pMarkedIds) {
  //vorher den Bereits angehängten OptionString wieder Abhängen vom DOM BAUM; nur die Option für alle drinlassen
  $('#tnAuswahl',$pEinstellDialog).find('.tnoption[value!=0]').remove();
  
  //hier den Optionsstring für TeilnehmerOption mit Hilfe der Bereits markierten Teilnehmer zusammenbauen
  var tnSelectOptionString = '';
  $.each(KuferTools.VerhaltenPDFList.TnBelegAry, function(key,tnBelegObj) {
    if (in_array(tnBelegObj.id, pMarkedIds) === true) {
     // alert( key + " - id: " + tnBelegObj.id + ' name: '  + tnBelegObj.namevorname);
      var selected = '';
      if (tnBelegObj.id === '0') {
        selected =  'selected="selected"';
      }
      tnSelectOptionString  += '<option class="tnoption" value="' + tnBelegObj.id + '" ' + selected + '>' +
                                tnBelegObj.namevorname + '</option>' + "\n";
    }
  }); //end $.each(..)
  //die Auswahloptions für Teilnehmer noch an passender Stelle in den DOM Baum einhängen
   $('#tnAuswahl',$pEinstellDialog).append(tnSelectOptionString);

} //end KuferTools.VerhaltenPDFList.addTnSelectOptions

/**
 * Baut die Optionen für das Verhaltensauswahlfeld als String zusammen und hängt diesen in Select ein
 * 
 * nur relevant für das elektronische Klassenbuch; wird beim Öffnen des Verhaltensauswahldialogs in
 * anwesenheiten.js (Method: KuferTools.Anwesenheiten.VerhaltenPDFList.initFilterDialog) aufgerufen.
 * Wird benötigt, um ggf. zusätzlich angelegte Verhaltenseinträge nach dem Abspeichern des Anwesenheitsformulars 
 * in die Dialogauswahl zu übernehmen, ohne dass ein Neuladen des Formulars erforderlich ist.
 * Anmerkung: ein Anfordern der neu hinzugekommenen Verhaltenseinträge via Ajax Request ist nicht nötig, da sie 
 * bereits auf der auf der Anwesenheitsseite vorhanden sind (in Variable KuferTools.Anwesenheiten.VerhaltenInfo) 
 * 
 * @param jQuery Object $pEinstellDialog
 */
KuferTools.VerhaltenPDFList.addVerhaltenSelectOptions = function($pEinstellDialog) {
  //Bisherige Verhaltenseinträge aus dem Dialog beziehen sich auf alle Kurstage des aktuellen
  // Kurses; daher im Array verhaltenAry merken
  var verhaltenAry = [];
  var $verhaltenOptionAry = $('#verhaltenAuswahl',$pEinstellDialog).find('.verhaltenoption');
  $verhaltenOptionAry.each(function(key, verhaltenOption) {
    //enthält an Position 0 den Wert "alle"
    verhaltenAry[key] = $(verhaltenOption).val();
  }); //end each
  
  //die bereits vorhandenen Verhaltensoptionen - außer "alle" - aus dem  DOM BAUM entfernen
  $('#verhaltenAuswahl',$pEinstellDialog).find('.verhaltenoption[value!="alle"]').remove();
  
  // Die im Elektronischen Klassenbuch angelegten Verhaltensinfo Einträge sind bereits in Variable
  // KuferTools.Anwesenheiten.VerhaltenInfo enthalten
  $.each(KuferTools.Anwesenheiten.VerhaltensInfo, function(key,verhaltenInfoObj) {
    var verhaltenInfoTextObj = verhaltenInfoObj.text;
    //neu hinzugekommen Verhaltenseinträge ins verhaltensArray aufnehmen
    if (!in_array(verhaltenInfoTextObj.text, verhaltenAry)) {
 //   if ($.inArray(verhaltenInfoTextObj.text, verhaltenAry)=== -1) { 
      verhaltenAry[verhaltenAry.length-1] = verhaltenInfoTextObj.text;
    } //end if
  }); //end each
  
  /** Testausgabe zur Kontrolle
  var verhaltenStr = 'Verhalten: ';
  for (var i=0; i < verhaltenAry.length; i++) {
   verhaltenStr +=  i + ": " + verhaltenAry[i] + ';\n';
 }
 alert(verhaltenStr);  **/
 
  //jetzt den neuen Optionsstring für VerhaltensOptionen mit Hilfe des Verhalten Arrays aufbauen  
  var verhaltenSelectOptionString = '';
  $.each(verhaltenAry, function(key,verhalten) {
    //nur die Restlichen Optionen ungleich "alle" anhängen
    if (verhalten !== 'alle') {
      verhaltenSelectOptionString  += '<option class="verhaltenoption" value="' + verhalten + '">' +
                              verhalten + '</option>' + "\n";
    }
    
  }); //end $.each(..)
  //die Auswahloptions für Teilnehmer noch an passender Stelle in den DOM Baum einhängen
   $('#verhaltenAuswahl',$pEinstellDialog).append(verhaltenSelectOptionString);

} //end KuferTools.VerhaltenPDFList.addVerhaltenSelectOptions

//ReadyHandler
$(document).ready(function() {
  
      
}); //end Readyhandler