/**
* Die hier angegebenen Funktionen werden NUR für den FilterDialog bei Anwesenheiten zu einem Kurs verwendet
* (siehe getJsFiles() in Klasse NewAnwesenheitAPI in Skript AnwesenheitAPI.php)
*/

registerNamespace('KuferTools.Anwesenheiten');
KuferTools.Anwesenheiten.createAnwesenheitFilterDialog = function() {
 //Erzeugt ein JQUery div Element; das noch nicht im DOM Baum hängt
  var $dialogAnwesenheitFilter = $('<div id="dialogAnwesenheitFilter"></div>');
  var BR = '<br>';
  var newLine = "\n";
  var filterContent = '';
  
  //Eingabefelder für Zeitraum von - bis => vorbesetzen, mit gefiltertem Datum oder 1./letztem Kurstag
  var vondat = '';
  if (KuferTools.Anwesenheiten.DisplayEinstellungen.FilterVon)
    vondat = KuferTools.Anwesenheiten.DisplayEinstellungen.FilterVon;
  else
    vondat = KuferTools.Anwesenheiten.KurstagInfo[0].datum;
  var bisdat = '';
  if (KuferTools.Anwesenheiten.DisplayEinstellungen.FilterBis)
    bisdat = KuferTools.Anwesenheiten.DisplayEinstellungen.FilterBis;
  else
    bisdat = KuferTools.Anwesenheiten.KurstagInfo[KuferTools.Anwesenheiten.KurstagInfo.length-1].datum;
    
  filterContent += '<span class="ui-helper-hidden-accessible"><input type="text"/></span>';
  filterContent += '<fieldset style="float:left;">' + newLine;
  filterContent += '<legend>Zeitraum</legend>' + newLine;
  filterContent += '<label for="vondat">Zeitraum von:</label>' + newLine +
                   '<input type="text" name="vondat" class="date hasDatePicker" id="vondat" value="'+vondat+'" maxlen="10">' + newLine;
  filterContent += '<label for="bisdat">bis:</label>' + newLine +
                   '<input type="text" name="bisdat" class="date hasDatePicker" id="bisdat" value="'+bisdat+'" maxlen="10">' + newLine;   
  filterContent += '</fieldset>' + newLine;
  
  if (KuferTools.Anwesenheiten.DisplayEinstellungen.ShowMoreFilterOptions) {
    //Checkboxen für Statusangaben
    filterContent += '<fieldset style="float:left; clear:left;">';
    filterContent += '<legend>Zu berücksichtigende Status-Angaben</legend>';
    var checked = '';
    if (KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus == -1 || KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus.length == KuferTools.Anwesenheiten.DisplayEinstellungen.AlleFilterStatus.length)
      checked = ' checked';
    filterContent +=
        '<input type="checkbox" name="teilnehmeralleStati" value="-1" id="teilnehmeralleStati"' + checked + '>' + newLine +
        '<label class="tnStatus" for="teilnehmeralleStati">&nbsp;alle '+KuferTools.Spracheinstellungen.Teilnehmer.Plural.Nominativ+'</label>' + BR + newLine ;
    var moeglicheBelStati = KuferTools.Anwesenheiten.DisplayEinstellungen.AlleFilterStatus;
    for (var i = 0; i < moeglicheBelStati.length ; i++) {
              filterContent +=
                '<input class="tnStatusFilter" type="checkbox" name="teilnehmerStatus'+moeglicheBelStati[i]+'" value="'+moeglicheBelStati[i]+'"  id="teilnehmerStatus'+moeglicheBelStati[i]+'" ' + checked + '>' + newLine +
                '<label class="tnStatus" for="teilnehmerStatus'+moeglicheBelStati[i]+'"> &nbsp;'+KuferTools.Spracheinstellungen.Teilnehmer.Plural.Nominativ+' mit Status '+moeglicheBelStati[i]+'</label>' + BR + newLine;
    }     
    filterContent += '</fieldset>' + newLine;

    //Checkboxes für die Ausgabe zusätzlicher Anzeigen im Tabellenheader
    filterContent += '<fieldset style="float:left;">';
    filterContent += '<legend>Anzeige</legend>';
    filterContent +=  //Uhrzeit
        '<input type="checkbox" name="anzeigemodusUhrzeit" value="uhrzeit" id="anzeigemodusUhrzeit"' + (KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUhrzeit?' checked':'') + '>' + newLine +
        '<label class="anzeigemodus" for="anzeigemodusUhrzeit">&nbsp;Uhrzeit</label>' + BR + newLine +
        //UE
        '<input type="checkbox" name="anzeigemodusUE" value="UE" id="anzeigemodusUE"' + (KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUE?' checked':'') + '>' + newLine +
        '<label class="anzeigemodus" for="anzeigemodusUE">&nbsp;UE</label>' + BR + newLine +
        //Dozent
        '<input type="checkbox" name="anzeigemodusDoz" value="dozent" id="anzeigemodusDoz"' + (KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeDozent?' checked':'') + '>' + newLine +
        '<label class="anzeigemodus" for="anzeigemodusDoz">&nbsp;Dozent</label>' + BR + newLine +
        //Fach
        '<input type="checkbox" name="anzeigemodusFaecher" value="fach" id="anzeigemodusFaecher"' + (KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeFaecher?' checked':'') + '>' + newLine +
        '<label class="anzeigemodus" for="anzeigemodusFaecher">&nbsp;F&auml;cher</label>' + BR + newLine +
        //Bemerkung (Fach)
        '<input type="checkbox" name="anzeigemodusBemerkung" value="bemerkungFach" id="anzeigemodusBemerkung"' + (KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeBemerkung?' checked':'') + '>' + newLine +
        '<label class="anzeigemodus" for="anzeigemodusBemerkung">&nbsp;Bemerkung (Fach)</label>' + BR + newLine;
  }
  $dialogAnwesenheitFilter.append(filterContent);   
  var buttons = {
      "Schließen":     function() {   $(this).dialog("close"); },
      "Filter leeren": function() {   KuferTools.Anwesenheiten.removeFilterAnwesenheitTable(); 
                                      $(this).dialog("close"); 
                                      },
      "Filter setzen": function() {
                                      if (KuferTools.Anwesenheiten.DisplayEinstellungen.ShowMoreFilterOptions) {
                                        //Status Werte setzen
                                        var checked = false;
                                        var tempArray = new Array();
                                        var count = 0;
                                        for (var i=0 ; i<moeglicheBelStati.length ; i++) {
                                          checked = jQuery("#teilnehmerStatus"+moeglicheBelStati[i]).prop('checked');
                                          if(checked) tempArray[count++] = moeglicheBelStati[i];
                                        }
                                        
                                        if(tempArray.length > 0) {
                                          KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus = tempArray;
                                        } else {
                                          KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus = -1;
                                        }
                                        
                                        // Anzeige setzen
                                        KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUhrzeit = $('#anzeigemodusUhrzeit').prop('checked');
                                        KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUE = $('#anzeigemodusUE').prop('checked');
                                        KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeDozent =  $('#anzeigemodusDoz').prop('checked');
                                        KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeFaecher = $('#anzeigemodusFaecher').prop('checked');
                                        KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeBemerkung =  $('#anzeigemodusBemerkung').prop('checked');
                                        KuferTools.Anwesenheiten.doFilterAnwesenheitTable();
                                      }
                                      //von bis datum setzen
                                      KuferTools.Anwesenheiten.DisplayEinstellungen.FilterBis = KuferTools.Utils.Date.formatDate($('#dialogAnwesenheitFilter #bisdat').val()); 
                                      KuferTools.Anwesenheiten.DisplayEinstellungen.FilterVon = KuferTools.Utils.Date.formatDate($('#dialogAnwesenheitFilter #vondat').val());
                                      
                                      KuferTools.Anwesenheiten.doFilterAnwesenheitTable();
                                      
                                      $(this).dialog("close");
                                     }
  };
  
  showMessage($dialogAnwesenheitFilter, "Filter/Einstellungen für die Anzeige der Anwesenheiten", buttons);
  
  $dialogAnwesenheitFilter.find("#vondat").datepicker({ minDate: new Date() });
	//focus auf erstes Checkbox element setzen; evtl Abfrage des gesetzten Felds in showMessage in project.js 
  $dialogAnwesenheitFilter.find("#teilnehmeralleStati").focus();
  
	  
  /*
   * Verhalten der Teilnehmer-Status-Checkboxen im Filter-Dialog:
   * Wird "Alle Status" gesetzt, werden alle anderen Checkboxen auch gesetzt,
   * wird "Alle Status" wieder entfernt, werden bei allen anderen Checkboxen der Haken entfernt.
   * Beim Klick auf eine Checkbox wird geprüft, ob alle Checkboxen nun angehakt sind. Wenn ja,
   * wird "Alle Staus" angehakt, wenn nein, wird der haken bei "Alle Status entfernt"
   */
  
  $dialogAnwesenheitFilter.find('input.tnStatusFilter').click(function() {
    // alleChecked ist true, falls alle Checkboxen gesetzt sind, sonst false
    var alleChecked = $('#dialogAnwesenheitFilter input.tnStatusFilter').filter( ':not( :checked )' ).length == 0;
    $('#dialogAnwesenheitFilter input#teilnehmeralleStati').prop("checked", alleChecked);
  });
  //Klickhandler für Anklicken der Checkbox "Alle Stati"
  $dialogAnwesenheitFilter.find('input#teilnehmeralleStati').click(function() {
    var isChecked = $(this).filter(':checked').length != 0;
    $dialogAnwesenheitFilter.find('input.tnStatusFilter').prop( 'checked', isChecked );
  });


  //Checkboxen setzen
  if (jQuery.isArray(KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus)) {
    for (var i=0 ; i<KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus.length ; i++) {
      jQuery("#teilnehmerStatus"+KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus[i]).prop('checked', true);
    }
  }

}; //end createAnwesenheitFilterDialog


