

//<!--
function zeroBlanks(formname)
{
	var i, ctrl;
	for (i = 0; i < formname.elements.length; i++)
	{
		ctrl = formname.elements[i];
		if (ctrl.type == "text")
		{
			if (makeNumeric(ctrl.value) == "")
				ctrl.value = "0";
		}
	}
}

function filterChars(s, charList)
{
	var s1 = "" + s; // force s1 to be a string data type
	var i;
	for (i = 0; i < s1.length; )
	{
		if (charList.indexOf(s1.charAt(i)) < 0)
			s1 = s1.substring(0,i) + s1.substring(i+1, s1.length);
		else
			i++;
	}
	return s1;
}

function makeNumeric(s)
{
	return filterChars(s, "1234567890.-");
}

function numval(val,digits,minval,maxval)
{
	val = makeNumeric(val);
	if (val == "" || isNaN(val)) val = 0;
	val = parseFloat(val);
	if (digits != null)
	{
		var dec = Math.pow(10,digits);
		val = (Math.round(val * dec))/dec;
	}
	if (minval != null && val < minval) val = minval;
	if (maxval != null && val > maxval) val = maxval;
	return parseFloat(val);
}

function formatNumber(val,digits,minval,maxval)
{
	var sval = "" + numval(val,digits,minval,maxval);
	var i;
	var iDecpt = sval.indexOf(".");
	if (iDecpt < 0) iDecpt = sval.length;
	if (digits != null && digits > 0)
	{
		if (iDecpt == sval.length)
			sval = sval + ".";
		var places = sval.length - sval.indexOf(".") - 1;
		for (i = 0; i < digits - places; i++)
			sval = sval + "0";
	}
	var firstNumchar = 0;
	if (sval.charAt(0) == "-") firstNumchar = 1;
	for (i = iDecpt - 3; i > firstNumchar; i-= 3)
		sval = sval.substring(0, i) + "," + sval.substring(i);

	return sval;
}
var newLoan = 0;
function compute(input)
{
var table = input.form;
zeroBlanks(inputForm);
percentDown = numval(table.percentDown.value,3);
moTtlInc = numval(table.moInc.value,2)
moDebt = numval(table.moDebt.value,2)
if (percentDown < 5) {
    percentDown = 3.0; 
}
if (percentDown >= 20) {
   pmi_rate = 0;
   availInc = moTtlInc * 0.33;
   if ((moTtlInc * 0.38 - moDebt) <= (moTtlInc * 0.33)) {
      availInc = moTtlInc * 0.38 - moDebt;
   }
}
if (percentDown < 20) {
   availInc = moTtlInc * 0.28;
   if ((moTtlInc * 0.36 - moDebt) <= (moTtlInc * 0.28)) {
      availInc = moTtlInc * 0.36 - moDebt;
   }
}
if (percentDown <= 15) {
   pmi_rate = 0.0073 - (percentDown - 3) * 0.000108;
}
if (percentDown > 15 && percentDown < 20) {
    pmi_rate = 0.0060 - (percentDown - 15) * 0.00076;
}
taxRate = numval(table.taxRate.value) / 1200;
intRate = numval(table.rate.value);
term = numval(table.term.value);
insRate = numval(table.insRate.value) / 1200;
moFees = numval(table.fees.value) / 12;
loan = (1 - Math.pow(intRate/1200 + 1, -term*12))*
 (availInc) / (intRate/1200);
moTax = loan * taxRate * (1/(1 - percentDown/100));
moIns = loan * insRate * (1/(1 - percentDown/100));
mopmi = pmi_rate * loan /12;
for ( var i = 1; i <= 100; i++) {
    moPI2 = availInc - moFees - moTax - moIns - mopmi;
    moPI1 = (Math.round((moPI2)*Math.pow(10,3)))/1000;
    newLoan = (1 - Math.pow(intRate/1200 + 1, -term*12)) * moPI1 / (intRate/1200);
    moTax = newLoan * taxRate * (1/(1 - percentDown/100));
    moIns = newLoan * insRate * (1/(1 - percentDown/100));
    mopmi = pmi_rate * newLoan /12;
    moPI2 = availInc - moFees - moTax - moIns - mopmi;
    moPI = (Math.round((moPI2)*Math.pow(10,3)))/1000;
    if ((moPI1 - moPI) == 0) {
       
       i = 100;
    }
}
downPay = newLoan * ((1/(1 - percentDown/100)) - 1);
propValue = newLoan + downPay;
table.moInc.value = formatNumber(moTtlInc,2);
table.moDebt.value = formatNumber(moDebt,2);
table.taxRate.value = numval(taxRate*1200);
table.insRate.value = formatNumber(insRate*1200,3);
table.fees.value = formatNumber(moFees*12,2);
table.percentDown.value = numval(percentDown);
totalPay = moPI + moTax + moIns + moFees + mopmi;
if (newLoan <= 0) totalPay =0;
table.totalPay.value = formatNumber(totalPay,2);
if (newLoan <= 0) moTax = 0;
table.moTax.value = formatNumber(moTax,2);
if (newLoan <= 0) moIns =0;
table.moIns.value = formatNumber(moIns,2);
table.moFees.value = formatNumber(moFees,2);
if (newLoan <= 0) mopmi = 0;
table.mopmi.value = formatNumber(mopmi,2);
if (moPI <= 0) moPI = 0;
table.moPI.value=formatNumber(moPI,2);
if(newLoan <= 0) newLoan = 0;
table.maxLoan.value = formatNumber(newLoan,2);
if (newLoan <= 0) propValue = 0;
table.propValue.value = formatNumber(propValue,2);
if (newLoan <= 0) downPay = 0;
table.downPay.value = formatNumber(downPay,2);
intRate=formatNumber(intRate*1000,3);
}
function checkLoan(form) {
   var moInc = document.inputForm.moInc.value;
   if (isNaN(newLoan) || newLoan == 0 || newLoan < 1000 || moInc == 0) {
        alert("")
   document.inputForm.moInc.select()
   document.inputForm.moInc.focus()
}
}
//-->

