registerNamespace('KuferTools.Anmeldung');
registerNamespace('KuferTools.Nachlass');

$(function () {

  jQuery('a.dropdown-item').on('click', function () {
    var input = $(this).closest('.input-group').find('input.form-control');
    input.val($(this).text())
  });

  /**
   * Objekt zum Füllen von KuferTools.Anmeldung.AnmeldeForm.
   */
  KuferTools.Anmeldung.AnmFormAry = {'Normal': 0, 'Kind': 1, 'Firma': 2, 'Mehrfach': 4};

  var detailsObj = {};
  var abwZahlwegObj = {};
  var nachlassObj = {};
  var kinder = [];
  var mitarbeiter = [];
  var weitereTn = [];
  KuferTools.Anmeldung.AnmeldeForm = 0;
  KuferTools.Anmeldung.AnzahlWeitere = 0;

  if (typeof (KuferTools.Anmeldung.AusgewaehlteOptionen) != 'undefined' && KuferTools.Anmeldung.AusgewaehlteOptionen != '') {
    if (typeof (KuferTools.Anmeldung.AusgewaehlteOptionen.Details) == 'object') {
      detailsObj = KuferTools.Anmeldung.AusgewaehlteOptionen.Details;
    }
    if (typeof (KuferTools.Anmeldung.AusgewaehlteOptionen.AbwZahlweg) == 'object') {
      abwZahlwegObj = KuferTools.Anmeldung.AusgewaehlteOptionen.AbwZahlweg;
    }
    if (typeof (KuferTools.Anmeldung.AusgewaehlteOptionen.Nachlass) == 'object') {
      nachlassObj = KuferTools.Anmeldung.AusgewaehlteOptionen.Nachlass;
    }
    if (typeof (KuferTools.Anmeldung.AusgewaehlteOptionen.AnmForm) != 'undefined'
      && isFinite(KuferTools.Anmeldung.AusgewaehlteOptionen.AnmForm)) {
      var weitere = [];
      if (typeof (KuferTools.Anmeldung.AusgewaehlteOptionen.WeitereAnmeldungen) == 'object') {
        weitere = KuferTools.Anmeldung.AusgewaehlteOptionen.WeitereAnmeldungen;
      }
      switch (parseInt(KuferTools.Anmeldung.AusgewaehlteOptionen.AnmForm)) {
        default:
        case KuferTools.Anmeldung.AnmFormAry.Normal:
          // Nichts tun, Default ist bereits auf Normal
          break;
        case KuferTools.Anmeldung.AnmFormAry.Kind:
          KuferTools.Anmeldung.AnmeldeForm = KuferTools.Anmeldung.AnmFormAry.Kind;
          kinder = weitere;
          KuferTools.Anmeldung.AnzahlWeitere = kinder.length;
          break;
        case KuferTools.Anmeldung.AnmFormAry.Firma:
          KuferTools.Anmeldung.AnmeldeForm = KuferTools.Anmeldung.AnmFormAry.Firma;
          mitarbeiter = weitere;
          KuferTools.Anmeldung.AnzahlWeitere = mitarbeiter.length;
          break;
        case KuferTools.Anmeldung.AnmFormAry.Mehrfach:
          KuferTools.Anmeldung.AnmeldeForm = KuferTools.Anmeldung.AnmFormAry.Mehrfach;
          weitereTn = weitere;
          KuferTools.Anmeldung.AnzahlWeitere = weitereTn.length;
          break;
      }
      if (KuferTools.Anmeldung.AnmeldeForm != KuferTools.Anmeldung.AnmFormAry.Normal) {
        KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmeldeForm, KuferTools.Anmeldung.AnzahlWeitere);
      }
    }
    if (typeof (KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar) == 'object') {
      $('#maAnmeld_input_bemerkung').val(KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.Bemerkung);
      /*
      $('#maAnmeld_input_belegnr').val( KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.BelegNr );
      $('#maAnmeld_input_kassenzeichen').val( KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.KassenZeichen );
      $('#maAnmeld_input_anmart').val( KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.AnmeldeArt );
      $('#maAnmeld_input_status').val( KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.Status );
      */
      $('#newsl_erlaubt').prop('checked', KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.Newsl_erlaubt === 'W');
      $('input[name=anm_zahlart][value="' + KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.Zahlart + '"]').prop('checked', true);
      $('#anmeldeArt').val(KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.anmeldeArt);
      $('#belegungsStatus').val(KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.belegungsStatus);
      $('#maAnmeld_input_eintritt').val(KuferTools.Anmeldung.AusgewaehlteOptionen.InputsSettingsBar.eintritt);
    }
  }

  // Die Init-Funktionen für Details- AbwZahlweg- Kinder-, Firmen-, und Mehrfach-Dialog
  // geben je eine Funktion zurück, mit der die aktuelle Data ausgelesen werden kann.
  var getDetailsObj4Json = initDetailsDialog(detailsObj);
  var getAbwZahlwegObj4Json = initAbwZahlwegDialog(abwZahlwegObj);

  // Alt: mit dem Nachlass Dialog Handling in maanmelden.js
  // var getNachlassObj4Json = initNachlassDialog( nachlassObj );

  //Neu: das Nachlass Dialog Handling wurde ausgelagert nach nachlass.js und verallgemeinert, so daß dadurch auch das
  //Handling für das nachträgliche Bearbeiten des Nachlasses in Tool 8 Kurse MA (p17188) abgedeckt ist
  // $(this) ist hier bereits das passende Elemente div#nachlassdialog auf dem der OK und Abbruch-Button operieren
  var okHandler4Anmeld = function () {
    KuferTools.Anmeldung.okHandler($(this));
  };
  var abbruchHandler4Anmeld = function () {
    KuferTools.Anmeldung.abbruchHandler($(this));
  };
  // verwendet Methode zum Initialisieren des Nachlassdialogs in nachlass.js
  var getNachlassObj4Json = KuferTools.Nachlass.initNachlassDialog(nachlassObj, okHandler4Anmeld, abbruchHandler4Anmeld);
  var getChildrenObj4Json = initKinderDialog(kinder);
  var getFirmaObj4Json = initFirmaDialog(mitarbeiter);
  var getMehrfachObj4Json = initMehrfachDialog(weitereTn);

  initAnmArtDialog();
  initKursUebersichtDialog();
  initTnUebersichtDialog();
  initEinzelveranstaltungDialog();

  // initEmailbestaetigungDialog();

  /**
   * Gibt die gewählten Einstellungen in einem einzelnen Objekt zurück.
   *
   * Das Obj wird z. B. verwendet, um die Einstellungen in der Session zwischenzuspeichern,
   * um später wieder geladen zu werden, sowei bei der Durchführung der Anmeldung.
   * @returns obj
   */
  function createChoosedOptionsObj() {
    var weitere = [];
    // Je nach Anmeldeart werden die weiteren Anmeldungen besetzt.
    switch (KuferTools.Anmeldung.AnmeldeForm) {
      default:
      case KuferTools.Anmeldung.AnmFormAry.Normal:
        // Anmeldeform Normal: keine weiteren Personen
        break;
      case KuferTools.Anmeldung.AnmFormAry.Kind:
        weitere = getChildrenObj4Json();
        break;
      case KuferTools.Anmeldung.AnmFormAry.Firma:
        weitere = getFirmaObj4Json();
        break;
      case KuferTools.Anmeldung.AnmFormAry.Mehrfach:
        weitere = getMehrfachObj4Json();
        break;
    }
    var belegungsStatus = KuferTools.Anmeldung.getBelegungsStatus();
    var inputsSettingsBar = {
      Bemerkung: $('#maAnmeld_input_bemerkung').val(),
      /*
       BelegNr: $('#maAnmeld_input_belegnr').val(),
       KassenZeichen: $('#maAnmeld_input_kassenzeichen').val(),
       AnmeldeArt: $('#maAnmeld_input_anmart').val(),
       Status: $('#maAnmeld_input_status').val(),
       */
      // Statt true/false nun 'W'/'', da beim Zwischenspeichern und Laden false zu "false" wurde.
      Newsl_erlaubt: ($('#newsl_erlaubt').is(':checked') ? 'W' : ''),
      Zahlart: $('input[name=anm_zahlart]:checked').val(),
      anmeldeArt: $('#anmeldeArt').val(),
      belegungsStatus: belegungsStatus,
      eintritt: $('#maAnmeld_input_eintritt').val()
    };
    var result = {
      ausgewaehlteOptionen: {
        Details: getDetailsObj4Json(),             // Details-Dialog
        AbwZahlweg: getAbwZahlwegObj4Json(),       // Abweichender Zahlweg-Dialog
        Nachlass: getNachlassObj4Json(),           // Nachlass-Dialog
        AnmForm: KuferTools.Anmeldung.AnmeldeForm, // Anmeldeform (Eltern-Kind, ...)
        WeitereAnmeldungen: weitere,               // Weitere Anmeldungen
        InputsSettingsBar: inputsSettingsBar       // Weitere Einstellungen auf der Seite
      }
    };
    return result;
  };

  //update der aktuellen Gebühren
  if ($('#maAnmeld_input_gebuehr').length > 0) {
    KuferTools.Anmeldung.updateAktGebuehr(false, nachlassObj);
  }

  /**
   * Der Anmeldebutton. Offnet einen Dialog, wo noch einmal die getroffenen Einstellungen
   * angezeigt werden, und die Anmeldung abgesendet werden kann.
   */
  jQuery(document).on('click', '#maAnmeld_anmelden', function () {
    var buttons = {};
    buttons['Anmelden'] = function () {
      var anmSettingsObj = createChoosedOptionsObj();
      $('form').append(KuferTools.Anmeldung.getJsonHiddenInput(anmSettingsObj, 'anmSettings'));
      KuferTools.Utils.AjaxLadebildschirm.Start();
      var form = $('form');
      $('form').trigger('submit');
    };
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog('close');
    };

    var anmForm = '';
    var weitereTnBezeichnung = '';

    switch (KuferTools.Anmeldung.AnmeldeForm) {
      case KuferTools.Anmeldung.AnmFormAry.Normal:
        anmForm = 'normal';
        break;
      case KuferTools.Anmeldung.AnmFormAry.Kind:
        anmForm = 'Eltern-Kind-Anmeldung';
        weitereTnBezeichnung = 'Kinder';
        break;
      case KuferTools.Anmeldung.AnmFormAry.Firma:
        anmForm = 'Firmenanmeldung';
        weitereTnBezeichnung = 'Mitarbeiter';
        break;
      case KuferTools.Anmeldung.AnmFormAry.Mehrfach:
        anmForm = 'Mehrfachanmeldung';
        weitereTnBezeichnung = 'weitere Teilnehmer';
        break;
    }
    // KuferTools.Teilnehmer und KuferTools.Kurs sind bereits HtmlEncoded
    var anmeldeText = "<div id=''><h1>Hiermit melden Sie den Teilnehmer " + KuferTools.Teilnehmer.Name + " verbindlich an:</h1></div>";
    anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
      "<span><label for='kalwochnr' class=''>Teilnehmer:</label></span>" +
      "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
      "<span>" + KuferTools.Teilnehmer.Name + ' ' + KuferTools.Teilnehmer.Vorname + "</span></div><div class='clearfix'></div>";

    anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
      "<span><label for='kalwochnr' class=''>Nr.:</label></span>" +
      "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
      "<span>" + KuferTools.Kurs.NrAnzeige + "</span></div><div class='clearfix'></div>";

    anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
      "<span><label for='kalwochnr' class=''>Titel:</label></span>" +
      "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
      "<span>" + KuferTools.Kurs.Titel + "</span></div><div class='clearfix'></div>";

    anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
      "<span><label for='kalwochnr' class=''>Anmeldeform:</label></span>" +
      "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
      "<span>" + anmForm + "</span></div><div class='clearfix'></div>";

    if (weitereTnBezeichnung !== '') {
      anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
        "<span><label for='kalwochnr' class=''>" + weitereTnBezeichnung + ":</label></span>" +
        "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
        "<span>" + KuferTools.Anmeldung.AnzahlWeitere + "</span></div><div class='clearfix'></div>";
    }

    var belegungsStatus = KuferTools.Anmeldung.getBelegungsStatus();
    var neueGebuehrText = "";
    var gebuehr = "";
    if (belegungsStatus === 'W' || belegungsStatus === 'P' || belegungsStatus === 'I') {
      gebuehr = "0,00";
    } else {
      if (KuferTools.Anmeldung.AktGebuehr !== KuferTools.Anmeldung.BasisGebuehr) {
        neueGebuehrText = KuferTools.Anmeldung.AktGebuehr + ' &euro; anstatt ';
      }
      gebuehr = KuferTools.Anmeldung.BasisGebuehr;
    }
    var abwKontoObj = getAbwZahlwegObj4Json();
    var abwBankdaten = '';
    if ((typeof (abwKontoObj.abw_konto) !== 'undefined' && abwKontoObj.abw_konto !== '') ||
      (typeof (abwKontoObj.abw_iban) !== 'undefined' && abwKontoObj.abw_iban !== '')) {
      abwBankdaten += " (abweichende Bankdaten)";
    }
    // Gebühr ausblenden, falls es im Formular aus der Sicht genommen wurde
    if ($('#maAnmeld_input_gebuehr').length > 0) {
      anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
        "<span><label for='kalwochnr' class=''>Geb&uuml;hr:</label></span>" +
        "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
        "<span>" + neueGebuehrText + gebuehr + abwBankdaten + "</span></div><div class='clearfix'></div>";
    }

    if ($('input[name=anm_zahlart]').length > 0) {
      var zahlart = $('input[name=anm_zahlart]:checked').val();
      var zahlartText = '';
      switch (zahlart) {
        default:
        case 'L':
          zahlartText = 'Lastschrift';
          break;
        case 'Ü':
          zahlartText = '&Uuml;berweisung';
          break;
      }
      anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
        "<span><label for='kalwochnr' class=''>Zahlart:</label></span>" +
        "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
        "<span>" + zahlartText + "</span></div><div class='clearfix'></div>";
    }
    if ($('#anmeldeArt').length > 0) {
      var anmeldeArt = $('#anmeldeArt').val();
      if (trim(anmeldeArt) !== '') {
        anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
          "<span><label for='kalwochnr' class=''>Anmeldeart:</label></span>" +
          "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
          "<span>" + KuferTools.Utils.htmlEncode(anmeldeArt) + "</span></div><div class='clearfix'></div>";
      }
    }
    anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
      "<span><label for='kalwochnr' class=''>Status:</label></span>" +
      "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
      "<span>" + KuferTools.Utils.htmlEncode(belegungsStatus) + "</span></div><div class='clearfix'></div>";

    var newsletter = $('#newsl_erlaubt').is(':checked');
    if (newsletter) {
      anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
        "<span><label for='kalwochnr' class=''>Newsletter:</label></span>" +
        "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
        "<span>Ja</span></div><div class='clearfix'></div>";
    }

    var eintritt = $('#maAnmeld_input_eintritt').val();
    if (typeof (eintritt) !== 'undefined' && trim(eintritt) !== '') {
      anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
        "<span><label for='kalwochnr' class=''>Eintritt:</label></span>" +
        "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
        "<span>" + KuferTools.Utils.htmlEncode(eintritt) + "</span></div><div class='clearfix'></div>";
    }

    var bemerkung = $('#maAnmeld_input_bemerkung').val();
    if (typeof (bemerkung) !== 'undefined' && trim(bemerkung) !== '') {
      anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>" +
        "<span><label for='kalwochnr' class=''>Bemerkung:</label></span>" +
        "</div><div class='col-md-9 col-sm-9 col-xs-12'>" +
        "<span>" + KuferTools.Utils.htmlEncode(bemerkung) + "</span></div><div class='clearfix'></div>";
    }

    // Array von zusätzlichen Hinweisen, welche der Mitarbeiter bei der Anmeldung berücksichtigen sollte
    var hinweise = [];

    // Anmeldeende erreicht
    if (KuferTools.Kurs.AnmeldeendeErreicht) {
      hinweise[hinweise.length] = 'Das Anmeldeende wurde erreicht';
    }
    // Kurs hat bereits begonnen
    if (KuferTools.Kurs.KursbeginnErreicht) {
      hinweise[hinweise.length] = 'Der Kurs hat bereits begonnen';
    }

    if (KuferTools.Anmeldung.getAnzAnmPersonen() > KuferTools.Kurs.Teil_frei) {
      if (belegungsStatus === 'A' && KuferTools.Anmeldung.UeberbuchenErlaubt) {
        hinweise[hinweise.length] = 'Es werden mehr Teilnehmer als freie Plätze angemeldet';
      } else if (belegungsStatus === 'P' && KuferTools.Anmeldung.UeberbuchenErlaubt) {
        hinweise[hinweise.length] = 'Es werden mehr Plätze für Teilnehmer reserviert als freie vorhanden sind';
      } else if (belegungsStatus === 'I') {
        hinweise[hinweise.length] = 'Es werden alle Teilnehmer als Interessent/en eingetragen.';
      } else { //Status W
        hinweise[hinweise.length] = 'Es werden alle Teilnehmer auf Warteliste gebucht';
      }
    }
    // Mehr als Kinder_Max
    if (KuferTools.Anmeldung.AnmeldeForm === KuferTools.Anmeldung.AnmFormAry.Kind
      && KuferTools.Anmeldung.AnzahlWeitere > KuferTools.Kurs.Kinder_frei) {
      if (belegungsStatus === 'P') {
        hinweise[hinweise.length] = 'Es werden mehr Kinderplätze reserviert als freie vorhanden sind';
      } else {
        hinweise[hinweise.length] = 'Es werden mehr Kinder als freie Kinderplätze angemeldet';
      }
    }

    if (!KuferTools.Anmeldung.NachlassAufteilbar) {
      hinweise[hinweise.length] = 'Aufteilung des Nachlasses in Einzelpreise nicht möglich! Passen Sie ggf. den Betrag des Nachlasses an.';
    }

    var countHinweise = hinweise.length;
    for (var i = 0; i < countHinweise; i++) {

      var hinweisTxt = '', hinweisTxtClass = '';
      if (i == 0) {
        hinweisTxtClass = 'maAnmeld_hinweise';
        hinweisTxt = 'Hinweise:';
      }

      anmeldeText += "  <div class='col-md-3 col-sm-3 col-xs-12'>";
      if (i == 0) {
        anmeldeText += "<span><label for='kalwochnr' class=' " + hinweisTxtClass + "'>" + hinweisTxt + "</label></span>";
      }
      anmeldeText += "</div><div class='col-md-9 col-sm-9 col-xs-12' style='margin-bottom: 5px;'>" +
        "<span>" + hinweise[i] + "</span></div><div class='clearfix'></div>";


    }


    showMessage(anmeldeText, 'Teilnehmer Anmelden', buttons);
  });
  jQuery('#maAnmeld_anmelden').prop('disabled', false);

  /**
   * Seitenwechsel zu Kurs- oder Teilnehmerdetails
   *
   * Sendet vor dem Seitenwechsel ein AJAX-Request mit den getroffenen Einstellungen ab,
   * welches in die Session zwischengespeichert wird.
   */
  $('.tn_details_button, .kurs_details_button').on('click', function (event) {
    // Im Readonly-Modus werden keine Daten abgesendet.
    if (KuferTools.Anmeldung.ReadOnly) {
      return true;
    }

    var obj4Ajax = createChoosedOptionsObj();
    var linkZiel = jQuery(this).parent().prop('href');
    KuferTools.Utils.AjaxLadebildschirm.Start();

    jQuery.post('index.php?tool_id=' + KuferTools.ToolId + '&action=handleSaveSettingsAjax&savesettings=1', obj4Ajax, function () {
      document.location.href = linkZiel;
      // Es wird nicht auf die Antwort gewartet
    });
    // Es muss aber gewartet werden, bis die AJAX-Request ordentlich versendet wurde.
    //window.setTimeout("", 200);
    return false;
    // Das Clickevent bubbelt weiter, sodass der Link danach abgesendet wird. Eventuell doch sauberer,
    // wenn man auf die Antwort des AJAX-Requests wartet, und erst dann die Seite wechselt.
  });

  jQuery('#belegungsStatus').on('change', function (event) {
    if (jQuery('#belegungsStatus option:selected').val() === 'W' || (jQuery('#belegungsStatus option:selected').val() === 'P')
      || (jQuery('#belegungsStatus option:selected').val() === 'I')) {

      $('#maAnmeld_input_gebuehr').val('0,00');
    } else {
      $('#maAnmeld_input_gebuehr').val(KuferTools.Anmeldung.AktGebuehr);
    }
  });


  jQuery(document).on('click', '.bestaetigungsemailDialog', function () {
    var buttons = {
      'Ausdrucken': function () {
        PrintPartOfPage('printable');
        $(this).dialog('close');
      },
      'Abbrechen': function () {
        $(this).dialog('close');
      }
    };
    var url = 'index.php?tool_id=' + KuferTools.ToolId + '&action=anmeldebestaetigungDialog';
    $.ajax({
      type: "POST",
      url: url,
      success: function (pData) {
        var emailBestaetigung = '<div id="printable">' + KuferTools.Utils.getObjectFromJson(pData) + '</div>';
        KuferTools.showMessage({
          meldung: emailBestaetigung,
          title: 'Anmeldebestätigung',
          buttons: buttons,
          width: '800'
        });
      },
      error: function () {
      }
    });
  });

  jQuery(document).on('click', '.bestaetigungEmailSenden', function () {
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Ok] = function () {
      $(this).dialog('close');
    };
    var url = 'index.php?tool_id=' + KuferTools.ToolId + '&action=sendAnmeldebestaetigung';
    KuferTools.Utils.AjaxLadebildschirm.Start();
    $.ajax({
      type: "POST",
      url: url,
      success: function (pData) {
        KuferTools.Utils.AjaxLadebildschirm.Stop();
        var sendInfoMail = KuferTools.Utils.getObjectFromJson(pData);
        var message = '';
        var title = 'Versand fehlgeschlagen';
        if (!sendInfoMail.valid) {
          message += 'Die E-Mail-Adresse des Teilnehmers ist ungültig.';
        } else if (!sendInfoMail.sent) {
          message += 'Die Anmeldebestätigung konnte nicht versendet werden.';
        } else {
          message += 'Die Anmeldebestätigung wurde erfolgreich versendet.';
          title = 'Versand erfolgreich';
        }

        KuferTools.showMessage({meldung: message, title: title, buttons: buttons});
      },
      error: function () {
      }
    });
  });

});

