function ich_saveCalc(amount,interestRate,term,extraPayments)
{
	var winRef = window.open('','saveWindow','location=no,resizable=yes,scrollbars=yes,width=500,height=500,left=400,top=100');
	var s = ' ';
	s = ich_makeReport(amount,interestRate,term,extraPayments);
	winRef.document.write(s);
	winRef.document.close();
}

function ich_makeReport(amount,interestRate,term,extraPayments)
{
	var browserSupported = false;
	var browser = navigator.appName;
	var temp,version;	
	if (browser=="Microsoft Internet Explorer") {
		if (navigator.appVersion.indexOf("MSIE")!=-1) {
			temp = navigator.appVersion.split("MSIE");
			version = parseFloat(temp[1]);
		}
		if(version >= 5) {
			browserSupported = true;
		}
	}
		
	// generate the html page for the save table frame.
	var saveFrameStr = ich_saveHeader() +
	"<body>"+
	"<div id=\\'brandingColor\\'></div>"+
	"<div id=\\'global_container\\'>"+
		"<h2>Amortisation Table</h2>"+
		"<div id=\\'column_container\\'>"+ich_compute(amount,interestRate,term,extraPayments);

	// generate a html page consisting of the save button.
	var buttonFrameStr = ich_saveButtonPage();
	
	// generate a html page consisting of 2 frames: top frame contains save table.
	// bottom frame contains save button.
	var str = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"+
	"<html><head>"+ 
	"<title>Principal & Interest Calculator Information</title>"+
	"<meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>"+
	"<script type=\"text/javascript\">"+
	"function update() {"+
	    "window.saveFrame.document.open();"+
	    "window.saveFrame.document.write('"+saveFrameStr+"');"+
	    "window.saveFrame.document.close();"+ 
	    "window.buttonFrame.document.open();"+
	    "window.buttonFrame.document.write('"+buttonFrameStr+"');"+
	    "window.buttonFrame.document.close();"+ 
	"}"+
	
	"function doSaveAs() {"+
		"var browserSupported = false;"+
		"var browser = navigator.appName;"+
		"var temp,version;"+
		"if (browser==\"Microsoft Internet Explorer\") {"+
			"if (navigator.appVersion.indexOf(\"MSIE\")!=-1) {"+
				"temp = navigator.appVersion.split(\"MSIE\");"+
				"version = parseFloat(temp[1]);"+
				"if(version >= 5) {"+
					"browserSupported = true;"+
				"}"+
			"}"+
		"}"+
		"if(browserSupported) {	"+
			"window.saveFrame.document.execCommand('saveAs',false,'CalculatorResults.html');"+
		"} else {"+
			"var button = window.buttonFrame.document.getElementById('SaveForm');"+
			"button.parentNode.removeChild(button);"+
			"alert(\"Your browser does not support this save function. To save this page press ctrl-S.\");"+
		"}"+
	"}"+
	
	"document.write('<frameset rows=\"416,*\" onLoad=\"update()\" frameborder=no border=0>');"+
	"document.write('<frame src=\"\" name=saveFrame noresise=noresize>');"+
	"document.write('<frame src=\"\" name=buttonFrame noresise=noresize>');"+
	"document.write('</frameset>');"+
	"</script>"+
	"</head>"+	
	"</html>";
	
	return str;
}

