// This is the master calculator scripts with all functions
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 = 0 + str
		if (num < min || max < num) {
			alert(msg + " not in range [" + min + ".." + max + "]");
			return false;
			}
		input.value = str;
		return true;
	}

function NumFormat( __StringNumber ) {
	InString = _Trim(__StringNumber);
	OutString = "";
	InLength = InString.length;
		for(__x=InLength; __x!=0; __x--) {
 			if(OutString.length == 3 | OutString.length == 7 | OutString.length == 11) {
   			OutString = "," + OutString;
   			OutString = InString.substring(__x-1,__x) + OutString;
  			} else {
   					OutString = InString.substring(__x-1,__x) + OutString;
  					}
 				}
 		return OutString;
	}
	
function _Trim( str ) {
	astr = String( str );
	t_str = String("");
	LastCharAt = 0;
	for(x=astr.length-1;x>=0;x--) {
		if( astr.charAt(x) != " " ) {
			LastCharAt = x+1;
			break;
		}
	}
	return astr.substring(0,LastCharAt);
	}	
	
function _StrTran( _str2b_chg, _substr2_look4, _substr2_sub ) {

 var _Str_2B_Chg = String( _str2b_chg );
 var _Str_2_Look_4 = String( _substr2_look4 );
 var _Str_2_Sub = String( _substr2_sub );
 var _Out_Str = "";

 _len2chg = _Str_2B_Chg.length;
 _len2lk4 = _Str_2_Look_4.length;
 for( _stepr=0; _stepr<_len2chg; _stepr++ ) {
  if(_Str_2B_Chg.substring(_stepr,_stepr+_len2lk4) == _Str_2_Look_4)
   _Out_Str += _Str_2_Sub;
  else
   _Out_Str += _Str_2B_Chg.substring(_stepr,_stepr+_len2lk4)
 }
 return _Out_Str;
}
function clearForm(form) {
	form.yrterm.value = "";
	form.interest.value = "";
	form.principal.value = "";
}

function computeField(input) {
	if (input.value != null && input.value.length != 0)
			input.value = "" + NumFormat(parseInt(input.value));

}
// Affordability Script
function computeAffordabilityForm(form) {

        if ((form.down.value == null || form.down.value.length == 0) ||
            (form.interest.value == null || form.interest.value.length == 0) ||
            (form.term.value == null || form.term.value.length == 0) ||
            (form.payment.value == null || form.payment.value.length == 0)) {
            return;
        }

        if (!checkNumber(form.term, 1, 480, "# of payments") ||
            !checkNumber(form.interest, .001, 99, "Interest")) {
            form.principle.value = "Invalid";
            return;
        }
	var thenumberofpayments = form.term.value * 12;
	var theinterestrate = form.interest.value;
	var thedown = form.down.value;



        var i = theinterestrate;
		if (i == 0) 
			i = .001;

        if (i > 1.0) {
            i = i / 100.0;
            //form.interest.value = i;
        }


     {   if(form.interest.value == "" || 
           form.down.value == "" ||
           form.payment.value == "" ||
           form.term.value == "") {
                form.principle.value = "";
        } else {
                i = (form.interest.value) / 100;
                i = i / 12;
                n = (form.term.value) * 12;
				M = parseInt(_StrTran(form.down.value,",",""));
                tmp = (1/i) * (1 - Math.pow(1/(1+i), n));
                tmp = (_StrTran(form.payment.value,",","")) * tmp;
		    	tmp = tmp + (_StrTran(form.down.value,",",""));
                tmp = Math.round(tmp*100) / 100 + M;
				form.principle.value = NumFormat(parseInt(tmp));
                if(form.principle.value == null ||          
                 form.principle.value.length == 0 ||
                   form.principle.value == "NaN") {
                        form.principle.value = "";
                }
        }
}


}