/**
 * Eventhandler für die Teilnehmerauswahl per Dialog.
 *
 * Das Dialogdiv wird nicht direkt zum Dialog gemacht, sondern aus den Dom gehängt, und
 * später per ShowMessage angezeigt. Hintergund: das Datatable versucht sonst sofort per
 * Ajax die Teilnehmer anzufordern.
 */
function initTnUebersichtDialog() {
  var $dialog = $('.tn_uebersicht_dialog');
  $dialog.detach();

  var hrefTnUebersichtDialog = 'index.php?tool_id=' + KuferTools.ToolId + '&action=teilnehmerauswahl';
  var tnUebersichtDialogForm = jQuery.ajax({
    url: hrefTnUebersichtDialog,
    method: 'GET',
    dataType: 'html'
  }).fail(function () {
    if (!KuferTools.IsUnloading) {
      KuferTools.Utils.showAjaxErrorDialog(undefined, hrefTnUebersichtDialog);
    }
  });

  var buttons = {};
  if (KuferTools.Anmeldung.TnAnlegenAllowed) {
    buttons["Neuen Teilnehmer anlegen"] = getTeilnehmerAnlegenCallBackFunction();
  }
  buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
    $(this).dialog("close");
  };

  $('.maAnmeld_tnAuswahl').on('click', function () {
    KuferTools.Utils.AjaxLadebildschirm.Start();
    tnUebersichtDialogForm.done(function (data) {
      KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax($(data), 'Teilnehmerauswahl', buttons, 'auto', undefined,
        '.dataTable_tnUebersicht', KuferTools.TeilnehmerProSeite, '300px',
        'index.php?tool_id=' + KuferTools.ToolId + '&action=handleTnDataTable&dataTable=1');
      KuferTools.Utils.AjaxLadebildschirm.Stop();
    });
  });
  $('.maAnmeld_tnAuswahl').prop('disabled', false);

  $(document).on('click', '.abw_tn_auswahl', function () {
    if (KuferTools.Anmeldung.TnAnlegenAllowed) {
      buttons["Neuen Teilnehmer anlegen"] = getTeilnehmerAnlegenCallBackFunction(true);
    }

    KuferTools.Utils.AjaxLadebildschirm.Start();
    tnUebersichtDialogForm.done(function (data) {
      KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax($(data), 'Teilnehmerauswahl', buttons, 'auto', undefined,
        '.dataTable_tnUebersicht', KuferTools.TeilnehmerProSeite, '300px',
        'index.php?tool_id=' + KuferTools.ToolId +
        '&action=handleTnDataTable&dataTable=1&tnAuswahlForAbwZahlweg=1');
      KuferTools.Utils.AjaxLadebildschirm.Stop();
    });
  });

  /**
   * Gibt die Callback-Funktion für den "Neuen Teilnehmer anlegen"-Button im Teilnehmerauswahl-Dialog zurück.
   *
   * return function
   */
  function getTeilnehmerAnlegenCallBackFunction(pkeepCurrentTnr) {
    return function () {
      var buttons = {};
      buttons['Teilnehmer anlegen'] = getTeilnehmerDatenSendenCallBack(pkeepCurrentTnr);
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        $(this).dialog('close');
        // Das ist ja kacke, wenn das hier so spezifisch angegeben werden muss. Ist bereits in personendetails.js genau so.
        KuferTools.removeHinterlegungen();
      };

      var newTnToolId = 6;
      if (KuferTools.ToolId == 53) {
        newTnToolId = 53;
      }

      KuferTools.Utils.AjaxLadebildschirm.Start();
      var href = 'index.php?tool_id=' + newTnToolId + '&action=newTeilnehmer';
      var appendIfNotEmpty = function ($field, queryKey) {
        if ($field.length === 1 && $field.val() !== '') {
          href += '&' + queryKey + '=' + encodeURIComponent($field.val());
        }
      };

      appendIfNotEmpty($(this).find('#tn_search_name'), 'nachname');
      appendIfNotEmpty($(this).find('#tn_search_vorname'), 'vorname');

      jQuery.ajax(href)
        .done(function (data) {
          KuferTools.showMessage({
            meldung: data,
            title: 'Details zum neuen Teilnehmer',
            buttons: buttons,
            width: '800',
            pressEnterFunc: buttons[KuferTools.Button.Bezeichnung.FilterSetzen]
          });

          $('#histKritDialog').on('click', 'a.dropdown-item', function () {
            var input = $(this).closest('.input-group').find('input.form-control');
            input.val($(this).text());
          });
        }).fail(function () {
        KuferTools.showMessage({meldung: KuferTools.Utils.htmlEncode('Ein technischer Fehler ist aufgetreten.')});
      }).always(function () {
        KuferTools.Utils.AjaxLadebildschirm.Stop();
      });

      //  KuferTools.Utils.loadAndDisplayPage('usertools.php', 'tool_id=11&toolsection_id=42&action=newTeilnehmer', buttons, 800);
    };
  }

  /**
   * Gibt die Callback-Function für den "Teilnehmer anlegen"-Button für das Formular
   * mit den Eingabefeldern des neuen Teilnehmers zurück.
   *
   * @returns function
   */
  function getTeilnehmerDatenSendenCallBack(pkeepCurrentTnr) {
    return function () {
      var $form = $(this);
      if ($form.is(':not(form)')) {
        $form = $form.find('form');
      }

      var validSuccess = function (pkeepCurrentTnr) {
        pkeepCurrentTnr = pkeepCurrentTnr || false;
        if (pkeepCurrentTnr) {
          $form.append('<input type="hidden" name="keepCurrentTnr" value="1">');
        }
        $form.append('<input type="hidden" name="action" value="newTeilnehmer">');
        // Nicht einfach nur SelfLink, da bestimmte Get-Parameter sonst was durcheinander bringen können.
        $form.prop('action', 'index.php?tool_id=' + KuferTools.ToolId + '&action=anmeldeformular&xsrf=' + KuferTools.TabPageXsrf);
        $form.trigger('submit');
      };

      var validError = function () {
        showMessage('Bitte geben Sie gültige Werte in die als Pflichtfelder gekennzeichneten Eingabefelder ein.', 'Validierung fehlgeschlagen');
      };

      validateNewTeilnehmerForm($form, validSuccess, validError, pkeepCurrentTnr);
    }; //end return function
  } //end getTeilnehmerDatenSendenCallBack()

  /**
   * Handelt die Validierung des Formulars zur Eingabe eines neuen Teilnehmers.
   *
   * @param Selector $pForm abzusendenden Formular
   * @param function pSuccessFunc wird aufgerufen, wenn die Validierung erfolgreich war
   * @param function pErrorFunc wird aufgerifen, wenn die Validierung fehl schlug.
   */
  function validateNewTeilnehmerForm($pForm, pSuccessFunc, pErrorFunc, pkeepCurrentTnr) {
    // Zunächst Validation per JS
    var formValid = validateForm($pForm.find('input, select, textarea'));

    if (!formValid) {
      pErrorFunc();
    } else {
      // Validation der Bankfelder per AJAX
      var $bankDaten = $pForm.find('input').filter('input[name$=_blz], input[name$=_konto], input[name$=_bic], input[name$=_iban]');

      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');
        }
        pSuccessFunc(pkeepCurrentTnr);
      };

      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');
        }
        pErrorFunc();
      };

      KuferTools.Utils.AjaxLadebildschirm.Start();

      var newTnToolId = 11;
      if (KuferTools.ToolId == 53) {
        newTnToolId = 53;
      }

      validateBankDatenPerAjax($bankDaten, successFunc, errorFunc, 'index.php?tool_id=' + newTnToolId + '&action=validate');
    }
  } //end validateNewTeilnehmerForm

  $(document).on('click', '.tn_uebersicht_dialog .dataTableSearchAdvancedButton', function () {
    showFilterDialog($('.tn_uebersicht_dialog .tn_search'), $('.dataTable_tnUebersicht'), 'index.php?tool_id=' + KuferTools.ToolId + '&action=tnUebersichtDialogFilter');
  });
} // initTnUebersichtDialog

