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

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

function calculate()
{
 	var arrInterest = new Array();
 	
 	/**** start validate values *****/
 	var loan = $('txt_loan').getValue();
	loan = loan.replace(/,/gi,"");
	loan = loan.replace(/\$/gi,"");
	
 	if (isNaN(loan))
 	{
 		alert("Loan Amount ("+loan+") must be a number.");
 		return false;
 	}
 	else
 		loan = loan.toFloat();
 		
 	var term = $('sel_years').getValue();
 	if (isNaN(term))
 	{
 		alert("Term ("+term+") must be a number.");
 		return false;
 	}
 	else
 		term = term.toFloat();
 		
 	var apr = $('sel_apr').getValue();
 	if (isNaN(apr))
 	{
 		alert("APR ("+apr+") must be a number.");
 		return false;
 	}
 	else
 		apr = apr.toFloat();
 		
 	var downpayment = $('txt_downpayment').getValue();
 	downpayment = downpayment.replace(/,/gi,"");
	downpayment = downpayment.replace(/\$/gi,"");
 	if (isNaN(downpayment))
 	{
 		alert("Down Payment ("+downpayment+") must be a number.");
 		return false;
 	}
 	else
 		downpayment = downpayment.toFloat();
 		
 	if (downpayment > loan)
 	{
 		alert("Down payment is higher then loan amount, please fix and resubmit.");
 		return false;
 	}
 	
 	var uppoints = $('sel_upfront').getValue();
 	if (isNaN(uppoints))
 	{
 		alert("Discount Points ("+uppoints+") must be a number.");
 		return false;
 	}
 	else
 		uppoints = uppoints.toFloat();
 		
 	var discpoints = $('sel_discount').getValue();
 	if (isNaN(discpoints))
 	{
 		alert("Discount Rate ("+discpoints+") must be a number.");
 		return false;
 	}
 	else
 		discpoints = discpoints.toFloat();
 	/***** end validate values ****/
 	
 	var calc = new MortgageCalculator(loan,apr,term,downpayment,uppoints,discpoints);
 	calc.calculate();
 	$('est_payment').innerHTML=addCommas(calc.paymentMonthly);
 	if (currentTab != 'graph')
 	{
 		$('nav-'+currentTab).style.display = 'none';
 		$('results-'+currentTab).style.display = 'none';
 		currentTab = 'graph';
 	}
 	$('nav-graph').style.display = 'block';		// By default, show the graph after calculating
 	$('results-graph').style.display = 'block';
 	tabSwitch($('img-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.paymentMonthly)+'</b></td></tr>'+
 	'<tr>'+
 		'<td width="30%">Total of all payments:</td>'+
 		'<td width="20%">$'+addCommas(calc.paymentTotal)+'</td>'+
 		'<td width="30%">Original APR:</td>'+
 		'<td width="20%">'+calc.originalAPR+'</td>'+
 	'</tr>'+
 	'<tr bgcolor = "#E8E8E8">'+
 		'<td>Total Interest:</td>'+
 		'<td>$'+addCommas(calc.interestTotal)+'</td>'+
 		'<td>Discount Rate:</td>'+
 		'<td>'+calc.discountPoints+'</td>'+
 	'</tr>'+
 	'<tr>'+
 		'<td>Loan Amount:</td>'+
 		'<td>$'+addCommas(calc.loanAmount)+'</td>'+
 		'<td>APR:</td>'+
 		'<td>'+calc.apr+'</td>'+
 	'</tr>'+
 	'<tr bgcolor = "#E8E8E8">'+
 		'<td>Original Loan:</td>'+
 		'<td>$'+addCommas(calc.originalLoanAmount)+'</td>'+
 		'<td>Down Payment:</td>'+
 		'<td>$'+addCommas(calc.downPayment)+'</td>'+
 	'</tr>'+
 	'<tr><td colspan="4">&nbsp;</td></tr>'+
 	'<tr>'+
 		'<td>Discount Points:</td>'+
 		'<td>$'+calc.upfrontPoints+'</td>'+
 		'<td>Discount Points Savings:</td>'+
 		'<td>'+addCommas(calc.discountPointsSavings)+'</td>'+
 	'</tr>'+
 	'<tr bgcolor = "#E8E8E8">'+
 		'<td>Cost of Discount Points:</td>'+
 		'<td>$'+addCommas(calc.upfrontPointsCost)+'</td>'+
 		'<td></td>'+
 		'<td></td>'+
 	'</tr>'+
 	'</table>';
 	$('results-analysis').innerHTML = resultsHTML;
 	var data = makeGraph(calc.loanAmount,calc.interestMonthly,calc.paymentMonthly,calc.termMonths);
 	$('results-details').innerHTML = makeAmortizationTable(calc.loanAmount,calc.apr,calc.paymentMonthly,calc.termMonths,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.round(2).toFixed(0);
	    	year[count] = count;
	    	equity[count] = (loantotal - principal).round(2).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').style.overflowY='hidden';
    }else{
    	$('results-graph').style.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).round(2).toFixed(0);
		totalinterest += interest.toFloat();
//		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){
	var temp = newTab.id.replace(/img-/,'');		// strip 'img-' from the id of the element that was clicked so we know what results area to display
	if (currentTab != temp)
	{
		var oldTab = currentTab;
		currentTab = temp;
		$('nav-'+oldTab).style.display = 'none';		// hide the old nav bar
		$('results-'+oldTab).style.display = 'none';	// hide the old results
		$('nav-'+currentTab).style.display = 'block';
		$('results-'+currentTab).style.display = 'block';
	}
	var imgs = $ES('img', 'nav-'+currentTab);		// get all of the image elements underneath the current navigation div
	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);
			}
		}
	}
}

window.addEvent('domready', function(){
	 ($('txt_loan').value.length > 0)?calculate():null;		// if the page is being passed an amount, perform calculations
	 $('btn_calculate').onclick = function(event){
	 	calculate();
	 	
//	 },
//	 $('txt_loan').onkeyup = function(event){				//  do some error checking on keyup
//	 	calcCleanup(this);
//	 },
//	 $('txt_loan').onblur = function(event){				//  recalculate when leaving the field
//	 	calculate();
//	 },
//	 $('txt_downpayment').onkeyup = function(event){		//  Hanlding events for txt_downpayment element
//	 	calcCleanup(this);
//	 },
//	  $('txt_downpayment').onblur = function(event){		//  recalculate when leaving the field
//	 	calculate();
//	 },
//	 $('sel_years').onchange = function(event){
//	 	calculate();
//	 },
//	 $('sel_apr').onchange = function(event){
//	 	calculate();
//	 },
//	 $('sel_upfront').onchange = function(event){
//	 	calculate();
//	 },
//	 $('sel_discount').onchange = function(event){
//	 	calculate();
	 };
	 tabSwitch($('img-graph'));					// on page load, default to showing graph if amount has been passed to page.
});