/**
* Die hier angegebenen Funktionen werden NUR bei Firmenstorno durchgeführt; beim Stornieren eines einzelnen Teilnehmers
* wird die Datei firmenstorno.js erst gar nicht eingebunden (siehe getSpecialJs in Klasse PageFaMeineKurseAbmeldung
* pagetnfagebuchtekurse.php)
*/

function allowEditTnCheckBoxes(){
  $('.teilnehmerCheckBox, .storno_zeitraum, .storno_datum').each(function(){
    if($(this).hasClass('allowEdit')){
      $(this).prop("disabled", false);
    }
  });
}
       
function showDialogUmmelden($jqObj) {
  var jqCommonData = $("#doStorno").data();
  var tnListe = jqCommonData.tnListe;
  var kursKennz = jqCommonData.kursKennz;
  var kursKennzName = jqCommonData.kursKennzName;
  
  var msgAnmeld = '<form action="" method="post" name="AnmeldenForm"><table>';
  if (tnListe != undefined && tnListe.length > 0) {

    msgAnmeld += '<div class="form-group">' +
            '<div class="row nomargin">' +
            '<div class="col-md-4 col-sm-4 col-xs-12">' +
            '<label class="control-label" for="konto_inhaber">Bereits erfasst</label>' +
            '</div>';
    msgAnmeld +=
            '<div class="col-md-8 col-sm-8 col-xs-12">' +
            '<select class="form-control" name="tnListe" id="selectTnListe"><option>' + KuferTools.Spracheinstellungen.TeilnehmerEinzahl + ' auswählen</option>';
    for (var k = 0; k < tnListe.length; k++) {
      if (KuferTools.isBLAK) {
        //Nur im BLAK Fall überprüfen ob Kurskennzeichen von Teilnehmer und Kurs übereinstimmen
        if (in_array(tnListe[k].berufsgruppe, kursKennz))
          msgAnmeld += '<option value="' + tnListe[k].id + '">' + tnListe[k].name + ', ' + tnListe[k].vorname + '</option>';
      } else
        //Für NICHT BLAK User gibt es keine Kurskennzeichen -> daher alle Teilnehmer zur Auswahlliste hinzufügen
        msgAnmeld += '<option value="' + tnListe[k].id + '">' + tnListe[k].name + ', ' + tnListe[k].vorname + '</option>';
    }
    msgAnmeld += '</select></div>' +
            '</div>' +
            '</div>';

  }
  msgAnmeld += '<div class="form-group">'+
                '<div class="row nomargin">'+
                  '<div class="col-md-4 col-sm-4 col-xs-12">'+
                    '<label class="control-label" for="konto_inhaber">Anredetitel</label>'+
                  '</div>'+
                  '<div class="col-md-8 col-sm-8 col-xs-12">'+
                   '<input class="form-control" type="text" size="25" maxlength="25" name="tnObj_titel" id="tnObj_titel">'+
                  '</div>'+
                '</div>'+
              '</div>';
  msgAnmeld += '<div class="form-group">'+
                '<div class="row nomargin">'+
                  '<div class="col-md-4 col-sm-4 col-xs-12">'+
                    '<label class="control-label" for="konto_inhaber">Nachname</label>'+
                  '</div>'+
                  '<div class="col-md-8 col-sm-8 col-xs-12">'+
                   '<input class="form-control" type="text" size="25" maxlength="25" name="tnObj_name" id="tnObj_name">'+
                  '</div>'+
                '</div>'+
              '</div>';

  msgAnmeld += '<div class="form-group">'+
                '<div class="row nomargin">'+
                  '<div class="col-md-4 col-sm-4 col-xs-12">'+
                    '<label class="control-label" for="konto_inhaber">Vorname</label>'+
                  '</div>'+
                  '<div class="col-md-8 col-sm-8 col-xs-12">'+
                   '<input class="form-control" type="text" size="25" maxlength="25" name="tnObj_vorname" id="tnObj_vorname">'+
                  '</div>'+
                '</div>'+
              '</div>';  
  msgAnmeld += '<div class="form-group">'+
                '<div class="row nomargin">'+
                  '<div class="col-md-4 col-sm-4 col-xs-12">'+
                    '<label class="control-label" for="konto_inhaber">Geschlecht</label>'+
                  '</div>'+
                  '<div class="col-md-8 col-sm-8 col-xs-12">'+
                   '<select class="form-control" name="tnObj_geschlecht" id="tnObj_geschlecht">';
  msgAnmeld += '<option value="W">weiblich</option>';
  msgAnmeld += '<option value="M">männlich</option>';
  msgAnmeld += '</select>'+
                  '</div>'+
                '</div>'+
              '</div>';
  msgAnmeld += '<div class="form-group">'+
                '<div class="row nomargin">'+
                  '<div class="col-md-4 col-sm-4 col-xs-12">'+
                    '<label class="control-label" for="konto_inhaber">Telefon</label>'+
                  '</div>'+
                  '<div class="col-md-8 col-sm-8 col-xs-12">'+
                   '<input class="form-control" type="text" size="25" maxlength="25" name="tnObj_telefon" id="tnObj_telefon">'+
                  '</div>'+
                '</div>'+
              '</div>';
  msgAnmeld += '<div class="form-group">'+
                '<div class="row nomargin">'+
                  '<div class="col-md-4 col-sm-4 col-xs-12">'+
                    '<label class="control-label" for="konto_inhaber">Mail</label>'+
                  '</div>'+
                  '<div class="col-md-8 col-sm-8 col-xs-12">'+
                   '<input class="form-control" type="text" size="25" maxlength="25" name="tnObj_email" id="tnObj_email">'+
                  '</div>'+
                '</div>'+
              '</div>';
      
  // Nur für BLAK: Auswahlfeld für Berufsgruppe zum Dialog hinzufügen (Sonst gibt es keine Berufsgruppen)
  if (KuferTools.isBLAK) {
	  msgAnmeld += '<div class="form-group">'+
                '<div class="row nomargin">'+
                  '<div class="col-md-4 col-sm-4 col-xs-12">'+
                    '<label class="control-label" for="konto_inhaber">Berufsgruppe</label>'+
                  '</div>'+
                  '<div class="col-md-8 col-sm-8 col-xs-12">'+
                   '<select class="form-control" name="tnObj_kennz" id="tnObj_kennz">';
           
                     for (var k in kursKennzName) {
            if (kursKennzName.hasOwnProperty(k)) {
              msgAnmeld += '<option value="' + k + '">' + kursKennzName[k] + '</option>';
            }
          }
          msgAnmeld += '</select></div>'+
                '</div>'+
              '</div>';
	}
    
  msgAnmeld += '<input type="hidden" name="tnObj_id" id="tnObj_id">';
  msgAnmeld += '<input type="hidden" name="belegung_id" id="belegung_id">';
  msgAnmeld += '<input type="hidden" name="belegung_tnr" id="belegung_tnr">';
  msgAnmeld += '<input type="hidden" name="belegung_knr" id="belegung_knr">';
  msgAnmeld += '</form>';
  
  var dataObj = $jqObj.data();
  var tnObj = dataObj.teilnehmer;
  var belegung = dataObj.belegung;
  
  var dialogTitel = KuferTools.Spracheinstellungen.TeilnehmerEinzahl+' auswählen/eingeben';
  var buttons = {
      "Ok":        function() { 
        if($('#tnObj_name').val() == ''){
          showMessage("Bitte geben Sie einen Nachnamen an!", "Fehler");
          return;
        }
        
        tnObj    = new Object();
        belegung = new Object();
        
        tnObj.email = new Object();
        tnObj.tel   = new Object();
        tnObj.mobil = new Object();
        
        tnObj.id         = $('#tnObj_id').val();
        tnObj.titel      = $('#tnObj_titel').val();
        tnObj.name       = $('#tnObj_name').val();
        tnObj.vorname    = $('#tnObj_vorname').val();
        tnObj.email.wert = $('#tnObj_email').val();
        tnObj.strasse    = $('#tnObj_strasse').val();
        tnObj.ort        = $('#tnObj_ort').val();
        tnObj.tel.wert   = $('#tnObj_telefon').val();
        tnObj.mobil.wert = $('#tnObj_mobil').val();
        tnObj.berufsgruppe = $('#tnObj_kennz').val();
        tnObj.geschlecht = $('#tnObj_geschlecht').val();

        belegung.id        = $('#belegung_id').val();
        belegung.knr       = $('#belegung_knr').val();
        belegung.tnr       = $('#tnObj_id').val();
        

        $jqObj.data("teilnehmer", tnObj);
        $jqObj.data("belegung",   belegung);
        
        // Anmeldedaten in zu übermittelnder Liste speichern
        var anmeldeObj = new Object();
        anmeldeObj.teilnehmer = tnObj;
        anmeldeObj.belegung = belegung;
        $('#submitListe').data("bel_"+belegung.id, anmeldeObj);
        $('#check_bel_'+belegung.id).prop("disabled",true);
        $('#check_bel_'+belegung.id).prop("checked", false);
        $('#check_bel_'+belegung.id).removeClass('allowEdit');
        $('span#bel_'+belegung.id).html('<b>wechseln auf</b>&nbsp;&nbsp; ' + tnObj.name + ', ' + tnObj.vorname);
        $('#ma_delete_id_'+belegung.id).show();
        //$('#alleAbmelden').prop("disabled",true);
        // Dialog schließen
        $(this).dialog('close'); 
      },
      "Abbrechen": function() { $(this).dialog('close'); }
    };  //end buttons
  
  // Dialog zeichnen
  showMessage(msgAnmeld, dialogTitel, buttons).then(() => {
    // Dialog befüllen
    var tnObjEmpty;
    fillDialogUmmelden(tnObjEmpty, belegung);
    //fillDialogUmmelden(tnObj, belegung);
    // Select-Feld mit Listener versehen, der dann die Felder aktualisiert
    $('#selectTnListe').on('change', function() {
      var sel = $('#selectTnListe').val();
      // TN in Liste suchen
      var tnObj;
      for (var tnTmp in tnListe){
        if (tnListe[tnTmp].id == sel){
          tnObj = tnListe[tnTmp];
          break;
        }
      }
      fillDialogUmmelden(tnObj, belegung);
      disEnAbleDialogUmmelden(typeof(tnObj) != "undefined");
    });
  });

  return false;
}