/*
* entfernt die Filtereinstellungen für die Anwesenheitstabelle Button "Filter leeren"
*/
KuferTools.Anwesenheiten.removeFilterAnwesenheitTable = function() {
  if (KuferTools.Anwesenheiten.DisplayEinstellungen.ShowMoreFilterOptions) {
    //Auswahl für alle Teilnehmer wird gesetzt
    $('#dialogAnwesenheitFilter #teilnehmeralleStati').prop("checked", true);
    // alle anderen Checkboxen werden zurückgesetzt 
    $('#dialogAnwesenheitFilter .tnStatusFilter').prop("checked", false);
    
    //Auch die AnzeigeModi zurücksetzen
    $('#dialogAnwesenheitFilter #anzeigemodusUhrzeit').prop("checked", false);
    $('#dialogAnwesenheitFilter #anzeigemodusUE').prop("checked", false);
    $('#dialogAnwesenheitFilter #anzeigemodusDoz').prop("checked", false);
    
    $('#dialogAnwesenheitFilter #vondat').val('');
    $('#dialogAnwesenheitFilter #bisdat').val('');
    
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUhrzeit = false;
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUE = false;
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeDozent =  false;
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeFaecher = false;
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeBemerkung =  false;
    KuferTools.Anwesenheiten.DisplayEinstellungen.FilterVon = false;
    KuferTools.Anwesenheiten.DisplayEinstellungen.FilterBis = false;
    KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus = -1;
    
    //Belegungs- u. Kurstaginfo auf Originalstand zurücksetzen und Anzeige des "Filter leeren" Buttons unter der Anwesenheitstabelle entfernen
    KuferTools.Anwesenheiten.updateTable4Kurs($('#anwesenheiten4Kurs'), KuferTools.Anwesenheiten.BelegungsInfo, KuferTools.Anwesenheiten.KurstagInfo);
  }
  else {
    KuferTools.Anwesenheiten.DisplayEinstellungen.FilterVon = false;
    KuferTools.Anwesenheiten.DisplayEinstellungen.FilterBis = false;
    
    KuferTools.Anwesenheiten.doFilterAnwesenheitTable();
  }
  $("#anwesenheitenFilterDelLnk").css({"display":"none"});
}; //end removeFilterAnwesenheitTable

