// JavaScript Document
function piPayment(loanVal, term, rate) {
	return (loanVal * (rate/1200)/(1-(Math.pow( (1+(rate/1200)),-1*(term*12))))).toFixed(2);
}

function monthlyAmortization(loanVal, term, rate) {
	var payments = term*12;
	var monthlyInterest = rate/1200;
	var monthlyPayment = numericReal(piPayment(loanVal, term, rate));
	document.getElementById('_pmt').value = monthlyPayment;
	var monEx = numericReal(document.getElementById('_monthadd').value);
	var yrEx = numericReal(document.getElementById('_yearadd').value);
	var yearlyPmt = 0;
	var newText = '';
	newText += '<table width="100%" border="0" cellspacing="0" cellpadding="0" class="open_tab_top_border table_text"><tr class="header_bg_2"><td width="2%">&nbsp;</td><td width=5%"><div class="header_2">NO</div></td><td width="11%" align="right"><div class="header_2">INTEREST</div></td><td width="11%" align="right"><div class="header_2">PRINCIPAL</div></td><td width="11%"><div class="header_2" align="right">BALANCE</div></td><td width="20%">&nbsp;</td><td width="5%"><div class="header_2">NO</div></td><td width="11%" align="right"><div class="header_2">INTEREST</div></td><td width="11%" align="right"><div class="header_2">PRINCIPAL</div></td><td width="11%" align="right"><div class="header_2">BALANCE</div></td><td width="2%">&nbsp;</td></tr><tr><td colspan="11"><img src="/images/springwater.gif" width="1" height="2" /></td></tr><tr><td colspan="11" class="background_yellow"><img src="/images/springwater.gif" width="1" height="1" /></td></tr><tr><td colspan="11"><img src="/images/springwater.gif" height="2" width="1" /></td></tr>';
	var holder = Array();
	var i = -1;
	while (loanVal >= (monthlyPayment + monEx)) {
		i++;
		if (i%12 == 0) {
			yearlyPmt = yrEx;
		} else {
			yearlyPmt = 0;
		}
		holder[i] = new Array();
		holder[i]['interestPayment'] = (loanVal * monthlyInterest); 		
		holder[i]['principalPayment'] = monthlyPayment - holder[i]['interestPayment'] + monEx + yearlyPmt; 	
		loanVal -= holder[i]['principalPayment'];
		holder[i]['loanVal'] = loanVal;
	}

	if (loanVal > 0) {
		i++;
		holder[i] = Array();
		holder[i]['interestPayment'] = (loanVal * monthlyInterest); 		
		holder[i]['principalPayment'] = loanVal; 	
		loanVal -= holder[i]['principalPayment'];
		holder[i]['loanVal'] = loanVal;	
	}

	//build the html
	var count = holder.length;
	var secondCount = Math.ceil(count/2);
	var newSecond = 0;
	for (y=0; y < Math.ceil(count/2); y++) {
		newSecond = y+secondCount;
		if (holder[newSecond] == null) holder[newSecond] = new Array();
		newText += '<tr><td>&nbsp;</td><td>'+(y+1)+'</td><td align="right">'+formatNumeric2(holder[y]['interestPayment'])+'</td><td align="right">'+formatNumeric2(holder[y]['principalPayment'])+'</td><td align="right">'+formatNumeric2(holder[y]['loanVal'])+'</td><td>&nbsp;</td><td>'+(newSecond+1)+'</td><td align="right">'+formatNumeric2(holder[newSecond]['interestPayment'])+'</td><td align="right">'+formatNumeric2(holder[newSecond]['principalPayment'])+'</td><td align="right">'+formatNumeric2(holder[newSecond]['loanVal'])+'</td><td>&nbsp;</td></tr>';
	}	
	
	newText += '<tr><td colspan="11"><img src="/images/springwater.gif" height="10" width="1" /></td></tr><tr><td colspan="11" class="background_gray"><img src="/images/springwater.gif" width="1" height="1" /></td></tr><tr><td colspan="11"><img src="/images/springwater.gif" width="1" height="2" /></td></tr><tr><td colspan="11" class="proc_footer"><img src="/images/springwater.gif" width="1" height="26" /></td></tr></table>';

 document.getElementById('amort_table').innerHTML = newText;
}

