function calcCleanup(obj)
{
	var toreturn = obj.value.replace(/[^0-9.]/,'');
	obj.value = toreturn;
	
}

// Currency Formatting
function addCurrency( strValue ) 
{
	strValue = addCommas(strValue);
    return '$' + strValue;
}

function addCommas( strValue ) 
{
	var st = "" + strValue;
	
	var objRegExp  = new RegExp('(-?[0-9]+)([0-9]{3})');
    while(objRegExp.test(st)) 
    {
       st = st.replace(objRegExp, '$1,$2');
    }
  	return st;
}
// End Currency Formatting

function calculate()
{
 	var arrInterest = new Array();
 	
 	/**** start validate values *****/
 	var loan = $('#txt_loan').val();
	loan = loan.replace(/,/gi,"");
	loan = loan.replace(/\$/gi,"");
	
 	if (isNaN(loan))
 	{
 		alert("Loan Amount ("+loan+") must be a number.");
 		return false;
 	}
 	else
 		loan = parseFloat(loan);
 		
 	var term = $('#sel_years').val();
 	if (isNaN(term))
 	{
 		alert("Term ("+term+") must be a number.");
 		return false;
 	}
 	else
 		term = parseFloat(term);
 		
 	var apr = $('#sel_apr').val();
 	if (isNaN(apr))
 	{
 		alert("APR ("+apr+") must be a number.");
 		return false;
 	}
 	else
 		apr = parseFloat(apr);
 		
 	var downpayment = $('#txt_downpayment').val();
 	downpayment = downpayment.replace(/,/gi,"");
	downpayment = downpayment.replace(/\$/gi,"");
 	if (isNaN(downpayment))
 	{
 		alert("Down Payment ("+downpayment+") must be a number.");
 		return false;
 	}
 	else
 		downpayment = parseFloat(downpayment);
 		
 	if (downpayment > loan)
 	{
 		alert("Down payment is higher then loan amount, please fix and resubmit.");
 		return false;
 	}
 	
 	var uppoints = $('#sel_upfront').val();
 	if (isNaN(uppoints))
 	{
 		alert("Discount Points ("+uppoints+") must be a number.");
 		return false;
 	}
 	else
 		uppoints = parseFloat(uppoints);
 		
 	var discpoints = $('#sel_discount').val();
 	if (isNaN(discpoints))
 	{
 		alert("Discount Rate ("+discpoints+") must be a number.");
 		return false;
 	}
 	else
 		discpoints = parseFloat(discpoints);
 	/***** end validate values ****/
 	
 	var calc = new MortgageCalculator(loan, apr, term, downpayment, uppoints, discpoints);
 	calc.calculate();
 	$('#est_payment').html(addCommas(calc.getPaymentMonthly()));
 	if (currentTab != 'graph')
 	{
 		$('#nav-'+currentTab).attr('display', 'none');
 		$('#results-'+currentTab).attr('display', 'none');
 		currentTab = 'graph';
 	}
 	$('#nav-graph').attr('display', 'block');	// By default, show the graph after calculating
 	$('#results-graph').attr('display', 'block');
 	tabSwitch('graph');
 	var resultsHTML = '<table valign="top" align="center" width="425px" cellpadding="0" cellspacing="0">'+
 	'<tr bgcolor="#FFFF99"><td colspan="4" align="center">Monthly Payment: <b>$'+addCommas(calc.getPaymentMonthly())+'</b></td></tr>'+
 	'<tr>'+
 		'<td width="30%">Total of all payments:</td>'+
 		'<td width="20%">$'+addCommas(calc.getPaymentTotal())+'</td>'+
 		'<td width="30%">Original APR:</td>'+
 		'<td width="20%">'+calc.getOriginalAPR()+'</td>'+
 	'</tr>'+
 	'<tr bgcolor = "#E8E8E8">'+
 		'<td>Total Interest:</td>'+
 		'<td>$'+addCommas(calc.getInterestTotal())+'</td>'+
 		'<td>Discount Rate:</td>'+
 		'<td>'+calc.discountPoints+'</td>'+
 	'</tr>'+
 	'<tr>'+
 		'<td>Loan Amount:</td>'+
 		'<td>$'+addCommas(calc.getLoanAmount())+'</td>'+
 		'<td>APR:</td>'+
 		'<td>'+calc.apr+'</td>'+
 	'</tr>'+
 	'<tr bgcolor = "#E8E8E8">'+
 		'<td>Original Loan:</td>'+
 		'<td>$'+addCommas(calc.getOriginalLoanAmount())+'</td>'+
 		'<td>Down Payment:</td>'+
 		'<td>$'+addCommas(calc.getDownPayment())+'</td>'+
 	'</tr>'+
 	'<tr><td colspan="4">&nbsp;</td></tr>'+
 	'<tr>'+
 		'<td>Discount Points:</td>'+
 		'<td>$'+calc.getUpfrontPoints()+'</td>'+
 		'<td>Discount Points Savings:</td>'+
 		'<td>'+addCommas(calc.getDiscountPointsSavings())+'</td>'+
 	'</tr>'+
 	'<tr bgcolor = "#E8E8E8">'+
 		'<td>Cost of Discount Points:</td>'+
 		'<td>$'+addCommas(calc.getUpfrontPointsCost())+'</td>'+
 		'<td></td>'+
 		'<td></td>'+
 	'</tr>'+
 	'</table>';
 	$('#results-analysis').html(resultsHTML);
 	var data = makeGraph(calc.getLoanAmount(), calc.getInterestMonthly(), calc.getPaymentMonthly(), calc.getTermMonths());
 	$('#results-details').html(makeAmortizationTable(calc.getLoanAmount(), calc.getApr(), calc.getPaymentMonthly(), calc.getTermMonths(), data));
 	
}

