//start text area character counter
function textCounter(field, countfield, maxlimit) {
if (field.value.length > maxlimit) // if too long...trim it!
field.value = field.value.substring(0, maxlimit);
// otherwise, update 'characters left' counter
else
countfield.value = maxlimit - field.value.length + ' left';
}

function tonum(str) 
{
	ret = "";
	str = "" + str;
	
	for(i = 0; i < str.length; i++){
		ch = str.substring(i,i+1);
		if ((ch >= "0" && ch <= "9") || ch == '.')
			ret += ch;
	}
	
	if(ret == "") ret = "0";
	return parseFloat(ret);
}

function valueOrDefault(obj, defval) 
{
	val = tonum(obj.value);
	
	if(val == 0) return defval;
	return val;
}

function format(val, decimal)
{
	scale = 1;
	
	if(decimal == null) decimal = 2;
	
	for(i = 0;i < decimal;i++) scale*=10;
	
	str = "" + Math.round(parseFloat(val) * scale);
	while(str.length <= decimal) str = "0" + str;
	
	point = str.length - decimal;
	num = "";
	i = point-3;
	while(i >= 0){
		num1 = str.substring(i,i+3);
		if(i != point-3) num1 += "," + num;
		num = num1;
		i-=3;
	}
	if(i != -3){
		num1 = str.substring(0,i+3);
		if(point > 3) num1 += "," + num;
		num = num1;
	}
	return "$" + num + "." + str.substring(point, str.length);
}

function contribution(form) 
{
	rate = parseFloat(form.rate.value)/100;
	years = parseInt(form.years.value);
	finalval = valueOrDefault(form.annualcost,0);
	inflation = parseFloat(form.inflation.value)/100;
	payout = parseInt(form.payout.value);
	
	answer = 0;
	for(i = 1;i <= payout;i++){
		answer = answer + (1/Math.pow(1+(rate-inflation),i));
	}
	answer = answer*finalval;
	
	fanswer = 0;
	for(i = 1;i <= years;i++){
		fanswer = fanswer + Math.pow(1+(rate-inflation),i);
	}
	
	fanswer = answer/fanswer;
	form.contrib.value = format(fanswer,2);
}

function anncost(form)
{
	rate = parseFloat(form.rate.value)/100;
	years = parseInt(form.years.value);
	contrib = valueOrDefault(form.contrib,0);
	inflation = parseFloat(form.inflation.value)/100;
	payout = parseInt(form.payout.value);
	
	answer = 0;
	for(i = 0;i < years;i++){
		answer = answer + contrib;
		answer = answer + answer*(rate-inflation);
	}
	
	fanswer = 0;
	for(i = 1;i <= payout;i++){
		fanswer = fanswer + (1/Math.pow(1+(rate-inflation),i));
	}
	
	fanswer = answer/fanswer;
	form.annualcost.value = format(fanswer,2);
}

function balance(form) 
{
	rate = tonum(form.rate.value)/100;
	years = tonum(form.years.value);
	contrib = tonum(form.contrib.value);
	ans = 0;
	for(j = 0;j < years;j++){
		ans = ans + contrib;
		ans = ans + ans*rate;
	}
	form.finalval.value = format(ans);
}


function principal(form) 
{
	rate = tonum(form.rate.value)/1200;
	pow = 1;
	
	for(j = 0;j < tonum(form.months.value);j++)
		pow = pow * (1 + rate);
	if(pow != 0 && rate != 0)
		form.prin.value = format((tonum(form.pay.value)-.009) / pow / rate * (pow - 1));
	else
		form.prin.value = format(tonum(form.pay.value) * tonum(form.months.value));
}

function payment(form) 
{
	rate = tonum(form.rate.value)/1200;
	pow = 1;
	
	for(j = 0;j < tonum(form.months.value);j++)
		pow = pow * (1 + rate);
	if(pow != 1)
		form.pay.value = format(tonum(form.prin.value) * pow * rate / (pow - 1) +.009);
	else
		form.pay.value = format(tonum(form.prin.value) / tonum(form.payments.value));
}

