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

/**
 * Funktion zum Initialisieren des Nachlass Dialogs
 * 
 * Setzt die entsprechenden Parameter, passt das HTML auf der Seite an
 * und berechnet die neue Kursgebühr.
 * 
 * pNeueGebuehr und  pNachlassFloat werden umbesetzt (sollten also per Referenz übergeben sein)
 */

KuferTools.Nachlass.initNachlassDialog = function( pNachlass, okHandler, abbruchHandler )
{
  var _nachlass = {};
  var firstCall = true;
  
  if( typeof( pNachlass ) == 'object' ) {
    _nachlass = pNachlass;
  }
  
  $('#nachlassDialog').dialog( {
    modal: true,
    autoOpen: false,
    resizable: false,
    width: 550,
    title: 'Zu- bzw. Abschlag zur Anmeldung',
    //Event, der die auszuführende Funktion beim Öffnen des Dialogs definiert 
    open: function() { 
      setInputsByObj($(this));
      updateNachlassProzent();
      
      //Beim ersten Öffnen des Dialogs EventListeners bei den Textfeldern hinzufügen
      if ( firstCall ) {
        firstCall = false;
        $('#prozent').on('input' , function() {
          updateNachlassBetrag();
        });
        $('#betrag').on('input' , function() {
          updateNachlassProzent();
        });
      }
    },
    buttons: {
      'Ok': okHandler,
      'Abbrechen': abbruchHandler

    } //end buttons
  });
  
 
 /**********************************************************************************************************/
 // Diese beiden Handler gelten nur für den OK und Abbrechen Button im Tool6 Anmeldung Mitarbeiter
 // Sie müssen innerhalb von initNachlassDialog() definiert sein, da u.a. Funktionen verwendet werden die nur lokal
 // ineerhalb dieser Umgebung existieren (z.B. setInputsByObj())
 //OK-Handler für die Nachlass Bearbeitung bei der Anmeldung
  KuferTools.Anmeldung.okHandler = function($dialog) {
    $dialog.find('input').each( function(index, element){
      if( ! validateInput( $(element)) ) {
        $(this).addClass('form_error');
      }
    });

    if( $dialog.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($dialog);
      KuferTools.Anmeldung.updateAktGebuehr( true );
      $dialog.dialog('close');
    }
  } //end  KuferTools.Anmeldung.okHandler

   //Abbruch-Handler für die Nachlass Bearbeitung bei der Anmeldung
   KuferTools.Anmeldung.abbruchHandler = function($dialog) {
    setInputsByObj($dialog);
    setCalculatedInputs();
    $dialog.dialog('close');
  }

/*******************************************************************************************/

  //ist nur für den Nachlassdialog beim Anmelden relevant
  if( KuferTools.Anmeldung.ReadOnly ) {
    $( '#nachlassDialog' ).dialog( "option", "buttons", {'Abbrechen' : function() { $(this).dialog('close'); }}  );
  }
  
  function setInputsByObj($dialog)
  {
    $dialog.find('input:text').each( function() {
      $(this).val( _nachlass[ $(this).prop('name') ] );
      // $dialog.val( _nachlass[ $dialog.prop('name') ] );
    });
    
    var checked = false;
    $dialog.find('input:radio').each( function() {
       checked = checked || _nachlass[ $(this).prop('id') ] === 'W';
      $(this).prop( 'checked', _nachlass[ $(this).prop('id') ] === 'W' );
    });
    if ( checked === false ) { //Default
      $dialog.find('#nachlass').prop( 'checked', true );
    }
    
    if ( trim($dialog.find('#grund').val()) === '' ) {
      $dialog.find('#grund').val('Nachlass');
    }
  } //end setInputsByObj()
  
  function setObjByInputs($dialog)   {
  // $('#nachlassDialog input:text').each( function() {
    $dialog.find('input:text').each( function() {
      if ( $(this).prop('id') !== 'prozent' ) {
        _nachlass[ $(this).prop('name') ] = $(this).val();
        
     }
    });
    
    $dialog.find('input:radio').each( function() { 
      _nachlass[ $(this).prop('id') ] = ( $(this).is( ':checked' ) ) ? 'W' : '';
    });
    
   // _nachlass[ $dialog.find('input:checked').prop('name') ] = $('#nachlassDialog :checked').val();
    _nachlass[ $dialog.find('input:checked').prop('name') ] = $dialog.find(':checked').val();
  } // end setObjByInputs()
  
  function setCalculatedInputs()
  {
    // var aktGebuehrStr = pBasisGebuehr; // KuferTools.Anmeldung.BasisGebuehr;
    var aktGebuehrStr = KuferTools.Nachlass.getBasisGebuehr();
    var aktGebuehrFloat = KuferTools.Utils.Math.stringToFloat( aktGebuehrStr );
    var nachlassStr = "";
    var nachlassFloat = KuferTools.Utils.Math.stringToFloat( trim($('#nachlassDialog #betrag').val()) );
    if(isNaN(nachlassFloat)) {
      nachlassFloat = 0.0;
    }
    var neueGebuehrStr = "";
    
    //neue Gebühr berechnen
    if ( aktGebuehrFloat > 0 && !isNaN( aktGebuehrFloat ) && !isNaN( nachlassFloat ) ) {
      nachlassFloat = -1 * nachlassFloat;
      
      //In KuferTools.Utils.Math.floatToString(..) wird zwar auch gerundet, aber bei negativen Zahlen wird
      //z. B. bei -1.5 auf -1 gerundet, bei positiven Zahlen von z. B. 1.5 auf 2. Diese Verhalten wäre hier falsch.
      var faktor = 1;
      var vorzeichenStr = "";
      if ( nachlassFloat < 0 ) {
        faktor = -1;
        vorzeichenStr = "-";
      }
      //Die ggf. negative Zahl vor dem Runden in eine positive umwandeln.
      //Die positive Zahl runden und diese anschließend wieder mit dem korrekten Vorzeichen versehen.
      nachlassFloat = Math.round( faktor * nachlassFloat * 100 ) * faktor / 100;
      
      nachlassStr = vorzeichenStr + KuferTools.Utils.Math.floatToString( faktor * nachlassFloat );
      var neueGebuehrFloat = aktGebuehrFloat + nachlassFloat;
      neueGebuehrStr = KuferTools.Utils.Math.floatToString( neueGebuehrFloat );
      
      //KuferTools.Anmeldung.NachlassFloat = nachlassFloat;
      KuferTools.Nachlass.setNachlassFloat(nachlassFloat);
    }
    
    //Ausgabe der aktuellen Gebühr, des Änderungsbetrags und der neuen Gebühr
    $('#nachlassDialog .ausgabeAktGebuehr').text( aktGebuehrStr );
    $('#nachlassDialog .ausgabeRabatt').text( nachlassStr );
    $('#nachlassDialog .ausgabeNeueGebuehr').text( neueGebuehrStr );
    
    // KuferTools.Anmeldung.NeueGebuehr = neueGebuehrStr;
    KuferTools.Nachlass.setNachlassGebuehrNeu(neueGebuehrStr);
  } //end setCalculatedInputs
  
  
  
  $(document).on( 'change', '#nachlassDialog .nachlassRadio:checked', function() {
    if ( $(this).val() !== 'Nachlass' ) {
      $('#nachlassDialog .nachlassGrund').attr( 'style','display:none' );
    }
    else {
      $('#nachlassDialog .nachlassGrund').attr( 'style', 'display:block' );
    }
    setCalculatedInputs();
  });
  
  $('.maAnmeld_nachlass').click( function() {
    $('#nachlassDialog').dialog('open');
  });
  
  function updateNachlassBetrag()
  {
    var prozentStr = trim($('#nachlassDialog #prozent').val());
    var prozentFloat = KuferTools.Utils.Math.stringToFloat( prozentStr );
    if ( prozentStr === "" ) {
      $('#nachlassDialog #betrag').val( "" );
    }
    else if ( !isNaN( prozentFloat ) ) {
    //  var gebuehr = KuferTools.Utils.Math.stringToFloat( KuferTools.Anmeldung.BasisGebuehr );
      var gebuehr = KuferTools.Utils.Math.stringToFloat( KuferTools.Nachlass.getBasisGebuehr() );
      var faktor = 1;
      var vorzeichenStr = "";
      //In KuferTools.Utils.Math.floatToString(..) wird zwar auch gerundet, aber bei negativen Zahlen wird
      //z. B. bei -1.5 auf -1 gerundet, bei positiven Zahlen von z. B. 1.5 auf 2. Diese Verhalten wäre hier falsch.
      if ( prozentFloat < 0 ) {
        faktor = -1;
        vorzeichenStr = "-";
      }
      //Die ggf. negative Zahl vor dem Runden in eine positive umwandeln.
      //Die positive Zahl runden und diese anschließend wieder mit dem korrekten Vorzeichen versehen.
      var betrag = vorzeichenStr + KuferTools.Utils.Math.floatToString( faktor * prozentFloat * gebuehr / 100 );
      $('#nachlassDialog #betrag').val( betrag );
    }
    
    setCalculatedInputs();
  } //end updateNachlassBetrag()
  
  function updateNachlassProzent()
  {
    var betragStr = trim($('#nachlassDialog #betrag').val());
    var betragFloat =  KuferTools.Utils.Math.stringToFloat( betragStr );
    if ( betragStr === "" ) {
      $('#nachlassDialog #prozent').val( "" );
    }
    else if ( !isNaN( betragFloat )) {
      var gebuehr = KuferTools.Utils.Math.stringToFloat( KuferTools.Nachlass.getBasisGebuehr() );
     // var gebuehr = KuferTools.Utils.Math.stringToFloat( KuferTools.Anmeldung.BasisGebuehr );
      var prozent = 0;
      if ( gebuehr > 0 ) {
        prozent = ( betragFloat / gebuehr * 100 ).toFixed(2);
        prozent = prozent.toString().replace( '.', ',' );
      }
      $('#nachlassDialog #prozent').val( prozent );
    }
    
    setCalculatedInputs();
  } //end updateNachlassProzent()
  

  function getObj4Server()
  {
    return _nachlass;  
  }
  return getObj4Server;
  
} //end KuferTools.Belegung.initNachlassDialog(..)