/*
* Setzt den Filtereinstellungen für die Anwesenheitstabelle
*
*/
KuferTools.Anwesenheiten.doFilterAnwesenheitTable = function() {

  var filterActive = true;
 
 if(KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus == -1) 
   filterActive = false;
 
  var belegungsInfoNew = KuferTools.Anwesenheiten.BelegungsInfo;
  var kurstagInfoNew = KuferTools.Anwesenheiten.KurstagInfo;
  
  if (filterActive) {
    var ausdruck = KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus.join('');   
      
    //RegExp Konstruktor nötig zum Erzeugen von regulären Ausdrücken zur Laufzeit; 
    // Achtung BUG in RegExp Klasse für Javaskript: Parameter g bedeutet global search, darf ABER hier NICHT verwendet werden,
    //sonst wird beim Test von 2 identischen Ausdrücken abwechselnd false und true ausgegeben.
    //var regex = new RegExp('['+ausdruck+']','g'); 
    var regex = new RegExp('['+ausdruck+']');    
     
    belegungsInfoNew = jQuery.grep(KuferTools.Anwesenheiten.BelegungsInfo, function (element, index) {
	      // Testet ob der Suchstring dem regulären Ausdruck entspricht also z.B.  
	      //  element.status_1 in [AWT], trifft zu für A oder W oder T; Rückgabewert: Boolean

          //ein leer-String als Belegungsstatus entspricht A und muss auch berücksichtigt werden
          if (element.status_1 === '' && ausdruck.indexOf('A') !== -1) {
            return true;
          }
          else {
            return regex.test(element.status_1);
          }
      }); //end jquery.grep
    }  //end if teilnehmerStatusA,etc
  
  //Filtern der Termine von Bis
  var vonDat = KuferTools.Anwesenheiten.DisplayEinstellungen.FilterVon;
  var bisDat = KuferTools.Anwesenheiten.DisplayEinstellungen.FilterBis;
  
  if (!vonDat || jQuery.fn.dataTableExt.Sortdatum(vonDat, KuferTools.Anwesenheiten.KurstagInfo[0].datum)<0) {
    //vonDat liegt vor dem ersten Kurstag, der überhaupt übertragen wurde
    vonDat = KuferTools.Anwesenheiten.KurstagInfo[0].datum;//=> auf den ersten Kurstag setzen
  }
  if (!bisDat || jQuery.fn.dataTableExt.Sortdatum(bisDat, KuferTools.Anwesenheiten.KurstagInfo[KuferTools.Anwesenheiten.KurstagInfo.length-1].datum)>12) {
    //bisDat ist nach dem letzten übertragenen Kurstag
    bisDat = KuferTools.Anwesenheiten.KurstagInfo[KuferTools.Anwesenheiten.KurstagInfo.length-1].datum;
  }
  

  if (jQuery.fn.dataTableExt.Sortdatum(vonDat,bisDat) > 0) //vonDat ist nach bisDat
    vonDat = bisDat; //vonDat auf bisDat setzen
  
	kurstagInfoNew = jQuery.grep(KuferTools.Anwesenheiten.KurstagInfo, function (element, index) { 
	  // hier wird verglichen. Beachten: Man muss vor das Datum einen "Wochentag" schreiben, sonst klappts nicht
	  if(jQuery.fn.dataTableExt.Sortdatum(element.datum, vonDat) >= 0 && 
	    jQuery.fn.dataTableExt.Sortdatum(bisDat, element.datum) >= 0) { 
	    return element;} 
	});
	filterActive = true;
   
   //weil die Berechnung nur für die ursprünglich angezeigte Menge aktiv war
   //=> ausblenden, wenn nicht mehr alle Kurstage angezeigt werden
   if (kurstagInfoNew.length != KuferTools.Anwesenheiten.KurstagInfo.length) {
     KuferTools.Anwesenheiten.DisplayEinstellungen.MitProzent =  false;
     KuferTools.Anwesenheiten.DisplayEinstellungen.MitTageDa  =  false;
   }
     
    //Filter_Leeren Button nur anzeigen, wenn Filter gesetzt ist; sonst: ausblenden
  if(filterActive){
    $("#anwesenheitenFilterDelLnk").css({"display":"inline"});
  }
  else {
    $("#anwesenheitenFilterDelLnk").css({"display":"none"});
  }
  
   KuferTools.Anwesenheiten.updateTable4Kurs($('#anwesenheiten4Kurs'), belegungsInfoNew, kurstagInfoNew);
}; //end  doFilterAnwesenheitTable