function cloanBalance(form)
{
	form.loanBalance.value = format(tonum(form.salePrice.value) * (1-tonum(form.downPayment.value)/100));
}
function cloanBalanceReverse(form)
{
	rate = tonum(form.interest.value)/1200;
	pow = 1;
	
	for(j = 0;j < tonum(form.payments.value);j++)
		pow = pow * (1 + rate);
	if(pow != 0 && rate != 0)
		form.loanBalance.value = format(tonum(form.monthlyPayment.value) / pow / rate * (pow - 1));
	else
		form.loanBalance.value = format(tonum(form.monthlyPayment.value) * tonum(form.payments.value));
	csalePrice(form);
	fixform(form);
}

function csalePrice(form)
{
	if(tonum(form.downPayment.value) == 100){
		form.loanBalance.value = format(0);
		return;
	}
	form.salePrice.value = format(tonum(form.loanBalance.value) / (1-tonum(form.downPayment.value)/100));
}

function cmonthlyPayment(form)
{
	rate = tonum(form.interest.value)/1200;
	pow = 1;
	
	for(j = 0;j < tonum(form.payments.value);j++)
		pow = pow * (1 + rate);
	if(pow != 1)
		form.monthlyPayment.value = format(tonum(form.loanBalance.value) * pow * rate / (pow - 1) +.009);
	else
		form.monthlyPayment.value = format(tonum(form.loanBalance.value) / tonum(form.payments.value));
}

function fixform(form)
{
	if(tonum(form.salePrice.value) < 0) form.salePrice.value = format(0);
	if(tonum(form.downPayment.value) < 0) form.downPayment.value = 0;
	if(tonum(form.downPayment.value) > 100) form.downPayment.value = 100;
	if(tonum(form.loanBalance.value) < 0) form.loanBalance.value = format(0);
	if(tonum(form.interest.value) < 0) form.interest.value = 0;
	if(tonum(form.payments.value) < 1) form.payments.value = 1;
	if(tonum(form.monthlyPayment.value) < 0) form.monthlyPayment.value = format(0);
	
	form.salePrice.value = format(tonum(form.salePrice.value));
	form.downPayment.value = tonum(form.downPayment.value);
	form.loanBalance.value = format(tonum(form.loanBalance.value));
	form.interest.value = tonum(form.interest.value);
	form.payments.value = tonum(form.payments.value);
	form.monthlyPayment.value = format(tonum(form.monthlyPayment.value));
}

function mmonthlyPayment(form)
{
	fixform(form);
	cloanBalanceReverse(form);
	csalePrice(form);
	call(form);
}

function mloanBalance(form)
{
	fixform(form);
	csalePrice(form);
	cmonthlyPayment(form);
	call(form);
}

function msalePrice(form)
{
	fixform(form);
	cloanBalance(form);
	cmonthlyPayment(form);
	call(form);
}