function compute30or15Form(form) {

        if ((form.yrterm.value == null || form.yrterm.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.yrterm, 1, 480, "# of payments") ||
            !checkNumber(form.interest, 0, 99, "Interest")) {
            form.payment.value = "Invalid";
            return;
        }
	var thenumberofpayments = form.yrterm.value * 12;
	var theinterestrate = form.interest.value;
	var theprincipal = _StrTran(form.principal.value,",","");


        var i = theinterestrate;
		if (i == 0) 
			i = .001;

        if (i > 1.0) {
            i = i / 100.0;
            //form.interest.value = i;
        }

        i /= 12;
        var pow = 1;
        	for (var j = 0; j < thenumberofpayments; j++)
            	pow = pow * (1 + i);
		var mpaymnt = (theprincipal * pow * i) / (pow - 1);


        form.payment.value = "$"+NumFormat(parseInt(mpaymnt));
		form.yrpayment.value = "$"+NumFormat(parseInt(mpaymnt*12));
		form.tpayment.value = "$"+NumFormat(parseInt((mpaymnt*12)*(form.yrterm.value)));
		form.mprinciple.value = "$"+NumFormat(parseInt(((mpaymnt*12)*(form.yrterm.value))-(_StrTran(form.principal.value,",",""))));

	}	

// 30 or 15 Script
    function compute30or15Form2(form) {

        if ((form.yrterm2.value == null || form.yrterm2.value.length == 0) ||
            (form.interest.value == null || form.interest.value.length == 0)) {
            return;
        }

        if (!checkNumber(form.yrterm2, 1, 480, "# of payments") ||
            !checkNumber(form.interest, 0, 99, "Interest")) {
            form.bipayment.value = "Invalid";
            return;
        }
	var thenumberofpayments = form.yrterm2.value * 12;
	var thenumberofpayments2 = form.yrterm.value * 12;
	var theinterestrate = form.interest.value;
	var theprincipal =  _StrTran(form.principal.value,",","");

        i /= 12;
        var pow = 1;
        	for (var j = 0; j < thenumberofpayments2; j++)
            	pow = pow * (1 + i);
		var mpaymnt = (theprincipal * pow * i) / (pow - 1);


        var i = theinterestrate;
		if (i == 0) 
			i = .001;

        if (i > 1.0) {
            i = i / 100.0;
            
        }

        i /= 12;
        var pow = 1;
        	for (var j = 0; j < thenumberofpayments; j++)
            	pow = pow * (1 + i);
		var xpayment = (theprincipal * pow * i) / (pow - 1);

        form.bipayment.value = "$"+NumFormat(parseInt(xpayment));
		form.biyrpayment.value = "$"+NumFormat(parseInt(xpayment*12));
		form.bitpayment.value = "$"+NumFormat(parseInt(xpayment*12*form.yrterm2.value));
		form.bprinciple.value = "$"+NumFormat(parseInt((xpayment*12*form.yrterm2.value)-_StrTran(form.principal.value,",","")));

	}

// Monthly Payment Scripts

function computeMonthlyPaymentsForm(form) {
	if ((form.payments.value == null || form.payments.value.length == 0) ||
			(form.interest.value == null || form.interest.value.length == 0) ||
			(form.perdown.value == null || form.perdown.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.perdown, 0, 99, "Percent Down")) {
			form.payment.value = "Invalid";
			return;
	}
	var thenumberofpayments = form.payments.value * 12;
	var theinterestrate = form.interest.value;
	var theprincipal = _StrTran(form.principal.value,",","");
	var thedownpayment = form.perdown.value;
	
	
	//
	// Check / Set percent down to correct value!
	//
        if (thedownpayment > 1.0) {
            thedownpayment = thedownpayment / 100.0;
       }


	
	var adjamt = theprincipal * thedownpayment;
	theprincipal = theprincipal - adjamt;

        var i = theinterestrate;
		if (i == 0) 
			i = .001;

        if (i > 1.0) {
            i = i / 100.0;
            //form.interest.value = i;
        }


        i /= 12;
        var pow = 1;
        for (var j = 0; j < thenumberofpayments; j++)
            pow = pow * (1 + i);
		var mpaymnt = (theprincipal * pow * i) / (pow - 1);

        form.payment.value = "$"+NumFormat(parseInt(mpaymnt));
		form.netpayment.value = "$"+NumFormat(parseInt(mpaymnt+(_StrTran(form.taxes.value,",","")/12)+(_StrTran(form.HOinsurance.value,",","")/12)));
    }
		