function disEnAbleDialogUmmelden(disable){
  if(disable){
    $('#tnObj_titel').prop("disabled",true);
    $('#tnObj_name').prop("disabled",true);
    $('#tnObj_vorname').prop("disabled",true);
    $('#tnObj_email').prop("disabled",true);
    $('#tnObj_strasse').prop("disabled",true);
    $('#tnObj_ort').prop("disabled",true);
    $('#tnObj_telefon').prop("disabled",true);
    $('#tnObj_mobil').prop("disabled",true);
    $('#tnObj_kennz').prop("disabled",true);
    $('#tnObj_geschlecht').prop("disabled",true);
  } else {
    $('#tnObj_titel').prop("disabled", false);
    $('#tnObj_name').prop("disabled", false);
    $('#tnObj_vorname').prop("disabled", false);
    $('#tnObj_email').prop("disabled", false);
    $('#tnObj_strasse').prop("disabled", false);
    $('#tnObj_ort').prop("disabled", false);
    $('#tnObj_telefon').prop("disabled", false);
    $('#tnObj_mobil').prop("disabled", false);
    $('#tnObj_kennz').prop("disabled", false);
    $('#tnObj_geschlecht').prop("disabled", false);
  }
}

function fillDialogUmmelden(tnObj, belegung){
  if(tnObj == undefined){
    tnObj       = new Object();
    tnObj.email = new Object();
    tnObj.tel   = new Object();
    tnObj.mobil = new Object();
    tnObj.id    = '';
  } 
  
  //BUG-Fix: Falls undefined, muß ein Belegungsobjekt angelegt werden; sonst kann im Auswahldialog
  // für Teilnehmer der ausgewählte TN nicht übernommen werden; d.h. $('#selectTnListe').on('change', ..)
  // wird erst gar nicht aktiv
  if (belegung == undefined) {
    belegung = new Object();
    belegung.id =  '';
    belegung.knr = '';
  }

  $('#belegung_id').val(     belegung.id      != undefined ? belegung.id      : '');
  $('#belegung_knr').val(    belegung.knr     != undefined ? belegung.knr     : '');
  $('#belegung_tnr').val(    tnObj.id         != undefined ? tnObj.id         : '');
  $('#tnObj_id').val(        tnObj.id         != undefined ? tnObj.id         : '');
  $('#tnObj_titel').val(     tnObj.titel      != undefined ? tnObj.titel      : '');
  $('#tnObj_name').val(      tnObj.name       != undefined ? tnObj.name       : '');
  $('#tnObj_vorname').val(   tnObj.vorname    != undefined ? tnObj.vorname    : '');
  $('#tnObj_email').val(     tnObj.email.wert != undefined ? tnObj.email.wert : '');
  $('#tnObj_strasse').val(   tnObj.strasse    != undefined ? tnObj.strasse    : '');
  $('#tnObj_ort').val(       tnObj.ort        != undefined ? tnObj.ort        : '');
  $('#tnObj_telefon').val(   tnObj.tel.wert   != undefined ? tnObj.tel.wert   : '');
  $('#tnObj_mobil').val(     tnObj.mobil.wert != undefined ? tnObj.mobil.wert : '');
  $('#tnObj_kennz').val(     tnObj.berufsgruppe != undefined ? tnObj.berufsgruppe: '');
  $('#tnObj_geschlecht').val(tnObj.geschlecht != undefined ? tnObj.geschlecht : '');
}

