 /**
 *  Stellt Methoden und  Handler für das Weitermelden und Ummelden im Tool Kurse MA ( Kursdetails / Reiter Teilnehmer ) bereit. Funktionen 
 *  - Beim Klick auf Button weitermelden öffnet sich ein jQuery Anzeige Dialog, der die zum Weitermelden ausgewählten Teilnehmer anzeigt.
 *  
 *  
 *  - Beim Klick auf Button ummelden öffnet sich zunächst ein dialog zur Auswahl des Folgekurses; klickt man
 *    dann auf das Symbol zur Kursauswahl, so öffnet sich ein jQuery Anzeige Dialog, der die für da Ummelden ausgewählten 
 *    Teilnehmer anzeigt. 
 *    
 *  - Sind bereits Teilnehmer im Folgekurs vorhanden, so erscheint beim Um- u. Weitermelden (vor Ausgabe des Anzeigedialogs)
 *    eine eine Sequenz von Bestätigungsdialogen (pro im Folgekurs vorhandenem Teiln. 1 Dialog), um zu bestätigen, ob der Teilnehmer
 *    wirklich um- bzw. weitergemeldet werden soll.
 *    
 * - Beim Bestätigen des Dialogs wird ein Request mit den ausgewählten Teilnehmerobjekten an den Server geschickt und dort 
 *   entspr. verarbeitet (in handleUmmeldenTN() bzw. handleWeitermeldenTN()).
 *    
 */  
 
