var principal;
var interest;

function calculate()
{
	var loanamount = document.getElementById("loanamount").value;
	if ( loanamount.length == 0 )
	{
		alert("Please enter the initial loan amount");
		return;
	}
	loanamount = fixNumber(loanamount);
	loanamount = parseFloat(loanamount);
	if ( isNaN(loanamount) )
	{
		alert("Please enter the initial loan amount as a number");
		return;
	}
	if ( loanamount <= 0 )
	{
		alert("Please enter a loan amount > 0");
		return;
	}

	var duration = parseInt( document.getElementById("duration").value);

	var yearsleft = document.getElementById("yearsleft").value;
	if ( yearsleft.length == 0 )
	{
		alert("Please enter the number of years left in your mortgage");
		return;
	}
	yearsleft = fixNumber(yearsleft);
	yearsleft = parseInt(yearsleft);
	if ( isNaN(yearsleft) )
	{
		alert("Please the the years left as a number");
		return;
	}
	if ( yearsleft > duration )
	{
		alert("Error. There are more years left on your mortgage than the total length of the mortgage.");
		return;
	}
	if ( yearsleft <= 0 )
	{
		alert("You have no years left on your mortgage, so it must be paid off.  Congrats.");
		return;
	}

	
	var rate = document.getElementById("rate").value;
	if ( rate.length == 0 )
	{
		alert("Please enter an interest rate");
		return;
	}
	rate = fixNumber(rate);
	rate = parseFloat(rate);
	if ( isNaN(rate) )
	{
		alert("Please enter the interest rate as a number");
		return;
	}
	if ( rate <= 0 || rate >= 30 )
	{
		alert("Please enter an interest rate rate greater than 0 and less than 30");
		return;
	}


	var extra = document.getElementById("extra").value;
	if ( extra.length == 0 )
	{
		alert("Please enter an extra payment amount");
		return;
	}
	extra = fixNumber(extra);
	extra = parseFloat(extra);
	if ( isNaN(extra) )
	{
		alert("Please enter the extra payment amount as a number");
		return;
	}
	if ( extra <= 0 )
	{
		alert("Please an extra payment amount > 0");
		return;
	}

	
	var payment = calcPayment(loanamount, rate, duration);

	var mrate = rate / 1200;
	calcPrincipalAndInterest(loanamount, duration-yearsleft, mrate); 

	var results = "Currently, your monthly payment is " + formatDollars(payment) + ".";

	results += "<p><table cellpadding=\"0\" cellspacing = \"0\" class=\"data\">";
	results += "<tr><th><th>Interest<th>Principal<th>Total Payments";
	results += "<tr><th>To Date<td>" + formatDollars(interest) + "<td>" + formatDollars(loanamount-principal) + "<td>" + formatDollars(interest+loanamount-principal);


	var prince1 = principal;
	var int1 = interest;


	calcPrincipalAndInterest(loanamount, duration, mrate); 
	results += "<tr><th>Total<td>" + formatDollars(interest) + "<td>" + formatDollars(loanamount-principal) + "<td>" + formatDollars(payment*duration*12);


	var m = 0;
	while ( prince1 > 0.01 )
	{
		var mi = mrate * prince1;
		int1 += mi;
		prince1 -= ( payment - mi + extra );
		m++;
	}
	results += "<tr><th>Total (with Extra Payments)<td>" + formatDollars(int1) + "<td>" + formatDollars(loanamount) + "<td>" + formatDollars(int1 + loanamount);
	results += "</table>";

	m = (yearsleft*12)-m;
	var y = parseInt(m/12);	
	m = m%12;
	
	results += "<br>By paying an extra " + formatDollars(extra) + " per month, you will save " + formatDollars(interest-int1) + " in interest.";
	results += "<p>You will pay off your mortage " + y + " years and " + m + " months early.";


	var x = document.getElementById("results");

	

	x.innerHTML = results;
	x.style.display = "block";
}

function calcPrincipalAndInterest(amount, years, mrate)
{
	principal = amount;
	interest = 0;
	var y,m;	
	for (y=0; y<years; y++)
	{
		for (m=0; m<12; m++)
		{
			var mi = mrate * principal;
			interest += mi;
			principal -= ( payment - mi );
		}
	}
}

function calcPayment(loanamount, rate, years)
{
	var mrate = rate / 1200;
	var factor = Math.pow(1 + mrate, years * 12 );
	payment = loanamount * ( mrate / (1 - 1/factor) );
	return payment;
}