//nimmt alle angehakten Teilnehmer in den Hidden-Input submitListe mit auf
//TODO: Falls Firmenanmeldungen (ohne TN)  mit Status A doch storniert werden sollen ist die belid
// nur dann in die submitListe aufzunehmen, wenn sie ungleich der JS Var. KuferTools.firmenbelid ist
// Bei Gleichheit ist eine Abmeldung wie bei einzelnen TN durchzuführen 
function alleAbmelden(){
  $('#submitListe').removeData();
  $('.teilnehmerCheckBox').each(function(){
    $(this).prop("disabled",true);
    $(this).prop("checked", false);
    $(this).addClass("allowEdit");
    var belid = $(this).data().belegid;
    var anmeldeObj = new Object();
    anmeldeObj.belegung = new Object();
    anmeldeObj.belegung.id = belid;
    anmeldeObj.belegung.status = 'S';
    $('#submitListe').data("bel_"+belid, anmeldeObj);
    $('#td_bel_'+belid).html('');
    $('#ma_delete_id_'+belid).hide();
  });
  
  $('.storno_zeitraum').each(function(){
    $(this).prop("disabled",true);
    $(this).addClass("allowEdit");
  });
}

/**
 * Aktualisiert das alleChecked-Hiddenfeld, für den fall, dass die Firma 
 * "einzelne Teilnehmer stornieren" auswählt, danach jedoch alle Teilnehmer anhakt. 
 * 
 * @returns {undefined}
 */
