// JavaScript Document


function stripNum(num) {

var iPercent
var iDollar
var iSpace
var iComma
var numLength = num.length

//lalalla Line #114

if(numLength > 0) {

   num=num.toString();

   iPercent = num.indexOf("%");
   if(iPercent >= 0) {
      num=num.substring(0,iPercent) + "" + num.substring(iPercent + 1,numLength);
      numLength=num.length;
      }
   iDollar = num.indexOf("$");
   if(iDollar >= 0) {
      num=num.substring(0,iDollar) + "" + num.substring(iDollar + 1,numLength);
      numLength=num.length;
      }
   iSpace = num.indexOf(" ");
   if(iSpace >= 0) {
      num=num.substring(0,iSpace) + "" + num.substring(iSpace + 1,numLength);
      numLength=num.length;
      }
   iComma = num.indexOf(",");
   if(iComma >= 0) {
      while(iComma >=1) {
         num=num.substring(0,iComma) + "" + num.substring(iComma + 1,numLength);
         numLength=num.length;
         iComma = num.indexOf(",");
      }
      }

      num = eval(num);


} else {

num = 0;

}

return num;

}




function formatNumber(num) {

var isNeg=0;

    if(num < 0) {
       num=num*-1;
       isNeg=1;
    }

    
	onum=Math.round(num*100)/100;
		
	integer=Math.floor(onum);

	if (Math.ceil(onum) == integer) {
		decimal="00";
	} else{
		decimal=Math.round((onum-integer)*100)
	}
	decimal=decimal.toString();
	if (decimal.length<2) decimal="0"+decimal;

	integer=integer.toString();
	var tmpnum="";
	var tmpinteger="";
	var y=0;

	for (x=integer.length;x>0;x--) {
		tmpnum=tmpnum+integer.charAt(x-1);
		y=y+1;
		if (y==3 & x>1) {
			tmpnum=tmpnum+",";
			y=0;
		}
	}

	for (x=tmpnum.length;x>0;x--) {
		tmpinteger=tmpinteger+tmpnum.charAt(x-1);
	}
		
	finNum=tmpinteger+"."+decimal;

    if(isNeg == 1) {
       finNum = "-" + finNum;
    }

	return finNum;
}