// Monthly vs. BiWeekly Script
    function computeMonthlyVsBiweeklyForm(form) {

        if ((form.yrterm.value == null || form.yrterm.value.value == 30) ||
            (form.interest.value == null || form.interest.value.length == 0)) {
            return;
        }

        if (!checkNumber(form.yrterm, 1, 480, "# of payments") ||
            !checkNumber(form.interest, 3, 16, "Interest")) {
            form.payment.value = "Invalid";
            return;
        }
        var thenumberofpayments = form.yrterm.value * 12;
        var theinterestrate = form.interest.value;
        var theprincipal = _StrTran(form.principal.value,",","");



        var i = theinterestrate;

        if (i > 1.0) {
            i = i / 100.0;

        }


        i /= 12;
        var pow = 1;
                for (var j = 0; j < thenumberofpayments; j++)
                    pow = pow * (1 + i);
                var mpaymnt = (theprincipal * pow * i) / (pow - 1)
                form.biterm.value = parseInt(form.yrterm.value - form.interest.value + 1);
                form.payment.value = "$"+NumFormat(parseInt(mpaymnt));
                form.bipayment.value = "$"+NumFormat(parseInt(mpaymnt/2));
                form.yrpayment.value = "$"+NumFormat(parseInt(mpaymnt*12));
                form.biyrpayment.value = "$"+NumFormat(parseInt((mpaymnt/2)*26));
                form.tpayment.value = "$"+NumFormat(parseInt(mpaymnt*12)*(form.yrterm.value));
                form.bitpayment.value = "$"+NumFormat(parseInt((mpaymnt/2)*26)*(form.biterm.value));
                form.mprinciple.value = "$"+NumFormat(parseInt(((mpaymnt*12)*(form.yrterm.value))-(_StrTran(form.principal.value,",",""))));
                form.bprinciple.value = "$"+NumFormat(parseInt((((mpaymnt/2)*26)*(form.biterm.value))-(_StrTran(form.principal.value,",",""))));
                form.savings2.value =  "$"+NumFormat(parseInt((((mpaymnt*12)*(form.yrterm.value))-(_StrTran(form.principal.value,",","")))-parseInt((((mpaymnt/2)*26)*(form.biterm.value))-(_StrTran(form.principal.value,",","")))));
    }

// Options Scripts
 function computeOptionsForm(form) {


	var timeinhouse = (form.time1.value*12);

        xx = Number((_StrTran(form.payment1.value,",",""))*timeinhouse);
		xx += Number(_StrTran(form.penalty1.value,",",""));
		xx += Number(_StrTran(form.points1.value,",",""));
		xx += Number(_StrTran(form.remaining1.value,",",""));
		form.cost1.value = "$"+NumFormat(parseInt(xx));

        yy = Number((_StrTran(form.payment2.value,",",""))*timeinhouse);
		yy += Number(_StrTran(form.penalty2.value,",",""));
		yy += Number(_StrTran(form.points2.value,",",""));
		yy += Number(_StrTran(form.remaining2.value,",",""));
        form.cost2.value = "$"+NumFormat(parseInt(yy));

}

