// JavaScript Document
/***************************
(c) 2008 www.TUFaT.com
All Rights Reserved. Please
do not re-sell/re-distribute
this software.
***************************/
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 computeMonthlyPayment(prin, numPmts, intRate) {

var pmtAmt = 0;

if(intRate == 0) {
   pmtAmt = prin / numPmts;
} else {
   
   if (intRate >= 1.0) {
     intRate = intRate / 100.0;
   }
   intRate /= 12;

   var pow = 1;
   for (var j = 0; j < numPmts; j++)
      pow = pow * (1 + intRate);

   pmtAmt = (prin * pow * intRate) / (pow - 1);

}

return pmtAmt;

}

function computeIntRate(myNumPmts, myPrin, myPmtAmt, myGuess) {

var myDecRate = 0;

if(myGuess.length == 0 || myGuess == 0) {
   var myDecGuess = 10;
   } else {
   var myDecGuess = myGuess;
   if(myDecGuess >= 1) {
      myDecGuess = myDecGuess /100;
      }
   }

var myDecRate = myDecGuess / 12;
var myNewPmtAmt = 0;
var pow = 1;
var j = 0;

for (j = 0; j < myNumPmts; j++) {
   pow = pow * (eval(1) + eval(myDecRate));
}

myNewPmtAmt = (myPrin * pow * myDecRate) / (pow - 1);

//2 DEC PLACE AMOUNT
var decPlace2Rate = (eval(myDecGuess) + eval(.01)) / 12;
var decPlace2Amt = 0;
pow = 1;
j=0;
for (j = 0; j < myNumPmts; j++) {
   pow = pow * (eval(1) + eval(decPlace2Rate));
}
var decPlace2PmtAmt = (myPrin * pow * decPlace2Rate) / (pow - 1);
decPlace2Amt = eval(decPlace2PmtAmt) - eval(myNewPmtAmt);

//3 DEC PLACE AMOUNT
var decPlace3Rate = (eval(myDecGuess) + eval(.001)) / 12;
var decPlace3Amt = 0;
pow = 1;
j=0;
for (j = 0; j < myNumPmts; j++) {
   pow = pow * (eval(1) + eval(decPlace3Rate));
}
var decPlace3PmtAmt = (myPrin * pow * decPlace3Rate) / (pow - 1);
decPlace3Amt = eval(decPlace3PmtAmt) - eval(myNewPmtAmt);

//4 DEC PLACE AMOUNT
var decPlace4Rate = (eval(myDecGuess) + eval(.0001)) / 12;
var decPlace4Amt = 0;
pow = 1;
j=0;
for (j = 0; j < myNumPmts; j++) {
   pow = pow * (eval(1) + eval(decPlace4Rate));
}
var decPlace4PmtAmt = (myPrin * pow * decPlace4Rate) / (pow - 1);
decPlace4Amt = eval(decPlace4PmtAmt) - eval(myNewPmtAmt);

//5 DEC PLACE AMOUNT
var decPlace5Rate = (eval(myDecGuess) + eval(.00001)) / 12;
var decPlace5Amt = 0;
pow = 1;
j=0;
for (j = 0; j < myNumPmts; j++) {
   pow = pow * (eval(1) + eval(decPlace5Rate));
}
var decPlace5PmtAmt = (myPrin * pow * decPlace5Rate) / (pow - 1);
decPlace5Amt = eval(decPlace5PmtAmt) - eval(myNewPmtAmt);

var myPmtDiff = 0;

if(myNewPmtAmt < myPmtAmt) {

   while(myNewPmtAmt < myPmtAmt) {

      myPmtDiff = eval(myPmtAmt) - eval(myNewPmtAmt);
      if(myPmtDiff > decPlace2Amt) {
         myDecRate = eval(myDecRate) + eval(.01 / 12);
      } else
      if(myPmtDiff > decPlace3Amt) {
         myDecRate = eval(myDecRate) + eval(.001 / 12);
      } else
      if(myPmtDiff > decPlace4Amt) {
         myDecRate = eval(myDecRate) + eval(.0001 / 12);
      } else
      if(myPmtDiff > decPlace5Amt) {
         myDecRate = eval(myDecRate) + eval(.00001 / 12);
      } else {
         myDecRate = eval(myDecRate) + eval(.000001 / 12);
      }

      pow = 1
      j = 0;
      
      for (j = 0; j < myNumPmts; j++) {
         pow = pow * (eval(1) + eval(myDecRate));
      }
      myNewPmtAmt = (myPrin * pow * myDecRate) / (pow - 1);
   }

} else {


   while(myNewPmtAmt > myPmtAmt) {

      myPmtDiff = eval(myNewPmtAmt) - eval(myPmtAmt);
      if(myPmtDiff > decPlace2Amt) {
         myDecRate = eval(myDecRate) - eval(.01 / 12);
      } else
      if(myPmtDiff > decPlace3Amt) {
         myDecRate = eval(myDecRate) - eval(.001 / 12);
      } else
      if(myPmtDiff > decPlace4Amt) {
         myDecRate = eval(myDecRate) - eval(.0001 / 12);
      } else
      if(myPmtDiff > decPlace5Amt) {
         myDecRate = eval(myDecRate) - eval(.00001 / 12);
      } else {
         myDecRate = eval(myDecRate) - eval(.000001 / 12);
      }

      pow = 1
      j = 0;
      
      for (j = 0; j < myNumPmts; j++) {
         pow = pow * (eval(1) + eval(myDecRate));
      }
      myNewPmtAmt = (myPrin * pow * myDecRate) / (pow - 1);
   }


}

myDecRate = myDecRate * 12 * 100;

return myDecRate;

}