//Nur für das Nachlass Handling im Teilnehmer Reiter von Tool8 Kurse MA relevant; wird in der _getContent Methode
//von Page TabKursteilnehmer aufgerufen; dient lediglich zum sinnvollen Vorbelegen der Variablen 
//für die initNachlassDialog() Methode
//Ready Handler für den Nachlass Dialog
KuferTools.Nachlass.loadJSHandling4NachlassinTool8 = function() {
  
  var nachlassObj = {
    // Radiobutton Werte werden hier im Nachlassdialog nicht benötigt
      // abschlag = '';
      // nachlass = 'W';
      //rabatt = '';
      nachlassArt: 'Nachlass',
      nachlassBetrag: '',   // z.B. '6,50';
      nachlassGrund: '', // z.B. 'Dozentenrabatt' (frei eingegebener Text oder "Rabatt", "Abschlag")
      // Nur beim Tool 8
      buchungsDatum: ''
  };
  
  var gebuehr = '0,00';
  if (KuferTools.ToolId == 8)
    KuferTools.Nachlass.BasisGebuehr = gebuehr; 
  else
     KuferTools.Anmeldung.BasisGebuehr = gebuehr; 
  KuferTools.Nachlass.setNachlassFloat(0);
  KuferTools.Nachlass.setNachlassGebuehrNeu(gebuehr);
 
  // $(this) ist hier bereits das passende Elemente div#nachlassdialog auf dem der OK und Abbruch-Button operieren
  function abbruchHandler4BelegUpdate() {
   $(this).dialog('close');
   
   //KuferTools.Anmeldung.abbruchHandler($dialog);
  }

 //OKHandler für die Nachlass Bearbeitung bei Updaten der Belegung in Tool8 Kurse MA
  function okHandler4BelegUpdate() {
    var $dialog = $(this);
    $dialog.find('input').each( function(index, element){
      if( ! validateInput( $(element)) ) {
        $dialog.addClass('form_error');
      }
    });
    
    var nachlass = $('.ausgabeRabatt').text();
    nachlass = KuferTools.Utils.Math.stringToFloat(nachlass);
    if(parseFloat(nachlass) === 0) {
      showMessage('Der Nachlass darf nicht 0,00 EUR betragen!');
    }
    else if( $dialog.find('input').hasClass('form_error') ) {
      showMessage( 'Bitte überprüfen Sie die markierten Felder, ob sie im korreten Format gefüllt sind.', 'Fehlerhafte Eingaben');
    } else {
      //Hier wird ein Formular <formular class="nachlass" ..> erzeugt und um den Dialog geschachtelt; das Formular wird 
      //anschließend via $form.submit abgeschickt . action: tool:8, toolsection:377, nr:z.B. 141-3208, &updatenachlass=1
      // &belid=123
     //Aktuelle Tab id zum Nachlass Button ermitteln
      var tabId = '#' + $('.maKursdetails_nachlass').parents('.content.tab').prop('id');
      var actionLink = KuferTools.SelfLink.replace(/&wb__already__decoded=done/g, '').replace(/#.*/, '') + '&xsrf=' + KuferTools.NachlassXsrf + tabId;
      //var actionLink = 'usertools.php?tool_id=' + KuferTools.ToolId + '&toolsection_id=' + KuferTools.ToolSectionId + 
      //                '&nr=' + KuferTools.KursDetails.Kurs.Knr  + searchkurs + '&' + dialogObj.getAjaxGetSave() + '=1' + '&dozhonid=' + dozhonid;

      var $parent = $dialog.parent(); //ist das Element <div class="content_details scroll">
      $dialog.detach();
      var $form = $('<form action="' + actionLink + '" method="post" class="nachlass"></form>');
      $dialog.append('<input type="hidden" name="belid" value="' + KuferTools.Nachlass.markedId + '">');
      $dialog.append('<input type="hidden" name="nachlassUpdate" value="1">');
      $form.append($dialog);

      //aus dem Dialog wird jetzt ein Formular
      $dialog = $form;  
      //wieder an der richtigen Stelle im DOM einhängen
      $parent.children(':first-child').after($dialog);
     // $parent.append($dialog);
      $(this).dialog("close");
      
      
      KuferTools.Utils.AjaxLadebildschirm.Start();
      
      $dialog.submit();
    }//end else
  } //end okHandler4BelegUpdate()
   
  // Die Init-Funktion für den Nachlass-Dialog gibt eine Funktion getObj4Server() zurück, mit der die 
  // aktuellen Daten ausgelesen werden können.
  
  var getNachlassObj4Json = KuferTools.Nachlass.initNachlassDialog( nachlassObj, okHandler4BelegUpdate, abbruchHandler4BelegUpdate);
 
 //    KuferTools.Anmeldung.NachlassAufteilbar = false;
 
}   //End KuferTools.Nachlass.loadJSHandling4NachlassinTool8()



 KuferTools.Nachlass.setNachlassGebuehrNeu = function($pGebuehr) {
   if (KuferTools.ToolId == 8) {
     KuferTools.Nachlass.NeueGebuehr = $pGebuehr;
   }
   else // if (KuferTools.ToolId == 6)
     KuferTools.Anmeldung.NeueGebuehr = $pGebuehr;  
 }

 KuferTools.Nachlass.setNachlassFloat = function($pFloatPar) {
   if (KuferTools.ToolId == 8) {
     KuferTools.Nachlass.NachlassFloat = $pFloatPar;
   }
   else // if (KuferTools.ToolId == 6)
     KuferTools.Anmeldung.NachlassFloat = $pFloatPar;  
 }

 // Liefert die BasisGebühr in Abhängigkeit vom Tool
 KuferTools.Nachlass.getBasisGebuehr = function() {
   var basisgebuehr = '0,00';
   if (KuferTools.ToolId == 8) {
     basisgebuehr = KuferTools.Nachlass.BasisGebuehr;
   }
   else // if (KuferTools.ToolId == 6)
     basisgebuehr = KuferTools.Anmeldung.BasisGebuehr;  
   return basisgebuehr;
 }

 /*
  * Methode zum Handeln des Dialogs für den Nachlass
  * wird nur im Teilnehmer Reiter von Tool8 Kurse MA verwendet
  * öffnet den NachlassDialog der schon beim Laden der Seite initialisiert wurde
  * sollte vorher die Gebührendaten neu besetzen 
  */
  KuferTools.Nachlass.handleNachlassDialog =  function(pMarkedId) {
   
  var $inputBelAry = $(":input","#tab_kteilnehmer .doNotSort");
  var $aktTrElem = '';
  var gebuehr = '0,00';
  var tnName = '';
  //Eltern tr Element mit der passenden BelegungsId suchen und von dort die Gebuehr holen (in 
  // Spalte td.belegungs_entgelt)
  $inputBelAry.each(function(key, elem) {
    // elem ist hier z.B. <input id='belegung_29115' class=...>
     var $elem = $(elem);
     var BelIdStr = $elem.prop('id'); //belegung_29115
     var belId = BelIdStr.split('_')[1]; //enthält z.B. 29115
     if (pMarkedId == belId) {
       $aktTrElem = $elem.parents('tr'); //liefert ein jQhery Object
       return false; // Schleife stoppen
     }
  });
  if ($aktTrElem !== '') {
    gebuehr = $aktTrElem.find(".belegung_entgelt span").text();
    tnName =  $aktTrElem.find(".belegung_tn_namevorname_hauptteilnehmer span").text();
  }
  
  // Gebuehr aus dem Eintrag unter Spalte belegung_entgelt des TeilnehmerReiters besetzen
   KuferTools.Nachlass.BasisGebuehr = gebuehr;
   KuferTools.Nachlass.markedId = pMarkedId;
    
   $('.nachlassFelder', '#nachlassDialog').css('margin-left','0px'); 
   //Titel nach der Initialisierung nochmals setzen (wg des jetzt erst ausgewählten Teilnehmers
   
    $('#nachlassDialog').dialog( "option", "title", "Nachlass für " + tnName + " im Kurs " + KuferTools.KursDetails.Kurs.Knr );
    $('#nachlassDialog').dialog('open');
    
  } //end handleNachlassDialog

