/*  jQuery Handler Funktionen für die Details in den Tools Teilnehmerinfo (früher Adressdaten bearbeiten), Dozenteninfo
 *  und Adressinfo;  enthält u.a. gemeinsame Funktionen zu obigen Tools, die aus  teilninfo.js, dozinfo.js bzw.
 *  adressinfo.js ausgelagert werden können
 *  u.a. sind enthalten:  Clickhandler zum Bearbeiten eines Dozenten, Handler zum Ermitteln der Tab-Id, Filterfunktionen 
 *  zum Kursreiter in den Tools Dozenteninfo u. Teilnehmerinfo
 */

registerNamespace("KuferTools.PersonDetails");
registerNamespace("KuferTools.Filter");

//Diese Sortiereinstellungen für die Datatables werden nur im Reiter Kurse der Tools Dozentenifo bzw.
// Teilnehmerinfo gesetzt; für Tool Adressinfo gibt es keinen Kursreiter; somit existiert dort auch
// keine dataTable (bzw. dataTableExt)
 if (!isempty(jQuery.fn.dataTableExt)) {
  jQuery.fn.dataTableExt.oSort['de_date-asc']  = KuferTools.Utils.DataTables.oSort.DateAsc;
  jQuery.fn.dataTableExt.oSort['de_date-desc'] = KuferTools.Utils.DataTables.oSort.DateDesc;
  jQuery.fn.dataTableExt.oSort['weekday-dateShort-asc'] = KuferTools.Utils.DataTables.oSort.DateAsc;
  jQuery.fn.dataTableExt.oSort['weekday-dateShort-desc'] = KuferTools.Utils.DataTables.oSort.DateDesc;
}

// var kursTableOrigData = {};
var $kursTable = null;

$(document).ready( function() {
  
  //Klickhandler für das Bearbeiten eines Dozenten, Teilnehmers und einer Adresse (im Tool Dozenten-/Teilnehmer-/Adressinfo);
  //bei Anklicken des Buttons öffnet sich ein Dialog mit dem Formular zum Eingeben der Personendaten (das via Sightbuilder aufgebaut wird)
  $('.dozent_bearbeiten, .adresseBearbeiten, .teilnehmerBearbeiten').click(function() {
    
    var persClass = $(this).prop('class');
    KuferTools.PersonDetails.bearbeitePerson(persClass);
    // KuferTools.PersonDetails.bearbeitePerson('dozent');
   
   /*
    var link = 'usertools.php';
    //var dozid = 1;
    var actionPart = '&action=updateDozent&dnr=';
      
    var dataStr = "tool_id=" + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId + actionPart +
                   KuferTools.PersonDetails.Nr;
    var weite = 990;
    var buttons =   {
                     "Speichern": function() {
                       //Das via loadAndDisplayPage(..) aufgebaute Formular validieren und abschicken; hat die Form
                       // <form id="sightbuilderform" class="ui-dialog-content...>...
                       
    	                 // Entfernt aus dem Selflink die den Getparameter wb__already__decoded sowie mögliche Anker am Ende
    
     //                 var actionLink = KuferTools.SelfLink.replace(/&wb__already__decoded=done/g, '').replace(/#.*/ // , '');
    
    /*
    	                 actionLink += '&dozupdate=1';
    	               
                       var $form = KuferTools.Page;
                       $form.prop('action',actionLink);
                       //Validiert derzeit nur einige Werte (wie z.B. Datumswerte, Wochentage) auf Korrektheit; prüft bei den anderen 
                       //Einträgen nur, ob Pflichtfelder nicht leer sind;  z.B. werden Telefonnr. ausreichend validiert
                       if (validateForm($form.find('input')) !== true) {
                         var message = 'Bitte geben Sie gültige Werte in die als Pflichtfelder gekennzeichneten Eingabefelder ein. ';
                         showMessage(message,'Validierung fehlgeschlagen');
                       }
                       else
                        $form.submit();
                        //Dialog close ist hier nicht nötig, da Seite sowieso neu geladen wird
                    },
		     "Abbrechen": function() {$(this).dialog("close");}
		    }; 
    //Hier erfolgt das Nachladen der Seite via Ajax und die Seitenausgabe via showMessage()
    KuferTools.Utils.loadAndDisplayPage(link,dataStr,buttons,weite);
    */
  }); //end Klickhandler f. Bearbeiten eines Dozenten
  
  //Klickhandler für das Hinzufügen eines neuen Dozenten, Teilnehmers und einer Adresse (im Tool Dozenten-/Teilnehmer-/Adressinfo);
  //bei Anklicken des Buttons öffnet sich ein Dialog mit dem Formular zum Eingeben der Personendaten (das via Sightbuilder aufgebaut wird)
  $('#newDozent, #newTeilnehmer, #newAdresse').click(function() {
    var persClass = $(this).prop('id');
    KuferTools.PersonDetails.fuegePersonHinzu(persClass);
   });

  // Gibt beim Anklicken des Kursdetail Links auf das andere Tool zusätzlich die Tabid mit
  // dadurch zeigt der Backlink gleich auf den richtigen Tabreiter zurück (z.B. tabs-2 für belegte Kurse)
  $('.kurs_id').find('a').click(function() {
    var $this = $(this);
    $this.addTab2Url();
  });
  

    KuferTools.Filter.filterActive = false;
    // Klickhandler zum Filtern im Reiter Kurse in den Dozenten- bzw. Teilnehmerdetails
    $('.persondetails_kursfilter').click(function(e) {
      KuferTools.PersonDetails.showKurseFilterDialog();
      // $('#dialogKurseFilter').dialog('open');
      // return false;
    });

    // Button zum Löschen des Termin-Filters unter der Tabelle 
    $("#persondetails_kursfilterDelLnk").click(function() {
      var $this = jQuery(this);
      var $kursFilterForm = KuferTools.PersonDetails.createKurseFilterForm();
     //Das KursFilter Formular muss in den DOM Baum gehängt werden; ansonsten wird nichts gefiltert, da die
     // Eingabefelder des Filterformulars (mit den filterwerten) ja  nicht vorhanden sind 
      $this.append($kursFilterForm);
      KuferTools.PersonDetails.removeFilterKursTable();
      //Nach dem Zurücksetzen der Filter muss das Formular wieder ausgehängt werden; ansonsten ist es beim
      //nächsten Klick auf Filter 2mal im DOM Baum vorhanden (und das gibt Fehler beim Filtern)
      $kursFilterForm.detach();
      
    });
    
  
  // initKursTable();

  if ($('#foto_gallery').length > 0) {
    try {
      Galleria.loadTheme('../jquery/galleria/themes/classic/galleria.classic.min.js');
      $('#foto_gallery').galleria({
        width: 775,
        height: 375,
        imageCrop: false,
        carousel: false
      });
    } catch (err) {}
  }
  
  // Voreinstellungen bei Reload
  $('input#personenkurse_mehrzeilig').prop("checked", true);
  
  // Einzeilig/Mehrzeilig; Für Radiobuttons braucht man den Click oder Change event
  $('input.personenkurse_zeilenauswahl').click(function(e) {
    //e.preventDefault();
    //Den angehakten Radiobutton auswählen 
    //var $checkedRadiobox = $(this).find(':checked');
    KuferTools.PersonDetails.radioEinzeiligMehrzeiligKursTable($(this));
  });
  
  initReiterBankverbindungen();
  
  /***********************************************************************************************
   *  Handling für die Kennzeichenliste (NM Liste)
   ******************************************************************************************************/ 
 
  // Beim Klicken werden die Werte aus der Tabelle mit den Kennzeichenhinterlegungen in die Hidden Input Felder
  // des zugehörigen Formulars übernommen und anschhließend wird das Formular abgeschickt und der
  // Dialog Subscreen Dialog geschlossen
   var tableTrRow = "table.kennzHl tr";
   $(document).on("click", tableTrRow, function(){ 
          var $this = $(this);
          $("#detail_text_kennz").val($($this.find("td")[1]).html());
          $("#detail_kennz_kennz").val($($this.find("td")[0]).html());
          //$("#maAnmeld_input_bemerkung").val( $(this).data("value")[0]  );
          //var buttons = KuferTools.DialogWindows[1].parents(".dialogwindow").find("button"); 
          // buttons.each(function(index, item) {if($(item).text() == "Ok") item.click();});
          KuferTools.PersonDetails.Dialog.kennzeichenList.done(KuferTools.DialogWindows[KuferTools.DialogWindows.length-1]);
       });
  
  // Highlighten der überstrichenen Zeilen in der Tabelle durch hinzufügen einer Klasse 'active'
  //Ab jQuery 1.7 wird live durch den on Event ersetzt
  $(document).on( "mouseenter", tableTrRow, function() {
     //Eventhandler für mouseenter
     var $this = $(this);
     $this.addClass('active');
  }); 
  
   $(document).on( "mouseleave", tableTrRow, function() {
     //Eventhandler für mouseleave
     var $this = $(this);
     $this.removeClass('active');
   });
  
}); //end $(document).ready(...)


