// compressed for performance - uncompressed code and notice available at URI http://www.rbvrealestate.com/resources/js/calc_mortgage_uncompressed.js
function stripNum(num) { var iPercent
var iDollar
var iSpace
var iComma
var numLength = num.length
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 formatCurrency(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 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 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(document.getElementById('mortgagePayment').principal.value == 0 || document.getElementById('mortgagePayment').principal.value == "") { alert("Please enter the mortgage's principal amount."); document.getElementById('mortgagePayment').principal.focus();} else
if(document.getElementById('mortgagePayment').intRate.value == 0 || document.getElementById('mortgagePayment').intRate.value == "") { alert("Please enter the mortgage's annual interest rate."); document.getElementById('mortgagePayment').intRate.focus();} else
if(document.getElementById('mortgagePayment').numYears.value == 0 || document.getElementById('mortgagePayment').numYears.value == "") { alert("Please enter the mortgage's term in number of years."); document.getElementById('mortgagePayment').numYears.focus();} else { var Vprincipal = stripNum(document.getElementById('mortgagePayment').principal.value); var VintRate = stripNum(document.getElementById('mortgagePayment').intRate.value); var VnumYears = stripNum(document.getElementById('mortgagePayment').numYears.value); var VannualTax = document.getElementById('mortgagePayment').annualTax.value; var VmonthlyTax =0; if(VannualTax == 0 || VannualTax == "") { VannualTax = 0; VmonthlyTax =0;} else { VannualTax = stripNum(VannualTax); VmonthlyTax = VannualTax / 12; VmonthlyTax *= 100; VmonthlyTax = Math.round(VmonthlyTax); VmonthlyTax /= 100;}
var VannualInsurance = document.getElementById('mortgagePayment').annualInsurance.value; var VmonthlyInsurance = 0; if(VannualInsurance == 0 || VannualInsurance == "") { VannualInsurance = 0; VmonthlyInsurance = 0;} else { VannualInsurance = stripNum(VannualInsurance); VmonthlyInsurance = VannualInsurance / 12; VmonthlyInsurance *= 100; VmonthlyInsurance = Math.round(VmonthlyInsurance); VmonthlyInsurance /= 100;}
var VmonthlyPMI = document.getElementById('mortgagePayment').monthlyPMI.value; if(VmonthlyPMI == 0 || VmonthlyPMI == "") { VmonthlyPMI = 0;} else { VmonthlyPMI = stripNum(VmonthlyPMI);}
var VotherPmts = eval(VmonthlyTax) + eval(VmonthlyInsurance) + eval(VmonthlyPMI); var VnumPmts = VnumYears * 12; var VpmtAmt = computeMonthlyPayment(Vprincipal, VnumPmts, VintRate); var VtotalMtgPmt = eval(VpmtAmt) + eval(VotherPmts); document.getElementById('mortgagePayment').monthlyPI.value = formatCurrency(VpmtAmt); document.getElementById('mortgagePayment').otherPmts.value = formatCurrency(VotherPmts); document.getElementById('mortgagePayment').monthlyPmt.value = formatCurrency(VtotalMtgPmt);}
}
function monthlyAmortSched(form) { if(document.getElementById('mortgagePayment').principal.value == 0 || document.getElementById('mortgagePayment').principal.value == "") { alert("Please enter the mortgage's principal amount."); document.getElementById('mortgagePayment').principal.focus();} else
if(document.getElementById('mortgagePayment').intRate.value == 0 || document.getElementById('mortgagePayment').intRate.value == "") { alert("Please enter the mortgage's annual interest rate."); document.getElementById('mortgagePayment').intRate.focus();} else
if(document.getElementById('mortgagePayment').numYears.value == 0 || document.getElementById('mortgagePayment').numYears.value == "") { alert("Please enter the mortgage's term in number of years."); document.getElementById('mortgagePayment').numYears.focus();} else { var Vprincipal = stripNum(document.getElementById('mortgagePayment').principal.value); var VintRate = stripNum(document.getElementById('mortgagePayment').intRate.value); var VnumYears = stripNum(document.getElementById('mortgagePayment').numYears.value); var VannualTax = document.getElementById('mortgagePayment').annualTax.value; var VmonthlyTax =0; if(VannualTax == 0 || VannualTax == "") { VannualTax = 0; VmonthlyTax =0;} else { VannualTax = stripNum(VannualTax); VmonthlyTax = VannualTax / 12; VmonthlyTax *= 100; VmonthlyTax = Math.round(VmonthlyTax); VmonthlyTax /= 100;}
var VannualInsurance = document.getElementById('mortgagePayment').annualInsurance.value; var VmonthlyInsurance = 0; if(VannualInsurance == 0 || VannualInsurance == "") { VannualInsurance = 0; VmonthlyInsurance = 0;} else { VannualInsurance = stripNum(VannualInsurance); VmonthlyInsurance = VannualInsurance / 12; VmonthlyInsurance *= 100; VmonthlyInsurance = Math.round(VmonthlyInsurance); VmonthlyInsurance /= 100;}
var VmonthlyPMI = document.getElementById('mortgagePayment').monthlyPMI.value; if(VmonthlyPMI == 0 || VmonthlyPMI == "") { VmonthlyPMI = 0;} else { VmonthlyPMI = stripNum(VmonthlyPMI);}
var VotherPmts = eval(VmonthlyTax) + eval(VmonthlyInsurance) + eval(VmonthlyPMI); var VnumPmts = VnumYears * 12; var pmtAmt = computeMonthlyPayment(Vprincipal, VnumPmts, VintRate); var VtotalMtgPmt = eval(pmtAmt) + eval(VotherPmts); var prin = Vprincipal; var Vint = VintRate; if(Vint >= 1) { Vint /= 100;}
Vint /= 12; var nPer = VnumPmts; var intPort = 0; var accumInt = 0; var prinPort = 0; var accumPrin = 0; var count = 0; var pmtRow = ""; var pmtNum = 0; var today = new Date(); var dayFactor = today.getTime(); var pmtDay = today.getDate(); var loanMM = today.getMonth() + 1; var loanYY = today.getYear(); if(loanYY < 1900) { loanYY += 1900;}
var loanDate = (loanMM + "/" + pmtDay + "/" + loanYY); var monthMS = 86400000 * 30.4; var pmtDate = 0; var displayPmtAmt = 0; var accumYearPrin = 0; var accumYearInt = 0; while(count < nPer) { if(count < (nPer - 1)) { intPort = prin * Vint; intPort *= 100; intPort = Math.round(intPort); intPort /= 100; accumInt = eval(accumInt) + eval(intPort); accumYearInt = eval(accumYearInt) + eval(intPort); prinPort = eval(pmtAmt) - eval(intPort); prinPort *= 100; prinPort = Math.round(prinPort); prinPort /= 100; accumPrin = eval(accumPrin) + eval(prinPort); accumYearPrin = eval(accumYearPrin) + eval(prinPort); prin = eval(prin) - eval(prinPort); displayPmtAmt = eval(prinPort) + eval(intPort);} else { intPort = prin * Vint; intPort *= 100; intPort = Math.round(intPort); intPort /= 100; accumInt = eval(accumInt) + eval(intPort); accumYearInt = eval(accumYearInt) + eval(intPort); prinPort = prin; accumPrin = eval(accumPrin) + eval(prinPort); accumYearPrin = eval(accumYearPrin) + eval(prinPort); prin = 0; displayPmtAmt = eval(prinPort) + eval(intPort);}
count = eval(count) + eval(1); pmtNum = eval(pmtNum) + eval(1); dayFactor = eval(dayFactor) + eval(monthMS); pmtDate = new Date(dayFactor); pmtMonth = pmtDate.getMonth(); pmtMonth = pmtMonth + 1; pmtYear = pmtDate.getYear(); if(pmtYear < 1900) { pmtYear += 1900;}
pmtString = (pmtMonth + "/" + pmtDay + "/" + pmtYear); pmtRow = ("" + pmtRow + "<tr><td align=right><font face='arial'><small>" + pmtNum + "</small></font></td><td align=right><font face='arial'><small>" + pmtString + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(prinPort) + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(intPort) + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(displayPmtAmt) + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(prin) + "</small></font></td></tr>"); if(pmtMonth == 12 || count == nPer) { pmtRow = ("" + pmtRow + "<tr bgcolor='#dddddd'><td align=right><font face='arial'><small>Total</small></font></td><td align=left><font face='arial'><small>" + pmtYear + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(accumYearPrin) + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(accumYearInt) + "</small></font></td><td align=right><font face='arial'><small> </small></font></td><td align=right><font face='arial'><small> </small></font></td></tr>"); accumYearPrin = 0; accumYearInt = 0;}
if(count > 600) { alert("Using your current entries you will never pay off this loan."); break;} else { continue;}
}
var part1 = ("<head><title>Amortization Schedule</title></head>" + "<body bgcolor= '#FFFFFF'><br><br><center><font face='arial'><big><strong>Amortization Schedule</strong></big></font></center>"); var part2 = ("<center><table border=1 cellpadding=2 cellspacing=0><tr><td colspan=6><font face='arial'><small>Loan Date: " + loanDate + "<br>Principal: $" + formatNumber(Vprincipal) + "<br># of Payments: " + nPer + "<br>Interest Rate: " + formatNumber(VintRate) + "%<br>Payment: $" + formatNumber(pmtAmt) + "</small></font></td></tr><tr><td colspan=6><center><font face='arial'>Schedule of Payments</font><br><font face='arial'><small><small>Please allow for slight rounding differences.</small></small></font></center></td></tr><tr bgcolor='silver'><td align='center'><font face='arial'><small>Pmt #</small></font></td><td align='center'><font face='arial'><small>Date</small></font></td><td align='center'><font face='arial'><small>Principal</small></font></td><td align='center'><font face='arial'><small>Interest</small></font></td><td align='center'><font face='arial'><small>Payment</small></font></td><td align='center'><font face='arial'><small>Balance</small></font></td></tr>"); var part3 = ("" + pmtRow + ""); var totalPmts = eval(accumPrin) + eval(accumInt); var part4 = ("<tr><td colspan='2'><font face='arial'><small>Grand Total</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(accumPrin) + "</small></font></td><td align=right><font face='arial'><small>" + formatCurrency(accumInt) + "</small></font></td><td><font face='arial'><small>" + formatCurrency(totalPmts,2,1) + "</small></font></td><td> </td></tr></table><br><center><form method='post'><input type='button' value='Close Window' onClick='window.close()'></form></center></body></html>"); var schedule = (part1 + "" + part2 + "" + part3 + part4 + ""); reportWin = window.open("","","width=500,height=400,toolbar=yes,menubar=yes,scrollbars=yes"); reportWin.document.write(schedule); reportWin.document.close();}
}
{
var helpprincipal = '<h4>Mortgage Loan Amount</h4><p>ENTER: The total amount you would be borrowing to purchase the home.</p>'
var helpintRate = '<h4>Annual Interest Rate</h4><p>ENTER: The annual interest rate you expect to pay on this mortgage. You can enter the rate either as a percentage (8.25) or as a decimal (.0825), whichever you prefer.</p>'
var helpnumYears = '<h4>Mortgage Loan Term</h4><p>ENTER: The number of years you will be financing the home loan for.</p>'
var helpannualTax = '<h4>Annual Real Estate Taxes</h4><p>ENTER: The annual property tax payment you expect to pay. As a rule of thumb, you can expect to pay 1.2% (home price X .012) of the purchase price per year.</p>'
var helpannualInsurance = '<h4>Annual Homeowners Insurance</h4><p>ENTER: The annual homeowner\'s insurance payment you expect to pay. As a rule of thumb, you can expect to pay 0.15% (home price X .0015) of the purchase price per year.</p>'
var helpmonthlyPMI = '<h4>Monthly PMI</h4><p>ENTER: The monthly Private Mortgage Insurance you may pay if your down payment is less than 20%.<p>Discuss PMI with your mortgage broker. In most instances PMI may be avoided by structuring your loan program with a combined first and second mortgage.</p>'
var helpmonthlyPI = '<h4>Monthly Principal and Interest Payment</h4><p>RESULT: This how much your monthly principal and interest payment will be.</p>'
var helpotherPmts = '<h4>Monthly Taxes, Insurance and PMI Payment</h4><p>RESULT: This is the total of your other monthly payments (taxes, insurance & PMI).</p>'
var helpmonthlyPmt = '<h4>Total Monthly Mortgage Payment</h4><p>RESULT: This the total of all monthly payments related to your mortgage.</p>'	
}