function ich_MonthlyAmort(principal, years, apr, amort, extraPayments) {
	var str = "";
	//msg=window.open("", "DisplayWindow","toolbar=no,scrollbars=yes,menubar=no,width=500,height=470");
	
	var payments = years * 12;
	var monthlyInterest = apr/12;
	pennies = apr * 10000;
	pennies = Math.round(pennies);
	strPennies = "" + pennies;
	len = strPennies.length;
	interestRate = strPennies.substring(0, len - 2) + "." + strPennies.substring((len - 2), len);
	
	var monthlyPayment = ich_rounding(principal*monthlyInterest / (1 - (1 / Math.pow(1 + monthlyInterest, payments))));
	
	str = str + "<P><BR><table class=\"amort\"><TR>";
	if(extraPayments != 0)
	{
	    str = str + "<td style=\"border-width: 0px 0px 0px 0px;\" align=center colspan=6><h3>$" + addCommas(principal) + " at " + interestRate + "% over a " + years + " year period.<br>Monthly payment: $" + addCommas(monthlyPayment) + " with extra payments: $"+extraPayments+"</h3><br></th></tr>";    
	}else{
	    str = str + "<td style=\"border-width: 0px 0px 0px 0px;\" align=center colspan=6><h3>$" + addCommas(principal) + " at " + interestRate + "% over a " + years + " year period.<br>Monthly payment: $" + addCommas(monthlyPayment) + "</h3><br></th></tr>";
    }
	str = str + "<tr><th><br></th><th style=\"border-width: 0px 0px 1px 0px;\" colspan=2>Current Payment</th><th style=\"border-width: 0px 0px 1px 0px;\" colspan=3>To Date<br></th></tr><tr><th width=70>Payment<br>Number</th><th width=70>Interest</th><th width=70>Principal</th><th width=70>Interest Paid</th><th width=70>Principal Paid</th><th width=70>Balance</th></tr>";
	
	principalPaid = 0;
	interestPaid = 0;

	
	//firstInt = monthlyInterest * principal;
	//avTotal = (firstInt + mthPmt)/principal * 1200
	
	avTotal = 0
	var counter = 0;
	for (var i = 1; i <= payments; i++) {
		var amortMod = i % amort;
		var interestPayment1 = principal * monthlyInterest;
		var intPay = (interestPayment1 + 12)/principal * 1200;
		avTotal = avTotal + intPay;
		pennies = interestPayment1 * 100;
		pennies = Math.round(pennies);
		strPennies = "" + pennies;
		len = strPennies.length;
		interestPayment =  strPennies.substring(0, len - 2) + "." + strPennies.substring((len - 2), len);
	
		var principalPayment1 = monthlyPayment - interestPayment + (extraPayments*1);
	
		pennies = principalPayment1 * 100;
		pennies = Math.round(pennies);
		strPennies = "" + pennies;
		len = strPennies.length;
		principalPayment =  strPennies.substring(0, len - 2) + "." + strPennies.substring((len - 2), len);
	
		principal1 = principal - principalPayment;
		
		if(principal1 < 0) {
			counter = 1;
		}
		pennies = principal1 * 100;
		pennies = Math.round(pennies);
		strPennies = "" + pennies;
		len = strPennies.length;
		principal =  strPennies.substring(0, len - 2) + "." + strPennies.substring((len - 2), len);
	
		principalPaid1 = -(-principalPayment - principalPaid);
	
		pennies = principalPaid1 * 100;
		pennies = Math.round(pennies);
		strPennies = "" + pennies;
		len = strPennies.length;
		principalPaid =  strPennies.substring(0, len - 2) + "." + strPennies.substring((len - 2), len);
	
		interestPaid1 = -(-interestPayment - interestPaid);
	
		pennies = interestPaid1 * 100;
		pennies = Math.round(pennies);
		strPennies = "" + pennies;
		len = strPennies.length;
		interestPaid =  strPennies.substring(0, len - 2) + "." + strPennies.substring((len - 2), len);
		
		if(counter == 1) {
			principal = 0;
		}
	
		if (amortMod == 0) {
			
			if(i % 2 == 0) {
				str = str + "<tr><td class=\"hilight\" align=center>" + i + "</td>";
				str = str + "<td class=\"hilight\">$" + addCommas(interestPayment) + "</td><td class=\"hilight\">$" + addCommas(principalPayment) + "</td><td class=\"hilight\">$" + addCommas(interestPaid) + "</td><td class=\"hilight\">$" + addCommas(principalPaid) + "</td><td class=\"hilight\">$" + addCommas(principal) + "</td></tr>";
			}
			else {
				str = str + "<tr><td align=center>" + i + "</td>";
				str = str + "<td>$" + addCommas(interestPayment) + "</td><td>$" + addCommas(principalPayment) + "</td><td>$" + addCommas(interestPaid) + "</td><td>$" + addCommas(principalPaid) + "</td><td>$" + addCommas(principal) + "</td></tr>";
	    	}
	    }
	    
	    if(counter == 1) {
			break;
		}	    	
	}
	avTotal = avTotal / (payments);
	str = str + "</table></center></div></body></html>";
	return str;
}

function ich_compute(amount,rate,term,extraPayments) {
	apr = rate / 100.0;
	return ich_MonthlyAmort(amount, term, apr, 1, extraPayments);	
}

function ich_rounding(n)
{
	pennies = n * 100;
	pennies = Math.round(pennies);
	strPennies = "" + pennies;
	len = strPennies.length;
	return strPennies.substring(0, len - 2) + "." + strPennies.substring((len - 2), len);
}

function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