KuferTools.PersonDetails.radioEinzeiligMehrzeiligKursTable = function ($radio)
{
  if ($radio.val() == 'einezeile') {
    KuferTools.Utils.KuerzeTabelleAufZeile( $('.tab_kurse'), true );
  }
  else {
    KuferTools.Utils.KuerzeTabelleAufZeile( $('.tab_kurse'), false );
  }
}

  //Baut Dialog zum Bearbeiten von Personendaten auf und verwendet zum Aufbau des Formulars den Sightbuilder
  KuferTools.PersonDetails.bearbeitePerson = function(pPersClass) {
    var link = 'usertools.php';
    
    // pPersClass = 'button_span dozent_bearbeiten'
    //relevanten Teil aus  pPersclass herausfiltern; pPersClass ist z.B. 'button_span dozent_bearbeiten'
    var persClassParts = pPersClass.split(' ');
    var buttonHandling = persClassParts[1];
    //var dozid = 1;
    var actionPart = '';
    switch (buttonHandling) {
      case 'dozent_bearbeiten': 
        actionPart = '&action=updateDozent&dnr=';
        break;
      case 'adresseBearbeiten': 
        actionPart = '&action=updateAdresse&anr=';
        break;
      case 'teilnehmerBearbeiten': 
        actionPart = '&action=updateTeilnehmer&tnr=';
        break;  
    }
    
    var dataStr = "tool_id=" + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId + actionPart +
                   KuferTools.PersonDetails.Nr;
    var weite = 800;
    var buttons =   {
                     "Speichern": function() {
                       //Das via loadAndDisplayPage(..) aufgebaute Formular validieren und abschicken; hat die Form
                       // <form id="sightbuilderform" class="ui-dialog-content...>...
                       
    	                 // Entfernt aus dem Selflink die den Getparameter wb__already__decoded sowie mögliche Anker am Ende
                         //Achtung: KuferTools.SelfLink ist hier noch verwendbar, solange in den Reitern keine Funktionen vorher 
                         //ausgeführt werden, die den Link verändern (z.B. ein KursUpdate) und diese Funktionen in den Handlern in PHP 
                         // (z.B. in _handleTeilnehmerdetails) zu einem Überschreiben der Statusmeldung führen (vgl. kursdetails.js
                         //  Klickhandler für den 'Kurs Bearbeiten' Button).
    	               var actionLink = KuferTools.SelfLink.replace(/&wb__already__decoded=done/g, '').replace(/#.*/, '') + '&xsrf='+KuferTools.TabPageXsrf;
    	               // actionLink += '&dozupdate=1';
    	               var updateStr;
                       switch (buttonHandling) {
                         case 'dozent_bearbeiten': 
                           updateStr = 'dozupdate';
                         break;
                         case 'adresseBearbeiten': 
                           updateStr = 'adrupdate';
                         break;
                         case 'teilnehmerBearbeiten': 
                           updateStr = 'teilnupdate';
                         break;  
                         }
                       var $form = KuferTools.Page;
                       if( !$form.is('form') ) {
                         $form = $form.find('form');
                       }
                       
                       KuferTools.PersonDetails.fuegeKennzeichenZuFormularHinzu($form);
                       
                       $form.append('<input type="hidden" name="' + updateStr + '" value="1">');
                       KuferTools.PersonDetails.validateForm(actionLink);
                     },
		     "Abbrechen": function() {$(this).dialog("close"); KuferTools.removeHinterlegungen()}
		    }; 
    //Hier erfolgt das Nachladen der Seite via Ajax und die Seitenausgabe via showMessage()
    KuferTools.Utils.loadAndDisplayPage(link,dataStr,buttons,weite);
  
} // end KuferTools.PersonDetails.bearbeitePerson

//Baut Dialog zum Anlegen von neuen Personendaten auf und verwendet zum Aufbau des Formulars den Sightbuilder
KuferTools.PersonDetails.fuegePersonHinzu = function(pPersClass) {
  
  var actionPart = '';
  var insertStr;
    switch (pPersClass) {
      case 'newDozent': 
        actionPart = '&action=newDozent';
        insertStr = 'dozinsert';
        break;
      case 'newAdresse': 
        actionPart = '&action=newAdresse';
        insertStr = 'adressinsert';
        break;
      case 'newTeilnehmer':
        actionPart = '&action=newTeilnehmer';
        insertStr = 'tninsert';
        break;
    }
  
  var link = 'usertools.php';
  var dataStr = "tool_id=" + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId + actionPart;
  var weite = 800;
  var buttons =   {
                   "Ok": function() {
                     //Das via loadAndDisplayPage(..) aufgebaute Formular validieren und abschicken; hat die Form
                     // <form id="sightbuilderform" class="ui-dialog-content...>...

                  //   var actionLink = 'usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId + 
                  //        '&dozinsert=1'; // + searchdozent
                    var actionLink = KuferTools.SelfLink.replace(/&wb__already__decoded=done/g, '').replace(/#.*/, '') + '&xsrf='+KuferTools.TabPageXsrf;
                    var $form = KuferTools.Page;
                    if( !$form.is('form') ) {
                      $form = $form.find('form');
                    }
                    
                    KuferTools.PersonDetails.fuegeKennzeichenZuFormularHinzu($form);
                     
                    $form.append('<input type="hidden" name="' + insertStr + '" value="1">');
                    KuferTools.PersonDetails.validateForm(actionLink);
                  },
                   "Abbrechen": function() {$(this).dialog("close"); KuferTools.removeHinterlegungen()}
                  };
  //Hier erfolgt das Nachladen der Seite via Ajax und die Seitenausgabe via showMessage()
  KuferTools.Utils.loadAndDisplayPage(link,dataStr,buttons,weite);
  
} // end KuferTools.PersonDetails.fuegePersonHinzu

KuferTools.PersonDetails.fuegeKennzeichenZuFormularHinzu = function ($pForm)
{
  // Diese KuferTools Variable enthält jetzt die Liste aller Kennzeichen
  // nach dem Einfügen bzw. Löschen
  //KuferTools.PersonDetails.Dialog.kennzeichenList.data
  if (typeof KuferTools.PersonDetails.Kennzeichen !== 'undefined') {
    //alle bearbeiteten (einzufügenden oder zu löschende) Kennzeichen als Hidden Inputs hinzufügen; ob sie eingefügt oder
    // gelöscht werden, wird in PHP ermittelt (in TeilnehmerAPI::saveTeilnehmer) 
    var kennzeichen = [];

    jQuery.each(KuferTools.PersonDetails.Kennzeichen, function(index, item) {
      //Array aus kennzeichen zusamenbauen; restl. Daten wie z.b. id, text des 
      // Kennzeichenobjekts sind nicht relevant); daher im Ggs. zu Dokumenten alle Kennzeichen
      // in ein Inputfeld einfügen 
      kennzeichen.push(item.kennz);
    }); //end each

    // jetzt liegen Kennzeichen z.B. in der Form 11-110-112-145-147 vor
    $pForm.append('<input type="hidden" name="teilnehmer_kennzeichen" value="' + kennzeichen.join('-') + '">');
    //$pForm.append('<input type="hidden" name="teilnehmer_kennzeichen" value="' + escape(kennzStr) + '">');
  } //end if typeof
};

//Validiert Eingabefelder der Formulare zum Hinzufügen/Bearbeiten von Personendaten (Dozent, Teilnehmer, Adresse).
//Gibt den ungültigen Feldern die Klasse form_error.
KuferTools.PersonDetails.validateForm = function(pActionLink) {
  var $form = KuferTools.Page;
  if( !$form.is('form') ) {
    $form = $form.find('form');
  }
  $form.prop('action',pActionLink);
  var $bankDaten = $form.find('input').filter('input[name$=_blz], input[name$=_konto], input[name$=_bic], input[name$=_iban]');
  //Validiert derzeit nur einige Werte (wie z.B. Datumswerte, Wochentage) auf Korrektheit; prüft bei den anderen 
  //Einträgen nur, ob Pflichtfelder nicht leer sind;  z.B. werden Telefonnr. ausreichend validiert
  var formValid = validateForm($form.find('input, select, textarea'));
  
  //Sonderfall für die Kennzeichen eines Teilnehmers, falls die Pflichtfelder sind:
  if (KuferTools.PersonDetails.KennzeichenMandatory) {
    var kennzeichenOk = false;
    if ( $form.find('[name=teilnehmer_kennzeichen]').length > 0 && jQuery($form.find('[name=teilnehmer_kennzeichen]')[0]).val() != '') {
      kennzeichenOk = true;
      $('#teilnehmer_kennzeichen').css('border','1px solid #9CA6C4');
    }
    else {
      $('#teilnehmer_kennzeichen').css('border','1px solid red');
    }
    formValid = formValid && kennzeichenOk;
  }
  
  var message = 'Bitte geben Sie gültige Werte in die als Pflichtfelder gekennzeichneten Eingabefelder ein. ';
  
  //wird aufgerufen, wenn die Bankdatenvalidierung erfolgreich war
  var successFunc = function( bankdatenAry ) {
    var bankdatenAryLength = bankdatenAry.length;
    for( var i = 0; i < bankdatenAryLength; i++) {
      var bezeichnung = bankdatenAry[i];
      $bankDaten.filter('input[name$=_' + bezeichnung + ']').removeClass('form_error');
    }
    //Prüfung, ob andere Felder ungültig sind
    if (formValid !== true) {
      
      KuferTools.Utils.AjaxLadebildschirm.Stop();
      
      showMessage(message,'Validierung fehlgeschlagen');
    } else {
      $form.submit();
    }
  };
  
  //wird aufgerufen, wenn die Bankdatenvalidierung nicht erfolgreich war
  var errorFunc = function( fehlerhafteBankdatenAry ) {
    
    KuferTools.Utils.AjaxLadebildschirm.Stop();
    
    var fehlerhafteBankdatenAryLength = fehlerhafteBankdatenAry.length;
    for( var i = 0; i < fehlerhafteBankdatenAryLength; i++) {
      var bezeichnung = fehlerhafteBankdatenAry[i];
      $bankDaten.filter('input[name$=_' + bezeichnung + ']').addClass('form_error');
    }
    showMessage(message,'Validierung fehlgeschlagen');
  };
  
  KuferTools.Utils.AjaxLadebildschirm.Start();
  
  validateBankDatenPerAjax($bankDaten, successFunc, errorFunc);
};

//Baut den Filter für die Kurse im Reiter Kursübersicht der Details in den Tools Dozenteninfo u. Teilnehmerinfo auf 
KuferTools.PersonDetails.showKurseFilterDialog = function () {
    
  $form = KuferTools.PersonDetails.createKurseFilterForm();
  
  KuferTools.PersonDetails.showFilterMessage($form, KuferTools.Spracheinstellungen.Kurs.Singular.Nominativ + 'filter:',
		  KuferTools.PersonDetails.getDialogDefaultButtons(), undefined, undefined);

  
} //end KuferTools.PersonDetails.showKurseFilterDialog(..)


//Baut den Filter für die Kurse in Reiter Kursübersicht der Details in den Tools Dozenteninfo u. Teilnehmerinfo auf 
KuferTools.PersonDetails.createKurseFilterForm = function () {
    /**
   * Private Funktion für diese Filterfunktion, welche den Aufbau des Filterdialogs erleichtert.
   * Die einzelnen Spalten des Dialogs werden in Spans mit gleicher Klasse gepackt.
   * @return String
   */
  function getSpanNr(pInhalt, pSpaltennummer){
    return '<span class="filter_person_column_' + pSpaltennummer + '">' + pInhalt + '</span>';
  }
  
  var actionLink = 'usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId + 
               '&action=kursFilter&persnr=' + KuferTools.PersonDetails.Nr;
   
  var $form = $('<form action="' + actionLink + '" method="post" class="kursfilterForm"></form>'); 
  
  var meldung = '<div class="person_filterdialog">';
  meldung += '<div class="zeile">';
  meldung += getSpanNr('Titel:', 1) + getSpanNr(getInputKursTitel(KuferTools.Filter.KursTitel), 2);
  meldung += '</div>';
  
  meldung += '<div class="zeile">';
  meldung += getSpanNr('Kursnummer von:', 1) + getSpanNr(getInputKnrVon(KuferTools.Filter.KnrVon), 2);
  meldung += getSpanNr('bis:', 3) + getSpanNr(getInputKnrBis(KuferTools.Filter.KnrBis), 4) + '<br><br>';
  meldung += '</div>';
  
  meldung += '<div class="zeile">';
  meldung += getSpanNr('Datum von:', 1) + getSpanNr(getInputDatumVon(KuferTools.Filter.DatumVon), 2);
  meldung += getSpanNr('bis:', 3) + getSpanNr(getInputDatumBis(KuferTools.Filter.DatumBis), 4) + '<br><br>';
  meldung += '</div>';
  
  meldung += '<div class="person_filterdialog_buttons">';
  meldung += getButtonToday() + getButtonAktWeek() + getButtonAktMonth() + '<br>';
  meldung += getButtonTomorrow() + getButtonNextWeek() + getButtonNextMonth();
  meldung += '</div>';
  meldung += '</div>';
  $form.append(meldung);
  return $form;
  
} //end KuferTools.PersonDetails.createKurseFilterForm (..)



// Führt für den jeweiligen Buttonclick das passende Javaskript Handling aus
KuferTools.PersonDetails.getDialogDefaultButtons = function() {

  return {
    "Schließen": function () {
      $(this).dialog("close");
    },
    "Filter leeren": function () {
      KuferTools.PersonDetails.removeFilterKursTable();
      $(this).dialog("close");
    },
    "Filter setzen": function () {
      KuferTools.PersonDetails.doFilterKursTablebyAjax();
      $(this).dialog("close");
    }
  };
}


/**
 * Aufruf des Filterdialogs. Setzt die Meldung zuvor in ein Formular.
 * 
 * @param pMeldung Dialoginhalt
 * @param pTitle Dialogtitel
 * @param pButtons Buttons
 * @param pWidth Breite des Fensters (optional)
 * @param pPosition Höhe des Fensters (optional)
 * @param pAction Action-Attribut des Formulars (optional)
 */
KuferTools.PersonDetails.showFilterMessage = function(pMeldung, pTitle, pButtons, pWidth, pPosition)
{
  var $dialogKurseFilter = $('<div id="dialogKurseFilter"></div>');
  var meldung = $dialogKurseFilter.append(pMeldung);
    
  //  '<form class="filter_form" method="post" ' + action + '>' + pMeldung + '</form>';
  showMessage(meldung, pTitle, pButtons, pWidth, pPosition, function($pForm) {
    KuferTools.PersonDetails.doFilterKursTablebyAjax();
    $pForm.dialog("close");
  });
}

//Setzt die Filtervariablen für die Kurs Tabelle im Kursreiter zurück
KuferTools.PersonDetails.removeFilterKursTable = function () {
  // $('#dialogKurseFilter :input[type=radio][value=default]').prop("checked", true);
  // besser ist z.B. (aber Klasse so nicht vorhanden
  // $('#dialogKurseFilter #alleStatiTermine').prop("checked", true);
  
  //Zuerst: Zurücksetzen der Einstellungen direkt in den Inputfeldern (zum Senden als AJAX POST Variablen)
  $('.filter_input').val(''); // bzw. andere Möglichkeit
 /// $('.filter_datumvon').val(KuferTools.Filter.DatumVon0);
 // $('.filter_datumbis').val(KuferTools.Filter.DatumBis0);

  //Danach: Zurücksetzen der Einstellungen für die Anzeige in den Eingabefeldern; die werden beim erneuten Öffnen 
  //des Filters mit den KuferTools.Filter Variablen besetzt (in Methode createKurseFilterForm())
  KuferTools.Filter.DatumVon = '';
  KuferTools.Filter.DatumBis = '';
  KuferTools.Filter.KnrVon = '';
  KuferTools.Filter.KnrBis = '';
  KuferTools.Filter.KursTitel = '';

  // $('#dialogKurseFilter :input[type=text]').val('');  
  //KuferTools.PersonDetails.doFilterKursTable();
  KuferTools.PersonDetails.doFilterKursTablebyAjax();
}


//Hier wird die neue Tabelle für die Kurse erstellt, wenn ein Filter gesetzt wird
KuferTools.PersonDetails.doFilterKursTablebyAjax = function () {
 
  // Nicht nötig: var datumVon  =   $.trim($('.filter_datumvon').val()); Denn:
  // Im Post werden u.a. die Felder filter_kurstitel, filter_knrvon, filter_knrbis, filter_datumvon,filter_datumbis
  // mitgeschickt
  var datumVon = $.trim($('.filter_datumvon').val());
  var datumBis = $.trim($('.filter_datumbis').val());
  var knrVon = $.trim($('.filter_knrvon').val());
  var knrBis = $.trim($('.filter_knrbis').val());
  var kursTitel = $.trim($('.filter_kurstitel').val());
  
  KuferTools.Filter.filterActive = false;
  //Filter ist aktiv, wenn die Eingabewerte nicht leer sind; für die Datumswerte ist der Filter bereits aktiv, wenn nur einer
  //der werte datumVon bzw. datumBis gefüllt ist
  // per Default eingestellten Datumswerten sein.
  if (!isempty(kursTitel)) {
    KuferTools.Filter.KursTitel = kursTitel;
    KuferTools.Filter.filterActive = true;
  }
  if (!isempty(knrVon)) {
    KuferTools.Filter.KnrVon = knrVon;
    KuferTools.Filter.filterActive = true;
  }
  if (!isempty(knrBis)) {
    KuferTools.Filter.KnrBis = knrBis;
    KuferTools.Filter.filterActive = true;
  }
  
  //Wenn nur ein Datumswert leer ist , wird der Filter trotzdem aktiviert; dann werden - ohne Berücksichtigung des Semesters-
  // alle Kurse im gesetzten Zeitraum gefiltert; bei DatumVon='' ist dann der Zeitraum von vorne her nicht eingeschränkt
  if (!isempty(datumVon) || !isempty(datumBis) ) {
    KuferTools.Filter.DatumVon = datumVon;
    KuferTools.Filter.DatumBis = datumBis;
    KuferTools.Filter.filterActive = true;
  }
 
 
  var $kursfilterForm = $('.kursfilterForm');
  //doAjaxPost sendet den Ajax Request zum Server und gibt  dabei die Inhalte der Input Felder aus dem Formular als POST
  // Variablen mit; also sthet z.B. im POST: filter_kurstitel=Englisch&filter_datumvon=18.02.2013&filter_datumbis=......
  KuferTools.Utils.doAjaxPost($kursfilterForm, $kursfilterForm.prop('action'))
    .then(resp => resp.text())
    .then(function(response){
    
    //Verarbeiten der Response vom Server
    $('#kurstable_div').html(response);
      switch (KuferTools.ToolId) {
        case 12:
          if($('#kurstable_div span.error').length == 0) {
            KuferTools.Dozenteninfo.createKursTable();
           //Druckbuttons, Marker, Radiobuttons usw. anzeigen
            KuferTools.Dozenteninfo.showElemsMitKursen(true);
          }
          else
            //Druckbuttons, Marker, Radiobuttons usw. ausblenden
            KuferTools.Dozenteninfo.showElemsMitKursen(false);
          break
        case 11:
          if($('#kurstable_div span.error').length == 0) {
            KuferTools.Teilnehmerinfo.createKursTable();
           //Druckbutton,Radiobuttons usw. anzeigen
            KuferTools.Teilnehmerinfo.showElemsMitKursen(true)
          }
          else
            //Druckbutton,Radiobuttons usw. ausblenden
            KuferTools.Teilnehmerinfo.showElemsMitKursen(false)
          break
      }
    
    KuferTools.Utils.AjaxLadebildschirm.Stop();
    
  }); //end callbacck Funktion für Response zu doAjaxPost)
  
  if(KuferTools.Filter.filterActive) {
    $("#persondetails_kursfilterDelLnk").css({"display":"inline"});
  } else {
    $("#persondetails_kursfilterDelLnk").css({"display":"none"});
  }
  
  
  
  /**
   * einfacherer, alter Code zum Ajax-Post war:
  $.ajax({
   type: "POST",
   url: 'usertools.php',
   processData: false,
   // data: {filter_knrvon: knrVon, filter_knrbis: knrBis},
 
   data:"tool_id=" + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId + '&action=kursFilter' + 
         '&dnr=' + KuferTools.PersonDetails.Nr,
   
   //Verarbeiten der Ajax Response
   success: function(response){
 
    //Als Response wird die komplette Kurs Tabelle als HTML-String zurückgegeben und der Inhalt im entspr. div Element für
    //die Tabelle überschrieben. Falls kein Kurs gefunden wurde, wird eine entspr. Meldung zurückgegeben
	  $('#kurstable_div').html(response);
	  if($('#kurstable_div span.error').length == 0) {
		  KuferTools.Dozenteninfo.createKursTable();
	  }
	  $.loading(false);
 
   },
   error: function(a,b,c) {
     showMessage('Bei der Verarbeitung Ihrer Anfrage ist ein Fehler aufgetreten - bitte versuchen Sie es später erneut', 'Fehler');
   }
  }) //end Ajax
  **/
}  //end doFilterKursTablebyAjax()

/**
 * Hier sind die Funktionen und Eventhandler für den Reiter für die Bankverbindungen zusammengefasst
 * 
 * @returns {undefined}
 */
function initReiterBankverbindungen()
{
  // Div mit dem Formular zum Bearbeiten eines Bankdatensatzes.
  // Wird hier aus dem DOM gehängt, und später in ShowMessages verwendet.
  var $editDialog = $('#editStammBv');
  $editDialog.detach();
  
  makeBankdatenDataTable( $('.tab_bankdaten') );
  setEventHandler4Buttons();
  
  /**
   * Macht aus der Tabelle für Bankdaten ein DataTable.
   * 
   * @param Selector $tabelle
   */
  function makeBankdatenDataTable( $tabelle )
  {
    if( $tabelle.length > 0 ) {
      $tabelle.dataTable({
        "oLanguage": {"sUrl": "../jquery/plugins/jquery.dataTables.de_DE.txt"},
        "bFilter": false,
        "bInfo": false, 
        "bScrollCollapse": true,
        "bAutoWidth": false,
        "bPaginate": false,
        "bSort": false
      });
    }
  }
  
  /**
   * Setzt die Eventhändelr für die Buttons zum Hinzufügen, Bearbeiten und Löschen von Bankdaten.
   */
  function setEventHandler4Buttons()
  {
    $('.edit_bankdaten').click( function() {
      var $editButton = $(this);
      var splitId = $editButton.prop('id').split('_');
      var bankId = splitId[1];
      var xsrf = splitId[2];
      
      var buttons = { 
        
        'Ändern': function() {
          validateBankdatenFromDialog( function() {
            var formAction = KuferTools.SelfLink.replace(/&wb__already__decoded=done/g, '').replace(/#.*/, '') + '&xsrf='+xsrf;
            $('#editStammBvForm').prop('action', formAction);
            $('#editStammBvForm').append('<input type="hidden" name="edit_bank" value="' + bankId + '">');
            $('#editStammBvForm').submit();
          });
        },
        'Abbrechen': function() {
          $(this).dialog('close');
        }
      };
      
      showMessage( $editDialog.clone(), 'Bankdaten bearbeiten', buttons );
      fillBankDaten( bankId );
    });
    
    $('.insert_bankdaten').click( function() {
      var buttons = { 
        
        'Einfügen': function() {
         
          validateBankdatenFromDialog( function() {
            var formAction = KuferTools.SelfLink.replace(/&wb__already__decoded=done/g, '').replace(/#.*/, '') + '&xsrf='+ KuferTools.InsertStammBvXsrf;
            $('#editStammBvForm').prop('action', formAction);
            $('#editStammBvForm').append('<input type="hidden" name="insert_bank" value="">');
            $('#editStammBvForm').submit();
          });
        },
        'Abbrechen': function() {
          $(this).dialog('close');
        }
      };
      showMessage( $editDialog.clone(), 'Bankdaten hinzufügen', buttons );
    });
    
    $('.delete_bankdaten').click( function() {
      var $deleteButton = $(this);
      
      var buttons = { 
        'Löschen': function() {
        var splitId = $deleteButton.prop('id').split('_');
        var bankId = splitId[1];
        var xsrf = splitId[2];
          // Um Probleme zu umgehen, wird dies nicht per GET-Parameter sonder Post-Parameter gelöst.
          var formAction = KuferTools.SelfLink.replace(/&wb__already__decoded=done/g, '').replace(/#.*/, '') + '&xsrf='+xsrf;
          $('body').append('<form id="stammBvDeleteForm" method="post" action="' + formAction + '"><input type="hidden" name="del_bank" value="' + bankId + '"></form>');
          $('#stammBvDeleteForm').submit();
          window.location.href = deleteLink;
        },
        'Abbrechen': function() {
          $(this).dialog('close');
        }
      };
      
      showMessage( 'M&ouml;chten Sie die Bankverbindung wirklich l&ouml;schen?', 'Bankverbindung wirklich L&ouml;schen?', buttons );
      
    });
  }
  
  /**
   * Prüft, ob die Bankdaten des Formulars sinnvoll gefüllt sind.
   * 
   * Falls keine Fehler erkannt werden, kann der User in einem Dialog pSuccessFunc aufrufen, z. B.
   * um das Formular abzusenden.
   * 
   * @param function pSuccessFunc
   */
  function validateBankdatenFromDialog( pSuccessFunc )
  {
    
    var errorMsg = [];
    var warningMsg = [];
    
    // ACHTUNG: trimS kann nicht damit umgehen, wen str undefined ist!!
    // Ebenso könnte diese Funktion derzeit noch probleme machen, wenn nur SEPA mal erlaubt ist.
    
    var bic = KuferTools.Utils.trimS( $('#editStammBv_BIC').val() );
    var iban = KuferTools.Utils.trimS( $('#editStammBv_IBAN').val() );
    var blz = KuferTools.Utils.trimS( $('#editStammBv_BLZ').val() );
    var kto = KuferTools.Utils.trimS( $('#editStammBv_KTO').val() );
    var sepa = $('[name=editStammBv_Art]:checked').val(); // S: Sepa, D: DTA, kann auch undefined sein.
    
    // Nur ein Leerstring gilt in JS als false, if( str ) ist also die Kurzform für if(str.length === 0)
    
    // Es wurde Zahlart SEPA ausgewählt, jedoch keine SEPA-Bankverbindung angegeben.
    if( sepa === 'S' && !(bic || iban) ) {
      errorMsg.push('Es ist das Zahlverfahren SEPA ausgewählt, jedoch sind BIC und IBAN nicht gefüllt.');
    }
    // Es wurde Zahlart DTA ausgewählt, jedoch keine DTA-Bankverbindung angegeben.
    else if( sepa === 'D' && !(kto || blz) ) {
      errorMsg.push('Es ist das Zahlverfahren DTA ausgewählt, jedoch sind Kto-Nr. und Bankleitzahl nicht gefüllt.');
    }
    
    // bic macht ohne iban keinen sinn. umgekehrt schon.
    if( bic && !iban  ) {
      errorMsg.push('BIC darf nicht ohne IBAN angegeben werden.');
    }
    
    // blz XOR kto
    if( (blz || kto) && !(blz && kto)  ) {
      errorMsg.push('Kontonummer und BLZ müssen immer gemeinsam angegeben werden.');
    }
    
    
    if( bic && kto ) {
      warningMsg.push('Es sind wohol SEPA- als auch DTA-Bankdaten angegeben worden. ' + 
                      'In KuferTools kann derzeit noch nicht überprüft werden, ob die Daten zusammenpassen.');
    }
    
    if( !(bic || iban || kto || blz) ) {
      errorMsg.push('Es wurden weder DTA- noch SEPA-Bankdaten angegeben.');
    }
    
    if( errorMsg.length === 0 ) {
      
      var toValidate = {};
      
      if( bic ) {
        toValidate.bic = bic;
      }
      if( iban ) {
        toValidate.iban = iban;
      }
      
      if( blz ) {
        toValidate.konto = kto;
        toValidate.blz = blz;
      }
      
      toValidate = KuferTools.Utils.getJsonFromObjectBase64( toValidate );
      
      KuferTools.Utils.AjaxLadebildschirm.Start();
      
      jQuery.post( 'usertools.php?ajaxFunc=validate', { 'toValidate': toValidate }, function( JsonMessage ) {
        var wrongFields = KuferTools.Utils.getObjectFromJson( JsonMessage );
        
        if( wrongFields.length > 0 ) {
          var msg = 'Folgende Bankdaten wurden bei der Kontoprüfung als fehlerhaft gewertet:';
          for( var i = 0; i < wrongFields.length; i++ ) {
            
            if( i > 0 ) {
              msg += ',';
            }
            
            switch( wrongFields[i] ) {
              case 'bic':
                msg += ' BIC';
                break;
              case 'iban':
                msg += ' IBAN';
                break;
              case 'konto':
                msg += ' Konto-Nr.';
                break;
              case 'blz':
                msg += ' BLZ';
                break;
            }
          }
          errorMsg.push(msg);
        }
        
        checkErrorMsg( errorMsg, pSuccessFunc );
        
        
        KuferTools.Utils.AjaxLadebildschirm.Stop();
        
      });
    } else {
      checkErrorMsg( errorMsg, pSuccessFunc );
    }
  }
  
  /**
   * Gibt entweder die Fehlermeldungen in pErrorMsg aus, oder falls keine vorhanden sind,
   * ruft pSuccessFunc auf.
   * 
   * @param array pErrorMsg
   * @param function pSuccessFunc
   */
  function checkErrorMsg( pErrorMsg, pSuccessFunc )
  {
    if( pErrorMsg.length > 0 ) {
      
      var message = '<h3>Fehlende oder fehlerhafte Angaben:</h3>';
      message += '<ul>';
      for( var i = 0; i < pErrorMsg.length; i++ ) {
        message += '<li>' + pErrorMsg[i] + '</li>';
      }
      message += '</ul>';
      
      showMessage(message, 'Fehlende oder fehlerhafte Angaben');
      
    } else {
        pSuccessFunc();
    }
  }
  
  /**
   * Besetzt die Felder des Dialogs zum Bearbeiten von Bankdaten.
   * 
   * Holt sich anhand der BankID per Ajax die entsprechenden Bankdaten.
   * 
   * @param int pBankId
   */
  function fillBankDaten( pBankId )
  {
    var link = KuferTools.SelfLink + '&action=getBankDaten';
    KuferTools.Utils.AjaxLadebildschirm.Start();
    
    $.post( link, { bank_id: pBankId }, function( bankDaten ){
      var bankdaten = KuferTools.Utils.getObjectFromJsonBase64( bankDaten );
      
      //$('#editStammBv_ID').val( bankdaten.id );
      $('#editStammBv_Inhaber').val( bankdaten.inhaber );
      $('#editStammBv_Bank').val( bankdaten.bankbez );
      $('#editStammBv_BIC').val( bankdaten.bic );
      $('#editStammBv_IBAN').val( bankdaten.iban );
      $('#editStammBv_BLZ').val( bankdaten.blz );
      $('#editStammBv_KTO').val( bankdaten.konto );
      $('#editStammBv_Bemerkung').val( bankdaten.bemerkung );
      $('#editStammBv_gueltig_von').val( bankdaten.ls_von );
      $('#editStammBv_gueltig_bis').val( bankdaten.ls_bis );
      $('#editStammBv_mandat_am').val( bankdaten.mandatam );
      $('#editStammBv_mandat_referenz').val( bankdaten.mandatid );
      $('#editStammBv_mandat_bemerkung').val( bankdaten.mandatbem );
      if( bankdaten.sepa === 'S' ) {
        $('#editStammBv_Art_SEPA').prop('checked', true);
      } else if( bankdaten.sepa === 'D' ) {
        $('#editStammBv_Art_DTA').prop('checked', true);
      }
      
      
      KuferTools.Utils.AjaxLadebildschirm.Stop();
    });
  }
}

/**
 * Schickt das Formular in $pSuchDiv ab, sofern alles korrekt gefüllt ist.
 * @param $pSuchDiv jQuery Objekt mit Formular
 */
KuferTools.PersonDetails.submitPersonenSuche = function ($pSuchDiv) {
    var $inputs = KuferTools.Utils.getInputableElements($pSuchDiv);
    var $invalidInputs = $();
    $inputs.each( function() {
      if( ! validateInput( $pSuchDiv ) ) {
        $invalidInputs = $invalidInputs.add( $pSuchDiv );
      }
    });
    if( $('.form_error').length > 0 ) {
      var meldung = 'Nicht alle Eingabefelder sind korrekt gef&uuml;llt. <br>'+
                    'Bitte Pr&uuml;fen Sie die Markierten Felder.';
      showMessage( meldung, 'Nicht alle Felder sind korrekt gefüllt' );
    }
    else {
      $pSuchDiv.find('form').submit();
      $pSuchDiv.dialog("close");
      
      
      KuferTools.Utils.AjaxLadebildschirm.Start();
    }
}


/**
 *    Klasse KennzeichenList  als Prototype von NMList (aus utils,js): gibt einen Dialog und
 *    Subscreen (mit Detail Dialog)) zum Auswählen von Kennzeichen aus und baut das Formular
 *    mit den ausgewählten Kennzeichen zum Speichern in der Datenbank auf
 * @returns {KennzeichenList}
 */

KennzeichenList = function(){
  this.getNewObject = function() {
     return {"kennz":"","text":"","warnung":"","id":""};
  };
  //Detailbildschirm für die Kennzeichen anzeigen:
  this.showSubscreen = function(pData, pNewItem) { //Detailbildschirm für Bearbeiten/Hinzufügen eines Datensatzes
     if (pData.id > 0) {
       showMessage('Bearbeiten ist nur bei neu eingetragenen Werten möglich.', 'Hinweis');
       return;
     }
     
     //hier ist nicht der im Kennzeichenfenster ausgewählte Wert (und somit pData) relevant, da im Subscreen nicht die Detailseinträge
     // zum i-ten Kennzeichen angezeigt werden, sondern eine Auswahl der hinterlegten Kennzeichen erscheint; daher sind
     // hier die hinterlegten Kennzeichen relevant, die in this.hldata übergeben wurden; damit gilt:
     // hldata = KuferTools.PersonDetails.KennzeichenHL; 
     
     //Template für den Kennzeichen-Detail Dialog holen; entspricht hier einer einzelnen Zeile; d.h. es
     // wird jede Zeile der KennzeichenHL Liste geparsed
     var tmpl = $('.templateKennzeichenDetails').html();
     var $ziel = $('<div></div>');
     
     //Tabelle bauen und beim Ziel einhängen
     var $table = jQuery('<table class="kennzHl"></table>');
     var $detailTBody = jQuery('<tbody></tbody>');
     
     $detailTBody.remove('tr');
     if (pData && pData.length > 0) {
       var tabellenInhalt = '';
       for (var i = 0; i < pData.length; i++) {
         
         //template (d.h einzelne Zeile der Tabelle) mit dem Kennzeichen aus der Hinterlegung parsen und als Zeile
         // in die Tabelle einfügen
    
         var row = parseTemplate(tmpl, pData[i]);
         tabellenInhalt += row;
       } //end for
      $detailTBody.append(tabellenInhalt);
      //den Rows noch eine Klasse verpassen
      $detailTBody.find('tr').addClass('nmDetailRow');
      $table.append($detailTBody);
   
      var $form = jQuery('<form></form>');
      var $inputHidKennz = $('<input id="detail_kennz_kennz" type="hidden" name="kennz">');
      var $inputHidText = $('<input id="detail_text_kennz" type="hidden" name="text">');
      $form.append( $inputHidKennz, $inputHidText)        
      $ziel.append($table,$form);         

    } //end if
      
     //Alt 
     //template mit dem aktuell ausgewählten Kennzeichen parsen und beim Ziel einhängen
    // $ziel.append(parseTemplate(tmpl, pData));
     
    //Für Kennzeichen gibt es nur insert d.h. pNewItem = true und Überschrift für den Subdialog ist Neues Kennzeichen
    var detailsTitel = pNewItem?'Neues Kennzeichen':'';
    showMessage($ziel, detailsTitel,
        {
           "Abbrechen": function() {
                if (pNewItem) {
                  //falls gerade auf hinzufügen geklickt wurde: danach wieder entfernen, wurde nämlich bereits in "data" aufgenommen
                  KuferTools.PersonDetails.Dialog.kennzeichenList.removeLast();
                  KuferTools.PersonDetails.Dialog.kennzeichenList.renderData();
                }  
                $(this).dialog("close"); 
           } //end Abbrechen
        }
     );
    
  };
  /**
   * Schreibt die Daten aus Dialog $dialog in das Objekt pData zurück
   * 
   * Damit werden dann die Variablen KuferTools.PersonDetails.Kennzeichen bzw.
   * KuferTools.PersonDetails.Dialog.kennzeichenList.data um einen Eintrag erweitert
   * 
   */
  this.restoreSubscreenData = function(pData, $dialog) {
    var restoreData = this.getRestoreInfo();
    for (var x in restoreData) {
      pData[restoreData[x]] = $dialog.find(x).val();
    }
  };
  /**
   * Liefert die Info, welche Felder wohin gespeichert werden müssen.
   */
  this.getRestoreInfo = function(){ 
    return {"#detail_kennz_kennz":"kennz", "#detail_text_kennz":"text"};
  };
  
  /**
   * Löschen einer Zeile ist immer möglich
   */
  this.canDelete = function(pData) {
    return true;
  }
  //Hier kann immer gelöscht werden, daher ist Funktion this.cannotDelete nicht nötig
   
  // wird ausgeführt im Subdialog beim Klick auf ein Kennzeichen aus der Hinterlegung; das ausgewählte Kennzeichen wird dann in
  //das Formularfeld für das Kennzeichen im Dialog zum Einfügen/ Bearbeiten eines Teilnehmers übernommen; Ein OK Button
  // im Subdialog zur Kennzeichenauswahl aus der Hinterlegung ist dadurch überflüssig
  this.done = function(dialog) {
     var $this = $(dialog);
     var data = this.getCurrentData();
   //  var data = this.hldata;
     var restoreData = KuferTools.PersonDetails.Dialog.kennzeichenList.getRestoreInfo();
     var fehlerbei = "";
     for (var x in restoreData) {
       if (!validateInput($this.find(x))) {
         fehlerbei += ', '+restoreData[x][0].toUpperCase() + restoreData[x].substring(1);
       }
     }
     if (fehlerbei == "") {
       KuferTools.PersonDetails.Dialog.kennzeichenList.restoreSubscreenData(data, $this); 
       if (data.kennz != '') {
         //TODO: evtl. noch Logik einbauen, um ein neues Kennzeichen nur zu übernommen, wenn es noch nicht in der Liste der 
         //bisher ausgewählten Kennzeichen enthalten ist; wg. Aufwand aber zurückgestellt
         // if (!in_array(data.kennz, storedKennzList)) {
           KuferTools.PersonDetails.Dialog.kennzeichenList.renderData();
           $this.dialog("close");
      //   }
      //   else 
      //     showMessage("Sie haben das Kennzeichen  " + data.kennz + " (" + data.text + ") bereits in die \n\
      //    Kennzeichenliste übernommen. Bitte wählen Sie ein Kennzeichen aus, das dort noch nicht enthalten ist.", 'Hinweis'); 
       } 
     } //end if (fehlerbei == "")
     else {
       showMessage("Falsches Format!<br>Prüfen Sie bitte den Inhalt von: " + fehlerbei.substring(2), 'Fehler');
     }
 };
};
KennzeichenList.prototype = new NMList();