/**
 * Eventhandler für die Kursauswahl per Dialog.
 *
 * Das Dialogdiv wird nicht direkt zum Dialog gemacht, sondern aus den Dom gehängt, und
 * später per ShowMessage angezeigt. Hintergund: das Datatable versucht sonst sofort per
 * Ajax die Kurse anzufordern.
 */
function initKursUebersichtDialog() {
  var buttons = {};
  buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
    $(this).dialog("close");
  };

  var hrefKursauswahlDialog = 'index.php?tool_id=' + KuferTools.ToolId + '&action=kursauswahl';
  var kursauswahlDialogForm = jQuery.ajax({
    url: hrefKursauswahlDialog,
    method: 'GET',
    dataType: 'html'
  }).fail(function () {
    if (!KuferTools.IsUnloading) {
      KuferTools.Utils.showAjaxErrorDialog(undefined, hrefKursauswahlDialog);
    }
  });

  $('.maAnmeld_kursAuswahl').on('click', function () {
    KuferTools.Utils.AjaxLadebildschirm.Start();
    kursauswahlDialogForm.done(function (data) {
      KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax($(data), 'Kursauswahl', buttons, 'auto', undefined,
        '.dataTable_kursUebersicht', KuferTools.KurseProSeite, '300px',
        'index.php?tool_id=' + KuferTools.ToolId + '&action=handleKursDataTable&dataTable=1');
      KuferTools.Utils.AjaxLadebildschirm.Stop();
    });
  });
  $('.maAnmeld_kursAuswahl').prop('disabled', false);

  $(document).on('click', '.kurs_uebersicht_dialog .dataTableSearchAdvancedButton', function () {
    showFilterDialog($('.kurs_uebersicht_dialog .kurs_search'), $('.dataTable_kursUebersicht'), 'index.php?tool_id=' + KuferTools.ToolId + '&action=kursauswahlFilter');
  });
} // initKursUebersichtDialog

function setHiddenSearchDataTable($suchForm, ary) {
  // Alte Hidden-Inputs entfernen
  $suchForm.find('.dataTableSearch.dataTableSearchHidden').detach();
  // Sichtbare Filter-Felder separat setzen und kein Hidden-Input erstellen
  ary = ary.filter(function (obj) {
    var $visibleField = $('input.dataTableSearch[name="' + obj.name + '"], select.dataTableSearch[name="' + obj.name + '"]');
    if ($visibleField.length === 1) {
      $visibleField.val(obj.value).trigger('change');
      return false;
    }

    return true;
  });
  // Hidden-Inputs für alle nicht sichtbaren Feldereinstellungen setzen
  $suchForm.append(ary.map(function (obj) {
    return '<input name="' + obj.name + '" class="dataTableSearch dataTableSearchHidden" value="' + KuferTools.Utils.htmlEncode(obj.value) + '" hidden>';
  }).join(''));
}

function showFilterDialog($suchForm, $dataTable, hrefFilter) {
  KuferTools.Utils.AjaxLadebildschirm.Start();
  var buttons = {
    'Filter setzen': function () {
      setHiddenSearchDataTable($suchForm, $(this).find('#suchformDiv').serializeArray());
      $(this).dialog('close');
      $('.dataTableSearchButton').trigger('click');
    },
    'Filter leeren': function () {
      $(this).dialog('close');

      $('.dataTableSearch').val('');
      setHiddenSearchDataTable($suchForm, [{name: 'clearFilter', value: '1'}]);
      $('.dataTableSearchButton').trigger('click');
    },
    'Schließen': function () {
      $(this).dialog('close');
    }
  };
  jQuery.ajax({
    url: hrefFilter,
    method: 'GET',
    dataType: 'html'
  }).fail(function () {
    if (!KuferTools.IsUnloading) {
      KuferTools.Utils.showAjaxErrorDialog(undefined, hrefFilter);
    }
  }).done(function (data) {
    KuferTools.showMessage({
      meldung: data,
      title: 'Filter',
      buttons: buttons
    });
    KuferTools.Utils.AjaxLadebildschirm.Stop();
  });
}

var warnungEinzelveranstaltungAlreadyShown = false;

function initEinzelveranstaltungDialog() {
  $('.maAnmeld_einzelveranstaltung').on('click', function () {
    if (KuferTools.Kurs.NormaleAnmeldungenVorhanden && !warnungEinzelveranstaltungAlreadyShown) {
      warnungEinzelveranstaltungAlreadyShown = true;
      var msg = 'In diesem Kurs sind bereits normale Anmeldungen vorhanden! Verbuchung abbrechen?';
      var buttons = {};
      buttons['Ja'] = function () {
        $(this).dialog('close');
      };
      buttons['Nein'] = function () {
        showEinzelveranstaltungDialog();
        $(this).dialog('close');
      };
      KuferTools.showMessage({meldung: msg, title: 'Warnung', buttons: buttons, width: '450px'});
    } else {
      showEinzelveranstaltungDialog();
    }
  });
  $('.maAnmeld_einzelveranstaltung').prop('disabled', false);

  $(document).on('input', '#kurs_teinzel_m, #kurs_teinzel_w, #kurs_teinzel_u', function () {
    if ($('#kurs_teinzel').length > 0) {
      var anzahlTn = 0;
      $('#kurs_teinzel_m, #kurs_teinzel_w, #kurs_teinzel_u').each(function () {
        var value = parseInt($(this).val());
        if (isNaN(value)) {
          value = 0;
        }
        anzahlTn += value;
      });

      $('#kurs_teinzel').val(anzahlTn);
    }
  });

  $(document).on('input', '#kurs_keinzel_m, #kurs_keinzel_w, #kurs_keinzel_u', function () {
    if ($('#kurs_kinder_ev').length > 0) {
      var anzahlKinder = 0;
      $('#kurs_keinzel_m, #kurs_keinzel_w, #kurs_keinzel_u').each(function () {
        var value = parseInt($(this).val());
        if (isNaN(value)) {
          value = 0;
        }
        anzahlKinder += value;
      });

      $('#kurs_kinder_ev').val(anzahlKinder);
    }
  });

  $(document).on('change', '#kurs_zahlart', function () {
    var value = $(this).val();
    var $belegNrVerbuchung = $('#kurs_belegnr_verbuchung');
    if ($belegNrVerbuchung.length > 0) {
      if (value === 'B') {
        $belegNrVerbuchung.val('b');
      } else if (value === 'U') {
        $belegNrVerbuchung.val('k');
      }
    }
  });
}

function showEinzelveranstaltungDialog() {
  KuferTools.Utils.AjaxLadebildschirm.Start();
  $.post('index.php?tool_id=' + KuferTools.ToolId + '&action=showEinzelveranstaltungDialog&knr=' + KuferTools.Kurs.Nr, function (data) {
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Ok] = function () {
      if (KuferTools.ValidateFormInput($('#einzelveranstaltungForm'))) {
        var $zahlartPflicht = $('.zahlart_pflicht');
        if ($('#kurs_zuseinn').length > 0) {
          var $zusatzEinnahme = $('#kurs_zuseinn');
          var zusatzEinnahmeBetrag = parseFloat($zusatzEinnahme.val().replace(',', '.'));

          //ist Zahlart ein Pflichtfeld und ein Betrag bei zusätzl. Einnahmen angegeben? => Meldung ausgeben
          if ($zahlartPflicht.length > 0 && $.trim($zahlartPflicht.val()) === ''
            && $.trim($zusatzEinnahme.val()) !== '' && zusatzEinnahmeBetrag !== 0) {
            if (!$zahlartPflicht.hasClass('form_error')) {
              $zahlartPflicht.addClass('form_error');
            }
            KuferTools.showMessage({meldung: 'Die Zahlart ist noch offen!', title: 'Information'});
            return;
          } else {
            $zahlartPflicht.removeClass('form_error');
          }

          if (zusatzEinnahmeBetrag < 0) {
            var meldung = '<span><b>Es wurde ein negativer Betrag eingegeben. Wie soll er verbucht werden?</b></span><br /><br />' +
              '<label><input type="radio" name="verbuchung_art" value="ausgabe" checked="checked" /> als Ausgabe</label><br />' +
              '<label><input type="radio" name="verbuchung_art" value="einnahme" /> als Korrektur einer Einnahme</label><br />' +
              '<label><input type="radio" name="verbuchung_art" value="abbrechen" /> Abbrechen</label>';
            var buttons = {};
            buttons[KuferTools.Button.Bezeichnung.Ok] = function () {
              if ($('input[name="verbuchung_art"]').length > 0) {
                var verbuchungArt = $('input[name="verbuchung_art"]:checked').val();
                var hiddenInput = '<input type="hidden" name="verbuchung_art" value="' + verbuchungArt + '" />';
                $('#einzelveranstaltungForm').append(hiddenInput);
              }
              $('#einzelveranstaltungForm').trigger('submit');
              $(this).dialog('close');
            };
            buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
              $(this).dialog("close");
            };
            KuferTools.showMessage({meldung: meldung, title: 'Hinweis', buttons: buttons});
            return;
          }
        }
        $('#einzelveranstaltungForm').trigger('submit');
        $(this).dialog('close');
      }
    };
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog("close");
    };

    KuferTools.showMessage({
      meldung: data,
      title: 'Einzelveranstaltung',
      buttons: buttons,
      width: '800px',
      pressEnterFunc: buttons[KuferTools.Button.Bezeichnung.Ok]
    });
    KuferTools.InitValidate($('#einzelveranstaltungForm'));
    KuferTools.Utils.AjaxLadebildschirm.Stop();
  });
}

/**
 * Initialisiert den Dialog für den Details-Button mit den frei wählbaren Eingabefeldern
 */
