//*******************************************
//DO NOT REMOVE THIS COPYWRITE INFO!
//Mortgage Refinancing Calculator
//2001 Daniel C. Peterson ALL RIGHTS RESERVED
//Created: 04/16/2001
//Last Modified: 07/29/2002
//This script may not be copied, edited, distributed or reproduced
//without express written permission from
//Daniel C. Peterson of Web Winder Website Services
//For commercial use rates, contact:
//Dan Peterson:
//Web Winder Website Services
//P.O. Box 11
//Bemidji, MN  56619
//dan@webwinder.com
//http://www.webwinder.com
//Commercial User Licence #:5782-1237-64-1198
//Commercial Licence Date:2008-09-11
//*******************************************



function stripNum(num) {

   num=num.toString();


   var len = num.length;
   var rnum = "";
   var test = "";
   var j = 0;

   var b = num.substring(0,1);
   if(b == "-") {
      rnum = "-";
   }

   for(i = 0; i <= len; i++) {

      b = num.substring(i,i+1);

      if(b == "0" || b == "1" || b == "2" || b == "3" || b == "4" || b == "5" || b == "6" || b == "7" || b == "8" || b == "9" || b == ".") {
         rnum = rnum + "" + b;

      }

   }

   if(rnum == "" || rnum == "-") {
      rnum = 0;
   }

   rnum = Number(rnum);

   return rnum;

}



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) {

var alert_txt = "";

if(form.principal.value == "") {
   alert("Please enter the your mortgage's current principal balance.");
   form.principal.focus();
} else
if(form.payment.value == "") {
   alert("Please enter the amount of your mortgage payment.");
   form.payment.focus();
} else 
if(form.intRate.value == "") {
   alert("Please enter your mortgage's current annual interest rate.");
   form.intRate.focus();
} else
if(form.intRate2.value == "") {
   alert("Please enter the annual interest rate you'll be refinancing at.");
   form.intRate2.focus();
} else
if(form.nper2.value == "") {
   alert("Please enter the number of years you are refinancing for.");
   form.nper2.focus();
} else
if(form.closingCost.value == "") {
   alert("Please enter the closing cost percentage points.");
   form.closingCost.focus();
} else
if(stripNum(form.intRate2.value) > stripNum(form.intRate.value)) {
   alert_txt = "You've entered a refinancing rate that is higher than your present rate.  ";
   alert_txt += "The refinancing rate must be lower than your present rate in ";
   alert_txt += "order for this calculator to work.";
   alert(alert_txt);
} else {



    var pmt1 = stripNum(form.payment.value);

    var prin = stripNum(form.principal.value);

     var prin1 = prin;

    var closeCostAmt = 0;
    var VcloseCost = stripNum(form.closingCost.value);
    if(form.ptsDol.selectedIndex == 0) {
    var closeCostPerc = eval(VcloseCost) / 100;
      closeCostAmt = closeCostPerc * prin;
       } else {
      closeCostAmt = VcloseCost;
       }
     
    

    var intPort1 = 0;

    var prinPort1 = 0;

    var accumInt1 = 0;

    var accumPrin1 = 0;

    var i1 = stripNum(form.intRate.value);

    if (i1 >= 1.0) {

        i1 = i1 / 100.0;

    var sumi1 = i1;

    }

    var i1  = i1  / 12;

    var i2 = stripNum(form.intRate2.value);

       if (i2 >= 1.0) {

           i2 = i2 / 100.0;

        var sumi2 = i2;   

       }

       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 = "$" + formatNumber(accumInt1);

     var prin2 = 0;

    if(form.yesNo.selectedIndex == 0) {
       prin2 = prin;
       } else {
       prin2 = eval(prin) + eval(closeCostAmt);
       }

    var Vnper2 = stripNum(form.nper2.value);
    var pow = 1;

    for (var j = 0; j < Vnper2 *12; j++)

        pow = pow * (1 + i2);

    var fpayment2 = (prin2 * pow * i2) / (pow - 1);

    form.payment2.value = "$" + formatNumber(fpayment2);


   var fmoSave = eval(pmt1) - eval(fpayment2);

   form.moSave.value = "$" + formatNumber(fmoSave);
		
  var ftotInt2 = eval(fpayment2 * Vnper2 *12) - eval(prin2);

   form.totInt2.value = "$" + formatNumber(ftotInt2);

   var fintSave = accumInt1 - ftotInt2;

    if(fintSave <= 0) {
       form.intSave.value = "$0.00";
    } else {
       form.intSave.value = "$" + formatNumber(fintSave);
    }

    var prin3 = prin2;
    var prin4 = prin;

    var intPort3 = 0;
    var intPort4 = 0;

    var prinPort3 = 0;
    var prinPort4 = 0;

    var accumInt3 = 0;
    var accumInt4 = 0;

    var accumPrin3 = 0;
    var accumPrin4 = 0;

    var amortIntSave = 0;

    var count3 = 0;

    while(amortIntSave < closeCostAmt) {

        intPort3 = prin3 * i2;
        intPort4 = prin4 * i1;

        prinPort3 = fpayment2 - intPort3;
        prinPort4 = pmt1 - intPort4;

        prin3 = prin3 - prinPort3;
        prin4 = prin4 - prinPort4;

        accumPrin3 = accumPrin3 + prinPort3;
        accumPrin4 = accumPrin4 + prinPort4;

        accumInt3 = accumInt3 + intPort3;
        accumInt4 = accumInt4 + intPort4;

        amortIntSave = accumInt4 - accumInt3;

        count3 = count3 + 1;

        if(count3 > 600) {break; } else {continue; }

       }


    form.closeMo.value = count3;

   var fnetSave = eval(fintSave) - eval(closeCostAmt);
   
   var pmtUpDown = "";
      if(fpayment2 > pmt1) {
          pmtUpDown = "increase by $" + formatNumber(eval(fpayment2) - eval(pmt1)) + "";
          } else {
          pmtUpDown = "decrease by $" + formatNumber(eval(pmt1) - eval(fpayment2)) + "";
          }

    var intSaveYesNo = "";
      if(accumInt1 < ftotInt2) {
          intSaveYesNo = "pay an additional $" + formatNumber(eval(ftotInt2) - eval(accumInt1)) + " in";
          intSaveYesNo += " interest charges over the life of the mortgage.";
          } else {
          intSaveYesNo = "save $" + formatNumber(eval(accumInt1) - eval(ftotInt2)) + " in ";
intSaveYesNo += "interest charges over the life of the mortgage. However, in order ";
intSaveYesNo += "for this refinancing to yield any savings at all you will need to ";
intSaveYesNo += "stay in your current home for at least " + count3 + " months.  ";
intSaveYesNo += "That's how long it will take for the monthly interest savings to ";
intSaveYesNo += "offset the closing costs attributable to refinancing.";
          }

   if(fnetSave <= 0) {
      form.netSave.value = "$0.00";
   } else {
      form.netSave.value = "$" +formatNumber(fnetSave);
   }

    var v_summary = "If you refinance your current " + formatNumber(sumi1 * 100) + "% ";
    v_summary += "mortgage to a " + formatNumber(sumi2 * 100) + "% mortgage, your ";
    v_summary += "monthly payment will " + pmtUpDown + " and you will " + intSaveYesNo + "";
    form.summary.value = v_summary;

   }
		
}
