var isIE4 = false;
if(navigator.appName.indexOf("Microsoft") != -1  &&  parseInt(navigator.appVersion) >= 4)
        isIE4 = true;


var cache;


function CheckFloatField(field) {
        var val = field.value;

        // lop off trailing "0"s after a decimal point first
        if(val.indexOf(".") != -1) {
                while(val.charAt(val.length-1) == "0")
                        val = val.substring(0,val.length-1);
                if(val.charAt(val.length-1) == ".")
                        val = val.substring(0,val.length-1);
        }

        if("" + parseFloat(val) != val)
                field.value = field.defaultValue;
}


function CheckIntField(field) {
        var val = field.value;
        if("" + parseInt(val) != val)
                field.value = field.defaultValue;
}


function CheckDollarField(field) {
        var flt = ReadDollarField(field);
        if(isNaN(flt))
                field.value = cache;
        else {
                str = FloatToDollarString(flt);
                field.value = str;
        }
}


function ReadDollarField(field) {
        var str = field.value;
        if(str.charAt(0) == "$")
                str = str.substring(1, str.length);

        var pos = str.lastIndexOf(",");
        while(pos != -1) {
                str = str.substring(0,pos) + str.substring(pos+1, str.length);
                pos = str.lastIndexOf(",", pos);
        }

        return parseFloat(str);
}


function FloatToDollarString(flt) {
        // round off to nearest dollar
        var str = "" + Math.round(flt)

        // add commas
        pos = str.length;  // str.indexOf(".");
        pos -= 4;
        while(pos >= 0) {
                str = str.substring(0,pos+1) + "," + str.substring(pos+1, str.length);
                pos -= 3;
        }

        return str;
}


function recalcTermMonths(frm) {
        var tYr = parseFloat(frm.termYears.value);
        var tMon = Math.round(tYr * 12.0);
        tYr = parseFloat(tMon) / 12.0;
        frm.termYears.value = "" + tYr;
        frm.termMonths.value = "" + tMon;
}


function recalcTermYears(frm) {
        var tMon = parseInt(frm.termMonths.value);
        var tYr = parseFloat(tMon) / 12.0;
        frm.termYears.value = "" + tYr;
        frm.termMonths.value = "" + tMon;
}


function RecalcMonthlyPay(frm) {
        var Principle  = ReadDollarField(frm.price) - ReadDollarField(frm.downpay);
        var AnnualInt  = parseFloat(frm.intYear.value);
        var MonthlyInt = AnnualInt / (12.0 * 100.0);
        var LenMonths  = parseInt(frm.termMonths.value);
		var DownPay = ReadDollarField(frm.downpay)/ReadDollarField(frm.price);

        if(MonthlyInt == 0)
                var MonthlyPay = Principle / LenMonths;
        else
                var MonthlyPay = Principle * ( MonthlyInt / ( 1 - Math.pow((1 + MonthlyInt), -LenMonths) ) );
        MonthlyPay = Math.round(MonthlyPay * 100) / 100;
		
        pmi = 0;
		if (DownPay < .20 || frm.downpay.value == 0 || frm.price.value == 0) {
		  var pmi = (Principle * .01)/12.0; 
		}
		
		var loantotal = Number(pmi) + Number(MonthlyPay);
				
		frm.payMonth.value = FloatToDollarString(MonthlyPay);
		frm.pmi.value = FloatToDollarString(pmi);
		frm.loanTot.value = FloatToDollarString(loantotal);
}


function RecalcDownPay(frm) {
        var AnnualInt  = parseFloat(frm.intYear.value);
        var MonthlyInt = AnnualInt / (12.0 * 100.0);
        var LenMonths  = parseInt(frm.termMonths.value);
        var MonthlyPay = ReadDollarField(frm.payMonth);
        var Principle  = ReadDollarField(frm.price) - ReadDollarField(frm.downpay);
        var OldDownPay = ReadDollarField(frm.downpay);
        var EffPrinciple

        if(MonthlyInt == 0)
                EffPrinciple = MonthlyPay * LenMonths;
        else
                EffPrinciple = MonthlyPay * ((1 - Math.pow((1 + MonthlyInt), -LenMonths)) / MonthlyInt);

        var NewDownPay = OldDownPay + (Principle - EffPrinciple);
        frm.downpay.value = "" + NewDownPay;
        CheckDollarField(frm.downpay);

        RecalcDownPayPerc(frm);
        RecalcMonthlyPay(frm);
}


function RecalcDownPayPerc(frm) {
        var HomePrice  = ReadDollarField(frm.price);
        var DownPay = ReadDollarField(frm.downpay);
        var DownPayPerc = 100 * DownPay / HomePrice;

        if(DownPayPerc >= 0  &&  DownPayPerc <= 100) {
                var DownPayPercStr = "" + DownPayPerc;

                var pos = DownPayPercStr.indexOf(".");
                if(DownPayPercStr.length > pos + 4)
                        DownPayPercStr = DownPayPercStr.substring(0,pos+4);

                frm.downpayperc.value = DownPayPercStr;
        }
        else if(DownPayPerc < 0) {
                frm.downpayperc.value = "0";
                RecalcDownPayAmount(frm);
        }
        else {
                frm.downpayperc.value = "100";
                RecalcDownPayAmount(frm);
        }
}


function RecalcDownPayAmount(frm) {
        var HomePrice  = ReadDollarField(frm.price);
        var DownPayPerc = parseFloat(frm.downpayperc.value);
        if(DownPayPerc < 0) {
                frm.downpayperc.value = "0";
                RecalcDownPayAmount(frm)
        }
        else if(DownPayPerc > 100) {
                frm.downpayperc.value = "100";
                RecalcDownPayAmount(frm)
        }
        else {
                var DownPay = HomePrice * DownPayPerc / 100;
                DownPay = FloatToDollarString(DownPay);
                frm.downpay.value = "" + DownPay;
        }
}



//CheckDollarField(document.frmCalc.price);
//RecalcDownPayPerc(document.frmCalc);
//RecalcMonthlyPay(document.frmCalc);