/*
* vergleicht 2 Datumswerte a und b und gibt den Vergleichswert zurück
*/
jQuery.fn.dataTableExt.Sortdatum  = function(a,b) {
  a = KuferTools.Utils.stripHTML(a);
  b = KuferTools.Utils.stripHTML(b);
  if (a=='' || a == '&nbsp;')
    a = '00.00.0000';
  if (b=='' || b == '&nbsp;')
    b = '00.00.0000';
  var dateShortA = a.split('.');
  var dateShortB = b.split('.');
  
  var x = (dateShortA[2] + dateShortA[1] + dateShortA[0]) * 1;
  var y = (dateShortB[2] + dateShortB[1] + dateShortB[0]) * 1;
  
  return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};


$(document).ready(function() {
  
    // Filteranzeige vorbelegen 
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUhrzeit = KuferTools.Anwesenheiten.DisplayEinstellungen.Filter.Anzeige.anwFilterAnzeigeUhrzeit;
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeUE = KuferTools.Anwesenheiten.DisplayEinstellungen.Filter.Anzeige.anwFilterAnzeigeUE;
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeDozent =  KuferTools.Anwesenheiten.DisplayEinstellungen.Filter.Anzeige.anwFilterAnzeigeDozent;
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeFaecher = KuferTools.Anwesenheiten.DisplayEinstellungen.Filter.Anzeige.anwFilterAnzeigeFaecher;
    KuferTools.Anwesenheiten.DisplayEinstellungen.zeigeBemerkung =  KuferTools.Anwesenheiten.DisplayEinstellungen.Filter.Anzeige.anwFilterAnzeigeBemerkung;
    
    // FilterStatus vorbelegen
    KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus = KuferTools.Anwesenheiten.DisplayEinstellungen.AlleFilterStatus;
    KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatusGesetzt = KuferTools.Anwesenheiten.DisplayEinstellungen.GesetzteFilterStatus;
    var tempArray = new Array();
    var count = 0;
    
    for(var i=0; i<KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus.length; i++ ) {
      if( KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatusGesetzt.indexOf(KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus[i]) !== -1 ) {
        tempArray[count++] = KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus[i];
      }
    }

    if(tempArray.length > 0) {
      KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus = tempArray;
    } else {
      KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus = -1;
    }

    if(KuferTools.Anwesenheiten.DisplayEinstellungen.FilterStatus != -1) 
      KuferTools.Anwesenheiten.doFilterAnwesenheitTable();
  
  
  $('#anwesenheitenLinkFilter').click(function(e) {
    // Filter-Dialog für die Teilnehmer/Anwesenheiten erzeugen
    KuferTools.Anwesenheiten.createAnwesenheitFilterDialog();
    $('#dialogAnwesenheitFilter').dialog('open');
    return false;
  });
  
  // Button zum Löschen des Anwesenheiten-Filters unter der Tabelle 
  $("#anwesenheitenFilterDelLnk").click(function() {
    KuferTools.Anwesenheiten.removeFilterAnwesenheitTable();
  });

}); //end ready()