registerNamespace('KuferTools.Anmeldung');
registerNamespace('KuferTools.Nachlass');
registerNamespace('KuferTools.Nachlass.initNachlassDialog');
registerNamespace('KuferTools.BelegungBearbeiten');

 $(function() {
 
   //Dialog zur Kursauswahl für das Ummelden initialisieren (und zwar schon beim Laden der Seite)
   var $kursauswahlDialog = $('.kurs_uebersicht_dialog');
   initKursAuswahlDialog4Ummelden($kursauswahlDialog);
   initKursAuswahlDialog4Weitermelden($kursauswahlDialog);
   $kursauswahlDialog.detach();
   
  // Klickhandler zum Anzeigen des Ummeldedialogs nach dem Auswählen des Kurses (im Data-Tables Dialog)
  jQuery(document).on('click', '.ummeldeKurs, .weitermeldeKurs', function () {

    var $aktButton = jQuery(this);
    var selectedBelegIds = KuferTools.GetSelectedIds();  //Array-Objekt
    // id lautet z.B. 121-3205 d.h. id enthält die Kursnr
    var anmeldeKurs = $aktButton.prop('id');

    var ajaxData = {kurs: KuferTools.Knr,
      anmeldeKurs: anmeldeKurs,
      belegIds: selectedBelegIds};
    
    var $dialog = $('.kurs_uebersicht_dialog');
    $dialog.dialog('close');
    $dialog.detach();

    var actiontype = $(this).hasClass('ummeldeKurs') ? 'handleTnUmmeldung' : 'handleTnWeitermeldung';
    var ajaxLink = 'index.php?tool_id=' + KuferTools.ToolId + '&action=handleTnUmOrWeitermelden&actiontype=' + actiontype;
    var action = $(this).hasClass('ummeldeKurs') ? 'ummelden' : 'weitermelden';
    
    KuferTools.Utils.AjaxLadebildschirm.Start();
    jQuery.post(ajaxLink, ajaxData, function (msg) {
      KuferTools.Utils.AjaxLadebildschirm.Stop();
      var responseData = KuferTools.Utils.getObjectFromJson(msg);
      KuferTools.KursDetails.handleAjaxResponse4UmOrWeiterMelden(action, responseData, KuferTools.KursDetails.TabId, anmeldeKurs);
    });
  });

 
  /**
   * Handelt die AjaxResponse für das Ummelden bzw. Weitermelden
   * Gibt zunächst zu allen Teilnehmer, die bereits im Folgekurs angemeldet sind, einen Dialog mit der Frage aus,
   * ob dieser Teiln. umgemeldet bzw. weitergemeldet werden soll. startet dann via Methode showMeldeDialog(.) den Dialog 
   * zur Ausgabe der weiter - bzw. umzumeldenden Teilnehmer  
   * 
   * @param string pAction 'ummelden' oder 'weitermelden'
   * @param Array(TeilnehmerObjekt) pData
   * @param int $pTabId
   * @param string pUmmeldeKurs
   */
  KuferTools.KursDetails.handleAjaxResponse4UmOrWeiterMelden = function (pAction, pData, $pTabId, pZielKurs) {
    try {
      var tnIndex = 0; //wg Rekursionsaufrufs
      // Jetzt rekursiv das MeldeTnObjAry - Array der Teiln. die nach den User Interaktionen noch für die Weitermeldung übrig bleiben -
      // aufbauen; diese globale Variable könnte auch als Parameter übergeben werden
      KuferTools.KursDetails.meldeTnObjAry = [];
      var newKurs = pZielKurs;
      KuferTools.KursDetails.handleConfirmDialogFolge(pData.teilnehmer, tnIndex, pAction, $pTabId, newKurs, pData.xsrf, pData.kurseInfos, pData.stornoShowAustrittFeld);
    }
    catch (e) {
      showMessage(e.message, e.name + ' Exception');
    }
  };
 
  /**
   * Baut rekursiv das Array von Teiln. Objekten für die Um- bzw. Weitermeldung via User Interaktionen auf
   * Gibt für den User eine Folge von Bestätigungsdialogen aus, um die Teiln. für die UM-/Weitermeldung auszuwählen;
   * ein Dialog erscheint nur, wenn ein Teil bereits im Folgekurs enthalten ist; ansonsten wird der Teiln. ins Array
   * für die Weiter-/Ummeldung aufgenommen
   * 
   * @param Array(TeilnehmerObjekt) pTnAry 
   * @param int pIndex
   * @param string pAction 'ummelden' oder 'weitermelden'
   * @param int $pTabId
   * @param string pNewKurs Kurs zu dem hin um- oder weitergmeldet wird
   * @param string pXsrf
   * @param Array pKurseInfos
   * @param Boolean pStornoShowAustrittFeld
   */
  KuferTools.KursDetails.handleConfirmDialogFolge = function (pTnAry, pIndex, pAction, $pTabId, pNewKurs, pXsrf, pKurseInfos, pStornoShowAustrittFeld) {
    var teilnObj = pTnAry[pIndex];
    var hinweis = 'Teilnehmer ' + teilnObj.name + ', ' + teilnObj.vorname + ' ist bereits im Kurs ' +
            pNewKurs + ' enthalten. Trotzdem ' + pAction + '?';

    var buttons = {'Ja': function () {
        //Bei Erscheinen des Dialogs mit den Buttons ist das Teiln. Objekt bereits im Anmeldekurs
        KuferTools.KursDetails.meldeTnObjAry.push(teilnObj);
        $(this).dialog("close");
        //Rekursion: nächstes TN Objekt, nur falls da letzte Array Element noch nicht erreicht wurde
        if (pIndex < pTnAry.length - 1)
          KuferTools.KursDetails.handleConfirmDialogFolge(pTnAry, pIndex + 1, pAction, $pTabId, pNewKurs, pXsrf, pKurseInfos, pStornoShowAustrittFeld);
        else {
          if (KuferTools.KursDetails.meldeTnObjAry.length > 0)
            // Nach Bestätigen des Dialogs für den letzten Teiln. zum Dialog für UM- bzw. Weitermelden weiterleiten
            KuferTools.KursDetails.showMeldeDialog(pAction, $pTabId, pNewKurs, pXsrf, pKurseInfos, pStornoShowAustrittFeld);
          else
            showMessage('Es wurde kein ' + KuferTools.Spracheinstellungen.Teilnehmer.Singular.Nominativ + ' zum ' + KuferTools.Utils.ucFirst(pAction) + ' ausgewählt.', 'Achtung');
        }
      },
      'Nein': function () {
        //Bei Erscheinen des Dialogs mit den Buttons ist das Teiln. Objekt bereits im Folgekurs
        $(this).dialog("close");
        //Rekursion: nächstes TN Objekt, nur falls da letzte Array Element noch nicht erreicht wurde
        if (pIndex < pTnAry.length - 1)
          KuferTools.KursDetails.handleConfirmDialogFolge(pTnAry, pIndex + 1, pAction, $pTabId, pNewKurs, pXsrf, pKurseInfos, pStornoShowAustrittFeld);
        else {
          if (KuferTools.KursDetails.meldeTnObjAry.length > 0)
            // Nach Bestätigen des Dialogs für den letzten Teiln. zum Dialog für UM- bzw. Weitermelden weiterleiten
            KuferTools.KursDetails.showMeldeDialog(pAction, $pTabId, pNewKurs, pXsrf, pKurseInfos, pStornoShowAustrittFeld);
          else
            showMessage('Es wurde kein ' + KuferTools.Spracheinstellungen.Teilnehmer.Singular.Nominativ + ' zum ' + KuferTools.Utils.ucFirst(pAction) + ' ausgewählt.', 'Achtung');
        }

      }
    }; //end buttons          

    //Ausgabe des einzelnen Bestätigungsdialogs; der via Dialog Interaktionen mit dem User ermöglicht
    if (teilnObj.isInAnmeldeKurs) {
      //Weitere Verarbeitung und damit Rekursion erfolgt im Bestätigungsdialog, nach Klicken eines Buttons 
      showMessage(hinweis, KuferTools.Spracheinstellungen.Teilnehmer.Plural.Akkusativ + ' ' + pAction, buttons, 750);
    }
    else {
      //Teiln.  Objekt in jedem Fall mit ins array aufnehmmen
      KuferTools.KursDetails.meldeTnObjAry.push(teilnObj);
      //Rekursion: Gleich ohne Bestätigungsdialog zum nächsten Teilnehmer weitergehen
      if (pIndex < pTnAry.length - 1)  
        KuferTools.KursDetails.handleConfirmDialogFolge(pTnAry, pIndex + 1, pAction, $pTabId, pNewKurs, pXsrf, pKurseInfos, pStornoShowAustrittFeld);
      else {  //ende der Rekursion
        // Nach Aufnahme des letzten  Teiln. Objekts ins Array:  zum Dialog für UM- bzw. Weitermelden weiterleiten
        if (KuferTools.KursDetails.meldeTnObjAry.length > 0)
          KuferTools.KursDetails.showMeldeDialog(pAction, $pTabId, pNewKurs, pXsrf, pKurseInfos, pStornoShowAustrittFeld);
        else
          showMessage('Es wurde kein ' + KuferTools.Spracheinstellungen.Teilnehmer.Singular.Nominativ + ' zum ' + KuferTools.Utils.ucFirst(pAction) + ' ausgewählt.', 'Achtung');
      } //end else 
    }

  };
  
  /**
   * Gibt den Dialog für das Ummelden bzw. Weitermelden aus
   * Listet die Teilnehmer für das Weitermelden in einer Tabelle auf und sendet das Formular
   * beim Klick auf Button Weitermelden ab
   * @param string pAction 'ummelden' oder 'weitermelden'
   * @param int $pTabId
   * @param string pNewKurs Zielkurs für die Um- bzw. Weitermeldung
   * @param string pXsrf
   * @param Array pKurseInfos
   * @param Boolean pStornoShowAustrittFeld
   * @returns Boolean
   */
  KuferTools.KursDetails.showMeldeDialog = function (pAction, $pTabId, pNewKurs, pXsrf, pKurseInfos, pStornoShowAustrittFeld) {
    try {
      //Klick auf Button Weitermelden: Abschicken des formulars mit den Teilnehmerdaten
      var buttons = {};
      // Der Funktionsaufruf für Buttons liefert z.B. buttons['Weitermelden'] (Achtung: die anonyme Fkt. muß via () auch 
      // aufgerufen werden also z.B. function() {.... } ()
      buttons[function () {
        return KuferTools.Utils.ucFirst(pAction);
      }()] = function () {
        // var buttons = { 'Weitermelden': function() {
        //es reicht nicht,  die Teilnehmer Ids mitzuschicken, zumindest die Info inAnmeldeKurs ist nötig
        var isOk = true;
        jQuery('.austritt, .eintritt').each(function () {
          isOk = validateInput($(this)) && isOk;
        });
        if (!isOk) {
          showMessage('Bitte geben Sie die Daten im Format dd.mm.yyyy an.', 'Hinweis', undefined, 'auto');
          //Beim Umzug zu den responsiven Tools das hier verwenden:
          //KuferTools.showMessage({meldung: 'Bitte geben Sie das Datum im Format dd.mm.yyyy an.', title: 'Hinweis', width: 'auto'});
        } else {
          var teilnehmerObjAry = KuferTools.KursDetails.meldeTnObjAry;

          var xsrf = '&xsrf=' + pXsrf;
          
          var postObj = {knr: pNewKurs, teilnehmerObjAry: KuferTools.Utils.getJsonFromObjectBase64(teilnehmerObjAry)};
          var action = 'handleTnUmmeldung';
          if (pAction == 'weitermelden') {
            action = 'handleTnWeitermeldung';
          }
          var actionLink = 'index.php?tool_id=' + KuferTools.ToolId + '&action=' + action + '&knr=' + KuferTools.Knr + xsrf;
          
          KuferTools.Utils.AjaxLadebildschirm.Partial(jQuery('.reiter_content'));
          var activeReiterClass = KuferTools.getActiveReiterClass() + '_content';
          jQuery.post(actionLink, postObj, function (msg) {
            KuferTools.Utils.AjaxLadebildschirm.Stop();
            KuferTools.fadeInReiterContent(msg, activeReiterClass);
          });
          $('#stornodialog').parent('.ui-dialog-content').dialog('close');
          $(this).dialog("close");
        }
      };
      buttons['Abbrechen'] = function () {
        $(this).dialog('close');
      };

      //statt:
      /***
       var buttons = { Weitermelden: function() {
       .... 
       },
       'Abbrechen' : function(){ $(this).dialog('close'); }
       }; //end buttons   ***/

      // Aufbau der Tabelle mit den usgewählten Teilnehmerobjekt Einträgen für die Ausgabe
      var meldeTable = 'dialogTNWeitermelden';
      var meldeText = 'die Weitermeldung an den Folgekurs ';
      if (pAction === 'ummelden') {
        meldeTable = 'dialogTNUmmelden';
        meldeText = 'die Ummeldung nach Kurs ';
      }
      var inhalt = '<div class="meldeDialogText">Folgende ' + KuferTools.Spracheinstellungen.Teilnehmer.Plural.Akkusativ +
              ' sind für ' + meldeText + pNewKurs + ' ausgew&auml;hlt: </div>';
      
      inhalt += "<div class='table-responsive'>";
      inhalt += "<table class='table table-striped' id='" + meldeTable + "'>";
      //inhalt += "<tr><th colspan='5'></th></tr>\n";
      inhalt += "<tr><th>Nr.</th><th>Name</th><th>Vorname</th><th>bereits <br /> angemeldet</th>";
      if (pAction === 'weitermelden') {
        inhalt += "<th>Status</th>";
      }
      inhalt += "<th>Geb&uuml;hr</th>";
      // IOm weitermeldedialog zusätzlich Newletterinfos ausgeben
      if (pAction === 'weitermelden') {
        inhalt += "<th>Newsletter <br /> derzeit</th><th>Newsletter <br /> zulassen</th>";
      }
      
      if (pAction === 'ummelden' && (pKurseInfos.alterKursHatAboGebuehren || pStornoShowAustrittFeld)) {
        inhalt += "<th>Austritt<br />(alter Kurs)</th>";
      } 
      
      if (pKurseInfos.neuerKursHatAboGebuehren) {
        var zusatz = pAction === 'ummelden' ? '(neuer Kurs)' : '';
        inhalt += "<th>Eintritt<br />" + zusatz + "</th>";
      }
      
      inhalt += "</tr>\n";

      for (var tnIndex in KuferTools.KursDetails.meldeTnObjAry) {
        //nur anhängen, falls es eine eigene Eigenschaft ist z.B. 0,1,..; schließt irgendwelche ererbten
        //Prototypen Eigenschaften aus

        if (KuferTools.KursDetails.meldeTnObjAry.hasOwnProperty(tnIndex)) {
          var tnObj = KuferTools.KursDetails.meldeTnObjAry[tnIndex];
          //Newsletterinfos nur im Falle einer Weitermeldung ausgeben
          if (pAction === 'weitermelden') {
            var checked = '';
            // if (tnObj.newsLetter === 'erlaubt')
            if (tnObj.newsLetterAllow === 'J')
              checked = 'checked="checked"';
            var newsLetterCheckbox = '<input id="' + tnObj.id + '" type="checkbox" name="newsl_erlaubt" ' + checked + '>';
          } //end if (pAction ...)
          inhalt += "<tr><td>" + tnObj.id + "</td><td>" + tnObj.name + "</td><td>" + tnObj.vorname +
                  "</td><td>" + (tnObj.isInAnmeldeKurs ? 'ja' : 'nein');
          if (pAction === 'weitermelden') {
            inhalt += "</td><td>" + tnObj.status + "</td>";
          }
          inhalt += "</td><td>" + tnObj.gebuehr + "&nbsp;&euro;</td>";
          //Newsletterinfos nur im Falle einer Weitermeldung ausgeben
          if (pAction === 'weitermelden') {
            inhalt += "<td>" + (tnObj.newsLetter ? 'erlaubt' : 'storniert') + "</td><td>" + newsLetterCheckbox + "</td>";
          }
          if (pAction === 'ummelden' && (pKurseInfos.alterKursHatAboGebuehren || pStornoShowAustrittFeld)) {
            inhalt += '<td><input type="text" id="austritt_' + tnObj.id + '" class="val_date" name="austritt" maxlength="10" style="width: 80px;"></td>';
          }
          if (pKurseInfos.neuerKursHatAboGebuehren) {
            inhalt += '<td><input type="text" id="eintritt_' + tnObj.id + '" class="val_date" name="eintritt" maxlength="10" style="width: 80px;"></td>';
          }
          inhalt += "</tr>\n";
        }
      } //end for (var tnIndex...)
      inhalt += "</table>\n";
      inhalt += "</div>\n";

      //pAction ist weitermelden oder ummelden
      showMessage(inhalt, KuferTools.Spracheinstellungen.Teilnehmer.Plural.Akkusativ + ' ' + pAction, buttons, 750);

      //ist notwendig, damit die Seite nicht neu geladen wird und der Showmessage Dialog stehen bleibt
      return false;
    } //end try
    catch (e) {
      showMessage(e.message, e.name + ' Exception');
    }
  };
 
  //Changehandler zum Ändern der Newsletter-Einträge im Array der Teilnehmerobjekte, das als Response zurückgeschickt wird
  jQuery(document).on('change', '#dialogTNWeitermelden input[type=checkbox]', function() {
    
    try {  
      var $this = jQuery(this);
      var aktIndex = -1;
      var aktId = $this.prop('id'); // z.B. 897
      
      //Ermittelt den Index zum Teilnehmerobjekt der angehakten Checkbox für die Spalte "Newsletter zulassen" im Dialog
      $.each(KuferTools.KursDetails.meldeTnObjAry, function(index,tnObj) {
        //hier: tnObj ist ein TN Objekt der Form  { id: 877, vorname:'Hans', name: 'huber' , strasse: 'Erlstr.' , newsletter: 'ja',...};
        if (aktId === tnObj.id ) {
          aktIndex = index;
          //false bricht die Schleife ab
          return false;
        }
      }); //end $.each(selTeilnehmerIds...
      
      //Falls keine passender Index gefunden wurde => Exception
      if (aktIndex === -1) {
        //Abbruch mit Exception
        throw { name:'IndexError', message: 'ID der markierten Checkbox konnte nicht gefunden werden.' }; 
      }
      //Das aktuelle TeilnehmerObjekt umbesetzen; dieses wird ja im Formular an den Server gesendet und dort in Methode
      //_handleWeitermeldenTN() (in toolmitarbeiter) verarbeitet
      var aktTnObj = KuferTools.KursDetails.meldeTnObjAry[aktIndex];
      if( $this.is(':checked')) {    //statt:  if ($this.prop('checked'));
        aktTnObj.newsLetterAllow = 'J';
      }
      else {
        //Wenn's hier nicht erlaubt wird, ist ja im Fall von 'K' und '' schon richtig vorbesetzt  
        if ( aktTnObj.newsLetterAllow === 'J') {
          aktTnObj.newsLetterAllow = '';
        }
      }
    } //end try
    catch(e) {
      console.log(e.name + ' Exception: ' + e.message);
      var $dialogText = $('.meldeDialogText');
      var warnung = '<div class="faultmess">Achtung: Das Setzen des Hakens für "Newsletter zulassen" funktioniert nicht korrekt.</div>';
      //Warnausgabe vorne hinhängen
      $dialogText.before(warnung);
    }
  });
  
  //Changehandler zum Hinzufügen von Eintritt/Austritt im Array der Teilnehmerobjekte, das als Response zurückgeschickt wird
  jQuery(document).on('change', 'input[id^="eintritt_"], input[id^="austritt_"]', function () {
    try {
      var $this = jQuery(this);
      var aktIndex = -1;
      var aktId = $this.prop('id').split('_')[1]; // z.B. 897
      var name = $this.prop('name');

      //Ermittelt den Index zum Teilnehmerobjekt der angehakten Checkbox für die Spalte Eintritt und/oder Austritt im Dialog
      jQuery.each(KuferTools.KursDetails.meldeTnObjAry, function (index, tnObj) {
        //hier: tnObj ist ein TN Objekt der Form  { id: 877, vorname:'Hans', name: 'huber' , strasse: 'Erlstr.' , eintritt: '', ... };
        if (aktId === tnObj.id) {
          aktIndex = index;
          return false; //false bricht die Schleife ab
        }
      }); //end $.each(selTeilnehmerIds...

      //Falls keine passender Index gefunden wurde => Exception
      if (aktIndex === -1) {
        //Abbruch mit Exception
        throw {name: 'IndexError', message: 'ID der markierten Checkbox konnte nicht gefunden werden.'};
      }
      //Das aktuelle TeilnehmerObjekt umbesetzen; dieses wird ja im Formular an den Server gesendet.
      var aktTnObj = KuferTools.KursDetails.meldeTnObjAry[aktIndex];
      var value = $this.val();
      if (name === 'eintritt') {
        aktTnObj.eintritt = value;
      } else if (name === 'austritt') {
        aktTnObj.austritt = value;
      }
    } //end try
    catch (e) {
      console.log(e.name + ' Exception: ' + e.message);
      var $dialogText = $('.meldeDialogText');
      var warnung = '<div class="faultmess">Achtung: Das Setzen des Eintritts-/Austrittsdatums funktioniert nicht korrekt.</div>';
      //Warnausgabe vorne hinhängen
      $dialogText.before(warnung);
    }
  });
}); //end ready()

