// namespace declaratie
Type.registerNamespace("Independer.Spaarrekening");

// Constructor implementatie
Independer.Spaarrekening.Calculator = function(state) {
  this._state = state;
  // Voeg de handler toe met een Delegate zodat This echt This is in de functie calculate
  $addHandler(window, "load", Function.createDelegate(this, this.calculate));    
  this.setElementEvent($get(this._state.controls.geldLangereTijdVastzetten), "click");  
  $addHandler($get(this._state.controls.periodeVastzetten), "change", Function.createDelegate(this, this.calculate));
  this.setElementEvent($get(this._state.controls.beperkteVoorwaarden), "click");
  this.setElementEvent($get(this._state.controls.maandelijksVerplichtSparen), "click");
  this.setElementEvent($get(this._state.controls.hoogteEersteInleg), "blur");
  $addHandler($get(this._state.controls.hoogteEersteInlegNee), "click", Function.createDelegate(this, this.calculate));  
  $addHandler($get(this._state.controls.hoogteEersteInlegJa), "click", Function.createDelegate(this, this.calculate));  
  this.setElementEvent($get(this._state.controls.betaalrekeningNaastSpaarrekeningOpenen), "click");  
}
// Class functie implementatie
Independer.Spaarrekening.Calculator.prototype = {  // type definition
  // function setCheckbox events
  setElementEvent : function(element, eventName){    
    var tagElements = element.getElementsByTagName('INPUT');
    for (var k = 0 ; k < tagElements.length; k++) {
      $addHandler(tagElements[k], eventName, Function.createDelegate(this, this.calculate));
    }
  },  
  // function calculate
  calculate : function(param) {        
    // Haal alle geselecteerde waardes op    
    var geldLangereTijdVastzetten = this.getRadioButtonListValue(this._state.parameters.geldLangereTijdVastzettenID);
    var periodeVastzetten = $get(this._state.controls.periodeVastzetten).options[$get(this._state.controls.periodeVastzetten).selectedIndex].value;;
    // Als deze niet geselecteerd is dan default waarde 
    // of als de radiobutton nee is geselecteerd dan ook de default waarde
    if(!periodeVastzetten || geldLangereTijdVastzetten !== "Ja")
      periodeVastzetten = this._state.parameters.defaultPeriodeWaarde;    
      
    var beperkteVoorwaarden = this.getRadioButtonListValue(this._state.parameters.beperkteVoorwaardenID);    
    // Als de radiobutton ja is geselecteerd dan ook de default waarde
    if(geldLangereTijdVastzetten !== "Nee")
      beperkteVoorwaarden = this._state.parameters.defaultKeuzeWaarde;
      
    var maandelijksVerplichtSparen = this.getRadioButtonListValue(this._state.parameters.maandelijksVerplichtSparenID);
    var hoogteEersteInleg = $get(this._state.parameters.txtHoogteEersteInlegTextBoxID).value;
    if(hoogteEersteInleg === "" || $get(this._state.controls.hoogteEersteInlegNee).checked)
      hoogteEersteInleg = this._state.parameters.defaultHoogteEersteInlegWaarde;
    var betaalrekeningNaastSpaarrekeningOpenen = this.getRadioButtonListValue(this._state.parameters.betaalrekeningNaastSpaarrekeningOpenenID);
    
    wensen = new this.wensen(geldLangereTijdVastzetten, periodeVastzetten, beperkteVoorwaarden, maandelijksVerplichtSparen, hoogteEersteInleg, betaalrekeningNaastSpaarrekeningOpenen);
     
    // Aanroep naar de webservice
    Independer.Finance.Spaarrekening.Webservices.SpaarrekeningenCalculator.GetSpaarrekening(wensen, Function.createDelegate(this, this.onSuccess), Function.createDelegate(this, this.onFailure));
  },
  // Functie wensen
  wensen : function(geldLangereTijdVastzetten, periodeVastzetten, beperkteVoorwaarden, maandelijksVerplichtSparen, hoogteEersteInleg, betaalrekeningNaastSpaarrekeningOpenen) {
    this.GeldLangereTijdVastzetten = geldLangereTijdVastzetten;
    this.PeriodeVastzetten = periodeVastzetten;
    this.BeperkteVoorwaarden = beperkteVoorwaarden;
    this.MaandelijksVerplichtSparen = maandelijksVerplichtSparen;
    this.HoogteEersteInleg = hoogteEersteInleg;
    this.BetaalrekeningNaastSpaarrekeningOpenen = betaalrekeningNaastSpaarrekeningOpenen;
  },
  // Functie om door de radiolist heen te lopen en de geselecteerde waarde retour te geven.
  // In dien nog niks geselecteerd geeft men de default waarde retour.
  getRadioButtonListValue : function(RadioButtonListName) {
    var RadioList = document.getElementsByName(RadioButtonListName);
    var Value;
    
    // Loop door alle radiolist en controleer of deze checked is
    for (var i=0; i < RadioList.length; i++) {
      if (RadioList[i].checked) {
        Value = RadioList[i].value;
        break;
      }
    }
    
    // Check of hij wel al geselecteerd is
    // zo niet geef dan de default waarde retour
    if(!Value)
      Value = this._state.parameters.defaultKeuzeWaarde;
        
    return Value;
  },
  // Functie die het succesvolle proces afhandeld
  onSuccess : function(succes){    
    $get(this._state.controls.rentePercentage).innerHTML = succes.MaximaleRente + "%";
    $get(this._state.controls.aantalRekeningenVoldoen).innerHTML = succes.AantalProductenVoldoen;
    $get(this._state.controls.totaalAantalRekeningen).innerHTML = succes.AantalProductenTotaal;
  },
  // Functie die afgaat bij een fout in het proces
  onFailure : function(msg) {     
    alert("Error getting wensen result: \n" + msg);    
  }
} 
        
// Class registreren bij ASP.NET AJAX 
Independer.Spaarrekening.Calculator.registerClass("Independer.Spaarrekening.Calculator", null, Sys.IDisposable);

// // ScriptManager informeren dat het script geladen is
if (typeof(Sys) !== "undefined") 
  Sys.Application.notifyScriptLoaded();