/*
 *mortgageCalc.js
 *Authour: Matthew Brooks
 *Date:    16/03/2010
 *Contact: matt@megabit.ca
 */
 
 
 function formatCurrency(dollarValue)
 {	 
	 var dollarStr = dollarValue.toString();
	 dollarStr = dollarStr.replace(/,/g,'');
	// alert(dollarStr);
	 var decimalPos = dollarStr.lastIndexOf('.');
	// alert(decimalPos);
	 
	 if(decimalPos>0)
	 {
		dollarStr=roundToPennies(dollarStr);
		dollarStr=dollarStr.toString();
		var cents = dollarStr.substring(decimalPos);
	 	var dollars = dollarStr.substring(0,decimalPos);
	 }
	 else
	 {
		 var dollars = dollarStr;
		 var cents = '';
	 }
	 
	 var dollarsLength = dollars.length;
	 var commasAdded='';
	 var numCommas=0;
	 var newValue = dollarStr;
	 
	 if(dollarsLength>3)
	 {
		 while(dollarsLength>3)
		 {
			commasAdded = ',' + dollars.substring(dollarsLength-3,dollarsLength) + commasAdded;
			dollarsLength -= 3;
			numCommas++;
		 }
		 
		 commasAdded = dollars.substring(0,dollars.length-3*numCommas) + commasAdded;
		 
		 newValue = commasAdded + cents;
	 }
	 return newValue;
 }
 
 function formatPrincipal()
 {
	p = document.getElementById("principal").value;
	document.getElementById("principal").value = formatCurrency(p);
 }
 
function checkFrequency()
{
	f = document.getElementById("frequency").value;
	
	if(f>0 && f<4)
	{
		return f;
	}
	else
	{
		alert("[Frequency] Please choose a payment frequency.");
		return -1;
	}	
}

function checkPrincipal()
{
	pS = document.getElementById("principal").value;
	pS = pS.toString();
	pS = pS.replace(/,/g,'');
	//alert(pS);
	var p = pS;
	if(p>9999 && p<1000001)
	{
		return p;
	}
	else
	{
		alert("[Amount] Please enter a mortgage amount between $10 000 and $1 000 000.");
		return -1;
	}	
}

function checkInterest()
{
	i = document.getElementById("interest").value;
	
	if(i>0 && i <26)
	{
		return i;
	}
	else
	{
		alert("[Rate] Please enter an interest value between 1% and 25%.");
		return -1;
	}
}

function checkYears()
{
	ly = document.getElementById("length_years").value;
	
	if(ly>-1 && ly<41)
	{
		return ly;
	}
	else
	{
		alert("[Ammortized] Please enter a number of years between 0 and 40.");
		return -1;
	}
	return ly;
}

function checkMonths()
{
	
	/*lm = document.getElementById("length_months").value;
	
	if(lm>-1 && lm <301)
	{
		return lm;
	}
	else
	{
		alert("[Term] Please enter a number of months between 0 and 300.");
		return -1;
	}*/
}

function roundToPennies(n)
{
	if(n > 0)
	{
		rounded = n * 100;
		rounded = Math.round(rounded);
		rounded = (rounded / 100);
		return rounded;
	}
	else
	{
		return 0;
	}
}

function calculateMortgage()
{
	
	f=checkFrequency();
	p=checkPrincipal();	//Get Principal
	i=checkInterest();  //Get interest
	ly=checkYears();    //Get Years
	lm=checkMonths();   //Get months
	
	if(f != -1 && p != -1 && i != -1 && ly != -1 && lm != -1)
	{
		if(ly == 0 && lm == 0)
		{
			alert("You must fill in at least one of the following fields: [Ammortized] [Term]");
			return;
		}
		/*Calculate total amount of months*/
		n = ly*12;
		
		/*Put interest rate in usable form*/
		i = i/100;
		
		/*Effective interest rate calculation*/
		ei = Math.pow((1+i/2),2);
		ei = ei-1;
		
		/*Monthly Rate*/
		ri = Math.pow(1+ei,1/12);
		ri = ri-1;
		
		
		/*Present Value factor calculations*/
		pf = 1 / (1+ri);
		pf = Math.pow(pf,n);
		pf = (1-pf)/ri;
		
		/*Monthly payment calculation*/
		m = p/pf;
		
		if(f==1)
		{
			m = m;
		}
		else if(f==2)
		{
			m = m/2;
		}
		
		else if(f==3)
		{
			m = m/4;
		}
		
		m = formatCurrency(m);
		document.getElementById("answer").value = "$" + m;
	}
	else
	{
		document.getElementById("answer").value = "Error";
	}
}