function initDetailsDialog(pKursauswahl) {
  var _kursauswahl = {};
  if (typeof (pKursauswahl) == 'object') {
    _kursauswahl = pKursauswahl;
  }

  $("#maAnmeld_histKrit").on('click', function () {
    var openFunc = function () {
      setInputsByObj();
    };
    var buttons = {};

    if (KuferTools.Anmeldung.ReadOnly) {
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        $(this).dialog('close');
      };
    } else {
      buttons[KuferTools.Button.Bezeichnung.Ok] = function () {
        $(this).find('input').each(function () {
          if (!validateInput($(this))) {
            $(this).addClass('form_error');
          }
        });
        if ($(this).find('input').hasClass('form_error')) {
          showMessage('Bitte überprüfen Sie die markierten Felder, ob sie im korreten Format gefüllt sind.', 'Fehlerhafte Eingaben');
        } else {
          setObjByInputs();
          $(this).dialog('close');
        }
      };
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        $(this).dialog('close');
      };
    }
    // ein jQuery-Dialog öffnen
    // davor über Ajax ein Paar infos holen, wie was freigegeben ist? Oder einfach wie bisher per Ajax den kompletten inhalt laden?
    KuferTools.Utils.AjaxLadebildschirm.Start();
    jQuery.get('index.php?tool_id=' + KuferTools.ToolId + '&action=histKritDialog', function (data) {
      KuferTools.showMessage({
        meldung: data,
        title: 'Details für die Anmeldung zum Kurs',
        buttons: buttons,
        width: '800',
        height: 'auto',
        pressEnterFunc: buttons[KuferTools.Button.Bezeichnung.FilterSetzen]
      }, openFunc);
      KuferTools.Utils.AjaxLadebildschirm.Stop();

      $('#histKritDialog').on('click', 'a.dropdown-item', function () {
        var input = $(this).closest('.input-group').find('input.form-control');
        input.val($(this).text())
      });
    });
  });
  $("#maAnmeld_histKrit").prop('disabled', false);

  if (KuferTools.Anmeldung.ReadOnly) {
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog('close');
    };
    $('#histKritDialog').dialog("option", "buttons", buttons);
  }

  function setInputsByObj() {
    $('#histKritDialog input, #histKritDialog select').each(function () {
      if ($(this).is(':checkbox')) {
        $(this).prop('checked', _kursauswahl[$(this).prop('id')] == 'W');
      } else {
        $(this).val(_kursauswahl[$(this).prop('id')]);
      }
    });
  }

  function setObjByInputs() {
    $('#histKritDialog input, #histKritDialog select').each(function () {
      if ($(this).is(':checkbox')) {
        _kursauswahl[$(this).prop('id')] = ($(this).is(':checked')) ? 'W' : '';
      } else {
        _kursauswahl[$(this).prop('id')] = $(this).val();
      }
    });
  }

  $('.maAnmeld_histKrit').on('click', function () {
    $('#histKritDialog').dialog('open');
  });

  function getObj4Server() {
    return _kursauswahl;
  }

  return getObj4Server;
} // initDetailsDialog

/**
 * Initialisiert den Dialog für den abweichenden Zahlweg
 */
function initAbwZahlwegDialog(pAbwZahlweg) {
  var _abwZahlweg = {};
  if (typeof (pAbwZahlweg) == 'object') {
    _abwZahlweg = pAbwZahlweg;
  }

  $("#maAnmeld_abwZahlweg").on('click', function () {
    var openFunc = function () {
      setInputsByObj();

      // Falls noch kein abw. Zahler eingetragen ist, soll gleich der Dialog zur Teilnehmerauswahl geöffnet werden.
      // andernfalls wird die Teilnehmerauswahl nicht aufgeklappt.
      if (KuferTools.Anmeldung.ReadOnly !== true && $('#abwZahlweg_Inhaber').val() === '') {
        $('button.abw_tn_auswahl').trigger('click');
      }
    };
    var buttons = {};

    if (KuferTools.Anmeldung.ReadOnly) {
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        $(this).dialog('close');
      };
    } else {
      buttons[KuferTools.Button.Bezeichnung.Ok] = function () {
        // 1. Prüfen, ob es allgemeine Eingabefehler im Formular gibt
        $(this).find('input:visible').each(function () {
          if (!validateInput($(this))) {
            $(this).addClass('form_error:');
          }
        });
        if ($(this).find('input:visible').hasClass('form_error')) {
          showMessage('Bitte überprüfen Sie, ob Sie alle Formularfelder ausgefüllt haben.', 'Fehlerhafte Eingaben');
        } else {
          var bic = $('#abwZahlweg_BIC').val();
          var iban = $('#abwZahlweg_IBAN').val();
          var fehlerTextBic = '';
          // 2. Prüfen, ob die eingegebenen Kontodaten korrekt sind
          var toValidate = {
            iban: iban
          };
          if (bic !== '') {
            toValidate.bic = bic;
            fehlerTextBic = 'BIC und ';
          }
          var fehlerText = 'Bitte überprüfen Sie die ' + fehlerTextBic + 'IBAN.';

          toValidate = KuferTools.Utils.getJsonFromObjectBase64(toValidate);

          KuferTools.Utils.AjaxLadebildschirm.Start();
          jQuery.post('index.php?tool_id=' + KuferTools.ToolId + '&action=handleValidateAjaxFunc', {'toValidate': toValidate}, function (JsonMessage) {
            var wrongFields = KuferTools.Utils.getObjectFromJson(JsonMessage);
            if (wrongFields.length > 0) {
              showMessage('Ihre Bankdaten konnten nicht verifiziert werden. ' + fehlerText, 'Bankdaten konnten nicht verifiziert werden');
            } else {
              setObjByInputs();
              $('#abwZahlwegDialog').parent('.ui-dialog-content').dialog('close');
            }
            KuferTools.Utils.AjaxLadebildschirm.Stop();
          });
        }
      };
      // Bankdaten des TNs verwenden. Die Buttonbezeichnung muss Kurz sein, da die Buttons sonst zweizeilig werden.
      buttons['Leeren'] = function () {
        $(this).find('input').val('');
        setObjByInputs();
        $(this).dialog('close');
      };

      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        $(this).dialog('close');
      };

    }
    // ein jQuery-Dialog öffnen
    // davor über Ajax ein Paar infos holen, wie was freigegeben ist? Oder einfach wie bisher per Ajax den kompletten inhalt laden?
    KuferTools.Utils.AjaxLadebildschirm.Start();
    jQuery.get('index.php?tool_id=' + KuferTools.ToolId + '&action=abwZahlweg', function (data) {
      KuferTools.showMessage({
        meldung: data,
        title: 'Abweichender Zahlweg',
        buttons: buttons,
        width: 'auto',
        pressEnterFunc: buttons[KuferTools.Button.Bezeichnung.FilterSetzen]
      }, openFunc);
      KuferTools.Utils.AjaxLadebildschirm.Stop();
    });
  });
  $("#maAnmeld_abwZahlweg").prop('disabled', false);

  if (KuferTools.Anmeldung.ReadOnly) {
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog('close');
    };
    $('#abwZahlwegDialog').dialog("option", "buttons", buttons);
  }
  $('.maAnmeld_abwZahlweg').on('click', function () {
    $('#abwZahlweg_betrag').trigger('change'); // Damit der vom TN zu zahlende Betrag aktuallisiert wird
    $('#abwZahlwegDialog').dialog('open');
  });

  /**
   * Wird im Dialog der abweichende Betrag geändert, muss der vom TN zu zahlende Betrag
   * ebenfalls geändert werden.
   */
  $(document).on('change', '#abwZahlweg_betrag', function () {
    var kursGeb = KuferTools.Anmeldung.AktGebuehr;
    var abwGeb = $(this).val();
    kursGeb = KuferTools.Utils.Math.stringToFloat(kursGeb);
    abwGeb = KuferTools.Utils.Math.stringToFloat(abwGeb);
    $('#anteil_tn').html(KuferTools.Utils.Math.floatToString(kursGeb - abwGeb));
  });

  function setInputsByObj() {
    $('#abwZahlwegDialog input').each(function () {
      $(this).val(_abwZahlweg[$(this).prop('name')]);
    });

    if ($('#abwZahlweg_betrag').val() == '') {
      $('#abwZahlweg_betrag').val('0,00');
    }
    // Damit der vom TN zu zahlende Betrag aktuallisiert wird
    $('#abwZahlweg_betrag').trigger('change');
  }


  function setObjByInputs() {
    $('#abwZahlwegDialog input').each(function () {
      _abwZahlweg[$(this).prop('name')] = $(this).val();
    });
  }

  function getObj4Server() {
    return _abwZahlweg;
  }

  return getObj4Server;

} // initAbwZahlwegDialog

/**
 * Initiallisiert den Dialog zur Auswahl der Anmeldeart
 */
function initAnmArtDialog() {
  const maAnmeld_anmArt = document.getElementById('maAnmeld_anmArt');
  if (!maAnmeld_anmArt) {
    return;
  }

  if (KuferTools.Anmeldung.ReadOnly) {
    maAnmeld_anmArt.addEventListener('click', function () {
      switch (KuferTools.Anmeldung.AnmeldeForm) {
        default:
        case KuferTools.Anmeldung.AnmFormAry.Normal:
          showMessage('Es wurden keine weiteren Teilnehmer zur Anmeldung angegeben.', 'Anmeldeart: Normal');
          break;
        case KuferTools.Anmeldung.AnmFormAry.Kind:
          $('#kinderDialog').dialog('open');
          break;
        case KuferTools.Anmeldung.AnmFormAry.Firma:
          $('#firmenDialog').dialog('open');
          break;
        case KuferTools.Anmeldung.AnmFormAry.Mehrfach:
          $('#mehrfachDialog').dialog('open');
          break;
      }
    });
  } else {
    maAnmeld_anmArt.addEventListener('click', function () {
      var openFunc = function () {
        $(this).data('htmlBeimOeffnen', $(this).children().clone());
      };
      var buttons = {};
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        $(this).dialog('close');
      };
      // ein jQuery-Dialog öffnen
      // davor über Ajax ein Paar infos holen, wie was freigegeben ist? Oder einfach wie bisher per Ajax den kompletten inhalt laden?
      KuferTools.Utils.AjaxLadebildschirm.Start();
      jQuery.get('index.php?tool_id=' + KuferTools.ToolId + '&action=anmeldeart', function (data) {
        KuferTools.showMessage({
          meldung: data,
          title: 'Anmeldeart auswählen',
          buttons: buttons,
          width: '250',
          pressEnterFunc: buttons[KuferTools.Button.Bezeichnung.FilterSetzen]
        }, openFunc);
        KuferTools.Utils.AjaxLadebildschirm.Stop();

        $('#anmArtDialog .anmArt_normal').on('click', function () {
          KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Normal);
          $('#anmArtDialog').parent('.ui-dialog-content').dialog('close');
        });
      });
    });
  }
  maAnmeld_anmArt.disabled = false;
} // initAnmArtDialog

/**
 * Eventhandler für den Dialog zum Hinzufügen von Kindern zur Anmeldung.
 *
 * Gibt eine Funktion zurück, mit der die Kinder als Hidden-Inputs zurückgegeben werden.
 *
 * _kinder repräsentiert die Kinder-Tabelle, und ist ein Array von _kindObjPrototype-Objekten
 * Zum bearbeiten der Kindertabelle bitte das _kinder-Array bearbeiten, und anschließend redrawChildrenTable() aufrufen
 *
 * @return function
 */
