﻿PaymentOptionsSchedule = function(type){
    PaymentOptionsSchedule.Instance = this;
    this.PaymentOptionsSchedule = document.createElement('div');
    this.PaymentOptionsSchedule.className = 'PaymentOptionsSchedule';
    this.PaymentOption = [];
    this.PaymentOptionType = type || "generic";
    this.OptionTitle = ["Level Payment","Graduated Payment (Option 1)","Graduated Payment (Option 2)"];
    this.TitleNumber = 0;
    this.LoanGroupNumber = 0;
};

PaymentOptionsSchedule.prototype.GetPaymentOptions = function(data){
    PaymentOptionsSchedule.Instance.Clear();
    return this.BuildPaymentOptions(data);
}

PaymentOptionsSchedule.prototype.BuildPaymentOptions = function(data){
    for(var i=0; i<data.length; i++){
        this.PaymentOption[i] = {}
        this.PaymentOption[i].Title = this.OptionTitle[this.TitleNumber];
        this.PaymentOption[i].Payments = [];
        
        for(var n in data[i]){
            if(n == "Payments"){
                for( var j=0; j<data[i]["Payments"].length; j++){
                    this.PaymentOption[i].Payments[j] ={};
                    for(var m in data[i]["Payments"][j]){
                        if(m != "__type"){
                        this.PaymentOption[i].Payments[j][m] =  data[i]["Payments"][j][m];
                        }
                    }
                }     
            }
            else{
                if(n != "__type")
                this.PaymentOption[i][n] = data[i][n];
            }
        }
        
        if(i%3 == 0){
            this.LoanGroupNumber++;
            var tblContainer = document.createElement('div');
            var tblContainerHeader = this.BuildPaymentOptionsHeader(i);
            tblContainer.appendChild(tblContainerHeader);
        }
        
        (this.TitleNumber == 2) ? this.TitleNumber = 0 : this.TitleNumber++;

        tblContainer.appendChild(ScheduleBuilder.BuildPaymentOptionsSchedule(this.PaymentOption[i]));
        this.PaymentOptionsSchedule.appendChild(tblContainer);
    }
    return this.PaymentOptionsSchedule;
}

PaymentOptionsSchedule.prototype.BuildPaymentOptionsHeader = function(currentPaymentOption){

    var principalBalance = njs.Converter.NumberToMoney(this.PaymentOption[currentPaymentOption].PrincipalBalance);
    var interestRate = (Math.round(this.PaymentOption[currentPaymentOption].InterestRate*10000000)/100000);
    var monthsToRepay = this.PaymentOption[currentPaymentOption].Term;
    
    var paymentOptionsHeader = document.createElement('div');
    paymentOptionsHeader.className = 'PaymentOptionsScheduleHeader';
     
    switch(this.PaymentOptionType){
        case "generic":
             paymentOptionsHeader.innerHTML = "<strong>Loan Group: "+ this.LoanGroupNumber +
                "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Principal balance: "+ principalBalance +
                "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Interest rate: "+ interestRate +
                "%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Months to repay: "+ monthsToRepay +"</strong>";
            break;
            
        case "EPLC":
            var loanAmountBorrowed = njs.Converter.MoneyToNumber($get('loanBalance').value);
             paymentOptionsHeader.innerHTML = "<strong>Amount Borrowed: "+ njs.Converter.NumberToMoney(loanAmountBorrowed) +
                "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Accrued Interest: "+ njs.Converter.NumberToMoney(njs.Converter.MoneyToNumber(principalBalance)- loanAmountBorrowed) +
                "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Amount at Repayment: "+ principalBalance +"</strong>";   
            break;
    }
    
    return paymentOptionsHeader;
}

PaymentOptionsSchedule.prototype.SetSelectable = function() {
    var paymentOptionsGroups = PaymentOptionsSchedule.Instance.
                                PaymentOptionsSchedule.getElementsByTagName('div');

    var selectEvent = function() {
        var siblingList = this.parentNode.getElementsByTagName('table');
        for (var i = 0; i < siblingList.length; i++) {
            siblingList[i].className = 'inActive';
        }
        this.className = 'active';
        PaymentOptionsSchedule.Instance.OnSelectFunction();
    }

    for (var i = 0; i < paymentOptionsGroups.length; i++) {
        var paymentOptionGroup = paymentOptionsGroups[i].getElementsByTagName('table');
        for (var j = 0; j < paymentOptionGroup.length; j++) {
            var paymentOption = new njs.ui.Element(paymentOptionGroup[j]);
            paymentOption.SetClass('selectable')
            paymentOption.AddEvent('click', selectEvent, false, paymentOption.Container);
        }
    }
}

PaymentOptionsSchedule.prototype.OnSelectFunction = function(){
    return;
}

PaymentOptionsSchedule.prototype.SetOnSelectFunction = function(onSelectFunction){
    this.OnSelectFunction = onSelectFunction;
}

PaymentOptionsSchedule.prototype.Clear = function(){
    this.PaymentOptionsSchedule.innerHTML = "";
    if(this.LoanGroupNumber != 0)
        this.LoanGroupNumber = 0; 
}