function computeAPR(form) {

   if(document.mortgageAPR.principal.value == 0 || document.mortgageAPR.principal.value == "") {
      alert("Please enter the mortgage's principal amount.");
      document.mortgageAPR.principal.focus();
   } else
   if(document.mortgageAPR.intRate.value == 0 || document.mortgageAPR.intRate.value == "") {
      alert("Please enter the mortgage's quoted interest rate.");
      document.mortgageAPR.intRate.focus();
   } else
   if(document.mortgageAPR.numYears.value == 0 || document.mortgageAPR.numYears.value == "") {
      alert("Please enter the mortgage's term in number of years.");
      document.mortgageAPR.numYears.focus();
   } else {

      var v_principal = stripNum(document.mortgageAPR.principal.value);
      var v_intRate = stripNum(document.mortgageAPR.intRate.value);
      var v_numYears = stripNum(document.mortgageAPR.numYears.value);
      var v_numMonths = v_numYears * 12;
      var v_points = stripNum(document.mortgageAPR.points.value);
      var v_other = stripNum(document.mortgageAPR.other.value);

      var v_pi_pmt = computeMonthlyPayment(v_principal, v_numMonths, v_intRate);
      var v_point_perc = v_points;
      if(v_points >= 1) {
         v_point_perc = v_points /100;
      }
      var v_point_cost = v_principal * v_point_perc;

      var v_upfront = eval(v_point_cost) + eval(v_other);
      var v_eff_loan_amt = eval(v_upfront) + eval(v_principal);
      var v_eff_pmt = computeMonthlyPayment(v_eff_loan_amt, v_numMonths, v_intRate);
      var v_eff_apr = computeIntRate(v_numMonths, v_principal, v_eff_pmt, v_intRate);
	  
	document.getElementById("div01").innerHTML='$'+formatNumberDec(v_principal,2,1)+' Loan <br/>at '+formatNumberDec(v_intRate,2,1)+' % for '+v_numYears+' Years ';
	document.getElementById("div02").innerHTML='Principal and Interest Monthly Payment: $'+formatNumberDec(v_pi_pmt,2,1);
    document.getElementById("div03").innerHTML='With '+formatNumberDec((v_point_perc*100),3,1)+' % points ($ '+formatNumberDec((v_points*v_principal),2,1)+') and other costs of $ '+formatNumberDec(v_other,2,1)+'';
    document.getElementById("div04").innerHTML='Your total upfront costs are: $ '+formatNumberDec(v_upfront,2,1)+'';
	document.getElementById("div05").innerHTML='So the effective amount of your loan is: $ '+formatNumberDec(v_eff_loan_amt,2,1)+'';
	document.getElementById("div06").innerHTML='The Monthly Payment for this amount would be: $ '+formatNumberDec(v_eff_pmt,2,1)+'';
	document.getElementById("div07").innerHTML='But the loan amount is really $ '+formatNumberDec(v_principal,2,1)+', <br />so The APR is therefore '+formatNumberDec(v_eff_apr,4,0)+' %';
	document.getElementById("results").style.display='block';

   }
}
	
function round(x) {
  return Math.round(x*100)/100;
}
function sum (y)
{ answer = a + b + c;
}