function initKinderDialog(pKinder) {
  /**
   * Array von Kinder-Objekten. Repräsentiert die Kinder-Tabelle.
   */
  var _kinder = [];
  if (typeof (pKinder) == 'object') {
    _kinder = pKinder;
  }

  // Aktuallisiert die Kinderzeile bei der Teilnehmerinfo
  aktuallisiereKinderZeile();

  /**
   * Beim öffnen des Dialogs wird _kinder hier zwischengespeichert, damit man diese wiederherstellen kann, falls
   * das Dialog abgebrochen wird.
   */
  var _kinder_vorm_oeffnen;
  /**
   * Prototyp eines Kindobjektes
   */
  var _kindObjPrototype = {name: '', vorname: '', geburtsdatum: '', bemerkung: ''};

  $(document).on('click', ".anmArt_kind, #anmArt_kind", function () {
    var openFunc = function () {
      KuferTools.Anmeldung.kinderDataTable = $('.tab_kinder').dataTable({
        //"oLanguage": {"sUrl": "../jquery/plugins/jquery.dataTables.de_DE.txt"},
        "sScrollY": "140px",
        "bFilter": false,
        "bInfo": false, //z.B. showing 1 to 10 from 57 entries
        "bScrollCollapse": true,
        "bPaginate": false,
        "bAutoWidth": false,
        "bSort": false
      });
      resetKinderEingabefelder();
      redrawChildrenTable(KuferTools.Anmeldung.kinderDataTable);
      _kinder_vorm_oeffnen = deepObjCopy(_kinder);
    };
    var buttons = {};

    if (KuferTools.Anmeldung.ReadOnly) {
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        $(this).dialog('close');
      };
    } else {
      buttons[KuferTools.Button.Bezeichnung.Ok] = function () {
        if (_kinder.length === 0) {
          showMessage('Sie haben keine Kinder angegeben.<br><br>Bitte geben Sie für eine Eltern-Kind-Anmeldung die ' +
            'Daten der Kinder unter "Daten des Kindes" an, und klicken anschließend auf "Kind hinzufügen". ' +
            '<br><br>Klicken Sie auf "Abbrechen", um die bisherige Anmeldeart beizubehalten.', 'Keine Kinder angegeben');
          //Falls nur der Name des Kindes im Textfeld steht und der Name dem der Eltern entspricht, wird das ignoriert.
          //Hintergrund: Da es eine Einstellung zur automatischen Ausfüllung des Namens der Kinder gibt, sollte nach dem Hinzufügen
          //und anschließendem Drücken auf den Ok-Button nicht immer die Meldung kommen, dass noch Angaben zu einem weiteren Kind vorhanden sind.
        } else if ($('#kinderDialog .weiterePersonHinzufuegen input').filter(function () {
            return $(this).val() !== "";
          }).length > 1 ||
          ($('#kinderDialog .weiterePersonHinzufuegen input').filter(function () {
              return $(this).val() !== "";
            }).length === 1 &&
            $('#kinderDialog .weiterePersonHinzufuegen input#kindName').val() != KuferTools.Teilnehmer.Name)) {
          var buttons = {
            "Weiter, Kind nicht hinzufügen": function () {
              resetKinderEingabefelder();
              $('#anmArtDialog').parent('.ui-dialog-content').dialog('close');
              KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Kind, _kinder.length);
              $(this).dialog('close');
              // Aktuallisiert die Kinderzeile bei der Teilnehmerinfo
              aktuallisiereKinderZeile();
              $('#kinderDialog').parent('.ui-dialog-content').dialog('close');
            },
            "Zurück zur Kindeingabe": function () {
              $(this).dialog('close');
            }
          };
          showMessage('Sie haben unter "Daten des Kindes" noch Angaben zu einem Kind, welches noch nicht per "Kind hinzufügen" zur Anmeldung hinzugefügt wurde.<br><br>' +
            'Klicken Sie auf "Weiter, Kind nicht hinzufügen", um die Anmeldung, ohne die noch nicht zur Anmeldung hinzugefügten Kinddaten, fortzusetzen.<br><br>' +
            'Klicken Sie auf "Zurück zur Kindeingabe", wenn Sie das Kind noch hinzufügen möchten.', 'Nicht gesicherte Kinddaten', buttons);
        } else {
          resetKinderEingabefelder();
          KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Kind, _kinder.length);
          // Aktuallisiert die Kinderzeile bei der Teilnehmerinfo
          aktuallisiereKinderZeile();
          $(this).dialog('close');
          $('#anmArtDialog').parent('.ui-dialog-content').dialog('close');
        }
      };
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        _kinder = _kinder_vorm_oeffnen;
        $(this).dialog('close');
      };
    }

    // ein jQuery-Dialog öffnen
    // davor über Ajax ein Paar infos holen, wie was freigegeben ist? Oder einfach wie bisher per Ajax den kompletten inhalt laden?
    KuferTools.Utils.AjaxLadebildschirm.Start();
    jQuery.get('index.php?tool_id=' + KuferTools.ToolId + '&action=kinderDialog', function (data) {
      KuferTools.showMessage({
        meldung: data,
        title: 'Anmelden von Kindern',
        buttons: buttons,
        width: '550',
        pressEnterFunc: buttons[KuferTools.Button.Bezeichnung.FilterSetzen]
      }, openFunc);
      KuferTools.Utils.AjaxLadebildschirm.Stop();
    });

  });
  $(".anmArt_kind, #anmArt_kind" ).prop('disabled', false);

  if (KuferTools.Anmeldung.ReadOnly) {
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog('close');
    };
    $('#kinderDialog').dialog("option", "buttons", buttons);
  }

  $('.anmArt_kind').on('click', function () {
    $('#kinderDialog').dialog('open');
  });

  /**
   * Setzt die Eingabefelder bei der Eltern-Kind-Anmeldung zurück.
   * Besetzt ggf. den Nachnamen des Kindes mit dem Nachnamen des Hauptteilnehmers,
   * sofern unter "zentr. Einstellungen / Anmeldung (Mitarbeiter) / Anmeldung"
   * die entsprechende Option gesetzt ist. (Standardäßig aktiviert)
   */
  function resetKinderEingabefelder() {
    $('#kinderDialog .weiterePersonHinzufuegen input').filter(function () {
      return $(this).val() !== "";
    }).val('');
    $('#kinderDialog .weiterePersonHinzufuegen #kindName').val(KuferTools.Anmeldung.KindNameVorbelegung);
  }

  /**
   * Zeichnet die Kinder-Tabelle mit den Werten aus _kinder neu
   */
  function redrawChildrenTable(kinderDataTable) {
    kinderDataTable.fnClearTable();
    var kinderCount = _kinder.length;
    if (kinderCount > 0) {
      for (var i = 0; i < kinderCount; i++) {
        // In JS x || y entspricht ( x ) ? x : y;
        kinderDataTable.fnAddData([
          KuferTools.Utils.htmlEncode(_kinder[i].name) || '&nbsp',
          KuferTools.Utils.htmlEncode(_kinder[i].vorname) || '&nbsp',
          KuferTools.Utils.htmlEncode(_kinder[i].geburtsdatum) || '&nbsp',
          KuferTools.Utils.htmlEncode(_kinder[i].bemerkung) || '&nbsp',
          (KuferTools.Anmeldung.ReadOnly ? '' : '<i class="fa fa-trash removeChild row_' + i + '" style="cursor:pointer; font-size:1.3em;" alt="Kind entfernen" title="Kind entfernen"></i>')
        ], false);
      }
      kinderDataTable.fnDraw(false);
    } else {
      kinderDataTable.fnAddData([
        '&nbsp;', '&nbsp;', '&nbsp;', '&nbsp;',
        // '<img src="images/kindplus.gif" class="addChild" alt="Kind hinzuf&uuml;gen" title="Kind hinzuf&uuml;gen">'
        '&nbsp;'
      ], true);
    }
    $('#kinderDialog .weiterePersonenAnzahl .weiterePersonenAnzahlInt').text(kinderCount);

    // Falls mehr Kinder als freie Kinderplätze? Kinderanzahl rot färben
    if (kinderCount > KuferTools.Kurs.Kinder_frei) {
      $('#kinderDialog .weiterePersonenAnzahl .weiterePersonenAnzahlInt').css('color', '#FF0000');
    } else {
      $('#kinderDialog .weiterePersonenAnzahl .weiterePersonenAnzahlInt').css('color', '#000000');
    }
    // Falls nicht überbucht werden darf wird ggf. die Möglichkeit zum Hinzufügen neuer Kinder gesperrt.
    aktuallisiereHinzufuegenErlaubt();
  } // redrawChildrenTable

  function aktuallisiereHinzufuegenErlaubt() {
    // Nur falls nicht überbucht werden darf, muss das hier berücksichtigt werden.
    if (!KuferTools.Anmeldung.UeberbuchenErlaubt) {
      if (KuferTools.Kurs.Kinder_frei <= _kinder.length) {
        $('#kinderDialog .weiterePersonHinzufuegen').css('display', 'none');
        $('#kinderDialog .weiterePersonenVoll').css('display', 'block');
      } else {
        $('#kinderDialog .weiterePersonHinzufuegen').css('display', 'block');
        $('#kinderDialog .weiterePersonenVoll').css('display', 'none');
      }
    }
  }

  /**
   * Die Kinder-Zeile, welche in der Teilnehmer-Info-Box unten zu sehen ist, wird anhand den hinterlegten Kinderdaten aktuallisiert.
   *
   * Fall keine Kinder: nichts anzeigen. Falls ein Kind: Vor- und Nachname + Bemerkung anzeigen.
   * Falls mehrere Kinder: die Vornamen auflisten.
   *
   * Die Kinderzeile wird durch ein Span mit der Klasse infozeile_kinder angesprochen
   */
  function aktuallisiereKinderZeile() {
    var kinderCount = _kinder.length;
    var $kinderInfoZeile = $('span.infozeile_kinder');
    var $kinderInfoLabel = $('.infozeile_kinder_label');

    if (kinderCount === 0) {
      $kinderInfoZeile.html('');
      $kinderInfoLabel.html('');
    } else if (kinderCount === 1) {
      $kinderInfoLabel.text('Kind');
      $kinderInfoZeile.text(_kinder[0].vorname + ' ' + _kinder[0].name + ' ' + _kinder[0].bemerkung + ' ');
    } else {
      var kinderVornamen = '';
      for (var i = 0; i < kinderCount; i++) {
        if (i > 0) {
          kinderVornamen += ', ';
        }
        kinderVornamen += _kinder[i].vorname;
      }
      $kinderInfoLabel.text('Kinder');
      $kinderInfoZeile.text(kinderVornamen);
    }
  }

  /**
   * Mit einem Klick auf das Löschen-Symbol in der Kinderzeile wird das entsprechende Kind aus der Anmeldung entfernt.
   */
  $(document).on('click', '.removeChild', function () {
    if (matches = $(this).prop('class').match(/row_(\d)/)) {
      var index = matches[1];
      _kinder.splice(index, 1);
      redrawChildrenTable(KuferTools.Anmeldung.kinderDataTable);
    }
  });

  /**
   * Eventhandler für den Button zum Hinzufügen eines Kindes anhand der gefüllten Input-Felder
   */
  $(document).on('click', '#kinderDialog #kindHinzufuegen', function () {
    $('#kinderDialog .weiterePersonHinzufuegen input').removeClass('form_error');
    // Validierung der Eingaben
    var filter = KuferTools.Utils.Filter;
    var filterObj = filter.FilterSelector();
    var $mandatoryFields = $("input.form_mandatory:text");
    $mandatoryFields.each(function () {
      filterObj.addSelector($(this), filter.Mandatory);
    });

    filterObj.addSelector($('#kindGeburtsdatum'), filter.Date);
    var fieldsWithWrongInput = filterObj.filter();
    var wrongFieldsLength = fieldsWithWrongInput.length;

    if (wrongFieldsLength !== 0) {
      var message = '<div class = "anmeldeart_abstand">Folgende (Pflicht-)Felder wurden nicht korrekt angegeben:</div>';
      for (var i = 0; i < wrongFieldsLength; i++) {
        fieldsWithWrongInput[i].addClass('form_error');
        if (fieldsWithWrongInput[i].prop('id') === 'kindGeburtsdatum') {
          message += '<div>- Geburtsdatum (Format: TT.MM.JJJJ)</div>';
        } else {
          var id = fieldsWithWrongInput[i].prop('id');
          var label = $.trim($('label[for=' + id + ']').text());
          if (label !== '') {
            message += '<div>- ' + label.replace(':', '') + '</div>';
          } else {
            message += '<div>- rot markierte Pflichtfelder</div>';
          }
        }
      }
      showMessage(message, 'Bitte prüfen Sie Ihre Eingaben');
      return;
    }
    var kindObj = deepObjCopy(_kindObjPrototype);
    kindObj.name = $('#kindName').val();
    kindObj.vorname = $('#kindVorname').val();
    kindObj.geburtsdatum = $('#kindGeburtsdatum').val();
    kindObj.bemerkung = $('#kindBemerkung').val();
    _kinder.push(kindObj);
    redrawChildrenTable(KuferTools.Anmeldung.kinderDataTable);
    resetKinderEingabefelder();
  });

  function getObj4Server() {
    return _kinder;
  }

  return getObj4Server;
} // initKinderDialog

function deepObjCopy(dupeObj) {
  var retObj = new Object();
  if (typeof (dupeObj) == 'object') {
    if (typeof (dupeObj.length) != 'undefined')
      var retObj = new Array();
    for (var objInd in dupeObj) {
      if (typeof (dupeObj[objInd]) == 'object') {
        retObj[objInd] = deepObjCopy(dupeObj[objInd]);
      } else if (typeof (dupeObj[objInd]) == 'string') {
        retObj[objInd] = dupeObj[objInd];
      } else if (typeof (dupeObj[objInd]) == 'number') {
        retObj[objInd] = dupeObj[objInd];
      } else if (typeof (dupeObj[objInd]) == 'boolean') {
        ((dupeObj[objInd] == true) ? retObj[objInd] = true : retObj[objInd] = false);
      }
    }
  }
  return retObj;
}

/**
 * Initialisiert den Dialog für die Mehrfachanmeldung
 */
