function floor(number)
{
  return Math.floor(number*Math.pow(10,2))/Math.pow(10,2);
}
function dosum(form)
{
  var mi = form.IR.value / 1200;
  var base = 1;
  var mbase = 1 + mi;
  for (i=0; i<form.YR.value * 12; i++)
  {
    base = base * mbase
  }
  form.PI.value = floor(form.LA.value * mi / ( 1 - (1/base)))
  form.MT.value = floor(form.AT.value / 12)
  form.MI.value = floor(form.AI.value / 12)
  var dasum = form.LA.value * mi / ( 1 - (1/base)) +
  form.AT.value / 12 +
  form.AI.value / 12;
  form.MP.value = floor(dasum);
}
						
function checkNumber(input, min, max, msg) {
msg = msg + " field has invalid data: " + input.value;
var str = input.value;
for (var i = 0; i < str.length; i++) {
var ch = str.substring(i, i + 1)
if ((ch < "0" || "9" < ch) && ch != '.') {
alert(msg);
return false;
      }
   }
var num = parseFloat(str)
if (num < min || max < num) {
alert(msg + " not in range [" + min + ".." + max + "]");
return false;
   }
input.value = str;
return true;
}
function computeField(input) {
if (input.value != null && input.value.length != 0)
input.value = "" + eval(input.value);
computeForm(input.form);
}
function computeForm(form) {
if ((form.payments.value == null || form.payments.value.length == 0) ||
(form.interest.value == null || form.interest.value.length == 0) ||
(form.principal.value == null || form.principal.value.length == 0)) {
return;
}
if (!checkNumber(form.payments, 1, 480, "# of payments") ||
!checkNumber(form.interest, .001, 99, "Interest") ||
!checkNumber(form.principal, 100, 10000000, "Principal")) {
form.payment.value = "Invalid";
return;
}
var i = form.interest.value;
if (i > 1.0) {
i = i / 100.0;
form.interest.value = i;
}
i /= 12;
var pow = 1;
for (var j = 0; j < form.payments.value; j++)
pow = pow * (1 + i);
money = "" + .01* Math.round(100*(form.principal.value * pow * i) / (pow - 1));
dec = money.indexOf(".");
dollars = money.substring(0,dec);
cents = money.substring(dec+1,dec+3);
cents = (cents.length < 2) ? cents + "0" : cents;
money = dollars + "." + cents;
form.payment.value = money;
}
function clearForm(form) {
form.payments.value = "";
form.interest.value = "";
form.principal.value = "";
}

function RemoveNonNumeric( strString )
{
      // Variables
      var strValidCharacters = "1234567890.";
      var strReturn = "";
      var strBuffer = "";
      var intIndex = 0;


      // Loop through the string
      for( intIndex = 0; intIndex < strString.length; intIndex++ )
      {
            // Get this character
            strBuffer = strString.substr( intIndex, 1 );

            // Is this a number
            if( strValidCharacters.indexOf( strBuffer ) > -1 )
            {
                  // Yes
                  strReturn += strBuffer;
            }
      }

      // Return the value
      return strReturn;
}



function LoanCalculator()
{
	form = document.myform1
	LoanAmount= form.LoanAmount.value
		
	DownPayment= "0"
	AnnualInterestRate = form.InterestRate.value/100
	Years= form.NumberOfYears.value
		MonthRate=AnnualInterestRate/12
	NumPayments=Years*12
	Prin=LoanAmount-DownPayment
	
	MonthPayment=Math.floor((Prin*MonthRate)/(1-Math.pow((1+MonthRate),(-1*NumPayments)))*100)/100
		form.NumberOfPayments.value=NumPayments
	form.MonthlyPayment.value=MonthPayment
}


function LoanCalculator2()
{
	form = document.myform2
	LoanAmount= form.LoanAmount2.value
		
	DownPayment= "0"
	AnnualInterestRate = form.InterestRate2.value/100
	Years= form.NumberOfYears2.value
		MonthRate=AnnualInterestRate/12
	NumPayments=Years*12
	Prin=LoanAmount-DownPayment
	
	MonthPayment=Math.floor((Prin*MonthRate)/(1-Math.pow((1+MonthRate),(-1*NumPayments)))*100)/100
		form.NumberOfPayments2.value=NumPayments
	form.MonthlyPayment2.value=MonthPayment
}

function LoanCalculator3()
{
	form = document.myform3
	LoanAmount= form.LoanAmount3.value
		
	DownPayment= "0"
	AnnualInterestRate = form.InterestRate3.value/100
	Years= form.NumberOfYears3.value
		MonthRate=AnnualInterestRate/12
	NumPayments=Years*12
	Prin=LoanAmount-DownPayment
	
	MonthPayment=Math.floor((Prin*MonthRate)/(1-Math.pow((1+MonthRate),(-1*NumPayments)))*100)/100
		form.NumberOfPayments3.value=NumPayments
	form.MonthlyPayment3.value=MonthPayment
}