function aktualisiereAlleChecked()
{
  if ($('.teilnehmerCheckBox').hasClass('allowEdit')) {
    if ($('input.teilnehmerCheckBox:not(:checked)').length == 0) {
      $('#alleChecked').val('allselected');
    }
    else {
      $('#alleChecked').val('');
    }
  } else {
    $('#alleChecked').val('');
  }
}

function updateFaTeilnehmer($pSelector, $pSetSelector2Checked)
{
  $pSetSelector2Checked = $pSetSelector2Checked || false;
  if ($pSetSelector2Checked) {
    $pSelector.prop('checked', true);
  }
  var belid = $pSelector.data().belegid;
  if ($pSelector.prop('checked')) {
    var anmeldeObj = new Object();
    anmeldeObj.belegung = new Object();
    anmeldeObj.belegung.id = belid;
    anmeldeObj.belegung.status = 'S';

    if ($('#nur_zeitraum_' + belid).prop('checked') == true) {
      anmeldeObj.belegung.zeitraum = {};
      anmeldeObj.belegung.zeitraum.bereich = 'bereich';
      anmeldeObj.belegung.zeitraum.datumvon = $('#storno_datum_von_' + belid).val();
      anmeldeObj.belegung.zeitraum.datumbis = $('#storno_datum_bis_' + belid).val();
    } else {
      anmeldeObj.belegung.zeitraum = {};
      anmeldeObj.belegung.zeitraum.bereich = 'ganzkurs';
    }
    $('#submitListe').data("bel_" + belid, anmeldeObj);
  } else {
    $('#submitListe').removeData("bel_" + belid);
  }
}

function resetInputFields()
{
  if ($('#einzelneAbmelden').prop("checked") == true) {
    allowEditTnCheckBoxes();
    $('#submitListe').removeData();
  }
}