function initMehrfachDialog(pWeitereTn) {
  // initAnzahlWeitereTnDialog();
  $(document).on('click', '#mehrfachAnonym', function () {
    showAnzahlWeitereTnDialog();
  });
  initTnUebersichtDialog4Mehrfach();

  /**
   * Array von Teilnehmer-Objekten. Repräsentiert die Teilnehmer-Tabelle.
   */
  var _teilnehmer = [];
  if (typeof (pWeitereTn) == 'object') {
    _teilnehmer = pWeitereTn;
  }

  /**
   * Beim Öffnen des Dialogs wird _teilnehmer zwischengespeichert, damit beim Abbrechen
   * diese wiederhergestellt werden kann.
   */
  var _teilnehmer_vorm_oeffnen;
  /**
   * Prototyp eines Teilnehmer-Objekts
   */
  var _teilnehmerObjPrototype = {
    tnr: -1,
    name: '',
    vorname: '',
    geschlecht: '',
    ort: '',
    strasse: '',
    telefon: '',
    email: ''
  };

  $(document).on('click', ".anmArt_mehrfach, #anmArt_mehrfach", function () {

    var openFunc = function () {
      KuferTools.Anmeldung.teilnehmerDataTable = $('.tab_mehrfach').dataTable({
        //"oLanguage": {"sUrl": "../jquery/plugins/jquery.dataTables.de_DE.txt"},
        "sScrollY": "140px", //Scrollbalken nach unten, angezeigt: 300px (IE)
        "bFilter": false,
        "bInfo": false, //z.B. showing 1 to 10 from 57 entries
        "bScrollCollapse": true,
        "bPaginate": false,
        "bAutoWidth": false,
        "bSort": false
      });
      redrawTnTable(KuferTools.Anmeldung.teilnehmerDataTable);
      _teilnehmer_vorm_oeffnen = deepObjCopy(_teilnehmer);
      $('#mehrfachDialog .weiterePersonHinzufuegen input').removeClass('form_error');
    };

    var buttons = {};
    if (KuferTools.Anmeldung.ReadOnly) {
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        $(this).dialog('close');
      };
    } else {
      buttons[KuferTools.Button.Bezeichnung.Ok] = function () {
        if (_teilnehmer.length === 0) {
          showMessage('Sie haben keine weiteren Teilnehmer angegeben.<br><br>Bitte geben Sie für eine Mehrfachanmeldung die ' +
            'Daten der weiteren Teilnehmer unter "Daten des weiteren Teilnehmers" an, und klicken anschließend auf "Teilnehmer hinzufügen", ' +
            'oder Klicken Sie auf "Hinzufügen aus Teilnehmerstamm", um einen bereits erfassten Teilnehmer mit anzumelden. ' +
            '<br><br>Klicken Sie auf "Abbrechen", um die bisherige Anmeldeart beizubehalten.', 'Keine Teilnehmer angegeben');
        } else if ($('#mehrfachDialog .weiterePersonHinzufuegen input').filter(function () {
          return $(this).val() !== "";
        }).length > 0) {
          var buttons = {
            "Weiter, Teilnehmer nicht hinzufügen": function () {
              resetFirmaEingabefelder();
              $('#anmArtDialog').dialog('close');
              KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Mehrfach, _teilnehmer.length);
              $(this).dialog('close');
              $('#mehrfachDialog').parent('.ui-dialog-content').dialog('close');
            },
            "Zurück zur Teilnehmereingabe": function () {
              $(this).dialog('close');
            }
          };
          showMessage('Sie haben unter "Daten des weiteren Teilnehmers" noch Angaben zu einem Teilnehmer, welcher noch nicht per "Hinzufügen aus Eingabefelder" zur Anmeldung hinzugefügt wurde.<br><br>' +
            'Klicken Sie auf "Weiter, Teilnehmer nicht hinzufügen", um die Anmeldung, ohne die noch nicht zur Anmeldung hinzugefügten Teilnehmerdaten, fortzusetzen.<br><br>' +
            'Klicken Sie auf "Zurück zur Teilnehmereingabe", wenn Sie den Teilnehmer noch hinzufügen möchten.', 'Nicht gesicherte Teilnehmerdaten', buttons);

        } else {
          KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Mehrfach, _teilnehmer.length);
          $(this).dialog('close');
          $('#anmArtDialog').parent('.ui-dialog-content').dialog('close');
        }
      };
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        _teilnehmer = _teilnehmer_vorm_oeffnen;
        $(this).dialog('close');
      };
    }
    // ein jQuery-Dialog öffnen
    // davor über Ajax ein Paar infos holen, wie was freigegeben ist? Oder einfach wie bisher per Ajax den kompletten inhalt laden?
    KuferTools.Utils.AjaxLadebildschirm.Start();
    jQuery.get('index.php?tool_id=' + KuferTools.ToolId + '&action=mehrfachDialog', function (data) {
      KuferTools.showMessage({
        meldung: data,
        title: 'Anmelden von weiteren Teilnehmern',
        buttons: buttons,
        width: 'auto',
        pressEnterFunc: buttons[KuferTools.Button.Bezeichnung.FilterSetzen]
      }, openFunc);
      KuferTools.Utils.AjaxLadebildschirm.Stop();
    });
  });
  $(".anmArt_mehrfach, #anmArt_mehrfach").prop('disabled', false);

  if (KuferTools.Anmeldung.ReadOnly) {
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog('close');
    };
    $('#mehrfachDialog').dialog("option", "buttons", buttons);
  }
  $('.anmArt_mehrfach').on('click', function () {
    $('#mehrfachDialog').dialog('open');
  });

  /**
   * Dialog zum Hinzufügen weiterer Teilnehmer: Auswahl, ob die Teilnehmer aus TN-Stamm,
   * aoder als neue Teilnehmer angelegt werden.
   */
  var buttons = {};
  buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
    $(this).dialog('close');
  };
  $('#mehrfachDispatchDialog').dialog({
    modal: true,
    autoOpen: false,
    resizable: false,
    width: 290,
    title: 'Weiteren Teilnehmer anmelden',
    buttons: buttons
  });

  /**
   * Leert die Eingabefelder für Mitarbeiter
   */
  function resetFirmaEingabefelder() {
    $('#mehrfachDialog .weiterePersonHinzufuegen input').val('');
    $('#mehrfachDialog .weiterePersonHinzufuegen select').val('');
  }

  /**
   * Zeichnet die Teilnehmertabelle anhand _teilnehmer neu
   */
  function redrawTnTable(teilnehmerDataTable) {
    teilnehmerDataTable.fnClearTable();
    var tnCount = _teilnehmer.length;
    if (tnCount > 0) {
      for (var i = 0; i < tnCount; i++) {
        // In JS x || y entspricht ( x ) ? x : y;
        teilnehmerDataTable.fnAddData([
          KuferTools.Utils.htmlEncode(_teilnehmer[i].name) || '&nbsp',
          KuferTools.Utils.htmlEncode(_teilnehmer[i].vorname) || '&nbsp',
          KuferTools.Utils.htmlEncode(KuferTools.Anmeldung.Geschlecht[_teilnehmer[i].geschlecht]) || '&nbsp',
          KuferTools.Utils.htmlEncode(_teilnehmer[i].ort) || '&nbsp',
          KuferTools.Utils.htmlEncode(_teilnehmer[i].strasse) || '&nbsp',
          KuferTools.Utils.htmlEncode(_teilnehmer[i].telefon) || '&nbsp',
          KuferTools.Utils.htmlEncode(_teilnehmer[i].email) || '&nbsp',
          (KuferTools.Anmeldung.ReadOnly ? '' : '<i class="fa fa-trash removeTn row_' + i + '" style="cursor:pointer; font-size:1.3em;" alt="Teilnehmer entfernen" title="Teilnehmer entfernen"></i>')
        ], false);
      }
      teilnehmerDataTable.fnDraw(false);
    } else {
      teilnehmerDataTable.fnAddData([
        '&nbsp;', '&nbsp;', '&nbsp;', '&nbsp;', '&nbsp;', '&nbsp;', '&nbsp;',
        //'<img src="images/weiteretnplus.gif" class="addTn" alt="Teilnehmer hinzuf&uuml;gen" title="Teilnehmer hinzuf&uuml;gen">'
        '&nbsp;'
      ], true);
    }
    $('#mehrfachDialog .weiterePersonenAnzahl .weiterePersonenAnzahlInt').text(tnCount);

    // Falls mehr weitere Teilnehmer (Haupttn berücksichtigt) als freie Plätze? Teilnehmeranzahl rot färben
    if (tnCount > (KuferTools.Kurs.Teil_frei - 1)) {
      $('#mehrfachDialog .weiterePersonenAnzahl .weiterePersonenAnzahlInt').css('color', '#FF0000');
    } else {
      $('#mehrfachDialog .weiterePersonenAnzahl .weiterePersonenAnzahlInt').css('color', '#000000');
    }
  } // redrawTnTable

  /**
   * Klick auf den Löschenbutton in einer Mitarbeiterzeile entfernt diesen aus der Anmeldung
   */
  $(document).on('click', '.removeTn', function () {
    if (matches = $(this).prop('class').match(/row_(\d)/)) {
      var index = matches[1];
      _teilnehmer.splice(index, 1);
      redrawTnTable(KuferTools.Anmeldung.teilnehmerDataTable);
    }
  });

  /**
   * Hinzufügen eines Mitarbeiter: Ruft den Dialog für die Auswahl "aus TN-Stamm, PauschalTN..." auf.
   */
  $(document).on('click', '.addTn', function () {
    $('#mehrfachDispatchDialog').dialog('open');
  });

  /**
   * Dialog für die manuelle Angabe von Namen, Vornamen usw. des Firmenteilnehmers
   */
  $(document).on('click', '#mehrfachDialog #mehrfachTnManuell', function () {
    $('#mehrfachDialog .weiterePersonHinzufuegen input').removeClass('form_error');
    var filter = KuferTools.Utils.Filter;
    var filterObj = filter.FilterSelector();
    var $mandatoryFields = $("input.form_mandatory:text");
    $mandatoryFields.each(function () {
      filterObj.addSelector($(this), filter.Mandatory);
    });

    filterObj.addSelector($('#tnName'), filter.NeutralerTN).addSelector($('#tnEmail'), filter.Email);
    var fieldsWithWrongInput = filterObj.filter();
    var wrongFieldsLength = fieldsWithWrongInput.length;
    if (wrongFieldsLength !== 0) {
      var message = '<div class = "anmeldeart_abstand">Folgende (Pflicht-)Felder wurden nicht korrekt angegeben:</div>';
      for (var i = 0; i < wrongFieldsLength; i++) {
        fieldsWithWrongInput[i].addClass('form_error');
        var id = fieldsWithWrongInput[i].prop('id');
        var label = $.trim($('label[for=' + id + ']').text());
        if (label !== '') {
          message += '<div>- ' + label.replace(':', '') + '</div>';
        } else {
          message += '<div>- rot markierte Pflichtfelder</div>';
        }
      }
      showMessage(message, 'Bitte prüfen Sie Ihre Eingaben');
    } else {
      var teilnehmerObj = deepObjCopy(_teilnehmerObjPrototype);
      teilnehmerObj.name = $('#tnName').val();
      teilnehmerObj.vorname = $('#tnVorname').val();
      teilnehmerObj.geschlecht = $('#tnGeschlecht').val();
      teilnehmerObj.telefon = $('#tnTelefon').val();
      teilnehmerObj.ort = $('#tnOrt').val();
      teilnehmerObj.strasse = $('#tnStrasse').val();
      teilnehmerObj.email = $('#tnEmail').val();
      _teilnehmer.push(teilnehmerObj);
      redrawTnTable(KuferTools.Anmeldung.teilnehmerDataTable);
      resetFirmaEingabefelder();
    }
  }); // $('#mehrfachTnManuell').click

  /**
   * Eventhandler für die weiteren Teilnehmer per Dialog.
   *
   * Das Dialogdiv wird nicht direkt zum Dialog gemacht, sondern aus den Dom gehängt, und
   * später per ShowMessage angezeigt.
   */
  function initTnUebersichtDialog4Mehrfach() {
    var $dialog = $('.tn_auswahl_mehrfach');
    $dialog.detach();
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog("close");
    };

    $(document).on('click', '#mehrfachTnStamm', function () {
      KuferTools.Utils.AjaxLadebildschirm.Start();
      jQuery.get('index.php?tool_id=' + KuferTools.ToolId + '&action=tnUebersichtDialog&mehrfachAnm=1', function (data) {
        KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax($(data), 'Teilnehmer auswählen', buttons, 'auto', undefined,
          '.dataTable_tnUebersicht', KuferTools.TeilnehmerProSeite, '300px',
          'index.php?tool_id=' + KuferTools.ToolId + '&action=handleTnDataTable&dataTable=1&mehrfachAnm=1');
        KuferTools.Utils.AjaxLadebildschirm.Stop();
      });


    });
    $(document).on('click', '.tn_auswahl_mehrfach .tnBuchen', function (event) {
      event.preventDefault();
      var tnr = $(this).find('.hiddenTnr').val();

      KuferTools.Utils.AjaxLadebildschirm.Start();
      jQuery.post('index.php?tool_id=' + KuferTools.ToolId + '&action=handleTnDataTable&getTn=' + tnr, {}, function (teilnehmerJson) {
        var teilnehmer = KuferTools.Utils.getObjectFromJson(teilnehmerJson);

        var teilnehmerObj = deepObjCopy(_teilnehmerObjPrototype);
        teilnehmerObj.tnr = teilnehmer.tnr;
        teilnehmerObj.name = teilnehmer.name;
        teilnehmerObj.vorname = teilnehmer.vorname;
        teilnehmerObj.geschlecht = teilnehmer.geschlecht;
        teilnehmerObj.ort = teilnehmer.ort;
        teilnehmerObj.strasse = teilnehmer.strasse;
        teilnehmerObj.telefon = teilnehmer.telefon;
        teilnehmerObj.email = teilnehmer.email;
        _teilnehmer.push(teilnehmerObj);

        KuferTools.Utils.AjaxLadebildschirm.Stop();

        redrawTnTable(KuferTools.Anmeldung.teilnehmerDataTable);
        $('.tn_auswahl_mehrfach').dialog('close');
        $('#mehrfachDispatchDialog').dialog('close');
      });

    });
  } // initTnUebersichtDialog4Mehrfach

  function getObj4Server() {
    return _teilnehmer;
  }

  function showAnzahlWeitereTnDialog() {
    var $content = '<div id="anzahlWeitereTnDialog"><div><span>Zusätzliche anonyme Teilnehmer hinzufügen: </span>\n\
                      <input id="anzahlWeitereTnDialog_anzahl" value="1" size="2" maxlength="2"></div><div><small>\n\
                      (Die weiteren Teilnehmer werden mit den Daten des Hauptteilnehmers hinzugefügt)</small>\n\
                    </div></div>';

    var $meldung = $('<div>' + $content + '</div>');

    var buttons = {};
    buttons['Hinzufügen'] = function () {
      var anzahl = $('#anzahlWeitereTnDialog_anzahl').val();
      if (KuferTools.Utils.Filter.IsInt(anzahl) && parseInt(anzahl) > 0) {
        var anzahlInt = parseInt(anzahl);
        for (var i = 0; i < anzahlInt; i++) {
          fuegeHauptTnHinzu();
        }
        $(this).dialog('close');
      } else {
        showMessage('Bitte geben Sie für die Anzahl nur positive Ganzzahl an', 'Ungültige Eingabe');
      }
    };
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog('close');
    };

    $meldung.dialog({
      modal: true,
      autoOpen: false,
      resizable: false,
      width: 405,
      title: 'Weitere Personen hinzufügen',
      open: function () {
        $(this).data('htmlBeimOeffnen', $(this).children().clone())
      },
      close: function () {
        $(this).html($(this).data('htmlBeimOeffnen'))
      },
      buttons: buttons
    });
    $meldung.dialog('open');
  }

  function fuegeHauptTnHinzu() {
    var teilnehmerObj = deepObjCopy(_teilnehmerObjPrototype);
    teilnehmerObj.tnr = KuferTools.Teilnehmer.Tnr;
    teilnehmerObj.name = KuferTools.Teilnehmer.Name;
    teilnehmerObj.vorname = KuferTools.Teilnehmer.Vorname;
    teilnehmerObj.geschlecht = KuferTools.Teilnehmer.Geschlecht;
    teilnehmerObj.ort = KuferTools.Teilnehmer.Ort;
    teilnehmerObj.strasse = KuferTools.Teilnehmer.Strasse;
    teilnehmerObj.telefon = KuferTools.Teilnehmer.Telefon;
    teilnehmerObj.email = KuferTools.Teilnehmer.Email;

    _teilnehmer.push(teilnehmerObj);
    redrawTnTable(KuferTools.Anmeldung.teilnehmerDataTable);
  }

  return getObj4Server;
} // initMehrfachDialog

