﻿///<reference name="MicrosoftAjax.js"/>

var ConsolidationPage = function(tableLocationId,paymentOptionsScheduleLocation){
    ConsolidationPage.Instance = this;
    this.LoanTableLocation = $get(tableLocationId);
    this.LoanTableBuilder = new LoanTableBuilder();
    this.LoanTableBuilder.SetCustomEventFunction(function(){ConsolidationPage.Instance.ShowRepaymentTerms();
                                                            ConsolidationPage.Instance.SetCalculationIsValid(false);});
    this.PaymentScheduleLocation = $get(paymentOptionsScheduleLocation);
    this.PaymentSchedule = new PaymentOptionsSchedule();
    this.LoanTableId;
    this.Step1Validator = new Validator('calcStep1Validation');
    this.SetPageWrapper("federalLoanConsolidationPage");
    this.FinalStep = $get("calc-calculator-step4");
    
    this.SetActiveNavigationLink();
}
ConsolidationPage.prototype = new CalculatorPage;
    
ConsolidationPage.prototype.AddLoan = function(newTableId){
    if(ConsolidationPage.Instance.Step1Validator.Validate(document.getElementsByTagName('input'))){
        this.LoanTableId = newTableId;
        this.LoanTableBuilder.BuildTable(   this.LoanTableLocation, 
                                            this.LoanTableId, 
                                            {'Balance':'loanBalance'}, 
                                            {'Interest Rate':'interestRate'},
                                            {'Include':'includeBox'}  );
        this.DisplayStep(2);
        this.SetCalculationIsValid(false);
    }
}

ConsolidationPage.prototype.AddLoanOnEnter = function(e, newTableId){
    var k = (window.ActiveXObject) ? event.keyCode : e.which;
    if(k == 13){
        ConsolidationPage.Instance.AddLoan(newTableId);
    }
}

ConsolidationPage.prototype.Continue = function(){
    ConsolidationPage.Instance.ShowRepaymentTerms();
    this.DisplayStep(3);
}

ConsolidationPage.prototype.Calculate = function() {
    if (!this.IsServiceAvailable) return;

    var calc = false;
    var tblCells = $get(this.LoanTableId).getElementsByTagName('td');
    for (var i = 0; i < tblCells.length; i++) {
        if (tblCells[i].firstChild.type == "checkbox") {
            if (tblCells[i].firstChild.checked) {
                calc = true;
            }
        }
    }
    if (calc) {
        this.IsServiceAvailable = false;
        this.DisplayProcessingInContainer(this.PaymentScheduleLocation);
        ConsolidationPage.Instance.DisplayStep(4);
        
        $get('calcStep2Validation').innerHTML = "";
        var LoanPackage = LoanPackageBuilder.
            CreateLoanPackageFromLoanTable(this.LoanTableId, ['Balance',
                                                                'InterestRate',
                                                                'Include']);

        var term = 0;
        var terms = document.getElementsByName("term");

        for (var i = 0; i < terms.length; i++) {
            if (terms[i].checked == true) {
                term = terms[i].value;
                break;
            }
        }

        njs.services.Calculators.ConsolidatePayment(LoanPackage.Loans,
                                                        term,
                                                        this.onComplete,
                                                        this.onError);
        $get('calcStep3Validation').innerHTML = "";
        this.SetCalculationIsValid(true);
    }
    else {
        $get('calcStep3Validation').innerHTML = "Step 2 must include at least one loan for consolidation";
    }
}

ConsolidationPage.prototype.onComplete = function(data) {
    ConsolidationPage.Instance.IsServiceAvailable = true; 
    ConsolidationPage.Instance.ClearContainer(
            ConsolidationPage.Instance.PaymentScheduleLocation);
    
    ConsolidationPage.Instance.PaymentScheduleLocation.appendChild(    
        ConsolidationPage.Instance.PaymentSchedule.GetPaymentOptions(data));
}  

ConsolidationPage.prototype.onError = function(){
    ConsolidationPage.Instance.ClearContainer(
            ConsolidationPage.Instance.PaymentScheduleLocation);
}

ConsolidationPage.prototype.ShowRepaymentTerms = function(){
    var repaymentTerms = ["months144","months180","months240","months300","months360"];
    var termRadios = document.getElementsByName("term");
    var loansToInclude = LoanPackageBuilder.
        CreateLoanPackageFromLoanTable( ConsolidationPage.Instance.LoanTableId, [   'Balance',
                                                                                    'InterestRate',
                                                                                    'Include'   ]);
    var totalLoanBalance = 0;
    
    for(var i=0; i<loansToInclude.Loans.length;i++){
        totalLoanBalance += loansToInclude.Loans[i].Balance;
    }
    
    for(var i=0; i<repaymentTerms.length; i++){
        document.getElementById(repaymentTerms[i]).style.display = "none";
    }
    
    for(var i=0; i<termRadios.length; i++){
        termRadios[i].checked = false;
        termRadios[0].checked = true;
    }
    
    if(totalLoanBalance >= 7500){
        document.getElementById(repaymentTerms[0]).style.display = "inline";
    }
    if(totalLoanBalance >= 10000){
        document.getElementById(repaymentTerms[1]).style.display = "inline";
    }
    if(totalLoanBalance >= 20000){
        document.getElementById(repaymentTerms[2]).style.display = "inline";
    }
    if(totalLoanBalance >= 40000){
        document.getElementById(repaymentTerms[3]).style.display = "inline";
    }
    if(totalLoanBalance >= 60000){
        document.getElementById(repaymentTerms[4]).style.display = "inline";
    }
    
}