// Refinance Form Scripts
function computeRefinanceForm(form) {

    var pmt1 = form.payment.value;
    var prin1 = form.principal.value;
    var intPort1 = 0;
    var prinPort1 = 0;
    var accumInt1 = 0;
    var accumPrin1 = 0;
    var i1 = form.intRate.value;

    if (i1 > 1.0) {
        i1 = i1 / 100.0;
        //BF
        //form.intRate.value = i1;
    }

    var i1  = i1  / 12;
    var i2 = form.intRate2.value;

       if (i2 > 1.0) {
           i2 = i2 / 100.0;

       }

       var i2  = i2  / 12;
    var count1 = 0;

    while(prin1 > 0) {
        intPort1 = prin1 * i1;
        prinPort1 = pmt1 - intPort1;
        prin1 = prin1 - prinPort1;
        accumPrin1 = accumPrin1 + prinPort1;
        accumInt1 = accumInt1 + intPort1;
        count1 = count1 + 1;
        if(count1 > 600) {break; } else {continue; }
       }

    form.origInt.value = "$" + parseInt(accumInt1,10);
    var pow = 1;
    for (var j = 0; j < form.nper2.value *12; j++)
        pow = pow * (1 + i2);
    var fpayment2 = (form.principal.value * pow * i2) / (pow - 1);
    form.payment2.value = "$" + parseInt(fpayment2,10) + "." + parseInt(fpayment2 % 1 * 100,10);
   var fmoSave = form.payment.value - fpayment2;
   form.moSave.value = "$" + parseInt(fmoSave,10) + "." + parseInt(fmoSave % 1 *100,10);
   var ftotInt2 = (fpayment2 * form.nper2.value *12) - form.principal.value;
   form.totInt2.value = "$" + parseInt(ftotInt2,10);
   var fintSave = accumInt1 - ftotInt2;
		if (fintSave < 0) 
			fintSave *= (-1);
    form.intSave.value = "$" + parseInt(fintSave,10);
    form.closeMo.value = parseInt(form.closingCost.value / fmoSave,10);
   var fnetSave = fintSave - form.closingCost.value;
		if (fnetSave < 0)
			fnetSave *= (-1);
   form.netSave.value = "$" + parseInt(fnetSave,10);

}



function clearRefinanceForm(form)
{

    form.principal.value = "";
    form.payment.value = "";
    form.interest.value = "";
    form.interest2.value = "";
    form.term.value = "";
    form.closingCost.value = "";
    form.payment2.value = "";
    form.savings.value = "";
    form.breakeven.value = "";
    form.IntSaved.value = "";
    form.netSave.value = "";
    form.Rinterest.value = "";
}

// Rent vs Purchase Script
 function computeRentVsPurchaseForm(form) {

        if ((form.payments.value == null || form.payments.value.length == 0) ||
            (form.interest.value == null || form.interest.value.length == 0) ||
            (form.perdown.value == null || form.perdown.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.perdown, 0, 99, "Percent Down")) {
            form.payment.value = "Invalid";
            return;
        }
	var thenumberofpayments = form.payments.value * 12;
	var theinterestrate = form.interest.value;
	var theprincipal = _StrTran(form.principal.value,",","");
	var thedownpayment = form.perdown.value;
	var thetaxbracket = form.taxbracket.value;

        if (thedownpayment > 1.0) {
            thedownpayment = thedownpayment / 100.0;
       }

	var adjamt = theprincipal * thedownpayment;
	theprincipal = theprincipal - adjamt;

        var i = theinterestrate;
		if (i == 0) 
			i = .001;

        if (i > 1.0) {
            i = i / 100.0;
           
        }

         if (thetaxbracket > 1.0) {
            thetaxbracket = thetaxbracket / 100.0;
        }


        i /= 12;
        var pow = 1;
        for (var j = 0; j < thenumberofpayments; j++)
            pow = pow * (1 + i);
		var mpaymnt = (theprincipal * pow * i) / (pow - 1);

        form.payment.value = "$"+NumFormat(parseInt(mpaymnt));
		form.netpayment.value = "$"+NumFormat(parseInt(mpaymnt+(_StrTran(form.taxes.value,",","")/12)+(_StrTran(form.HOinsurance.value,",","")/12)));
		form.TRent.value = "$"+NumFormat(parseInt(_StrTran(form.rent.value,",","")*12*form.years.value));
		form.TMortgage.value = "$"+NumFormat(parseInt(((mpaymnt+(_StrTran(form.taxes.value,",","")/12)+(_StrTran(form.HOinsurance.value,",","")/12))*12*form.years.value)-((((form.interest.value*theprincipal)/12)+(_StrTran(form.taxes.value,",","")/12))*thetaxbracket)));
    }
