
registerNamespace('KuferTools.Anmeldung');

/**
 * 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 ) {
    $('span.infozeile_kinder').html('');
  }
  
}; // setAnmForm

/**
 * 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 ) + '">';
};

/**
 * 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();
  }
  jQuery.post('usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId4Self + '&getGebuehr=1&anmForm=' + KuferTools.Anmeldung.AnmeldeForm + '&weitereTN=' + KuferTools.Anmeldung.AnzahlWeitere + '&nachlass=' + KuferTools.Anmeldung.NachlassFloat,{},
  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');
      $('#belegungsStatus').val('W');
      $('#belegungsStatus').find('option[value="A"]').prop('disabled', true);
    } else {
      $('#maAnmeld_input_gebuehr').val( KuferTools.Anmeldung.AktGebuehr );
      $('#belegungsStatus').find('option[value="A"]').prop('disabled', false);
    }
  } else {
    if ($('#belegungsStatus').val() === 'W') {
      $('#maAnmeld_input_gebuehr').val('0,00');
    } else {
      $('#maAnmeld_input_gebuehr').val( KuferTools.Anmeldung.AktGebuehr );
    }
  }
};

/**
 * 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;
};

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

$(document).ready( function maanmeldReady() {
  
  /**
  * 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' );
      $('.maAnmeld_SettingBar_zahlart input[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));
  };
  var getNachlassObj4Json = KuferTools.Nachlass.initNachlassDialog( nachlassObj,okHandler4Anmeld, abbruchHandler4Anmeld );

  var getChildrenObj4Json = initKinderDialog( kinder );
  var getFirmaObj4Json = initFirmaDialog( mitarbeiter );
  var getMehrfachObj4Json = initMehrfachDialog( weitereTn );
  
  initAnmArtDialog();
  initKursUebersichtDialog();
  initTnUebersichtDialog();
  initEmailbestaetigungDialog();
  
  
  /**
   * Der Anmeldebutton. Offnet einen Dialog, wo noch einmal die getroffenen Einstellungen
   * angezeigt werden, und die Anmeldung abgesendet werden kann.
   */
  $('.maAnmeld_SettingBar_buttons #maAnmeld_anmelden').click( function() {
    var buttons = { 'Anmelden': function(){
        var anmSettingsObj = createChoosedOptionsObj();
        $('form').append( KuferTools.Anmeldung.getJsonHiddenInput( anmSettingsObj, 'anmSettings' ) );
        
        
        KuferTools.Utils.AjaxLadebildschirm.Start();
      
        $('form').submit();
        
      },
      '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;
    }
    
    var anmeldeText = "<table id='dialogTNToolsAnmelden'><tr><th colspan='2'>Hiermit melden Sie den Teilnehmer " + KuferTools.Teilnehmer.Name + " verbindlich an:</th></tr>";
    anmeldeText    += "<tr><th>Teilnehmer:</th><td>"      + KuferTools.Teilnehmer.Name + ' ' + KuferTools.Teilnehmer.Vorname + "</td></tr>";
    anmeldeText    += "<tr><th>Nr.:</th><td>"      + KuferTools.Kurs.Nr      + "</td></tr>";
    anmeldeText    += "<tr><th>Titel:</th><td>"      + KuferTools.Kurs.Titel      + "</td></tr>";
    anmeldeText    += "<tr><th>Anmeldeform:</th><td>"      + anmForm      + "</td></tr>";
    if( weitereTnBezeichnung !== '' ) {
      anmeldeText    += "<tr><th>" + weitereTnBezeichnung + ":</th><td>"   + KuferTools.Anmeldung.AnzahlWeitere + "</td></tr>";
    }
    
    
    var belegungsStatus = KuferTools.Anmeldung.getBelegungsStatus();
    
    var neueGebuehrText = "";
    var gebuehr = "";
    if ( belegungsStatus === 'W' ) {
      gebuehr = "0,00";
    } else {
      if ( KuferTools.Anmeldung.AktGebuehr !== KuferTools.Anmeldung.BasisGebuehr ) {
        neueGebuehrText = KuferTools.Anmeldung.AktGebuehr + ' &euro; anstatt ';
      }
      gebuehr = KuferTools.Anmeldung.BasisGebuehr;
    }
    
    anmeldeText += "<tr><th>Geb&uuml;hr:</th><td>" + neueGebuehrText + gebuehr + " &euro;";
    var abwKontoObj = getAbwZahlwegObj4Json();
    if( ( typeof( abwKontoObj.abw_konto ) !== 'undefined' && abwKontoObj.abw_konto !== '' ) ||
        ( typeof( abwKontoObj.abw_iban ) !== 'undefined' && abwKontoObj.abw_iban !== '' )  ) {
      anmeldeText    += " (abweichende Bankdaten)</td></tr>";
    }
    anmeldeText    += "</td></tr>"; 
    
    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    += "<tr><th>Zahlart:</th><td>" + zahlartText + "</td></tr>";
    }
    
    if ( $('#anmeldeArt').length > 0 ) {
      var anmeldeArt = $('#anmeldeArt').val();
      if ( trim( anmeldeArt ) !== '' ) {
        anmeldeText += "<tr><th>Anmeldeart:</th><td>" + anmeldeArt + "</td></tr>";
      }
    }
    
    anmeldeText += "<tr><th>Status:</th><td>" + belegungsStatus + "</td></tr>";
    
    var newsletter = $('#newsl_erlaubt').is(':checked');
    if( newsletter ) {
      anmeldeText    += "<tr><th>Newsletter:</th><td>Ja</td></tr>";
    }
    
    var eintritt = $('#maAnmeld_input_eintritt').val();
    if (typeof(eintritt) !== 'undefined' && trim(eintritt) !== '') {
      anmeldeText += "<tr><th>Eintritt:</th><td>" + eintritt + "</td></tr>";
    }
    
    var bemerkung = $('#maAnmeld_input_bemerkung').val();
    if( typeof(bemerkung) !== 'undefined' && trim(bemerkung) !== '' ) {
      anmeldeText    += "<tr><th>Bemerkung:</th><td>"   + bemerkung + "</td></tr>";
    }

    // 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';
    }
    // Überbucht
    if( KuferTools.Anmeldung.getAnzAnmPersonen() > KuferTools.Kurs.Teil_frei ) {
      if (belegungsStatus === 'W' || !KuferTools.Anmeldung.UeberbuchenErlaubt) {
        hinweise[hinweise.length] = 'Es werden alle Teilnehmer auf Warteliste gebucht';
      } else { //Status A
        hinweise[hinweise.length] = 'Es werden mehr Teilnehmer als freie Plätze angemeldet';
      }
    }
    // Mehr als Kinder_Max
    if( KuferTools.Anmeldung.AnmeldeForm === KuferTools.Anmeldung.AnmFormAry.Kind 
            && KuferTools.Anmeldung.AnzahlWeitere > KuferTools.Kurs.Kinder_frei ) {
      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++ ) {
      
      if( i == 0) {
        anmeldeText    += "<tr><th class=\"maAnmeld_hinweise\">Hinweise:</th><td>";
      } else {
        anmeldeText    += "<tr><th></th><td>";
      }
      
      anmeldeText    += hinweise[i] + "</td></tr>";
    }
    
    anmeldeText += '</table>';
    showMessage(anmeldeText, 'Teilnehmer Anmelden', buttons);
  }); 
  
  $(document).on( 'change', '.form_error', function() {
    $(this).removeClass('form_error');
  });
  
  /**
   * 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').click( function( event ) {
    // Im Readonly-Modus werden keine Daten abgesendet.
    if( KuferTools.Anmeldung.ReadOnly ) {
      return true;
    }
    
    var obj4Ajax = createChoosedOptionsObj();
    
    var linkZiel = jQuery(this).prop('href');
    
    
    KuferTools.Utils.AjaxLadebildschirm.Start();
    
    jQuery.post( 'usertools.php?tool_id=6&toolsection_id=' + KuferTools.ToolSectionId4Self + '&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') {
      $('#maAnmeld_input_gebuehr').val('0,00');
    } else {
      $('#maAnmeld_input_gebuehr').val( KuferTools.Anmeldung.AktGebuehr );
    }
  });
  
  /**
   * 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: $( '.maAnmeld_SettingBar_zahlart input:radio:checked' ).val(),
      anmeldeArt: $('#anmeldeArt').val(),
      belegungsStatus: belegungsStatus,
      eintritt: $('#maAnmeld_input_eintritt').val()
    };

    return {
      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
      }
    };
  };
  
  //update der aktuellen Gebühren
  if ( $('#maAnmeld_input_gebuehr').length > 0 ) {
    KuferTools.Anmeldung.updateAktGebuehr( false, nachlassObj );
  }
  
});


/**
 * 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: '' };
  
  var kinderDataTable = $('.tab_kinder').dataTable({
    //"oLanguage": {"sUrl": "../jquery/plugins/jquery.dataTables.de_DE.txt"},
    "sScrollY": "75px",
    "bFilter": false,
    "bInfo": false, //z.B. showing 1 to 10 from 57 entries
    "bScrollCollapse": true,
    "bPaginate": false,
    "bAutoWidth": false,
    "bSort": false
  });
  
  $('#kinderDialog').dialog({
    modal: true,
    autoOpen: false,
    resizable: false,
    width: 550,
    title: 'Anmelden von Kindern',
    open: function() {
      resetKinderEingabefelder();
      redrawChildrenTable();
      _kinder_vorm_oeffnen = deepObjCopy(_kinder);
    },
    buttons: {
      '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').dialog('close');
              KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Kind, _kinder.length);
              $(this).dialog('close');
              // Aktuallisiert die Kinderzeile bei der Teilnehmerinfo
              aktuallisiereKinderZeile();
              $('#kinderDialog').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();
          $('#anmArtDialog').dialog('close');
          KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Kind, _kinder.length);
          // Aktuallisiert die Kinderzeile bei der Teilnehmerinfo
          aktuallisiereKinderZeile();
          $(this).dialog('close');
        }
      },
      'Abbrechen': function() {
        _kinder = _kinder_vorm_oeffnen;
        $(this).dialog('close');
      }
    }


  });
  
  if( KuferTools.Anmeldung.ReadOnly ) {
    $( '#kinderDialog' ).dialog( "option", "buttons", {'Abbrechen' : function() { $(this).dialog('close'); }}  );
  }
  
  $('.anmArt_kind').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.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 ? '' :  '<img src="images/loeschen.gif" class="removeChild row_' + i + '" alt="Kind entfernen" title="Kind entfernen">')
        ], 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');
    
    if( kinderCount === 0 ) {
      $kinderInfoZeile.html('');
    } else if( kinderCount === 1 ) {
      $kinderInfoZeile.text('Kind: ' + _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;
      }
      $kinderInfoZeile.text('Kinder: ' + 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() {
    var matches = $(this).prop('class').match( /row_(\d)/ );
    if( matches ) {
      var index = matches[1];
      _kinder.splice( index, 1);
      redrawChildrenTable();
    }
  });
  
  /**
   * Eventhandler für den Button zum Hinzufügen eines Kindes anhand der gefüllten Input-Felder
   */
  $('#kinderDialog #kindHinzufuegen').click( function(){
    $('#kinderDialog .weiterePersonHinzufuegen input').removeClass('form_error');
    // Validierung der Eingaben
    var filter = KuferTools.Utils.Filter;
    var filterObj = filter.FilterSelector();
    filterObj.addSelector( $('#kindVorname'), filter.Mandatory ) .
              addSelector( $('#kindGeburtsdatum'), filter.Date );
    var fieldsWithWrongInput = filterObj.filter();
    var wrongFieldsLength = fieldsWithWrongInput.length;
    if( wrongFieldsLength != 0 ) {
        var message = '';
        
        for( var i = 0; i < wrongFieldsLength; i++ ) {
          fieldsWithWrongInput[ i ].addClass('form_error');
          if( fieldsWithWrongInput[ i ].prop('id') == 'kindVorname' ) {
            message += '<div>Bitte geben Sie den Vornamen des Kindes an.</div>';
          } else if( fieldsWithWrongInput[ i ].prop('id') == 'kindGeburtsdatum' ) {
            message += '<div>Bitte überprüfen Sie, ob das Geburtsdatum im korrekten Format angegeben wurde (TT.MM.JJJJ).</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();
    
    resetKinderEingabefelder();
  });
  
  function getObj4Server()
  {
    return _kinder;  
  }
  
  return getObj4Server;
} // initKinderDialog

/**
 * 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: '' };
  
  var mitarbeiterDataTable = $('.tab_firma').dataTable({
    //"oLanguage": {"sUrl": "../jquery/plugins/jquery.dataTables.de_DE.txt"},
    "sScrollY": "75px",
    "bFilter": false,
    "bInfo": false, //z.B. showing 1 to 10 from 57 entries
    "bScrollCollapse": true,
    "bPaginate": false,
    "bAutoWidth": false,
    "bSort": false
  });
  
  $('#firmenDialog').dialog( {
    modal: true,
    autoOpen: false,
    resizable: false,
    width: 670, // Diese Dialog minimal Breiter als die anderen, da es im IE 10 sonst sehr lustige Fehler gibt
    title: 'Anmelden von Mitarbeitern',
    open: function() { 
      redrawMaTable();
      _mitarbeiter_vorm_oeffnen = deepObjCopy( _mitarbeiter );
      $('#firmenDialog .weiterePersonHinzufuegen input').removeClass('form_error');
    },
    buttons: { 
      '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 {
          $('#anmArtDialog').dialog('close');
          KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Firma, _mitarbeiter.length);
          
          $(this).dialog('close');
        }
      },
               'Abbrechen' : function() {  _mitarbeiter = _mitarbeiter_vorm_oeffnen;
                                         $(this).dialog('close'); }
              }
  } );
  
  
  if( KuferTools.Anmeldung.ReadOnly ) {
    $( '#firmenDialog' ).dialog( "option", "buttons", {'Abbrechen' : function() { $(this).dialog('close'); }}  );
  }
  
  $('.anmArt_firma').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.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 ? '' : '<img src="images/loeschen.gif" class="removeMa row_' + i + '" alt="Mitarbeiter entfernen" title="Mitarbeiter entfernen">')
        ], 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() {
    var matches = $(this).prop('class').match( /row_(\d)/ );
    if( matches ) {
      var index = matches[1];
      _mitarbeiter.splice( index, 1);
      redrawMaTable();
    }
  });
  
  /**
   * Für die manuelle Angabe von Namen, Vornamen usw. des Firmenteilnehmers
   */
  $('#mehrfachMaManuell').click( function() {
    $('#firmenDialog .weiterePersonHinzufuegen input').removeClass('form_error');
    var filter = KuferTools.Utils.Filter;
    var filterObj = filter.FilterSelector();
    filterObj.addSelector($('#maName'), filter.Mandatory).
            addSelector($('#maEmail'), filter.Email);
    var fieldsWithWrongInput = filterObj.filter();
    var wrongFieldsLength = fieldsWithWrongInput.length;

    if (wrongFieldsLength != 0) {
      var message = '';
      for (var i = 0; i < wrongFieldsLength; i++) {
        fieldsWithWrongInput[ i ].addClass('form_error');
        if (fieldsWithWrongInput[ i ].prop('id') == 'maName') {
          message += '<div>Bitte geben Sie den Name des Firmen-Mitarbeiters an.</div>';
        } else if (fieldsWithWrongInput[ i ].prop('id') == 'maEmail') {
          message += '<div>Bitte überprüfen Sie, ob die E-Mail-Adresse korrekt angegeben wurde.</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();
    resetFirmaEingabefelder();
  }); // $('#firmenMaAuswahlManuell').click
  
  $('#firmenMaPauschalWeiblich, #firmenMaPauschalMaennlich, #firmenMaPauschalNeutral').click( 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();
  });
  
  /**
   * Fügt den Hauptteilnehmer (Firma) zusätzlich als Pauschalteilnehmer ein
   */
  $('#firmenMaPauschalFirma').click( 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();
  });
  
  /**
   * 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 $dialog = $('.tn_auswahl_firmendialog');
    $dialog.detach();
    var buttons = { '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.DataTables.showMessageWithDataTable4Ajax( $dialog.clone(), 'Mitarbeiter auswählen', buttons, 'auto', undefined,
                                                                 '.dataTable_tnUebersicht', KuferTools.TeilnehmerProSeite, '300px',
                                                                 'usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId4TnUebersicht + '&dataTable=1&' + addGetParam );
    });
    
    $(document).on('click', '.tn_auswahl_firmendialog .tnBuchen', function(event){
        event.preventDefault();
        var tnr = $(this).find('.hiddenTnr').val();
        
        KuferTools.Utils.AjaxLadebildschirm.Start();
        
        jQuery.post('usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId4TnUebersicht + '&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();
          $('.tn_auswahl_firmendialog').dialog('close');
          $('#firmenMaAuswahlDispatch').dialog('close');
        });
        
      });
  } // initTnUebersichtDialog4Firmen
  
  function getObj4Server()
  {
    return _mitarbeiter;  
  }
  
  return getObj4Server;
} // initFirmaDialog


/**
 * 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 $dialog = $('.kurs_uebersicht_dialog');
  $dialog.detach();
  var buttons = { 'Abbrechen' : function() { $(this).dialog("close"); } };
  $('.button_span.maAnmeld_KursDiv_KursAuswahl').click( function() {
    KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax( $dialog.clone(), 'Kursauswahl', buttons, 'auto', undefined,
                                                               '.dataTable_kursUebersicht', KuferTools.KurseProSeite, '300px', 
                                                               'usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId4KursUebersicht + '&dataTable=1' );
  });
} // initKursUebersichtDialog
        
/**
 * 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 buttons = {};
  
  $('.button_span.maAnmeld_TnDiv_TnAuswahl').click( function() {
    if( KuferTools.Anmeldung.TnAnlegenAllowed ) {
      buttons["Neuen Teilnehmer anlegen"] = getTeilnehmerAnlegenCallBackFunction();
    }
    buttons["Abbrechen"] = function() { $(this).dialog("close"); };
    KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax( $dialog.clone(), 'Teilnehmerauswahl', buttons, 'auto', undefined, 
                                                               '.dataTable_tnUebersicht', KuferTools.TeilnehmerProSeite, '300px', 
                                                               'usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId4TnUebersicht + '&dataTable=1' );
  });
  
  $('.abw_tn_auswahl').click( function() {
    if( KuferTools.Anmeldung.TnAnlegenAllowed ) {
      buttons["Neuen Teilnehmer anlegen"] = getTeilnehmerAnlegenCallBackFunction('&keepCurrentTnr=1');
    }
    buttons["Abbrechen"] = function() { $(this).dialog("close"); };
    KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax( $dialog.clone(), 'Teilnehmerauswahl', buttons, 'auto', undefined, 
                                                               '.dataTable_tnUebersicht', KuferTools.TeilnehmerProSeite, '300px', 
                                                               'usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId4TnUebersicht + '&dataTable=1&tnAuswahlForAbwZahlweg=1' );
  });
  
  /**
   * Gibt die Callback-Funktion für den "Neuen Teilnehmer anlegen"-Button im Teilnehmerauswahl-Dialog zurück.
   * @param string pAdditionalUrlParamForAction
   * 
   * @returns function
   */
   //function getTeilnehmerAnlegenCallBackFunction(pAdditionalUrlParamForAction = '') { 
  function getTeilnehmerAnlegenCallBackFunction() {
    //IE workaround: Korrektur vgl. Patch vom 18.08.2017 fuer VHS Lahr
    var pAdditionalUrlParamForAction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
    return function() {
      var buttons = {
        'Teilnehmer anlegen': getTeilnehmerDatenSendenCallBack(pAdditionalUrlParamForAction),
        '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();
        }
      };
      
      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.
   * @param string pAdditionalUrlParamForAction
   * 
   * @returns function
   */
 // function getTeilnehmerDatenSendenCallBack(pAdditionalUrlParamForAction = '') {
  function getTeilnehmerDatenSendenCallBack() {
    //IE workaround: Korrektur vgl. Patch vom 18.08.2017 fuer VHS Lahr
    var pAdditionalUrlParamForAction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
    return function() {
      var $form = $(this);
      if($form.is(':not(form)')) {
        $form = $form.find('form');
      }
    
      // Achtung: Kennzeichenhandling wird auch in persondetails.js durchgeführt (für Tool Teilnehmerinfo)
      //alle bearbeiteten (einzufügenden oder zu löschende) Kennzeichen als Hidden Inputs hinzufügen; ob sie eingefügt oder
      // gelöscht werden, wir in PHP ermittelt (in TeilnehmerAPI::saveTeilnehmer) 
      var kennzeichen = [];
      // Diese KuferTools Variable enthält jetzt die Liste aller Kennzeichen nach dem Einfügen bzw. Löschen
      //KuferTools.PersonDetails.Dialog.kennzeichenList.data
      if (typeof KuferTools.PersonDetails.Kennzeichen != 'undefined' ) {
        jQuery.each(KuferTools.PersonDetails.Kennzeichen, function(index, item) {
          //Array aus kennzeichen zusamenbauen; restl. Daten wie z.b. id, text des Kennzeichenobjekts sind nicht relevant); 
          //daher im Ggs. zu Dokumenten alle Kennzeichen in ein Inputfeld einfügen 
          kennzeichen.push(item.kennz);
        }); //end each
      } //end if typeof
      
      if (kennzeichen.length > 0) {
        // jetzt liegen Kennzeichen z.B. in der Form 11-110-112-145-147 vor
        $form.append('<input type="hidden" name="teilnehmer_kennzeichen" value="' + kennzeichen.join('-') + '">');
        //$form.append('<input type="hidden" name="teilnehmer_kennzeichen" value="' + escape(kennzStr) + '">');
      }               
      
     // var validSuccess = function(pAdditionalUrlParamForAction = '') {
      var validSuccess = function() {  
        //IE workaround: Korrektur vgl. Patch vom 18.08.2017 fuer VHS Lahr
        var pAdditionalUrlParamForAction = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
        $form.append('<input type="hidden" name="action" value="newTeilnehmer">');
        // Nicht einfach nur SelfLink, da bestimmte Get-Parameter sonst was durcheinander bringen können.
        $form.attr('action', 'usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId + '&xsrf=' + KuferTools.TabPageXsrf + pAdditionalUrlParamForAction);
        $form.submit();
      };
      
      var validError = function() {
        showMessage('Bitte geben Sie gültige Werte in die als Pflichtfelder gekennzeichneten Eingabefelder ein.', 'Validierung fehlgeschlagen');
      };
      
      validateNewTeilnehmerForm($form, validSuccess, validError, pAdditionalUrlParamForAction);
    }; //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.
   * @param String pAdditionalUrlParamForAction
   */
  //function validateNewTeilnehmerForm( $pForm, pSuccessFunc, pErrorFunc, pAdditionalUrlParamForAction = '' ) {
  function validateNewTeilnehmerForm( $pForm, pSuccessFunc, pErrorFunc) {
    // IE workaround: Korrektur vgl. Patch vom 18.08.2017 fuer VHS Lahr
    var pAdditionalUrlParamForAction = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
    
    // Zunächst Validation per JS
    var formValid = validateForm($pForm.find('input, select, textarea'));
    
    //Sonderfall für die Kennzeichen eines Teilnehmers, falls diese Pflichtfelder sind:
    if (KuferTools.PersonDetails.KennzeichenMandatory) {
      var kennzeichenOk = false;
      if ( $pForm.find('[name=teilnehmer_kennzeichen]').length > 0 && jQuery($pForm.find('[name=teilnehmer_kennzeichen]')[0]).val() != '') {
        kennzeichenOk = true;
        $('#teilnehmer_kennzeichen').css('border','1px solid #9CA6C4');
      }
      else {
        $('#teilnehmer_kennzeichen').css('border','1px solid red');
      }
      formValid = formValid && kennzeichenOk;
    }
    
    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(pAdditionalUrlParamForAction);
      };
      
      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();
      
      validateBankDatenPerAjax($bankDaten, successFunc, errorFunc);
    }
  } //end validateNewTeilnehmerForm
  
  
} // initTnUebersichtDialog

/**
 * 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;
  }
  
  $('#histKritDialog').dialog( {
    modal: true,
    autoOpen: false,
    resizable: false,
    width: 550,
    title: 'Details für die Anmeldung zum Kurs',
    open: function() { setInputsByObj(); },
    buttons: { 
               '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');  
                 }
               },
               'Abbrechen' : function() { $(this).dialog('close'); }
               }
  });
  
  if( KuferTools.Anmeldung.ReadOnly ) {
    $( '#histKritDialog' ).dialog( "option", "buttons", {'Abbrechen' : function() { $(this).dialog('close'); }}  );
  }
  
  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').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;
  }
  
  $('#abwZahlwegDialog').dialog( {
    modal: true,
    autoOpen: false,
    resizable: false,
    width: 300,
    title: 'Abweichender Zahlweg',
    open: function() { setInputsByObj(); },
    buttons: {
               '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( 'usertools.php?ajaxFunc=validate', { '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').dialog('close'); 
                      }

                      KuferTools.Utils.AjaxLadebildschirm.Stop();
                    });
                  }
                },
                'Abbrechen' : function() { $(this).dialog('close'); } ,
                // Bankdaten des TNs verwenden. Die Buttonbezeichnung muss Kurz sein, da die Buttons sonst zweizeilig werden.
                'Leeren' : function() {
                  $(this).find('input').val('');
                  setObjByInputs();
                  $(this).dialog('close'); 
                }
             }
  });
  
  if( KuferTools.Anmeldung.ReadOnly ) {
    $( '#abwZahlwegDialog' ).dialog( "option", "buttons", {'Abbrechen' : function() { $(this).dialog('close'); }}  );
  }
  
  $('.maAnmeld_abwZahlweg').click( function() {
    $('#abwZahlweg_betrag').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').text( 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').change();
  }
  
  function setObjByInputs()
  {
    $('#abwZahlwegDialog input').each( function() {
      _abwZahlweg[ $(this).prop('name') ] = $(this).val();
    });
  }
  
  function getObj4Server()
  {
    return _abwZahlweg;  
  }
  
  return getObj4Server;
  
} // initAbwZahlwegDialog



/**
 * Initialisiert den Dialog für die Mehrfachanmeldung
 */
function initMehrfachDialog( pWeitereTn )
{
  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: '' };
  
  var _teilnehmerDataTable = $('.tab_mehrfach').dataTable({
    //"oLanguage": {"sUrl": "../jquery/plugins/jquery.dataTables.de_DE.txt"},
    "sScrollY": "75px", //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
  });
    
  $('#mehrfachDialog').dialog( {
      modal: true,
      autoOpen: false,
      resizable: false,
      width: 630,
      title: 'Anmelden von weiteren Teilnehmern',
      open: function() {
        redrawTnTable();
        _teilnehmer_vorm_oeffnen = deepObjCopy(_teilnehmer);
        $('#mehrfachDialog .weiterePersonHinzufuegen input').removeClass('form_error');
      },
      buttons: {
        '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').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 {
            $('#anmArtDialog').dialog('close');
            KuferTools.Anmeldung.setAnmForm(KuferTools.Anmeldung.AnmFormAry.Mehrfach, _teilnehmer.length);
            $(this).dialog('close');
          }
        },
        'Abbrechen' : function() {  _teilnehmer = _teilnehmer_vorm_oeffnen;
                                    $(this).dialog('close'); }
                                 }
  });
  
  
  if( KuferTools.Anmeldung.ReadOnly ) {
    $( '#mehrfachDialog' ).dialog( "option", "buttons", {'Abbrechen' : function() { $(this).dialog('close'); }}  );
  }
  
  $('.anmArt_mehrfach').click( function() {
    $('#mehrfachDialog').dialog( 'open' );
  });
  
  
  
  /**
   * Dialog zum Hinzufügen weiterer Teilnehmer: Auswahl, ob die Teilnehmer aus TN-Stamm,
   * aoder als neue Teilnehmer angelegt werden.
   */
  $('#mehrfachDispatchDialog').dialog( {
    modal: true,
    autoOpen: false,
    resizable: false,
    width: 290,
    title: 'Weiteren Teilnehmer anmelden',
    buttons: { 
               'Abbrechen' : function() { $(this).dialog('close'); }
             }
  });
  
  /**
   * 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.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 ? '' :  '<img src="images/loeschen.gif" class="removeTn row_' + i + '" alt="Teilnehmer entfernen" title="Teilnehmer entfernen">')
        ], 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() {
    var matches = $(this).prop('class').match( /row_(\d)/ );
    if( matches ) {
      var index = matches[1];
      _teilnehmer.splice( index, 1);
      redrawTnTable();
    }
  });
  
  /**
   * 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
   */
  $('#mehrfachDialog #mehrfachTnManuell').click( function() {

    $('#mehrfachDialog .weiterePersonHinzufuegen input').removeClass('form_error');
    var filter = KuferTools.Utils.Filter;
    var filterObj = filter.FilterSelector();
    filterObj.addSelector($('#tnName'), filter.Mandatory).
            addSelector($('#tnName'), filter.NeutralerTN).
            addSelector($('#tnEmail'), filter.Email);
    var fieldsWithWrongInput = filterObj.filter();
    var wrongFieldsLength = fieldsWithWrongInput.length;
    if (wrongFieldsLength !== 0) {
      var message = '';
      for (var i = 0; i < wrongFieldsLength; i++) {
        fieldsWithWrongInput[ i ].addClass('form_error');
        if (fieldsWithWrongInput[ i ].prop('id') === 'tnName') {
          message += '<div>Bitte geben Sie den Namen des Teilnehmers an.</div>';
        } else if (fieldsWithWrongInput[ i ].prop('id') === 'tnEmail') {
          message += '<div>Bitte überprüfen Sie, ob die E-Mail-Adresse korrekt angegeben wurde.</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();
      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 = { 'Abbrechen' : function() { $(this).dialog("close"); } };
    $(document).on( 'click', '#mehrfachTnStamm', function() {
      
      KuferTools.Utils.DataTables.showMessageWithDataTable4Ajax( $dialog.clone(), 'Mitarbeiter auswählen', buttons, 'auto', undefined,
                                                                 '.dataTable_tnUebersicht', KuferTools.TeilnehmerProSeite, '300px',
                                                                 'usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId4TnUebersicht + '&dataTable=1&mehrfachAnm=1' );
    });
    
    initAnzahlWeitereTnDialog();
    $(document).on( 'click', '#mehrfachAnonym', function() {
      $('#anzahlWeitereTnDialog').dialog('open');
    });
    
    $(document).on('click', '.tn_auswahl_mehrfach .tnBuchen', function(event){
      event.preventDefault();
      var tnr = $(this).find('.hiddenTnr').val();
      
      
      KuferTools.Utils.AjaxLadebildschirm.Start();
      
      jQuery.post('usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId4TnUebersicht + '&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();
        $('.tn_auswahl_mehrfach').dialog('close');
        $('#mehrfachDispatchDialog').dialog('close');
      });
       
    });
  } // initTnUebersichtDialog4Mehrfach
  
  function getObj4Server()
  {
    return _teilnehmer;  
  }
  
  function initAnzahlWeitereTnDialog()
  {
    $('#anzahlWeitereTnDialog').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: {
        'Hinzufügen': function() {
          var anzahl = $('#anzahlWeitereTnDialog_anzahl').val();
          if(jQuery.isNumeric(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');
          }
        },
        'Abbrechen': function() {
          $( this ).dialog( 'close' );
        }
      }
    });
  }
  
  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();
  }
  
  return getObj4Server;
  
} // initMehrfachDialog

/**
 * Initiallisiert den Dialog zur Auswahl der Anmeldeart
 */
function initAnmArtDialog()
{ 
  if( $('.maAnmeld_SettingBar_buttons #maAnmeld_anmArt').hasClass('anm_readonly') ) {
    $('.maAnmeld_SettingBar_buttons #maAnmeld_anmArt').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 {
    
    $( '#anmArtDialog' ).dialog( {
      modal: true,
      autoOpen: false,
      resizable: false,
      width: 250,
      title: 'Anmeldeart Auswählen',
      open: function() {
        $( this ).data( 'htmlBeimOeffnen', $( this ).children().clone() );
      },
      buttons: {
        'Abbrechen': function() {
          $( this ).dialog( 'close' );
        }
      }
    });
    
    $('.maAnmeld_SettingBar_buttons #maAnmeld_anmArt').click( function() {
      $('#anmArtDialog').dialog('open');
    });
    
    $('#anmArtDialog .anmArt_normal').click( function(){
      KuferTools.Anmeldung.setAnmForm( KuferTools.Anmeldung.AnmFormAry.Normal );
      $('#anmArtDialog').dialog( 'close' );
    });
  }
} // initAnmArtDialog

// Die Bestätigungs-E-Mail nach erfolgreicher Anmeldung ausdrucken
function initEmailbestaetigungDialog()
{
  var $dialog = $('#bestaetigungsemailDialog');
  $dialog.click(function (){
    var buttons = { 
                  'ausdrucken': function() { 
                    PrintPartOfPage('printable');
                    $(this).dialog('close'); 
                  }, 
                  'Abbrechen' : function() { 
                  $(this).dialog('close'); } 
          };
    //KuferTools.Utils.loadAndDisplayPage()('usertools.php?tool_id=6&toolsection_id=145', 'action=bestaetigungsemailDialog', buttons, 'auto');
    var url = KuferTools.SelfLink.replace(/&wb__already__decoded=done/g, '').replace(/#.*/, '');
    url += '&action=bestaetigungsemailDialog';
    $.ajax({
      type: "POST",
      url: url,
      success: function(pData) {
        var emailBestaetigung = '<div id="printable">' + KuferTools.Utils.getObjectFromJson(pData) + '</div>';
        showMessage(emailBestaetigung, 'Anmeldebestätigung', buttons);
              },
      error: function() {}
      
    });
 
  });
    
  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.focus();
    winPrint.print();
    
    //Geöffnetes Fenster nach dem Ausdruck des Dokuments wieder schließen.
    winPrint.close();
  }
  
}

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");
}