/**
 * Eventhandler für den Dialog zum Hinzufügen von Firmenmitarbeitern.
 *
 * Gibt eine Funktion zurück, mit der die Mitarbeiter als Hidden-Inputs zurückgegeben werden.
 *
 * _mitarbeiter repräsentiert die Mitarbeiter-Tabelle, und ist ein Array von _mitarbeiterObjPrototype-Objekten
 * Zum bearbeiten der Mitarbeitertabelle bitte das _kinder-Array bearbeiten, und anschließend redrawChildrenTable() aufrufen
 *
 * @return function
 */
function initFirmaDialog(pMitarbeiter) {
  // Initialisiert die Dialog zur Auswahl von Firmenmitarbeitern aus dem Teilnehmerstamm oder den bisherigen Firmenmitarbeitern
  initTnUebersichtDialog4Firmen();
  /**
   * Array von Mitarbeiter-Objekten. Repräsentiert die Mitarbeiter-Tabelle.
   */
  var _mitarbeiter = [];
  if (typeof (pMitarbeiter) == 'object') {
    _mitarbeiter = pMitarbeiter;
  }

  /**
   * Beim Öffnen des Dialogs wird _mitarbeiter zwischengespeichert, damit beim Abbrechen
   * diese wiederhergestellt werden kann.
   */
  var _mitarbeiter_vorm_oeffnen;
  /**
   * Prototyp eines Mitarbeiterobjektes
   */
  var _mitarbeiterObjPrototype = {
    tnr: -1,
    name: '',
    vorname: '',
    geschlecht: '',
    ort: '',
    strasse: '',
    telefon: '',
    email: ''
  };

  $(document).on('click', ".anmArt_firma, #anmArt_firma", function () {
    var openFunc = function () {
      KuferTools.Anmeldung.mitarbeiterDataTable = $('.tab_firma').dataTable({
        //"oLanguage": {"sUrl": "../jquery/plugins/jquery.dataTables.de_DE.txt"},
        "sScrollY": "140px",
        "bFilter": false,
        "bInfo": false, //z.B. showing 1 to 10 from 57 entries
        "bScrollCollapse": true,
        "bPaginate": false,
        "bAutoWidth": false,
        "bSort": false
      });
      redrawMaTable(KuferTools.Anmeldung.mitarbeiterDataTable);
      _mitarbeiter_vorm_oeffnen = deepObjCopy(_mitarbeiter);
      $('#firmenDialog .weiterePersonHinzufuegen input').removeClass('form_error');
    };
    var buttons = {};

    if (KuferTools.Anmeldung.ReadOnly) {
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        $(this).dialog('close');
      };
    } else {
      buttons[KuferTools.Button.Bezeichnung.Ok] = function () {
        if (_mitarbeiter.length == 0) {
          showMessage('Sie haben keine Mitarbeiter angegeben.<br><br>Bitte geben Sie für eine Firmenanmeldung die ' +
            'Daten der Mitarbeiter unter "Daten des Mitarbeiters" an, und klicken anschließend auf "Hinzufügen". ' +
            '<br><br>Klicken Sie auf "Abbrechen", um die bisherige Anmeldeart beizubehalten.', 'Keine Mitarbeiter angegeben');

        } else if ($('#firmenDialog .weiterePersonHinzufuegen input').filter(function () {
          return $(this).val() !== "";
        }).length > 0) {
          var buttons = {
            "Weiter, Mitarbeiter nicht hinzufügen": function () {
              resetFirmaEingabefelder();
              $('#anmArtDialog').dialog('close');
              KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Firma, _mitarbeiter.length);
              $(this).dialog('close');
              $('#firmenDialog').dialog('close');
            },
            "Zurück zur Mitarbeitereingabe": function () {
              $(this).dialog('close');
            }
          };
          showMessage('Sie haben unter "Daten des Mitarbeiters" noch Angaben zu einem Mitarbeiter, welcher noch nicht per "Hinzufügen" zur Anmeldung hinzugefügt wurde.<br><br>' +
            'Klicken Sie auf "Weiter, Mitarbeiter nicht hinzufügen", um die Anmeldung, ohne die noch nicht zur Anmeldung hinzugefügten Mitarbeiterdatendaten, fortzusetzen.<br><br>' +
            'Klicken Sie auf "Zurück zur Mitarbeitereingabe", wenn Sie den Mitarbeiter noch hinzufügen möchten.', 'Nicht gesicherte Mitarbeiterdaten', buttons);

        } else {
          KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Firma, _mitarbeiter.length);

          $(this).dialog('close');
          $('#anmArtDialog').parent('.ui-dialog-content').dialog('close');
        }
      };
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
        _mitarbeiter = _mitarbeiter_vorm_oeffnen;
        $(this).dialog('close');
      };
    }
    // ein jQuery-Dialog öffnen
    // davor über Ajax ein Paar infos holen, wie was freigegeben ist? Oder einfach wie bisher per Ajax den kompletten inhalt laden?
    KuferTools.Utils.AjaxLadebildschirm.Start();
    jQuery.get('index.php?tool_id=' + KuferTools.ToolId + '&action=firmaDialog', function (data) {
      KuferTools.showMessage({
        meldung: data,
        title: 'Anmelden von Firmen-Mitarbeitern',
        buttons: buttons,
        width: 'auto',
        pressEnterFunc: buttons[KuferTools.Button.Bezeichnung.FilterSetzen]
      }, openFunc);
      KuferTools.Utils.AjaxLadebildschirm.Stop();
    });
  });
  $(".anmArt_firma, #anmArt_firma").prop('disabled', false);

  if (KuferTools.Anmeldung.ReadOnly) {
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog('close');
    };
    $('#firmenDialog').dialog("option", "buttons", buttons);
  }
  $('.anmArt_firma').on('click', function () {
    $('#firmenDialog').dialog('open');
  });

  /**
   * Leert die Eingabefelder für Mitarbeiter
   */
  function resetFirmaEingabefelder() {
    $('#firmenDialog .weiterePersonHinzufuegen input').val('');
    $('#firmenDialog .weiterePersonHinzufuegen select').val('');
  }

  /**
   * Zeichnet die Mitarbeitertabelle anhand _mitarbeiter neu
   */
  function redrawMaTable(mitarbeiterDataTable) {
    mitarbeiterDataTable.fnClearTable();
    var maCount = _mitarbeiter.length;
    if (maCount > 0) {
      for (var i = 0; i < maCount; i++) {
        // In JS x || y entspricht ( x ) ? x : y;
        mitarbeiterDataTable.fnAddData([
          KuferTools.Utils.htmlEncode(_mitarbeiter[i].name) || '&nbsp',
          KuferTools.Utils.htmlEncode(_mitarbeiter[i].vorname) || '&nbsp',
          KuferTools.Utils.htmlEncode(KuferTools.Anmeldung.Geschlecht[_mitarbeiter[i].geschlecht]) || '&nbsp',
          KuferTools.Utils.htmlEncode(_mitarbeiter[i].ort) || '&nbsp',
          KuferTools.Utils.htmlEncode(_mitarbeiter[i].strasse) || '&nbsp',
          KuferTools.Utils.htmlEncode(_mitarbeiter[i].telefon) || '&nbsp',
          KuferTools.Utils.htmlEncode(_mitarbeiter[i].email) || '&nbsp',
          (KuferTools.Anmeldung.ReadOnly ? '' : '<i class="fa fa-trash removeMa row_' + i + '" style="cursor:pointer; font-size:1.3em;" alt="Mitarbeiter entfernen" title="Mitarbeiter entfernen"></i>')
        ], false);
      }
      mitarbeiterDataTable.fnDraw(false);
    } else {
      mitarbeiterDataTable.fnAddData([
        '&nbsp;', '&nbsp;', '&nbsp;', '&nbsp;', '&nbsp;', '&nbsp;', '&nbsp;',
        //'<img src="images/mitarbeiterplus.gif" class="addMa" alt="Mitarbeiter hinzuf&uuml;gen" title="Mitarbeiter hinzuf&uuml;gen">'
        '&nbsp;'
      ], true);
    }
    $('#firmenDialog .weiterePersonenAnzahl .weiterePersonenAnzahlInt').text(maCount);
    // Falls mehr Mitarbeiter als freie Plätze? Mitarbeiteranzahl rot färben
    if (maCount > KuferTools.Kurs.Teil_frei) {
      $('#firmenDialog .weiterePersonenAnzahl .weiterePersonenAnzahlInt').css('color', '#FF0000');
    } else {
      $('#firmenDialog .weiterePersonenAnzahl .weiterePersonenAnzahlInt').css('color', '#000000');
    }
  } // redrawMaTable

  /**
   * Klick auf den Löschenbutton in einer Mitarbeiterzeile entfernt diesen aus der Anmeldung
   */
  $(document).on('click', '.removeMa', function () {
    if (matches = $(this).prop('class').match(/row_(\d)/)) {
      var index = matches[1];
      _mitarbeiter.splice(index, 1);
      redrawMaTable(KuferTools.Anmeldung.mitarbeiterDataTable);
    }
  });

  /**
   * Für die manuelle Angabe von Namen, Vornamen usw. des Firmenteilnehmers
   */
  $(document).on('click', '#mehrfachMaManuell', function () {
    $('#firmenDialog .weiterePersonHinzufuegen input').removeClass('form_error');
    var filter = KuferTools.Utils.Filter;
    var filterObj = filter.FilterSelector();
    filterObj.addSelector($('#maEmail'), filter.Email);

    var $mandatoryFields = $("input.form_mandatory:text");
    $mandatoryFields.each(function () {
      filterObj.addSelector($(this), filter.Mandatory);
    });

    var fieldsWithWrongInput = filterObj.filter();
    var wrongFieldsLength = fieldsWithWrongInput.length;

    if (wrongFieldsLength !== 0) {
      var message = '<div class = "anmeldeart_abstand">Folgende (Pflicht-)Felder wurden nicht korrekt angegeben:</div>';
      for (var i = 0; i < wrongFieldsLength; i++) {
        fieldsWithWrongInput[i].addClass('form_error');

        var id = fieldsWithWrongInput[i].prop('id');
        var label = $.trim($('label[for=' + id + ']').text());
        if (label !== '') {
          message += '<div>- ' + label.replace(':', '') + '</div>';
        } else {
          message += '<div>- rot markierte Pflichtfelder</div>';
        }
      }
      showMessage(message, 'Bitte prüfen Sie Ihre Eingaben');
      return;
    }
    var mitarbeiterObj = deepObjCopy(_mitarbeiterObjPrototype);
    mitarbeiterObj.name = $('#maName').val();
    mitarbeiterObj.vorname = $('#maVorname').val();
    mitarbeiterObj.geschlecht = $('#maGeschlecht').val();
    mitarbeiterObj.ort = $('#maOrt').val();
    mitarbeiterObj.strasse = $('#maStrasse').val();
    mitarbeiterObj.telefon = $('#maTelefon').val();
    mitarbeiterObj.email = $('#maEmail').val();
    _mitarbeiter.push(mitarbeiterObj);
    redrawMaTable(KuferTools.Anmeldung.mitarbeiterDataTable);
    resetFirmaEingabefelder();
  }); // $('#firmenMaAuswahlManuell').click

  $(document).on('click', '#firmenMaPauschalWeiblich, #firmenMaPauschalMaennlich, #firmenMaPauschalNeutral', function () {
    var name;
    var geschlecht = '';

    switch ($(this).prop('id')) {
      case 'firmenMaPauschalWeiblich':
        name = 'TN W';
        geschlecht = 'W'
        break;
      case 'firmenMaPauschalMaennlich':
        name = 'TN M';
        geschlecht = 'M';
        break;
      case 'firmenMaPauschalNeutral':
        name = 'TN N';
        break;
    }
    var mitarbeiterObj = deepObjCopy(_mitarbeiterObjPrototype);
    mitarbeiterObj.name = name;
    mitarbeiterObj.geschlecht = geschlecht;
    _mitarbeiter.push(mitarbeiterObj);
    redrawMaTable(KuferTools.Anmeldung.mitarbeiterDataTable);
  });

  /**
   * Fügt den Hauptteilnehmer (Firma) zusätzlich als Pauschalteilnehmer ein
   */
  $(document).on('click', '#firmenMaPauschalFirma', function () {
    var mitarbeiterObj = deepObjCopy(_mitarbeiterObjPrototype);
    mitarbeiterObj.tnr = KuferTools.Teilnehmer.Tnr;
    mitarbeiterObj.name = KuferTools.Teilnehmer.Name;
    mitarbeiterObj.vorname = KuferTools.Teilnehmer.Vorname;
    mitarbeiterObj.geschlecht = KuferTools.Teilnehmer.Geschlecht;
    mitarbeiterObj.ort = KuferTools.Teilnehmer.Ort;
    mitarbeiterObj.strasse = KuferTools.Teilnehmer.Strasse;
    mitarbeiterObj.telefon = KuferTools.Teilnehmer.Telefon;
    mitarbeiterObj.email = KuferTools.Teilnehmer.Email;

    _mitarbeiter.push(mitarbeiterObj);
    redrawMaTable(KuferTools.Anmeldung.mitarbeiterDataTable);
  });

  /**
   * Eventhandler für die Firmenmitarbeiter per Dialog.
   *
   * Das Dialogdiv wird nicht direkt zum Dialog gemacht, sondern aus den Dom gehängt, und
   * später per ShowMessage angezeigt.
   *
   * Abhängig davon, welcher Button gedrückt wurde, werden die Daten aus dem Teilnehmerstamm, oder
   * aus den Firmenmitarbeitern des Hauptteilnehmers geladen.
   */
  function initTnUebersichtDialog4Firmen() {
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog("close");
    };

    $(document).on('click', '#firmenMaAuswahlTnStamm, #firmenMaAuswahlFirma', function () {
      // Wenn firmenMaAuswahlFirma gedrückt wurde, werden nur die Firmenmitarbeiter des Hauptteilnehmers angezeigt. Sonst alle TN
      var addGetParam = ($(this).prop('id') == 'firmenMaAuswahlTnStamm') ? 'firmenAnm=1' : 'firmenAnmRestricted=1';

      KuferTools.Utils.AjaxLadebildschirm.Start();
      jQuery.get('index.php?tool_id=' + KuferTools.ToolId + '&action=tnUebersichtDialog&firmenAnm=1', function (data) {

        KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax($(data), 'Firmen-Mitarbeiter auswählen', buttons, 'auto', undefined,
          '.dataTable_tnUebersicht', KuferTools.TeilnehmerProSeite, '300px',
          'index.php?tool_id=' + KuferTools.ToolId + '&action=handleTnDataTable&dataTable=1&' + addGetParam);
        KuferTools.Utils.AjaxLadebildschirm.Stop();
      });
    });

    $(document).on('click', '.tn_auswahl_firmendialog .tnBuchen', function (event) {
      event.preventDefault();
      var tnr = $(this).find('.hiddenTnr').val();

      KuferTools.Utils.AjaxLadebildschirm.Start();
      jQuery.post('index.php?tool_id=' + KuferTools.ToolId + '&action=handleTnDataTable&getTn=' + tnr, {}, function (teilnehmerJson) {
        var teilnehmer = KuferTools.Utils.getObjectFromJson(teilnehmerJson);

        var mitarbeiterObj = deepObjCopy(_mitarbeiterObjPrototype);
        mitarbeiterObj.tnr = teilnehmer.tnr;
        mitarbeiterObj.name = teilnehmer.name;
        mitarbeiterObj.vorname = teilnehmer.vorname;
        mitarbeiterObj.geschlecht = teilnehmer.geschlecht;
        mitarbeiterObj.ort = teilnehmer.ort;
        mitarbeiterObj.strasse = teilnehmer.strasse;
        mitarbeiterObj.telefon = teilnehmer.telefon;
        mitarbeiterObj.email = teilnehmer.email;
        _mitarbeiter.push(mitarbeiterObj);

        KuferTools.Utils.AjaxLadebildschirm.Stop();
        redrawMaTable(KuferTools.Anmeldung.mitarbeiterDataTable);
        $('.tn_auswahl_firmendialog').dialog('close');
        $('#firmenMaAuswahlDispatch').dialog('close');
      });
    });
  } // initTnUebersichtDialog4Firmen
  function getObj4Server() {
    return _mitarbeiter;
  }

  return getObj4Server;
} // initFirmaDialog

