//RESULTS VARIABLES
var moPay, loanAmt, purPrice, downPymt, closCosts, LoanAmount, debtRatio, x = "";

//GLOBAL VARIABLES
var i, ii, iii = 0;

//global tool values
var LTV = 0.97
var loanTerm = 30;
var loanTermInMonths = loanTerm * 12;
var closing = 0.025;
var expenseRatio = 0.35;  //we thought this was 35%...
var taxInsurance = 0.25;
var CashAvailableToMaxLTVRatio = 0.056701;

function getMaxHomePurchasePrice(maxLoanAmount, downPayment, LTV, closing) {

	maxLoanAmount = new Number(maxLoanAmount);
	downPayment = new Number(downPayment);
	closing = new Number(closing);
	return ((maxLoanAmount + downPayment) / (1 + closing));
}

function presentValue(monthlyInterestRate, loanTermInMonths, maxMonthly) {
    return ((maxMonthly * (Math.pow(monthlyInterestRate + 1.0, loanTermInMonths) - 1.0)) / (monthlyInterestRate * Math.pow(monthlyInterestRate + 1.0, loanTermInMonths)));
}

function getMaxLoanAmount(maxMonthly, monthlyInterestRate, loanTermInMonths, downPayment, LTV, closing) {
	return presentValue(monthlyInterestRate, loanTermInMonths, maxMonthly);
}


function payment(monthlyInterestRate, loanTermInMonths, maxLoanBasedOnDownpayment) {
	return (maxLoanBasedOnDownpayment / ((1.0 - 1.0 / Math.pow(monthlyInterestRate + 1.0, loanTermInMonths)) / monthlyInterestRate));
}

function getMaxMonthlyPayment(monthlyIncome, monthlyDebt, downPayment, monthlyInterestRate, loanTermInMonths, expenseRatio, taxInsurance, LTV, closing) {
	var disposable = (expenseRatio * monthlyIncome - monthlyDebt) * (1.0 - taxInsurance);
	var maxPayment = payment(monthlyInterestRate, loanTermInMonths, downPayment / CashAvailableToMaxLTVRatio);
	if(disposable < maxPayment) {
		return disposable;
	} else {
		return maxPayment;
	}
}

function calcAffordabilityEstimate(annualIncome, monthlyDebt, downPayment, interestRate, loanTermInMonths, closing, expenseRatio, taxInsurance, LTV) {

	moPay = getMaxMonthlyPayment(annualIncome / 12, monthlyDebt, downPayment, interestRate / 12, loanTermInMonths, expenseRatio, taxInsurance, LTV, closing);
	loanAmt = getMaxLoanAmount(moPay, interestRate / 100 / 12, loanTermInMonths, downPayment, LTV, closing);
	purPrice = getMaxHomePurchasePrice(loanAmt, downPayment, LTV, closing);
	closCost = loanAmt * closing;
	downPymt = downPayment - closCost;
}

function calculate(annualIncome,
					monthlyDebt,
					downPayment,
					interestRate) {



	/*var annualIncome = document.forms.affordability.elements.afford_income.value;
	var monthlyDebt = document.forms.affordability.elements.afford_debt.value;
	var downPayment = document.forms.affordability.elements.afford_closing.value;
	var interestRate = document.forms.affordability.elements.afford_interest.value;*/

	calcAffordabilityEstimate(annualIncome, monthlyDebt, downPayment, interestRate, loanTermInMonths, closing, expenseRatio, taxInsurance, LTV);
	
	
		function round(passNumber) {

		var passNumberString = passNumber.toString();

		//check for a decimal
		if ((passNumberString.indexOf('.') >= 0)&&(passNumberString.indexOf('.') != (passNumberString.length-1))) {
			//has a decimal, can be rounded up

			var roundNumber = new Number(passNumberString.charAt(passNumberString.indexOf('.')+1));

			if (roundNumber >= 5) {
				passNumber = Math.ceil(passNumber);
			} else {
				passNumber = Math.floor(passNumber);
			}

		}


		//in all instances, return number
		return passNumber;
	}

	moPay = commasDecimals(round(moPay).toString());
	loanAmt = commasDecimals(round(loanAmt).toString());
	purPrice = commasDecimals(round(purPrice).toString());
	downPymt = commasDecimals(round(downPymt).toString());
	closCost = commasDecimals(round(closCost).toString());
	
	/*document.getElementById("monthly").innerHTML = "$" + moPay;
	document.getElementById("amount").innerHTML = "$" + loanAmt;
	document.getElementById("price").innerHTML = "$" + purPrice;
	document.getElementById("downPayment").innerHTML = "$" + downPymt;
	document.getElementById("closingCosts").innerHTML = "$" + closCost;*/
	
	return moPay.toString()+'|'+loanAmt.toString()+'|'+purPrice.toString()+'|'+downPymt.toString()+'|'+closCost.toString();
	//alert('for testing:'+moPay.toString()+'|'+loanAmt.toString()+'|'+purPrice.toString()+'|'+downPymt.toString()+'|'+closCost.toString());
}