function computeForm(form) {

if(form.paymentFirst.value == "") {
   alert("Please enter the amount of your first mortgage payment.");
   form.paymentFirst.focus();
} else 
if(form.principalFirst.value == "") {
   alert("Please enter the your first mortgage's current principal balance.");
   form.principalFirst.focus();
} else
if(form.intRateFirst.value == "") {
   alert("Please enter your first mortgage's current annual interest rate.");
   form.intRateFirst.focus();
} else
if(form.paymentSec.value == "") {
   alert("Please enter the amount of your second mortgage payment.");
   form.paymentSec.focus();
} else 
if(form.principalSec.value == "") {
   alert("Please enter the your second mortgage's current principal balance.");
   form.principalSec.focus();
} else
if(form.intRateSec.value == "") {
   alert("Please enter your second mortgage's current annual interest rate.");
   form.intRateSec.focus();
} else
if(form.intRateRefin.value == "") {
   alert("Please enter the annual interest rate you'll be refinancing at.");
} else
if(form.nperRefin.value == "") {
   alert("Please enter the number of years you are refinancing for.");
} else
if(form.closingCost.value == "") {
   alert("Please enter the closing cost percentage points.");
} else
if(stripNum(form.intRateRefin.value) > stripNum(form.intRateFirst.value) || stripNum(form.intRateRefin.value) > stripNum(form.intRateSec.value)) {
   alert("You've entered a refinancing rate that is higher than your present rate.  The refinancing rate must be lower than your present rate in order for this calculator to work.");
} else {

var VprincipalFirst = stripNum(form.principalFirst.value);
var VprincipalSec = stripNum(form.principalSec.value);
var VprinCombo = eval(VprincipalFirst) + eval(VprincipalSec);
var closeCostAmt = 0;

if(form.ptsDol.selectedIndex == 0) {
    var closeCostPerc = stripNum(form.closingCost.value);
   // if(closeCostPerc >= 1) {
       closeCostPerc = closeCostPerc / 100;
   // } else {
   //    closeCostPerc = closeCostPerc;
   // }
    closeCostAmt = closeCostPerc * VprinCombo;
 } else {
    closeCostAmt = stripNum(form.closingCost.value);
 }

//CALCULATE FIRST MORTGAGE
var pmtFirst = stripNum(form.paymentFirst.value);
var prinFirst = stripNum(form.principalFirst.value);
var intPortFirst = 0;
var prinPortFirst = 0;
var accumIntFirst = 0;
var accumPrinFirst = 0;

var iFirst = stripNum(form.intRateFirst.value);
if (iFirst >= 1.0) {
iFirst = iFirst / 100.0;
var sumiFirst = iFirst;
}
var iFirst  = iFirst  / 12;

var countFirst = 0;

while(prinFirst > 0) {
   intPortFirst = prinFirst * iFirst;
   prinPortFirst = pmtFirst - intPortFirst;
   prinFirst = prinFirst - prinPortFirst;
   accumPrinFirst = accumPrinFirst + prinPortFirst;
   accumIntFirst = accumIntFirst + intPortFirst;

   countFirst = countFirst + 1;
   if(countFirst > 600) {break; } else {continue; }
}

var VorigInt = accumIntFirst;

//CALCULATE SECOND MORTGAGE
var pmtSec = stripNum(form.paymentSec.value);
var prinSec = stripNum(form.principalSec.value);
var intPortSec = 0;
var prinPortSec = 0;
var accumIntSec = 0;
var accumPrinSec = 0;

var iSec = stripNum(form.intRateSec.value);
if (iSec >= 1.0) {
iSec = iSec / 100.0;
var sumiSec = iSec;
}
var iSec  = iSec  / 12;

var countSec = 0;

while(prinSec > 0) {
   intPortSec = prinSec * iSec;
   prinPortSec = pmtSec - intPortSec;
   prinSec = prinSec - prinPortSec;
   accumPrinSec = accumPrinSec + prinPortSec;
   accumIntSec = accumIntSec + intPortSec;

   countSec = countSec + 1;
   if(countSec > 600) {break; } else {continue; }
}

var VorigInt = eval(VorigInt) + eval(accumIntSec);

form.origInt.value = "$" + formatNumber(VorigInt);
//form.origInt.value = "$" + formatNumber(accumIntFirst);

var VpaymentFirst = stripNum(form.paymentFirst.value);
var VpaymentSec = stripNum(form.paymentSec.value);
var VpmtCombo = eval(VpaymentFirst) + eval(VpaymentSec);

//CALCULATE REFINANCING

var iRefin = stripNum(form.intRateRefin.value);
if (iRefin >= 1.0) {
iRefin = iRefin / 100.0;
var sumiRefin = iRefin;   
}
var iRefin  = iRefin  / 12;

var prinRefin = 0;

if(form.yesNo.selectedIndex == 0) {
   prinRefin = VprinCombo;
} else {
   prinRefin = eval(VprinCombo) + eval(closeCostAmt);
}

var pow = 1;

var VnperRefin = stripNum(form.nperRefin.value);
for (var j = 0; j < VnperRefin *12; j++)
   pow = pow * (1 + iRefin);

var pmtRefin = (prinRefin * pow * iRefin) / (pow - 1);

form.paymentRefin.value = "$" + formatNumber(pmtRefin);

var VmoSave = eval(VpmtCombo) - eval(pmtRefin);
form.moSave.value = "$" + formatNumber(VmoSave);

var VtotIntRefin = (pmtRefin * VnperRefin *12) - prinRefin;
form.totIntRefin.value = "$" + formatNumber(VtotIntRefin);

var VintSave = VorigInt - VtotIntRefin;
   if(VintSave <= 0) {
      form.intSave.value = "$0.00";
   } else {
      form.intSave.value = "$" + formatNumber(VintSave);
   }

//CALCULATE NUMBER OF MONTHS FOR SAVINGS TO OFFSET CLOSING COSTS

var prinFirst2 = stripNum(form.principalFirst.value);
var prinSec2 = stripNum(form.principalSec.value);
var prinRefin2 = eval(VprincipalFirst) + eval(VprincipalSec);

var intPortFirst2 = 0;
var intPortSec2 = 0;
var intPortRefin = 0;

var prinPortFirst2 = 0;
var prinPortSec2 = 0;
var prinPortRefin2 = 0;

var accumIntFirst2 = 0;
var accumIntSec2 = 0;
var accumIntRefin2 = 0;

var accumPrinFirst2 = 0;
var accumPrinSec2 = 0;
var accumPrinRefin2 = 0;

var amortIntSave = 0;

var count3 = 0;

    while(amortIntSave < closeCostAmt) {

        intPortFirst2 = prinFirst2 * iFirst;
        intPortSec2 = prinSec2 * iSec;
        intPortRefin2 = prinRefin2 * iRefin;

        prinPortFirst2 = pmtFirst - intPortFirst2;
        prinPortSec2 = pmtSec - intPortSec2;
        prinPortRefin2 = pmtRefin - intPortRefin2;

        prinFirst2 = prinFirst2 - prinPortFirst2;
        prinSec2 = prinSec2 - prinPortSec2;
        prinRefin2 = prinRefin2 - prinPortRefin2;

        accumPrinFirst2 = accumPrinFirst2 + prinPortFirst2;
        accumPrinSec2 = accumPrinSec2 + prinPortSec2;
        accumPrinRefin2 = accumPrinRefin2 + prinPortRefin2;

        accumIntFirst2 = accumIntFirst2 + intPortFirst2;
        accumIntSec2 = accumIntSec2 + intPortSec2;
        accumIntCombo2 = accumIntFirst2 + accumIntSec2;
        accumIntRefin2 = accumIntRefin2 + intPortRefin2;


        amortIntSave = accumIntCombo2 - accumIntRefin2;

        count3 = count3 + 1;

        if(count3 > 600) {break; } else {continue; }

       }

    if(VintSave <= 0) {
      form.closeMo.value = "N/A";
   } else {
      form.closeMo.value = count3;
   }

   var fnetSave = eval(VintSave) - eval(closeCostAmt);

   var pmtUpDown = "";
      if(pmtRefin > VpmtCombo) {
          pmtUpDown = "increase by $" + formatNumber(eval(pmtRefin) - eval(VpmtCombo)) + "";
          } else {
          pmtUpDown = "decrease by $" + formatNumber(eval(VpmtCombo) - eval(pmtRefin)) + "";
          }

    var intSaveYesNo = "";
      if(VorigInt < VtotIntRefin) {
          intSaveYesNo = "pay an additional $" + formatNumber(eval(VtotIntRefin) - eval(VorigInt)) + " in interest charges over the life of the mortgage.";
          } else {
          intSaveYesNo = "save $" + formatNumber(eval(VorigInt) - eval(VtotIntRefin)) + " in interest charges over the life of the mortgage. However, in order for this refinancing to yield any savings at all you will need to stay in your current home for at least " + count3 + " months.  That's how long it will take for the monthly interest savings to offset the closing costs attributable to refinancing.";
          }

   if(fnetSave <= 0) {
      form.netSave.value = "$0.00";
   } else {
      form.netSave.value = "$" +formatNumber(fnetSave);
   }

var intOneDisplay = stripNum(form.intRateFirst.value);
var intTwoDisplay = stripNum(form.intRateSec.value);
var intThreeDisplay = stripNum(form.intRateRefin.value);

if(intOneDisplay < 1) {
intOneDisplay = formatNumber(intOneDisplay * 100);
}
if(intTwoDisplay < 1) {
intTwoDisplay = formatNumber(intTwoDisplay * 100);
}
if(intThreeDisplay < 1) {
intThreeDisplay = formatNumber(intThreeDisplay * 100);
}

    form.summary.value = "If you refinance your current " + formatNumber(intOneDisplay) + "% mortgage and your current " + formatNumber(intTwoDisplay) + "% mortgage into a single " + formatNumber(intThreeDisplay) + "% mortgage, your monthly payment will " + pmtUpDown + " and you will " + intSaveYesNo + "";

   }

}