(function () {
  document.addEventListener('KursdetailsReiterLoaded', event => {
    const reiter = document.body.querySelector('.reiter_content');
    if (event.detail.reiterName === 'reiterTeilnehmer_content') {
      for (const btn of reiter.querySelectorAll('.belegungenBearbeiten, .belegungenExportTable')) {
        btn.addEventListener('click', event => {
          event.preventDefault()

          const selectedBelegIds = [];
          for (const markable of reiter.querySelectorAll('.markable:checked')) {
            selectedBelegIds.push(markable.value);
          }

          if (selectedBelegIds.length === 0) {
            for (const markable of reiter.querySelectorAll('.markable')) {
              if (markable.value && markable.value !== '') {
                selectedBelegIds.push(markable.value);
              }
            }
          }

          window.location.href = btn.closest('a').href +
            selectedBelegIds.map(function (str) {
              return '&belids[]=' + str;
            }).reduce(function (x, y) {
              return x + y;
            }, '');
        });
      }

      reiter.querySelector('.belegungBearbeiten')?.addEventListener('click', function () {
        const selectedBelegIds = [];
        for (const markable of reiter.querySelectorAll('.markable:checked')) {
          selectedBelegIds.push(markable.value);
        }

        if (selectedBelegIds.length < 1) {
          showMessage('Sie haben keine Teilnehmer ausgewählt.', 'Achtung');
          return false;
        } else if (selectedBelegIds.length > 1) { //Jetzt wurde mindestens ein Teilnehmer markiert
          showMessage('Bitte wählen Sie zum Bearbeiten der Belegungsdaten nur einen Teilnehmer aus.', 'Achtung');
          return false;
        }

        const selectedBelegId = selectedBelegIds[0];
        let buttons = {};
        buttons['Speichern'] = function () {
          const $dialog = $(this);
          $dialog.find('input, select, textarea').each(function (index, element) {
            if (!validateInput($(element))) {
              $(this).addClass('form_error');
            }
          });

          if ($dialog.find('input, select, textarea').hasClass('form_error')) {
            showMessage('Bitte überprüfen Sie die markierten Felder, ob sie im korreten Format gefüllt sind.', 'Fehlerhafte Eingaben');
          } else {
            let $form = $dialog;
            if (!$dialog.is('form')) {
              $form = $('form', $dialog);
            }

            const statusNeu = $form.find('#belegung_status').val();
            if (KuferTools.BelegungBearbeiten.Anmeldestatus !== statusNeu) {
              if (KuferTools.BelegungBearbeiten.Anmeldestatus !== 'A' && statusNeu === 'A' || statusNeu === 'P') { //Änderung von "nicht angemeldet" auf A oder P
                var anmeldedatumObj = KuferTools.Utils.Date.getDateObj(KuferTools.BelegungBearbeiten.Anmeldedatum);
                var datumHeuteObj = new Date();
                datumHeuteObj.setHours(0,0,0,0);

                if (anmeldedatumObj < datumHeuteObj) {
                  KuferTools.BelegungBearbeiten.showAnmeldedatumNeuSetzenDialog($form);
                  $dialog.dialog('close');
                } else {
                  KuferTools.BelegungBearbeiten.sendForm($form);
                  $dialog.dialog('close');
                }
              }
              else if (statusNeu === 'S') {
                KuferTools.BelegungBearbeiten.showStornoDialog($form, selectedBelegId);
                $dialog.dialog('close');
              }
              else {
                KuferTools.BelegungBearbeiten.sendForm($form);
                $dialog.dialog('close');
              }
            }
            else {
              KuferTools.BelegungBearbeiten.sendForm($form);
              $dialog.dialog('close');
            }
          }
        };
        buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
          $(this).dialog('close');
        };

        const actionLink = new URL('?tool_id=' + KuferTools.ToolId + '&action=belegungBearbeitenDialog&belid=' + selectedBelegId, window.location.href);
        KuferTools.Utils.loadAndDisplayPage4Ajax(
          actionLink.toString(),
          buttons, '800',
          undefined, function() {KuferTools.InitValidate($('#belegungBearbeiten'));}
        );
      });
    }
  });
})();

