// compressed for performance - uncompressed code and notice available at URI http://www.rbvrealestate.com/resources/js/calc_rent_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 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.moRent.value == "" || form.moRent.value == 0) { alert("Please enter the amount of your monthly rent payment."); form.moRent.focus();} else
if(form.homeCost.value == "" || form.homeCost.value == 0) { alert("Please enter the purchase price of the home."); form.homeCost.focus();} else
if(form.noYears.value == "" || form.noYears.value == 0) { alert("Please your number of years you are financing the home for."); form.noYears.focus();} else
if(form.payRate.value == "" || form.payRate.value == 0) { alert("Please enter the mortgage's annual interest rate."); form.payRate.focus();} else
if(form.stayYrs.value == "" || form.payRate.value == 0) { alert("Please enter the number of years you plan to stay in this property."); form.payRate.focus();} else { var VmoRent = stripNum(form.moRent.value); var VtotRent = 0; var VmoRentIns = stripNum(form.moRentIns.value); if(VmoRentIns == "" || VmoRentIns == 0) { VmoRentIns = 0
}
var VinflateRate = stripNum(form.inflateRate.value); if(VinflateRate == "" || VinflateRate == 0) { VinflateRate = 0
} else
if(VinflateRate >= 1) { VinflateRate = VinflateRate / 100;}
VinflateRate = eval(VinflateRate) + eval(1); var VstayYrs = stripNum(form.stayYrs.value); var VstayMonths = VstayYrs * 12; var count = 0; var i = stripNum(form.payRate.value); if (i > 1.0) { i = i / 100.0;}
i /= 12; var VhomeCost = stripNum(form.homeCost.value); var VnoYears = stripNum(form.noYears.value); var VdownPmt = stripNum(form.downPmt.value); var VorigPrin = eval(VhomeCost) - eval(VdownPmt); var intPort = 0; var VaccumInt = 0; var prinPort = 0; var prin = VorigPrin; var noMonths = VnoYears * 12; var pow = 1; for (var j = 0; j < noMonths; j++)
pow = pow * (1 + i); var VmoPmt = (VorigPrin * pow * i) / (pow - 1); var VapprecRate = stripNum(form.apprecRate.value); if(VapprecRate == "" || VapprecRate == 0) { VapprecRate = 0;} else
if(VapprecRate >= 0) { VapprecRate = VapprecRate / 100;}
VapprecRate = eval(VapprecRate) + eval(1); var VaccumApprec = VhomeCost * VapprecRate; var Vpmi = stripNum(form.pmi.value); if(Vpmi == 0 || Vpmi == "") { Vpmi = 0;} else
if(Vpmi >= .01) { Vpmi = Vpmi / 100;}
Vpmi = Vpmi / 12; var pmiYN = 0; var VaccumPmi = 0; var downPayPerc = VdownPmt / VhomeCost; if(downPayPerc < .20) { pmiYN = 1; VaccumPmi = 0;}
var Vfees = stripNum(form.fees.value); if(Vfees == 0 || Vfees == "") { Vfees = 0;} else
if(Vfees >= 1 ) { Vfees = Vfees / 100;}
var VfeeCost = VorigPrin * Vfees; var Vpoints = stripNum(form.points.value); if(Vpoints == 0 || Vpoints == "") { Vpoints = 0;} else
if(Vpoints >= 1 ) { Vpoints = Vpoints / 100;}
var VpointCost = VorigPrin * Vpoints; var VloanCosts= stripNum(form.loanCosts.value); if(VloanCosts == 0 || VloanCosts == "") { VloanCosts = 0;}
var VclosingCosts = eval(VpointCost) + eval(VfeeCost) + eval(VloanCosts); var VinvestIntPort = 0; var VinvestPrin = eval(VdownPmt) + eval(VclosingCosts); var earnInt = stripNum(form.saveRate.value); if (earnInt >= 1.0) { earnInt = earnInt / 100.0;}
earnInt /= 12; var VaccumInflate = 1; while(count < VstayMonths) { if(count > 0 && count % 12 == 0) { VaccumApprec = VaccumApprec * VapprecRate; VmoRent = VmoRent * VinflateRate; VaccumInflate = VaccumInflate * VinflateRate;}
VtotRent = eval(VtotRent) + eval(VmoRent); VtotRent = eval(VtotRent) + eval(VmoRentIns); if(count < noMonths) { intPort = prin * i; VaccumInt = eval(VaccumInt) + eval(intPort)
prinPort = eval(VmoPmt) - eval(intPort); prin = eval(prin) - eval(prinPort);}
if(pmiYN == 1) { VaccumPmi = eval(VaccumPmi) + eval(Vpmi * prin);}
VinvestIntPort = earnInt * VinvestPrin; VinvestPrin = eval(VinvestPrin) + eval(VinvestIntPort); count = eval(count) + eval(1);}
var VassocDues = stripNum(form.assocDues.value); if(VassocDues == "" || VassocDues == 0) { VassocDues = 0;}
var VtotAssocDues = VassocDues * 12 * VstayYrs * VaccumInflate; var VpropTax = stripNum(form.propTax.value); if(VpropTax == "" || VpropTax == 0) { VpropTax = 0;}
var VtotPropTax = VpropTax * VstayYrs * VaccumInflate; var Vmaint = form.maint.value; if(Vmaint == "" || Vmaint == 0) { Vmaint = 0;}
var VtotMaintCost = Vmaint * 12 * VstayYrs * VaccumInflate; var VhomeIns = stripNum(form.homeIns.value); if(VhomeIns == "" || VhomeIns == 0) { VhomeIns = 0;} else
if(VhomeIns >= .01) { VhomeIns = VhomeIns / 100;}
var VtotHomeInsCost = VhomeIns * VhomeCost * VstayYrs * VaccumInflate; var VnetGain = eval(VaccumApprec) - eval(VhomeCost); var VtotTaxDeduct = eval(VaccumInt) + eval(VtotPropTax) + eval(VfeeCost); var VincomeTax = stripNum(form.incomeTax.value); if(VincomeTax == 0 || VincomeTax == "") { VincomeTax = 0;} else
if(VincomeTax >= 1) { VincomeTax = VincomeTax / 100;}
var VtotTaxSave = VincomeTax * VtotTaxDeduct; var VrealtorCom = stripNum(form.realtorCom.value); if(VrealtorCom == 0 || VrealtorCom == "") { VrealtorCom = 0;} else
if(VrealtorCom >= 1) { VrealtorCom = VrealtorCom / 100;}
var VsellCost = VaccumApprec * VrealtorCom; var VinvestEarn = eval(VinvestPrin) - eval(VdownPmt) - eval(VclosingCosts); form.totRent.value = VtotRent; form.moPmt.value = VmoPmt; form.accumInt.value = VaccumInt; form.closeCosts.value = VclosingCosts; form.totPropTax.value = VtotPropTax; form.totMaintCost.value = VtotMaintCost; form.totHomeInsCost.value = VtotHomeInsCost; form.netGain.value = VnetGain; form.pmiCost.value = VaccumPmi; form.investPrin.value = VinvestEarn; form.totAssocDues.value = VtotAssocDues; form.totTaxSave.value = VtotTaxSave; form.sellCost.value = VsellCost; var VtotRentCosts = VtotRent; form.totRentCosts.value = VtotRentCosts; var VtotRentBenefits = VinvestEarn; form.totRentBenefits.value = VtotRentBenefits; var VnetRentCost = eval(VtotRent) - eval(VinvestEarn); var VtotBuyCosts = eval(VaccumInt) + eval(VclosingCosts) + eval(VtotPropTax) + eval(VtotMaintCost) + eval(VtotHomeInsCost) + eval(VaccumPmi) + eval(VtotAssocDues) + eval(VsellCost); form.totBuyCosts.value = VtotBuyCosts; var VtotBuyBenefits = eval(VnetGain) + eval(VtotTaxSave); form.totBuyBenefits.value = VtotBuyBenefits; var VnetBuyCost = eval(VtotBuyCosts) - eval(VtotBuyBenefits); form.netRentCost.value = "$" + formatNumber(VnetRentCost); form.netBuyCost.value = "$" + formatNumber(VnetBuyCost); var diff = 0; var Vsummary = ""; if(VnetRentCost > VnetBuyCost) { diff = eval(VnetRentCost) - eval(VnetBuyCost); Vsummary = "You will save $" + formatNumber(diff) + " if you buy instead of rent."
} else { diff = eval(VnetBuyCost) - eval(VnetRentCost); Vsummary = "You will save $" + formatNumber(diff) + " if you rent instead of buy."
}
form.results.value = Vsummary;}
}
function showReport(form) { computeForm(form); var part1 = ("<head><link rel=\"stylesheet\" type=\"text/css\" href=\"/css/rbv.css\" /><title>RBV Real Estate: Mortgage Calculators: Rent Vs. Buy Report</title></head>" + "<body><br /><br /></center>"); var part2 = ("<table class=\"form\"><tr><th colspan=2 align=CENTER>Rent</th><th align=CENTER>vs.</th><th colspan=2 align=CENTER>Buy</th></tr><tr><td colspan=2 Valign=TOP>Monthly Rent Payment: $" + formatNumber(form.moRent.value) + "<br />Annual Return on Investment: " + formatNumber(form.saveRate.value) + "%</td><td></td><td colspan=2>Purchase Price: $" + formatNumber(form.homeCost.value) + "<br />Down Payment: $" + formatNumber(form.downPmt.value) + "<br />Mortgage Term: " + form.noYears.value + " years<br />Interest Rate: " + formatNumber(form.payRate.value) + "%<br />Monthly Mortgage Payment: $" + formatNumber(form.moPmt.value) + "<br /></td></tr><tr><td colspan=5>Cost Benefit Analysis<br />Calculations are based upon a " + form.inflateRate.value + "% annual inflation rate over the course of " + form.stayYrs.value + " years (the time between now and when you estimate you would sell the home). Please allow for slight rounding differences.</center></td></tr><tr><th>Renting Costs</th><th>Amount</th><th> </th><th>Buying Costs</th><th>Amount</th></tr>"); var row1 = "<tr><td>Total Rent & Insurance Payments:</td><td align='right'>$" + formatNumber(form.totRent.value) + "</td><td> </td><td>Total of Interest Payments:</td><td align='right'>$" + formatNumber(form.accumInt.value) + "</td></tr>"; var row2 = "<tr><td align='right'> </td><td> </td><td> </td><td>Total Closing Costs:</td><td align='right'>$" + formatNumber(form.closeCosts.value) + "</td></tr>"; var row3 = "<tr><td align='right'> </td><td> </td><td> </td><td>Total Property Tax Costs:</td><td align='right'>$" + formatNumber(form.totPropTax.value) + "</td></tr>"; var row4 = "<tr><td align='right'> </td><td> </td><td> </td><td>Total Maintenance Costs:</td><td align='right'>$" + formatNumber(form.totMaintCost.value) + "</td></tr>"; var row5 = "<tr><td align='right'> </td><td> </td><td> </td><td>Total Homeowner's Insurance Costs:</td><td align='right'>$" + formatNumber(form.totHomeInsCost.value) + "</td></tr>"; var row6 = "<tr><td align='right'> </td><td> </td><td> </td><td>Total Association Dues:</td><td align='right'>$" + formatNumber(form.totAssocDues.value) + "</td></tr>"; var row7 = "<tr><td align='right'> </td><td> </td><td> </td><td>Total PMI Costs:</td><td align='right'>$" + formatNumber(form.pmiCost.value) + "</td></tr>"; var row7B = "<tr><td align='right'> </td><td> </td><td> </td><td>Cost of selling home:</td><td align='right'>$" + formatNumber(form.sellCost.value) + "</td></tr>"; var row8 = "<tr><th scope=row>Total Costs</th><td><strong>$" + formatNumber(form.totRentCosts.value) + "</strong></td><td> </td><th scope=row>Total Costs</th><td><strong>$" + formatNumber(form.totBuyCosts.value) + "</strong></td></tr>"; var spacer = "<tr><td align='right'> </td><td> </td><td> </td><td> </td><td align='right'> </td></tr>"; var row9 = "<tr><th>Renting Benefits</th><th>Amount</th><td> </td><th>Buying Benefits</th><th>Amount</th></tr>"; var row10 = "<tr><td>Interest Earned on Invested Funds:</td><td align='right'>$" + formatNumber(form.investPrin.value) + "</td><td> </td><td>Tax Savings:</td><td align='right'>$" + formatNumber(form.totTaxSave.value) + "</td></tr>"; var row11 = "<tr><td align='right'> </td><td> </td><td> </td><td>Home Appreciation:</td><td align='right'>$" + formatNumber(form.netGain.value) + "</td></tr>"; var row12 = "<tr><th scope=row>Total Benefits</th><td><strong>$" + formatNumber(form.totRentBenefits.value) + "</strong></td><td> </td><th scope=row>Total Benefits</th><td><strong>$" + formatNumber(form.totBuyBenefits.value) + "</strong></td></tr>"; var row13 = "<tr><td align='right'><strong>NET COST OF RENTING:</strong></td><td align='right'><strong>" + form.netRentCost.value + "</strong></td><td> </td><td align='right'><strong>NET COST OF BUYING:</strong></td><td align='right'><strong>" + form.netBuyCost.value + "</strong></td></tr>"; var summary = "<tr><th colspan=5><strong>Summary:</strong> " + form.results.value + "</th></tr>"; var part4 = ("</table><br /><form method='post'><input type=\'button\' value=\'Close\' onclick=\'window.close()\' /></form></center></body></html>"); var schedule = (part1 + "" + part2 + "" + row1 + "" + row2 + "" + row3 + "" + row4 + "" + row5 + "" + row6 + "" + row7 + "" + row7B + "" + row8 + "" + spacer + "" + row9 + "" + row10 + "" + row11 + "" + row12 + "" + spacer + "" + row13 + "" + summary + "" + part4 + ""); reportWin = window.open("","","width=600,height=400,toolbar=yes,menubar=yes,scrollbars=yes"); reportWin.document.write(schedule); reportWin.document.close();}
{
var helpmoRent='<h4>Monthly Rent</h4><p>Enter the amount of the monthly rent payment.</p>'
var helpmoRentIns='<h4>Monthly Rental Insurance</h4><p>Enter the monthly rental insurance premium.</p>'
var helpinflateRate='<h4>Expected Annual Inflation Rate</h4><p>Enter the annual inflation rate. Enter 4% as 4. This is used to inflate the costs of rent, insurance, maintenance, dues and property taxes for the length of time you will own the home.</p>'
var helphomeCost='<h4>Purchase Price of Home</h4><p>Enter the total purchase price of the home -- not including closing costs.</p>'
var helpdownPmt='<h4>Down Payment Amount</h4><p>Enter the dollar amount you plan for your downpayment. Please adjust to your anticipated downpayment amount. The default value is set to 5% of a $500,000 purchase price.</p>'
var helpnoYears='<h4>Length of Mortgage Term</h4><p>Enter the number of years you are financing the home for.</p>'
var helppayRate='<h4>Mortgage\'s Annual Interest Rate</h4><p>Enter the annual interest rate of the morgage. Enter 8% as simply 8 (do not include percent sign.</p>'
var helppoints='<h4>Discount Points on Purchase of Home</h4><p>Discount points may be paid up front in order to reduce the interest rate of your mortgage. Each point represents 1% of your mortgage balance. Enter 1% as simply 1 (do not include percent sign.</p>'
var helpfees='<h4>Origination Fees</h4><p>Typically 1% of the loan amount that a lending institution charges for originating a loan.</p>'
var helploanCosts='<h4>Other Loan Costs</h4><p>The total of other loan related costs, such as filing fees, appraiser fees, etc.</p>'
var helppmi='<h4>Mortgage Insurance</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 helphomeIns='<h4>Homeowner\'s Insurance Rate</h4><p>Your homeowner\'s insurance rate -- entered as a percentage of your home\'s value. Typical rate is 0.15%. Enter .15% simply as .15 (do not include percent sign.</p>'
var helpassocDues='<h4>Monthly Association Dues</h4><p>If you are a member of a homeowner\'s association, enter your monthly dues in this field.</p>'
var helpmaint='<h4>Average Monthly Maintenance</h4><p>Enter the amount you expect to spend on repairing and maintaining your home.</p>'
var helppropTax='<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 helpincomeTax='<h4>State Plus Federal Income Tax Rate</h4><p>Enter your combined state and federal income tax percentage rate. Enter 28% simply as 28 (do not include percent sign.</p>'
var helpsaveRate='<h4>Interest Rate You Expect to Earn on Savings</h4><p>Enter the annual interest rate you expect to earn on the down payment and closing costs you will invest if you decide to rent instead of buy. Enter 7% simply as 7 (do not include percent sign.</p>'
var helpapprecRate='<h4>Expected Appreciation Percentage</h4><p>Enter the percentage amount you expect your house to appreciate by each year. Enter 12% simply as 12 (do not include percent sign.</p><p><strong>Note:</strong> Annual appreciate in San Diego county for 2002, 2003 was in excess of 20%.</p>'
var helpstayYrs='<h4>Number of Years You Will Stay at This Property</h4><p>Enter the number of years you expect to rent or own the property you are considering.</p>'
var helprealtorCom='<h4>REALTOR&reg; Commission Rate</h4><p>Enter the percentage of your home\'s selling price that you expect to pay a real estate agent or broker when it is time to sell your home. Enter 7% simply as 7 (do not include percent sign.</p>'
}