function compute(form) {
	if( (document.getElementById('_loanval').value == '') ||
			(numericReal(document.getElementById('_loanval').value) == 0) ) {alert("Please enter a loan amount."); return;}
	if( (document.getElementById('_rate').value == '') ||
			(numericReal(document.getElementById('_rate').value) == 0) ) {alert("Please enter an interest rate."); return;}
	if( (document.getElementById('_term').value == '') ||
			(numericReal(document.getElementById('_term').value) == 0) ||
			(numericReal(document.getElementById('_term').value) > 40) ) {alert("Please enter term in years."); return;}
	
	var rate = numericReal(document.getElementById('_rate').value);
	var loanVal = numericReal(document.getElementById('_loanval').value);
	var term = numericReal(document.getElementById('_term').value);	
	
	monthlyAmortization(loanVal, term, rate);

}
function getTerm() {
	if( (document.getElementById('_loanval').value == '') ||
			(numericReal(document.getElementById('_loanval').value) == 0) ) {alert("Please enter a loan amount."); return;}
	if( (document.getElementById('_rate').value == '') ||
			(numericReal(document.getElementById('_rate').value) == 0) ) {alert("Please enter an interest rate."); return;}
	if( (document.getElementById('_pmt').value == '') ||
			(numericReal(document.getElementById('_pmt').value) == 0) ) {alert("Please enter a monthly payment."); return;}
	var rate = numericReal(document.getElementById('_rate').value);
	var loanVal = numericReal(document.getElementById('_loanval').value);
	var payment = numericReal(document.getElementById('_pmt').value);

	var count = 0;
	var prinPort = 0;
	var intPort = 0;
	var tempVal = 0;

	while (loanVal > payment) {
		intPort = loanVal * (rate/1200);
		prinPort = (payment - intPort);
		loanVal = (loanVal - prinPort);
		count++;

		if (count > 480) break;
	}

	var pmtPart = parseInt(loanVal/payment*100, 10);
	var term = (count + (pmtPart/100));
	document.getElementById('_term').value = formatNumeric(term/12);
}
function getPmt() {
	if( (document.getElementById('_loanval').value == '') ||
			(numericReal(document.getElementById('_loanval').value) == 0) ) {alert("Please enter a loan amount."); return;}
	if( (document.getElementById('_rate').value == '') ||
			(numericReal(document.getElementById('_rate').value) == 0) ) {alert("Please enter an interest rate."); return;}
	if( (document.getElementById('_term').value == '') ||
			(numericReal(document.getElementById('_term').value) == 0) ||
			(numericReal(document.getElementById('_term').value) > 40) ) {alert("Please enter term in years."); return;}
	
	var rate = numericReal(document.getElementById('_rate').value);
	var loanVal = numericReal(document.getElementById('_loanval').value);
	var term = numericReal(document.getElementById('_term').value);
		
	var pmt = piPayment(loanVal, term, rate);
	
	document.getElementById('_pmt').value = formatNumeric2(pmt);
}

function getRate() {
	if( (document.getElementById('_loanval').value == '') ||
			(numericReal(document.getElementById('_loanval').value) == 0) ) {alert("Please enter a loan amount."); return;}
	if( (document.getElementById('_pmt').value == '') ||
			(numericReal(document.getElementById('_pmt').value) == 0) ) {alert("Please enter the monthly payment."); return;}
	if( (document.getElementById('_term').value == '') ||
			(numericReal(document.getElementById('_term').value) == 0) ||
			(numericReal(document.getElementById('_term').value) > 40) ) {alert("Please enter term in years."); return;}
	
	var pmt = numericReal(document.getElementById('_pmt').value);
	var loanVal = numericReal(document.getElementById('_loanval').value);
	var term = numericReal(document.getElementById('_term').value);

	var min_rate = 0; 
	var max_rate = 100; // Set Maximum and minimum rate
	var mid_rate = 0;
	var J = 0;
	var guessed_pmt = 0;
	while (min_rate < (max_rate - 0.0001)) {
		mid_rate = (min_rate + max_rate) / 2; // Divide by 2 to find midpoint
		J = mid_rate / 1200; // Convert to monthly decimal percentage
		//calculate payment based on this interest, term and loan_amt
		guessed_pmt = loanVal * (J/(1-(Math.pow((1+J),-1*(term*12)))));
		if (guessed_pmt > pmt) { 
			max_rate = mid_rate; // current rate is new maximum 
		} else {
     min_rate = mid_rate; // current rate is new minimum
		}
	}
  
	document.getElementById('_rate').value = mid_rate.toFixed(3);	
	
}