/**
 * Initialisiert den Dialog für die Kursauswahl zum Ummelden von Teilnehmern.
 * 
 * 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 initKursAuswahlDialog4Ummelden($kursAuswahlDialog)
{
  // Klick auf Ummelden öffnet einen Dialog zum Auswählen der Kurse, der via Datatables und AjaxRequest die 
  // Kursmenge einschränkt (vgl. maanmelden.js,  button_span.maAnmeld_KursDiv_KursAuswahl )
  jQuery(document).on('click', ".teilnehmerUmmelden, .teilnehmerWeitermelden", function () {

    var $pTab = $(this).parents('.reiter_content');
    var selectedBelegIds = [];
    $pTab.find('.markable:checked').each(function () {
      selectedBelegIds[selectedBelegIds.length] = $(this).val();
    });
    if (selectedBelegIds.length < 1) {
      showMessage('Es muss mindestens ein ' + KuferTools.Spracheinstellungen.Teilnehmer.Singular.Nominativ + ' markiert werden.', 'Achtung');
      return false;
    }
    var buttons = {};
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function () {
      $(this).dialog('close');
    };
    var action = $(this).hasClass('teilnehmerUmmelden') ? 'ummelden' : 'Weitermelden';
    KuferTools.Utils.AjaxLadebildschirm.Start();
    var toolIdAnmeldung = 6;
    if(KuferTools.ToolId == 51) {
      toolIdAnmeldung = 53;
    }
    
    jQuery.post('index.php?tool_id='+toolIdAnmeldung+'&action=kursauswahl', function (data) {
      KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax($(data), 'Kursauswahl', buttons, 'auto', undefined,
              '.dataTable_kursUebersicht', KuferTools.TeilnehmerProSeite, '400px',
              'index.php?tool_id='+toolIdAnmeldung+'&action=handleKursDataTable&kursaction=' + action + '&dataTable=1');
      KuferTools.Utils.AjaxLadebildschirm.Stop();
    });

  });

}

/**
 * Initialisiert den Dialog für die Kursauswahl zum Weitermelden von Teilnehmern.
 * 
 * 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 initKursAuswahlDialog4Weitermelden($kursAuswahlDialog)
{
  var $dialog = $kursAuswahlDialog;
  var buttons = {'Abbrechen': function () {
      $(this).dialog("close");
    }};

  // Klick auf Ummelden öffnet einen Dialog zum Auswählen der Kurse, der via Datatables und AjaxRequest die 
  // Kursmenge einschränkt (vgl. maanmelden.js,  button_span.maAnmeld_KursDiv_KursAuswahl )
  jQuery(document).on('click', ".teilnehmerWeitermelden_kursauswahl", function () {

    //Var. global setzen, da sie für den Klickhandler zum Auswählen des Kurses gebraucht wird 
    KuferTools.KursDetails.TabId = $(this).parents('.content.tab').prop('id'); 
    var $pTab = $(this).parents('.reiter_content');
    var selectedBelegIds = [];
    $pTab.find('.markable:checked').each(function () {
      selectedBelegIds[selectedBelegIds.length] = $(this).val();
    });
    if (selectedBelegIds.length < 1) {
      showMessage('Es muss mindestens ein ' + KuferTools.Spracheinstellungen.Teilnehmer.Singular.Nominativ + ' markiert werden.', 'Achtung');
      return false;
    }
    var selectedBelegIds = KuferTools.GetSelectedIds();  //Array-Objekt
    // TODO klären wie der Kurs zum Ummelden übernommen wird 

    var ajaxData = { kurs: KuferTools.KursDetails.Kurs.Knr, 
                     anmeldeKurs: KuferTools.KursDetails.Kurs.Folgekurs, 
                     belegIds: selectedBelegIds };

    var ajaxLink = 'index.php?tool_id=' + KuferTools.ToolId + '&action=handleTnUmOrWeitermelden&actiontype=handleTnWeitermeldung';
    
    KuferTools.Utils.AjaxLadebildschirm.Start();
    jQuery.post(ajaxLink, ajaxData, function (msg) {
      KuferTools.Utils.AjaxLadebildschirm.Stop();
      var responseData = KuferTools.Utils.getObjectFromJson(msg);
      KuferTools.KursDetails.handleAjaxResponse4UmOrWeiterMelden('weitermelden', responseData, KuferTools.KursDetails.TabId, ajaxData.anmeldeKurs);
    });
    // Falls der Folgekurs gesetzt ist, wird der Filter mit diesem vorbelegt.
    if (KuferTools.KursDetails.Kurs.Folgekurs !== '') {
      var knrAb = KuferTools.KnrAbStelle - 1; // KnrAbStelle startet mit 1, nicht 0
      $('#kurs_search_knr').val(KuferTools.KursDetails.Kurs.Folgekurs.substr(knrAb));
      $('.kurs_search_start.dataTableSearchButton').trigger('click');
    }
    // In dem angezeigten Dialog wird je Kurs in der 1ten Spalte ein Symbol zum Auswählen des Kurses für die Ummeldung ausgegeben; dieses 
    // hat die Klasse ummeldeKurs -> weiterer Dialog zum Ummelden via Klickhandler auf Klasse ummeldeKurs. 
  });
  
  KuferTools.BelegungBearbeiten.sendForm = function($pForm)
  {
    var data = $pForm.serialize();
    var action = $pForm.attr('action');

    KuferTools.Utils.AjaxLadebildschirm.Partial(jQuery('.reiter_content'));
    var activeReiterClass = KuferTools.getActiveReiterClass() + '_content';

    jQuery.post(action, data, function (msg) {
      KuferTools.Utils.AjaxLadebildschirm.Stop();
      KuferTools.fadeInReiterContent(msg, activeReiterClass);
    });
  };
  
  KuferTools.BelegungBearbeiten.showAnmeldedatumNeuSetzenDialog = function($pForm)
  {
    var buttons = {};
    buttons['Ja'] = function () {
      $pForm.append('<input type="hidden" name="anmeldedatumNeuSetzen" value="1" />');
      KuferTools.BelegungBearbeiten.sendForm($pForm);
      jQuery(this).dialog('close');
    };
    buttons['Nein'] = function () {
      KuferTools.BelegungBearbeiten.sendForm($pForm);
      jQuery(this).dialog('close');
    };
    buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function() {
      jQuery(this).dialog('close');
    };
    
    var data = 'Soll das Anmeldedatum neu gesetzt werden?';
    KuferTools.showMessage({meldung: data, title: 'Anmeldedatum neu setzen', buttons: buttons, width: 'auto'});
  };
  
  KuferTools.BelegungBearbeiten.showStornoDialog = function($pForm, pSelectedBelegId)
  {
    KuferTools.Utils.AjaxLadebildschirm.Start();
    jQuery.post('index.php?tool_id=' + KuferTools.ToolId + '&action=abmeldenDialog&knr=' + KuferTools.Knr + '&belIds=' + pSelectedBelegId, function (data) {
      var buttons = {};
      buttons['Stornieren'] = function() {
        var stornogrund = jQuery('#storno_grund_' + pSelectedBelegId).val();
        var austritt = jQuery('#austritt_' + pSelectedBelegId).val();
        
        $pForm.append('<input type="hidden" name="stornogrund" value="' + stornogrund + '" />');
        if (typeof austritt !== 'undefined') {
          $pForm.append('<input type="hidden" name="austritt" value="' + austritt + '" />');
        }
        KuferTools.BelegungBearbeiten.sendForm($pForm);
        jQuery(this).dialog('close');
      };
      buttons[KuferTools.Button.Bezeichnung.Abbrechen] = function() {
        jQuery(this).dialog('close');
      };
      
      KuferTools.showMessage({meldung: data, title: 'Storniere TeilnehmerInnen', buttons: buttons, width: 'auto'});
      KuferTools.Utils.AjaxLadebildschirm.Stop();
      KuferTools.InitValidate(jQuery('.validate_form'));
    });
  };
}