$(function() {
  $('#alleAbmelden').on('change', function(){
    alleAbmelden();
  });
  
  resetInputFields();
  
  $('#einzelneAbmelden').on('change', function(){
    allowEditTnCheckBoxes();
    $('#submitListe').removeData();
  });
  
  $('.storno_datum').on('click', function(){
    var belid = $(this).prop('id').split("_").pop();
    $('#nur_zeitraum_'+belid).prop('checked', true);
    updateFaTeilnehmer($('[name="bel_' + belid +''), true);
  });
  
  $('.UmmeldenButton').on('click', function(){
    if($('#alleAbmelden').prop('checked')){
      $('#einzelneAbmelden').prop("checked",true);
      $('#submitListe').removeData();
      $('.teilnehmerCheckBox').each(function(){
        $(this).prop("disabled",true);
        $(this).prop("checked", false);
      });
    }
    allowEditTnCheckBoxes();
    showDialogUmmelden($(this));
  });
  
  
  $('.DeleteButton').on('click', function(){
    var belid = $(this).prop('id').substr(13);
    $('#submitListe').removeData('bel_'+belid);
    $('#check_bel_'+belid).prop("disabled", false);
    $('span#bel_'+belid).html('');
    $(this).hide();
  });
  
  $('.teilnehmerCheckBox').on('change', function(){
    updateFaTeilnehmer($(this));
  });
  
  $('.storno_zeitraum').on('change', function(){
    var belid = $(this).prop('id').split("_").pop();
    $('[name="bel_' + belid +'').prop('checked', true);
      var anmeldeObj = new Object();
      anmeldeObj.belegung = new Object();
      anmeldeObj.belegung.id = belid;
      anmeldeObj.belegung.status = 'S';
      if ($(this).val() == 'bereich') {
        anmeldeObj.belegung.zeitraum = {};
        anmeldeObj.belegung.zeitraum.bereich = 'bereich';
        anmeldeObj.belegung.zeitraum.datumvon = $('#storno_datum_von_' + belid).val();
        anmeldeObj.belegung.zeitraum.datumbis = $('#storno_datum_bis_' + belid).val();
      } else {
        anmeldeObj.belegung.zeitraum = {};
        anmeldeObj.belegung.zeitraum.bereich = 'ganzkurs';
      }
      $('#submitListe').data("bel_"+belid, anmeldeObj);

  });
  
  //Dieses Handling wird nur bei Firmenstorno durchgeführt; beim Stornieren eines einzelnen Teilnehmers
  // wird die Firmenstorno.js erst gar nicht eingebunden
  jQuery('#stornoSubmitButton').on('click', function() {
    
    aktualisiereAlleChecked();
  
    var submitData = jQuery('#submitListe').data();
    
    var datenVorhanden = false;
    for (var i in submitData) {
      if (typeof(i) === 'string' && i.length > 4 && i.substring(0,4) === 'bel_') {
        datenVorhanden = true;
      }
    }
    if (datenVorhanden) {
      var buttons = {};
      buttons[KuferTools.Button.Bezeichnung.Ok] = function() {
        jQuery(this).dialog('close');
        var jsonData = JSON.stringify(submitData); 
        jQuery('#jsonDataInput').val(jsonData);
        jQuery('#storno').trigger('submit');
      };
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function() {
        jQuery(this).dialog('close');
      };
      
      var nachricht = '';
      if (KuferTools.IsInlinguaMuenchen) {
        var mitarbeiterText = 'den/die MitarbeiterIn';
        if (jQuery('.teilnehmerCheckBox:checked').length > 1) {
          mitarbeiterText = 'die MitarbeiterInnen';
        }
        nachricht += "Möchten Sie " + mitarbeiterText + " aus dem Kurs \"" + KuferTools.Kurs.kurzbez + "\" für alle zukünftigen Termine abmelden?";
      }
      else {
        nachricht += "Möchten Sie das Storno";
        if (jQuery("#einzelneAbmelden").prop("checked")) {
          nachricht += "/den Wechsel durchführen?";
        }
        else {
          nachricht += " durchführen und alle "+KuferTools.Spracheinstellungen.TeilnehmerMehrzahl+" abmelden?";
        }
      }
      
      showMessage(nachricht, "Stornierung abschließen?", buttons);
    }
    else {
      if (KuferTools.IsInlinguaMuenchen) {
        showMessage("Bitte wählen Sie die abzumeldenden MitarbeiterInnen aus.", "Hinweis");
      }
      else {
        showMessage("Wenn Sie einzelne "+KuferTools.Spracheinstellungen.TeilnehmerMehrzahl+" stornieren/wechseln wollen, müssen Sie diese auswählen!", "Hinweis");
      }
    }
    return false;
  });
});