function makeGraph(loantotal,monthlyinterest,paymentamount,termMonths){
	var principal = loantotal;
	var current_month = 0;
	var count = 1;
	var balance = new Array();
	var year = new Array();
	var equity = new Array();
	var targ = new Array();
	var alts = new Array();
	var graphdata = new String();
	var principal_paid = 0;
	var interest_paid = 0;
	while (current_month <= termMonths)
	{
		interest_paid = principal * monthlyinterest;
	    principal_paid = paymentamount - interest_paid;
	    principal -= principal_paid;
	    if ((current_month % 12 == 0 || current_month == termMonths) && current_month != 0) {
	    	if (principal < 0) {
	    		principal = 0;
	    	}
	    	balance[count] = principal.toFixed(0);
	    	year[count] = count;
	    	equity[count] = (loantotal - principal).toFixed(0);
	    	count++; //was +=3  % was 36 for 3 year increments
	    }
	    current_month++;
	}
	var count = year.length;
	for (var i=1;i<count;i++)
	{
		graphdata += year[i]+';'+balance[i]+';'+equity[i]+'\n';
	}
	var version = deconcept.SWFObjectUtil.getPlayerVersion();
	if (version ['major'] >= 8) 
	{
    	$('#results-graph').attr('overflowY', 'hidden');
    }else{
    	$('#results-graph').attr('overflowY', 'auto');
    }
	var so = new SWFObject('flash/graph/amline.swf', "amline", "400", "210", "8", "#FFFFFF");
	so.addVariable("path", "flash/graph/");
	so.addVariable("settings_file", escape("flash/graph/graph-mainCalcPageSettings.xml"));
	so.addVariable("chart_data", graphdata);
	so.addVariable("preloader_color", "#000000");
	so.write("results-graph");
	
	return graphdata;
}

function makeAmortizationTable(loantotal,apr,paymentamount,termMonths,data)
{
	var year = new Array();
	var balance = new Array();
	var interest = new Array();
	var arrData = data.split('\n');
//	alert(arrData);
	var AmTable = '<table align="center" cellpadding="0" cellspacing="0" border="0" width="425"><tr bgcolor="#FFFF99"><th>Year</th><th>Interest</th><th>Principal</th><th>Balance</th></tr>';
	var d = new Date();
    var display_year = d.getFullYear();
    var tempArr = new String;
    	
	var j = arrData.length;
	var totalinterest = 0;
//	alert(j);
	for (var i = 0;i<j;i++)
	{
		
//		alert(arrData[i]);
		tempArr = arrData[i].split(';');
		balance = tempArr[1];
		equity = tempArr[2];
		interest = ((apr / 100) * balance).toFixed(0);
		totalinterest += parseFloat(interest);
//		interest = paymentamount - equity
		if(!balance)
	    {
	      	break;
	    }
		if (i % 2 == 0)
		{
	       	bg = " bgcolor = '#FFFFFF'";
	    }
	    else 
	    {
	      	bg = " bgcolor = '#E8E8E8'";
	    }
        
        AmTable += '<tr valign="top" align="center"'+ bg +'>';
        AmTable += '<td align="center"><strong>' + display_year + '</strong></td>';
        AmTable += '<td align="center">'+ addCurrency(interest) +'</td>';
        AmTable += '<td align="center">'+ addCurrency(equity) +'</td>';
        AmTable += '<td align="center">'+ addCurrency(balance) +'</td>';
        AmTable += '</tr>';
        display_year++;
	}
	AmTable += '</table>';
	//alert(AmTable);
	return AmTable;
}

var currentTab = 'graph';
function tabSwitch(newTab)
{
	if (currentTab != newTab)
	{
		var oldTab = currentTab;
		currentTab = temp;
		$('#nav-'+oldTab).attr('display', 'none');		// hide the old nav bar
		$('#results-'+oldTab).attr('display', 'none');	// hide the old results
		$('#nav-'+currentTab).attr('display', 'block');
		$('#results-'+currentTab).attr('display', 'block');
	}
	
	// get all of the image elements underneath the current navigation div
	//var imgs = $ES('img', 'nav-'+currentTab);
	var imgs = $('#nav-'+currentTab+' > img');
	for (var i=0; i < imgs.length; i++)
	{
		if (imgs[i].id != '')	// graph shows up as blank - giving it a click event when it is current tab breaks javascript.
		{
			imgs[i].style.cursor = 'pointer';
			imgs[i].onclick = function(event)
			{
				tabSwitch(this);
			}
		}
	}
}

$(document).ready(function() 
{
	// if the page is being passed an amount, perform calculations
	if ($('#txt_loan').val().length > 0)
		calculate();
		
	 $('#btn_calculate').click(function() {
	 	calculate();
	 });
	 
	 // on page load, default to showing graph if amount has been passed to page.
	 tabSwitch('graph');
});