/**
 * Liefert den Belegungsstatus.
 *
 * @returns {String}
 */
KuferTools.Anmeldung.getBelegungsStatus = function () {
  var belegungsStatus = 'A';
  if ($('#belegungsStatus').length > 0) {
    belegungsStatus = $('#belegungsStatus').val();
  }
  if (!KuferTools.Anmeldung.UeberbuchenErlaubt && KuferTools.Anmeldung.getAnzAnmPersonen() > KuferTools.Kurs.Teil_frei
    && (belegungsStatus == 'A' || belegungsStatus == 'P')) {
    belegungsStatus = 'W';
  }
  return belegungsStatus;
};

/**
 * Liefert die Anzahl der anzumeldenden Personen.
 *
 * @return {Number}
 */
KuferTools.Anmeldung.getAnzAnmPersonen = function () {
  var anzAnmPersonen = 1;
  switch (KuferTools.Anmeldung.AnmeldeForm) {
    case KuferTools.Anmeldung.AnmFormAry.Firma:
      anzAnmPersonen = KuferTools.Anmeldung.AnzahlWeitere;
      break;
    case KuferTools.Anmeldung.AnmFormAry.Mehrfach:
      anzAnmPersonen = KuferTools.Anmeldung.AnzahlWeitere + 1;
      break;
  }
  return anzAnmPersonen;
};

/**
 * Funktion zum Ändern der Anmeldeform.
 *
 * Setzt die entsprechenden Parameter, passt das HTML auf der Seite an
 * und berechnet die neue Kursgebühr.
 *
 * @param int pAnmForm für KuferTools.Anmeldung.AnmeldeForm. Zum Setzen kann KuferTools.Anmeldung.AnmFormAry.ANMART verwendet werden.
 * @param int pAnzWeitere Anzahl der weiteren Teilnehmer
 */
KuferTools.Anmeldung.setAnmForm = function (pAnmForm, pAnzWeitere) {
  // Bezeichnung im Button "Anmeldeform"
  var anmFormBezeichnung = '';
  switch (parseInt(pAnmForm)) {
    case KuferTools.Anmeldung.AnmFormAry.Normal:
      anmFormBezeichnung = 'normal';
      break; // Plurale
    case KuferTools.Anmeldung.AnmFormAry.Kind:
      anmFormBezeichnung = 'Eltern-Kind mit ' + pAnzWeitere + ' Kind';
      if (pAnzWeitere > 1) {
        anmFormBezeichnung += 'er';
      }
      break;
    case KuferTools.Anmeldung.AnmFormAry.Firma:
      anmFormBezeichnung = 'Firmen mit ' + pAnzWeitere + ' Mitarbeiter';
      break;
    case KuferTools.Anmeldung.AnmFormAry.Mehrfach:
      anmFormBezeichnung = 'Mehrfach mit ' + pAnzWeitere + ' weitere';
      if (pAnzWeitere > 1) {
        anmFormBezeichnung += ' Teilnehmer';
      } else {
        anmFormBezeichnung += 'n Teilnehmer';
      }
      break;
    default:
      throw 'invalide Anmeldeform.';
      return;
      break;
  }
  KuferTools.Anmeldung.AnmeldeForm = pAnmForm;
  KuferTools.Anmeldung.AnzahlWeitere = pAnzWeitere || 0; // Bei undefined: 0
  KuferTools.Anmeldung.updateAktGebuehr(true);

  $('.maAnmeld_anmArt_derzeit').text('(derzeit: ' + anmFormBezeichnung + ')');
  // Aktuallisiert die Kinder-Infozeile beim Teilnehmerdiv. Die Zeile soll nur bei einer Eltern-Kind-Anmeldung
  // angezeigt werden.
  if (parseInt(pAnmForm) !== KuferTools.Anmeldung.AnmFormAry.Kind) {
    $('.infozeile_kinder_label').html('');
    $('span.infozeile_kinder').html('');
  }
  $('.maAnmeld_anmArt_derzeit').prop('disabled', false);
}; // setAnmForm

/**
 * Updatet die aktuelle Gebühr.
 */
KuferTools.Anmeldung.updateAktGebuehr = function (pShowAjaxLoader, pNachlass) {
  // Ermittelt die Gebühr anhand der Anmeldeart.
  if (typeof (pNachlass) !== "undefined" && typeof (pNachlass['nachlassBetrag']) !== "undefined") {
    KuferTools.Anmeldung.NachlassFloat = -1 * KuferTools.Utils.Math.stringToFloat(pNachlass['nachlassBetrag']);
  }
  if (pShowAjaxLoader) {
    KuferTools.Utils.AjaxLadebildschirm.Start();
  }
  var href = 'index.php?tool_id=' + KuferTools.ToolId + '&action=getGebuehr&anmForm=' + KuferTools.Anmeldung.AnmeldeForm + '&weitereTN=' + KuferTools.Anmeldung.AnzahlWeitere + '&nachlass=' + KuferTools.Anmeldung.NachlassFloat;
  var gebuehrenDialogForm = jQuery.ajax({
    url: href,
    method: 'GET'
  }).fail(function () {
    if (!KuferTools.IsUnloading) {
      KuferTools.Utils.showAjaxErrorDialog(undefined, href);
    }
  });

  gebuehrenDialogForm.done(function (gebuehrAryJson) {
    KuferTools.Utils.AjaxLadebildschirm.Stop();

    var gebuehrAry = KuferTools.Utils.getObjectFromJson(gebuehrAryJson);
    KuferTools.Anmeldung.BasisGebuehr = gebuehrAry[0];
    KuferTools.Anmeldung.NachlassAufteilbar = gebuehrAry[1];
    var neueGebuehr = KuferTools.Anmeldung.BasisGebuehr;
    if (KuferTools.Anmeldung.NachlassFloat != 0.0) {
      var basisGebuehrFloat = KuferTools.Utils.Math.stringToFloat(KuferTools.Anmeldung.BasisGebuehr);
      var neueGebuehrFloat = basisGebuehrFloat + KuferTools.Anmeldung.NachlassFloat;
      neueGebuehr = KuferTools.Utils.Math.floatToString(neueGebuehrFloat);
    }
    KuferTools.Anmeldung.AktGebuehr = neueGebuehr;
    KuferTools.Anmeldung.updateInputFields();
  });
};

/**
 * Updatet Werte in Eingabefeldern.
 * Aktualisiert die Anzeige der aktuellen Gebühr und den ausgewählten Belegungsstatus.
 */
KuferTools.Anmeldung.updateInputFields = function () {
  if (!KuferTools.Anmeldung.UeberbuchenErlaubt) {
    if (KuferTools.Anmeldung.getAnzAnmPersonen() > KuferTools.Kurs.Teil_frei) {
      $('#maAnmeld_input_gebuehr').val('0,00');

      var belStatus = $('#belegungsStatus').val();
      if (belStatus == 'A' || belStatus == 'P') {
        $('#belegungsStatus').val('W');
      }

      $('#belegungsStatus').find('option[value="A"]').prop('disabled', true);
      $('#belegungsStatus').find('option[value="P"]').prop('disabled', true);
    } else {
      if ($('#belegungsStatus').val() === 'P' || $('#belegungsStatus').val() === 'I') {
        $('#maAnmeld_input_gebuehr').val('0,00');
      } else {
        $('#maAnmeld_input_gebuehr').val(KuferTools.Anmeldung.AktGebuehr);
      }
      $('#belegungsStatus').find('option[value="A"]').prop('disabled', false);
      $('#belegungsStatus').find('option[value="P"]').prop('disabled', false);
    }
  } else {
    if ($('#belegungsStatus').val() === 'W' || $('#belegungsStatus').val() === 'P' || $('#belegungsStatus').val() === 'I') {
      $('#maAnmeld_input_gebuehr').val('0,00');
    } else {
      $('#maAnmeld_input_gebuehr').val(KuferTools.Anmeldung.AktGebuehr);
    }
  }
};

/**
 * Gibt ein Hidden-Input-Feld zurück, mit welchen das übergebene Objekt JSON- und BASE64-encoded als
 * value enthält.
 *
 * @param pObj
 * @param pName
 * @return
 */
KuferTools.Anmeldung.getJsonHiddenInput = function (pObj, pName) {
  return '<input type="hidden" name="' + pName + '" value="' + KuferTools.Utils.getJsonFromObjectBase64(pObj) + '">';
};


function setAbwZahlweg(pInhaber, pBankBez, pBic, pIban, pTnr) {
  jQuery('input[name="abw_inhaber"]').val(pInhaber);
  jQuery('input[name="abw_bank"]').val(pBankBez);
  jQuery('input[name="abw_bic"]').val(pBic);
  jQuery('input[name="abw_iban"]').val(pIban);
  jQuery('input[name="abw_zahler"]').val(pTnr);
  jQuery(".tn_uebersicht_dialog").dialog("close");
}

function PrintPartOfPage(pPrintable) {
  var prtContent = document.getElementById(pPrintable);
  var winPrint = window.open('', 'Anmeldebestätigung', 'left=100,top=100,width=600,height=600');
  winPrint.document.write(prtContent.innerHTML);
  winPrint.document.close();
  //WinPrint.trigger('focus');
  winPrint.print();

  //Geöffnetes Fenster nach dem Ausdruck des Dokuments wieder schließen.
  winPrint.close();
}