function check() { 
	var loanamt = top.document.loan_form.amt.value;
	var paymnt = top.document.loan_form.pay.value;
	var rate = top.document.loan_form.rate.value;

	if(loanamt=="" || isNaN(parseFloat(loanamt)) || loanamt==0) { 
		alert("Please enter a valid loan amount.");
		top.document.loan_form.amt.value="";
		top.document.loan_form.amt.focus();
		return false; 
	} else if(paymnt=="" || isNaN(parseFloat(paymnt)) || paymnt==0) {
		alert("Please enter a valid number of payments.");
		top.document.loan_form.pay.value="";
		top.document.loan_form.pay.focus();
		return false; 
	} else if(rate=="" || isNaN(parseFloat(rate)) || rate==0) {
		alert("Please enter the interest rate.");
		top.document.loan_form.rate.value="";
		top.document.loan_form.rate.focus();
		return false; 
	} else {
		show(); 
	}
}

function clearScreen() { 
	top.document.loan_form.amt.value="";
	top.document.loan_form.pay.value="";
	top.document.loan_form.rate.value="";
	top.document.getElementById("pmt").innerHTML="";
	top.document.getElementById("det").innerHTML="";
}

function fixVal(value,numberOfCharacters,numberOfDecimals,padCharacter) { 
	var i, stringObject, stringLength, numberToPad;            // define local variables

	value=value*Math.pow(10,numberOfDecimals);                 // shift decimal point numberOfDecimals places
	value=Math.round(value);                                   //  to the right and round to nearest integer

	stringObject=new String(value);                            // convert numeric value to a String object
	stringLength=stringObject.length;                          // get length of string
	while(stringLength<numberOfDecimals) {                     // pad with leading zeroes if necessary
		stringObject="0"+stringObject;                     // add a leading zero
		stringLength=stringLength+1;                       //  and increment stringLength variable
	}

	if(numberOfDecimals>0) {			           // now insert a decimal point
		stringObject=stringObject.substring(0,stringLength-numberOfDecimals)+"."+
		stringObject.substring(stringLength-numberOfDecimals,stringLength);
	}

	if (stringObject.length<numberOfCharacters && numberOfCharacters>0) {
		numberToPad=numberOfCharacters-stringObject.length;      // number of leading characters to pad
		for (i=0; i<numberToPad; i=i+1) {
			stringObject=padCharacter+stringObject;
		}
	}

	return stringObject;                                       // return the string object
}

function show() {
	var amount=parseFloat(top.document.loan_form.amt.value);
	var numpay=parseInt(top.document.loan_form.pay.value);
	var rate=parseFloat(top.document.loan_form.rate.value);
 
	rate=rate/100;
	var monthly=rate/12;
	var payment=((amount*monthly)/(1-Math.pow((1+monthly),-numpay)));
	var total=payment*numpay;
	var interest=total-amount;

	var output = "";
	var detail = "";

	output += "<table align='center' style='width:90%;margin:10px'> \
			<tr><td>Loan amount:</td><td align='right'>$"+amount+"</td></tr><tr><td>Num payments:</td> \
			<td align='right'>"+numpay+"</td></tr><tr><td>Annual Rate:</td><td align='right'>"+fixVal(rate,0,4,' ')+"</td></tr> \
			<tr><td>Monthly Rate:</td><td align='right'>"+fixVal(monthly,0,5,' ')+"</td></tr><tr><td>Monthly Payment:</td> \
			<td align='right'>$"+fixVal(payment,0,2,' ')+"</td></tr><tr><td>Total Paid:</td><td align='right'>$"+fixVal(total,0,2,' ')+"</td></tr> \
			<tr><td>Total Interest:</td><td align='right'>$"+fixVal(interest,0,2,' ')+"</td></tr></table>";

	detail += "<table border='0' align='center' cellpadding='5' cellspacing='0' width='97%' style='font-family:courier;font-size:12px'> \
			<tr><td align='center' valign='bottom' bgcolor='white'><b>Pmt</b></td><td align='right' valign='bottom' bgcolor='white'><b>Amount</b></td> \
			<td align='right' valign='bottom' bgcolor='white'><b>Interest</b></td><td align='right' valign='bottom' bgcolor='white'><b>Principal</b></td> \
			<td align='right' valign='bottom' bgcolor='white'><b>Balance</b></td></tr><tr><td align='center' bgcolor='white'>0</td> \
			<td align='center' bgcolor='white'>&nbsp;</td><td align='center' bgcolor='white'>&nbsp;</td><td align='center' bgcolor='white'>&nbsp;</td> \
			<td align='right' bgcolor='white'>"+fixVal(amount,0,2,' ')+"</td></tr>";

	newPrincipal=amount;

	var i = 1;
	while (i <= numpay) {
		newInterest=monthly*newPrincipal;
		reduction=payment-newInterest;
		newPrincipal=newPrincipal-reduction;
		
		detail += "<tr><td align='center'>"+i+"</td><td align='right' bgcolor='white'>"+fixVal(payment,0,2,' ')+"</td> \
				<td align='right' bgcolor='white'>"+fixVal(newInterest,0,2,' ')+"</td> \
				<td align='right' bgcolor='white'>"+fixVal(reduction,0,2,' ')+"</td> \
				<td align='right' bgcolor='white'>"+fixVal(newPrincipal,0,2,' ')+"</td></tr>";

		i++;
	}

	detail += "</table>";

	document.getElementById("pmt").innerHTML = output;
	document.getElementById("det").innerHTML = detail;
}