function cdetail(document)
{
	fixform(document.form);
	var rate = tonum(document.form.interest.value)/1200;
	var balance = tonum(document.form.loanBalance.value);
	var payment = tonum(document.form.monthlyPayment.value);
	var payments = tonum(document.form.payments.value);
	
	var doc = parent.document;
	doc.open("text/html");
	doc.write("<HTML><HEAD>");
	doc.write("<TITLE>Detailed History</TITLE>");
	doc.write("</HEAD>");
	doc.write("<BODY>");
	
	doc.write("\<SCRIPT LANGUAGE=\"JavaScript\"\>");
	doc.write("function format(val, decimal){");
	doc.write("scale = 1;");
	doc.write("if(decimal == null) decimal = 2;");
	doc.write("for(i = 0;i \< decimal;i++) scale*=10;");
	doc.write("str = \"\" + Math.round(parseFloat(val) * scale);");
	doc.write("while(str.length \<= decimal) str = \"0\" + str;");
	doc.write("point = str.length - decimal;");
	doc.write("num = \"\";");
	doc.write("i = point-3;");
	doc.write("while(i \>= 0){");
	doc.write("num1 = str.substring(i,i+3);");
	doc.write("if(i != point-3) num1 += \",\" + num;");
	doc.write("num = num1;");
	doc.write("i-=3;");
	doc.write("}");
	doc.write("if(i != -3){");
	doc.write("num1 = str.substring(0,i+3);");
	doc.write("if(point > 3) num1 += \",\" + num;");
	doc.write("num = num1;");
	doc.write("}");
	doc.write("return \"$\" + num + \".\" + str.substring(point, str.length);");
	doc.write("}");
	doc.write("\</SCRIPT\>");

	doc.write("<TABLE BORDER=3 CELLPADDING=1><TR><TH>Payment #</TH><TH>Balance Owned <br>Before Payment</TH><TH>Interest Paid</TH> <TH>Principal Paid</TH><TH>Cumulative <br>Interest Paid</TH><TH>Payment</TH><TH>Cumulative<br>Payment</TH></TR>");
	
	var cumint = 0;
	var cumreal = 0;
	var cumpay = 0;
	var interest = 0;
	var realpay = 0;
	var defint = 0;
	
	var num = 1;
	while(balance > 0){
		interest = balance * rate;
		principal = payment - interest;
		if(principal < 0){alert("There are errors in this form.");return;}
		if(principal > balance-0.01) principal = balance;
		cumint = cumint + interest;
		cumreal = cumreal + interest;
		realpay = principal + interest;
		cumpay = cumpay + realpay;
		doc.write("<TR><TH>",num,"</TH><TH>", format(balance), "</TH><TH>", format(interest), "</TH><TH>", format(principal), "</TH><TH>", format(cumreal), "</TH><TH>", format(realpay), "</TH><TH>", format(cumpay), "</TH></TR>");
		num++;
		balance = balance - principal;
	}

	doc.write("<TR><TH>Payment #</TH><TH>Balance Owned <br>Before Payment</TH><TH>Interest Paid</TH> <TH>Principal Paid</TH><TH>Cumulative <br>Interest Paid</TH><TH>Payment</TH><TH>Cumulative<br>Payment</TH></TR>");
	doc.write("</TABLE>");
	doc.write("<HR></BODY></HTML>");
	doc.close();
	return;
}

function call(form)
{
	fixform(form);
	var rate = tonum(form.interest.value)/1200;
	var balance = tonum(form.loanBalance.value);
	var payment = tonum(form.monthlyPayment.value);
	var payments = tonum(form.payments.value);
	
	var cumrawpay = 0;
	var cumint = 0;
	var cumreal = 0;
	var cumpay = 0;
	var interest = 0;
	var realpay = 0;
	
	if(rate < 0 || payment <= 0) return;
	
	while(balance > 0){
		interest = balance * rate;
		principal = payment - interest;
		if(principal < 0){alert("There are errors in this form.");return;}
		if(principal > balance-0.01) principal = balance;
		cumrawpay = cumrawpay + principal + interest;
		cumint = cumint + interest;
		realpay = principal + interest;
		cumpay = cumpay + realpay;
		balance = balance - principal;
	}
	
	form.cumInterest.value = format(cumint);
	form.realPayments.value = format(cumrawpay);
}

function creset(form)
{
	form.salePrice.value = "";
	form.downPayment.value = "";
	form.loanBalance.value = "";
	form.payments.value = "";
	form.monthlyPayment.value = "";
	form.interest.value = "";
	form.cumInterest.value = "";
	form.realPayments.value = "";
}



function checkrequiredSearch(which) {

var pass=true;
fieldlist = "";

  var bgBad = '#EFC868';
  var bgGood = "white";

if (document.images) {
	for (i=0;i<which.length;i++) {
		var tempobj=which.elements[i];
		if (tempobj.name=="search" && tempobj.value=='') {
			fieldlist = "Search field";
			pass=false;
			break;
		}
	}
}

if (!pass) {
	setColor(tempobj, bgBad);
	alert(""+fieldlist+" is required.");
	tempobj.focus();
	tempobj.blur();
	return false;
}
else
return true;
}


function setColor(el, bg) {
  if (el.style) el.style.backgroundColor = bg;
}

function validate(field) {
var valid = "0123456789"
var ok = "yes";
var temp;
for (var i=0; i<field.value.length; i++) {
temp = "" + field.value.substring(i, i+1);
if (valid.indexOf(temp) == "-1") ok = "no";
}
if (ok == "no") {
alert("Invalid entry!  Only numbers are accepted!");
field.focus();
field.select();
   }
}

