{"id":4387,"date":"2026-05-04T16:08:45","date_gmt":"2026-05-04T16:08:45","guid":{"rendered":"https:\/\/ilotusrealty.com\/?page_id=4387"},"modified":"2026-05-05T14:33:05","modified_gmt":"2026-05-05T14:33:05","slug":"mortgage-and-roi-calculator","status":"publish","type":"page","link":"https:\/\/ilotusrealty.com\/index.php\/mortgage-and-roi-calculator\/","title":{"rendered":"Mortgage and ROI Calculator"},"content":{"rendered":"<div id=\"ilotus-calc-wrap\">\r\n  <style>\r\n    #ilotus-calc-wrap{font-family:system-ui,-apple-system,sans-serif;color:#222;max-width:1100px;margin:0 auto;}\r\n    #ilotus-calc-wrap *{box-sizing:border-box;}\r\n    #ilotus-calc-wrap header{display:flex;align-items:center;justify-content:space-between;background:linear-gradient(135deg,#1a3c5e,#2a5a8e);color:#fff;padding:14px 20px;border-radius:8px 8px 0 0;}\r\n    #ilotus-calc-wrap header h2{margin:0;font-size:18px;font-weight:600;}\r\n    #ilotus-calc-wrap header .badge{background:#e8a83a;color:#222;padding:4px 10px;border-radius:12px;font-size:12px;font-weight:600;}\r\n    #ilotus-calc-wrap nav.tabs{display:flex;background:#f4f6f9;border-bottom:1px solid #d8dde6;flex-wrap:wrap;}\r\n    #ilotus-calc-wrap nav.tabs button{flex:1;min-width:140px;background:none;border:none;padding:12px 8px;cursor:pointer;font-size:13px;font-weight:500;color:#445;border-bottom:3px solid transparent;transition:all .2s;}\r\n    #ilotus-calc-wrap nav.tabs button:hover{background:#e9edf4;}\r\n    #ilotus-calc-wrap nav.tabs button.active{color:#1a3c5e;border-bottom-color:#e8a83a;background:#fff;}\r\n    #ilotus-calc-wrap main.panels{background:#fff;border:1px solid #d8dde6;border-top:none;border-radius:0 0 8px 8px;padding:24px;}\r\n    #ilotus-calc-wrap .tab-panel{display:none;}\r\n    #ilotus-calc-wrap .tab-panel.active{display:block;}\r\n    #ilotus-calc-wrap h3{margin:0 0 16px;color:#1a3c5e;font-size:18px;}\r\n    #ilotus-calc-wrap .grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;}\r\n    @media(max-width:768px){#ilotus-calc-wrap .grid{grid-template-columns:1fr;}}\r\n    #ilotus-calc-wrap label{display:block;font-size:13px;color:#445;margin:10px 0 4px;font-weight:500;}\r\n    #ilotus-calc-wrap input[type=number],#ilotus-calc-wrap input[type=text],#ilotus-calc-wrap select{width:100%;padding:8px 10px;border:1px solid #ccd2dc;border-radius:4px;font-size:14px;}\r\n    #ilotus-calc-wrap input:focus,#ilotus-calc-wrap select:focus{outline:none;border-color:#2a5a8e;box-shadow:0 0 0 2px rgba(42,90,142,.15);}\r\n    #ilotus-calc-wrap .results{background:#f8f9fb;border:1px solid #e1e5ec;border-radius:6px;padding:16px;}\r\n    #ilotus-calc-wrap .results .row{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px dashed #d8dde6;}\r\n    #ilotus-calc-wrap .results .row:last-child{border-bottom:none;}\r\n    #ilotus-calc-wrap .results .row .label{color:#555;}\r\n    #ilotus-calc-wrap .results .row .value{font-weight:600;color:#1a3c5e;}\r\n    #ilotus-calc-wrap .results .big{font-size:24px;font-weight:700;color:#e8a83a;text-align:center;padding:8px 0 12px;border-bottom:2px solid #e8a83a;margin-bottom:8px;}\r\n    #ilotus-calc-wrap .chart-box{margin-top:16px;background:#fff;border:1px solid #e1e5ec;border-radius:6px;padding:12px;}\r\n    #ilotus-calc-wrap .chart-box h4{margin:0 0 8px;font-size:13px;color:#445;}\r\n    #ilotus-calc-wrap .amort-controls{margin-top:16px;display:flex;gap:8px;align-items:center;}\r\n    #ilotus-calc-wrap .amort-controls button{background:#1a3c5e;color:#fff;border:none;padding:6px 14px;border-radius:4px;cursor:pointer;font-size:13px;}\r\n    #ilotus-calc-wrap .amort-controls button:hover{background:#2a5a8e;}\r\n    #ilotus-calc-wrap table.amort{width:100%;border-collapse:collapse;margin-top:12px;font-size:12px;}\r\n    #ilotus-calc-wrap table.amort th{background:#1a3c5e;color:#fff;padding:8px 6px;text-align:right;}\r\n    #ilotus-calc-wrap table.amort th:first-child{text-align:left;}\r\n    #ilotus-calc-wrap table.amort td{padding:6px;border-bottom:1px solid #eef0f4;text-align:right;}\r\n    #ilotus-calc-wrap table.amort td:first-child{text-align:left;font-weight:600;}\r\n    #ilotus-calc-wrap .amort-scroll{max-height:400px;overflow-y:auto;border:1px solid #e1e5ec;border-radius:4px;margin-top:12px;}\r\n    #ilotus-calc-wrap .toggle-row{display:flex;gap:0;margin-bottom:16px;border:1px solid #ccd2dc;border-radius:4px;overflow:hidden;width:fit-content;}\r\n    #ilotus-calc-wrap .toggle-row button{background:#fff;border:none;padding:8px 24px;cursor:pointer;font-size:13px;color:#445;}\r\n    #ilotus-calc-wrap .toggle-row button.active{background:#1a3c5e;color:#fff;}\r\n    #ilotus-calc-wrap .placeholder{padding:40px 20px;text-align:center;color:#778;background:#f8f9fb;border-radius:6px;}\r\n    #ilotus-calc-wrap .placeholder h3{color:#445;}\r\n    #ilotus-calc-wrap .market-content{line-height:1.6;color:#334;}\r\n    #ilotus-calc-wrap .market-content h4{color:#1a3c5e;margin-top:20px;}\r\n    #ilotus-calc-wrap .market-content ul{padding-left:20px;}\r\n    #ilotus-calc-wrap .compare-table{width:100%;border-collapse:collapse;margin-top:16px;}\r\n    #ilotus-calc-wrap .compare-table th,#ilotus-calc-wrap .compare-table td{padding:8px 10px;border-bottom:1px solid #eef0f4;font-size:13px;}\r\n    #ilotus-calc-wrap .compare-table th{background:#f4f6f9;text-align:left;color:#445;}\r\n    #ilotus-calc-wrap .compare-table .winner{background:#e8f5e9;font-weight:600;color:#256029;}\r\n  \r\n    \/* Hide Featured Properties sidebar on calculator page only, expand main to full width *\/\r\n    body.page-id-4387 .col-md-3.site-sidebar-content{display:none !important;}\r\n    body.page-id-4387 .col-md-9{width:100% !important;flex:0 0 100% !important;max-width:100% !important;}\r\n    body.page-id-4387 #ilotus-calc-wrap{margin:0 auto !important;max-width:100% !important;width:100% !important;}\r\n  <\/style>\r\n  <header>\r\n    <h2>Real Estate Interactive Tools<\/h2>\r\n    <span class=\"badge\">iLotusRealty.com<\/span>\r\n  <\/header>\r\n  <nav class=\"tabs\">\r\n    <button type=\"button\" data-tab=\"market\" class=\"active\">Calculator Overview<\/button>\r\n    <button type=\"button\" data-tab=\"comparison\">Property Comparison<\/button>\r\n    <button type=\"button\" data-tab=\"mortgage\">Mortgage Calculator<\/button>\r\n    <button type=\"button\" data-tab=\"roi\">ROI Analysis<\/button>\r\n  <\/nav>\r\n  <main class=\"panels\">\r\n\r\n    <!-- TAB 1: MARKET OVERVIEW -->\r\n    <div id=\"tab-market\" class=\"tab-panel active\">\r\n      <h3>Real Estate Market Overview &amp; Education<\/h3>\r\n      <div class=\"market-content\">\r\n        <p>Welcome to the iLotus Realty interactive education center. Use the calculators above to model purchases, compare deals, and evaluate investment returns.<\/p>\r\n        <h4>Understanding Your Mortgage<\/h4>\r\n        <p>A mortgage is a loan secured by real estate. Your monthly payment typically includes <strong>P&amp;I<\/strong> (principal &amp; interest), property taxes, homeowner's insurance, HOA fees if any, and PMI if your down payment is under 20%.<\/p>\r\n        <h4>What Affects Your Rate<\/h4>\r\n        <ul>\r\n          <li><strong>Credit score<\/strong> &mdash; the single biggest factor lenders use to price your loan<\/li>\r\n          <li><strong>Loan term<\/strong> &mdash; 15-year loans typically carry lower rates than 30-year loans<\/li>\r\n          <li><strong>Down payment<\/strong> &mdash; larger down payments reduce risk and often unlock better pricing<\/li>\r\n          <li><strong>Loan type<\/strong> &mdash; conventional, FHA, VA, and jumbo loans price differently<\/li>\r\n          <li><strong>Market conditions<\/strong> &mdash; Federal Reserve policy, inflation, and bond yields drive base rates<\/li>\r\n        <\/ul>\r\n        <h4>Key Investment Metrics<\/h4>\r\n        <ul>\r\n          <li><strong>Cap Rate<\/strong> = Net Operating Income \/ Purchase Price &mdash; measures unleveraged return<\/li>\r\n          <li><strong>Cash-on-Cash Return<\/strong> = Annual Cash Flow \/ Total Cash Invested &mdash; measures leveraged return on your actual out-of-pocket investment<\/li>\r\n          <li><strong>Cash Flow<\/strong> = Rental income &minus; all expenses including mortgage &mdash; what hits your pocket each month<\/li>\r\n          <li><strong>NOI<\/strong> = Rental income &minus; operating expenses (excludes mortgage) &mdash; the property's intrinsic profitability<\/li>\r\n        <\/ul>\r\n        <h4>Glossary<\/h4>\r\n        <ul>\r\n          <li><strong>PMI<\/strong> &mdash; Private Mortgage Insurance, typically required when down payment is below 20%<\/li>\r\n          <li><strong>PITI<\/strong> &mdash; Principal, Interest, Taxes, Insurance &mdash; the four components of a typical monthly payment<\/li>\r\n          <li><strong>Escrow<\/strong> &mdash; an account your lender uses to hold and pay taxes and insurance on your behalf<\/li>\r\n          <li><strong>Amortization<\/strong> &mdash; the schedule showing how each payment splits between principal and interest over time<\/li>\r\n        <\/ul>\r\n        <p style=\"margin-top:24px;font-size:12px;color:#778;font-style:italic;\">This page is for educational purposes only and is not financial advice. Please consult a licensed mortgage professional for your specific situation.<\/p>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <!-- TAB 2: PROPERTY COMPARISON -->\r\n    <div id=\"tab-comparison\" class=\"tab-panel\">\r\n      <h3>Side-by-Side Property Comparison<\/h3>\r\n      <p style=\"color:#556;font-size:13px;margin-bottom:16px;\">Enter the details of two properties to compare key investment metrics. Winners on each row are highlighted in green.<\/p>\r\n      <div class=\"grid\">\r\n        <div>\r\n          <h4 style=\"color:#1a3c5e;margin:0 0 8px;\">Property A<\/h4>\r\n          <label>Purchase Price ($)<\/label><input type=\"number\" id=\"cmpA-price\" value=\"300000\">\r\n          <label>Down Payment (%)<\/label><input type=\"number\" id=\"cmpA-down\" value=\"20\">\r\n          <label>Interest Rate (%)<\/label><input type=\"number\" id=\"cmpA-rate\" value=\"7\" step=\"0.01\">\r\n          <label>Loan Term (years)<\/label><input type=\"number\" id=\"cmpA-term\" value=\"30\">\r\n          <label>Property Tax ($\/year)<\/label><input type=\"number\" id=\"cmpA-tax\" value=\"3600\">\r\n          <label>Insurance ($\/year)<\/label><input type=\"number\" id=\"cmpA-ins\" value=\"1200\">\r\n          <label>HOA ($\/month)<\/label><input type=\"number\" id=\"cmpA-hoa\" value=\"0\">\r\n          <label>Monthly Rent ($)<\/label><input type=\"number\" id=\"cmpA-rent\" value=\"2400\">\r\n        <\/div>\r\n        <div>\r\n          <h4 style=\"color:#1a3c5e;margin:0 0 8px;\">Property B<\/h4>\r\n          <label>Purchase Price ($)<\/label><input type=\"number\" id=\"cmpB-price\" value=\"400000\">\r\n          <label>Down Payment (%)<\/label><input type=\"number\" id=\"cmpB-down\" value=\"20\">\r\n          <label>Interest Rate (%)<\/label><input type=\"number\" id=\"cmpB-rate\" value=\"7\" step=\"0.01\">\r\n          <label>Loan Term (years)<\/label><input type=\"number\" id=\"cmpB-term\" value=\"30\">\r\n          <label>Property Tax ($\/year)<\/label><input type=\"number\" id=\"cmpB-tax\" value=\"4800\">\r\n          <label>Insurance ($\/year)<\/label><input type=\"number\" id=\"cmpB-ins\" value=\"1500\">\r\n          <label>HOA ($\/month)<\/label><input type=\"number\" id=\"cmpB-hoa\" value=\"0\">\r\n          <label>Monthly Rent ($)<\/label><input type=\"number\" id=\"cmpB-rent\" value=\"3200\">\r\n        <\/div>\r\n      <\/div>\r\n      <table class=\"compare-table\" id=\"cmpTable\">\r\n        <thead><tr><th>Metric<\/th><th>Property A<\/th><th>Property B<\/th><\/tr><\/thead>\r\n        <tbody><\/tbody>\r\n      <\/table>\r\n    <\/div>\r\n\r\n    <!-- TAB 3: MORTGAGE CALCULATOR -->\r\n    <div id=\"tab-mortgage\" class=\"tab-panel\">\r\n      <h3>Mortgage Calculator<\/h3>\r\n      <div class=\"grid\">\r\n        <div>\r\n          <label>Home Price ($)<\/label><input type=\"number\" id=\"mPrice\" value=\"400000\">\r\n          <label>Down Payment ($)<\/label><input type=\"number\" id=\"mDownAmt\" value=\"80000\">\r\n          <label>Down Payment (%)<\/label><input type=\"number\" id=\"mDownPct\" value=\"20\" step=\"0.1\">\r\n          <label>Loan Term (years)<\/label><select id=\"mTerm\"><option>10<\/option><option>15<\/option><option>20<\/option><option>25<\/option><option selected>30<\/option><\/select>\r\n          <label>Interest Rate (% APR)<\/label><input type=\"number\" id=\"mRate\" value=\"7\" step=\"0.01\">\r\n          <label>Property Tax ($\/year)<\/label><input type=\"number\" id=\"mTax\" value=\"4800\">\r\n          <label>Home Insurance ($\/year)<\/label><input type=\"number\" id=\"mIns\" value=\"1500\">\r\n          <label>HOA ($\/month)<\/label><input type=\"number\" id=\"mHOA\" value=\"0\">\r\n          <label>PMI Rate (% of loan\/year, auto for &lt;20% down)<\/label><input type=\"number\" id=\"mPMI\" value=\"0.7\" step=\"0.01\">\r\n        <\/div>\r\n        <div>\r\n          <div class=\"results\">\r\n            <div class=\"big\" id=\"mTotalMonthly\">$0<\/div>\r\n            <div class=\"row\"><span class=\"label\">Loan Amount<\/span><span class=\"value\" id=\"mLoanAmt\">$0<\/span><\/div>\r\n            <div class=\"row\"><span class=\"label\">Principal &amp; Interest<\/span><span class=\"value\" id=\"mPI\">$0<\/span><\/div>\r\n            <div class=\"row\"><span class=\"label\">Property Tax (monthly)<\/span><span class=\"value\" id=\"mTaxMo\">$0<\/span><\/div>\r\n            <div class=\"row\"><span class=\"label\">Insurance (monthly)<\/span><span class=\"value\" id=\"mInsMo\">$0<\/span><\/div>\r\n            <div class=\"row\"><span class=\"label\">HOA<\/span><span class=\"value\" id=\"mHOAMo\">$0<\/span><\/div>\r\n            <div class=\"row\"><span class=\"label\">PMI (monthly)<\/span><span class=\"value\" id=\"mPMIMo\">$0<\/span><\/div>\r\n            <div class=\"row\"><span class=\"label\">Total Interest Over Loan<\/span><span class=\"value\" id=\"mTotalInt\">$0<\/span><\/div>\r\n            <div class=\"row\"><span class=\"label\">Payoff Date<\/span><span class=\"value\" id=\"mPayoff\">--<\/span><\/div>\r\n          <\/div>\r\n          <div class=\"chart-box\"><h4>Monthly Payment Breakdown<\/h4><canvas id=\"mPieChart\" height=\"160\"><\/canvas><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div class=\"chart-box\"><h4>Loan Balance Over Time<\/h4><canvas id=\"mLineChart\" height=\"80\"><\/canvas><\/div>\r\n      <div class=\"amort-controls\">\r\n        <strong>Amortization Schedule:<\/strong>\r\n        <button type=\"button\" id=\"amortYearly\" class=\"active-amort\">Yearly<\/button>\r\n        <button type=\"button\" id=\"amortMonthly\">Monthly<\/button>\r\n      <\/div>\r\n      <div class=\"amort-scroll\"><table class=\"amort\" id=\"amortTable\"><thead><tr><th>Period<\/th><th>Payment<\/th><th>Principal<\/th><th>Interest<\/th><th>Balance<\/th><\/tr><\/thead><tbody><\/tbody><\/table><\/div>\r\n    <\/div>\r\n\r\n    <!-- TAB 4: ROI ANALYSIS -->\r\n    <div id=\"tab-roi\" class=\"tab-panel\">\r\n      <h3>ROI Analysis<\/h3>\r\n      <div class=\"toggle-row\">\r\n        <button type=\"button\" id=\"roiRentalBtn\" class=\"active\">Rental Property<\/button>\r\n        <button type=\"button\" id=\"roiFlipBtn\">Flip \/ Resale<\/button>\r\n      <\/div>\r\n      <div id=\"roiRentalBox\">\r\n        <div class=\"grid\">\r\n          <div>\r\n            <label>Purchase Price ($)<\/label><input type=\"number\" id=\"rPrice\" value=\"300000\">\r\n            <label>Down Payment (%)<\/label><input type=\"number\" id=\"rDown\" value=\"25\">\r\n            <label>Interest Rate (%)<\/label><input type=\"number\" id=\"rRate\" value=\"7\" step=\"0.01\">\r\n            <label>Loan Term (years)<\/label><input type=\"number\" id=\"rTerm\" value=\"30\">\r\n            <label>Monthly Rent ($)<\/label><input type=\"number\" id=\"rRent\" value=\"2400\">\r\n            <label>Vacancy Rate (%)<\/label><input type=\"number\" id=\"rVac\" value=\"5\" step=\"0.1\">\r\n            <label>Property Tax ($\/year)<\/label><input type=\"number\" id=\"rTax\" value=\"3600\">\r\n            <label>Insurance ($\/year)<\/label><input type=\"number\" id=\"rIns\" value=\"1200\">\r\n            <label>HOA ($\/month)<\/label><input type=\"number\" id=\"rHOA\" value=\"0\">\r\n            <label>Maintenance (% of rent)<\/label><input type=\"number\" id=\"rMaint\" value=\"5\" step=\"0.1\">\r\n            <label>Property Management (% of rent)<\/label><input type=\"number\" id=\"rMgmt\" value=\"8\" step=\"0.1\">\r\n            <label>Closing Costs ($)<\/label><input type=\"number\" id=\"rClose\" value=\"6000\">\r\n          <\/div>\r\n          <div>\r\n            <div class=\"results\">\r\n              <div class=\"big\" id=\"rCoCdisplay\">0.00%<\/div>\r\n              <div style=\"text-align:center;color:#556;font-size:12px;margin-bottom:8px;\">Cash-on-Cash Return (Year 1)<\/div>\r\n              <div class=\"row\"><span class=\"label\">Cash Invested<\/span><span class=\"value\" id=\"rCashIn\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Effective Gross Income (yr)<\/span><span class=\"value\" id=\"rEGI\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Operating Expenses (yr)<\/span><span class=\"value\" id=\"rOpEx\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Net Operating Income (NOI)<\/span><span class=\"value\" id=\"rNOI\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Annual Debt Service<\/span><span class=\"value\" id=\"rDebt\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Annual Cash Flow<\/span><span class=\"value\" id=\"rCashFlow\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Monthly Cash Flow<\/span><span class=\"value\" id=\"rMoCashFlow\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Cap Rate<\/span><span class=\"value\" id=\"rCap\">0.00%<\/span><\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <div id=\"roiFlipBox\" style=\"display:none;\">\r\n        <div class=\"grid\">\r\n          <div>\r\n            <label>Purchase Price ($)<\/label><input type=\"number\" id=\"fPrice\" value=\"200000\">\r\n            <label>Repair Budget ($)<\/label><input type=\"number\" id=\"fRepair\" value=\"40000\">\r\n            <label>Holding Period (months)<\/label><input type=\"number\" id=\"fMonths\" value=\"6\">\r\n            <label>Holding Costs ($\/month: taxes, insurance, utilities, loan interest)<\/label><input type=\"number\" id=\"fHold\" value=\"1500\">\r\n            <label>Purchase Closing Costs ($)<\/label><input type=\"number\" id=\"fBuyClose\" value=\"4000\">\r\n            <label>Sale Price ($)<\/label><input type=\"number\" id=\"fSale\" value=\"320000\">\r\n            <label>Selling Costs (% of sale)<\/label><input type=\"number\" id=\"fSellPct\" value=\"8\" step=\"0.1\">\r\n          <\/div>\r\n          <div>\r\n            <div class=\"results\">\r\n              <div class=\"big\" id=\"fROIdisplay\">0.00%<\/div>\r\n              <div style=\"text-align:center;color:#556;font-size:12px;margin-bottom:8px;\">Total ROI<\/div>\r\n              <div class=\"row\"><span class=\"label\">Total Investment<\/span><span class=\"value\" id=\"fTotalCost\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Total Holding Costs<\/span><span class=\"value\" id=\"fHoldTotal\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Selling Costs<\/span><span class=\"value\" id=\"fSellCost\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Net Sale Proceeds<\/span><span class=\"value\" id=\"fNetSale\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Net Profit<\/span><span class=\"value\" id=\"fProfit\">$0<\/span><\/div>\r\n              <div class=\"row\"><span class=\"label\">Annualized ROI<\/span><span class=\"value\" id=\"fAnnROI\">0.00%<\/span><\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    \r\n  <\/main>\r\n<\/div>\r\n\r\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/chart.js@4.4.0\/dist\/chart.umd.min.js\"><\/script>\r\n<script>\r\n(function(){\r\n  var $ = function(id){ return document.getElementById(id); };\r\n  var fmt$ = function(n){ if(!isFinite(n)) n = 0; return '$' + Math.round(n).toLocaleString(); };\r\n  var fmtPct = function(n){ if(!isFinite(n)) n = 0; return n.toFixed(2) + '%'; };\r\n  var num = function(id){ var v = parseFloat(($(id)||{}).value); return isFinite(v) ? v : 0; };\r\n\r\n  \/\/ Tab switching\r\n  document.querySelectorAll('#ilotus-calc-wrap nav.tabs button').forEach(function(btn){\r\n    btn.addEventListener('click', function(){\r\n      document.querySelectorAll('#ilotus-calc-wrap nav.tabs button').forEach(function(b){ b.classList.remove('active'); });\r\n      btn.classList.add('active');\r\n      document.querySelectorAll('#ilotus-calc-wrap .tab-panel').forEach(function(p){ p.classList.remove('active'); });\r\n      var target = document.getElementById('tab-' + btn.getAttribute('data-tab'));\r\n      if (target) target.classList.add('active');\r\n    });\r\n  });\r\n\r\n  \/\/ Mortgage math\r\n  function monthlyPI(loanAmt, rateAnnualPct, years){\r\n    var r = (rateAnnualPct\/100)\/12;\r\n    var n = years*12;\r\n    if (r === 0) return loanAmt \/ n;\r\n    return loanAmt * r * Math.pow(1+r,n) \/ (Math.pow(1+r,n) - 1);\r\n  }\r\n  function amortSchedule(loanAmt, rateAnnualPct, years){\r\n    var r = (rateAnnualPct\/100)\/12;\r\n    var n = years*12;\r\n    var pmt = monthlyPI(loanAmt, rateAnnualPct, years);\r\n    var balance = loanAmt;\r\n    var rows = [];\r\n    for (var i=1; i<=n; i++){\r\n      var interest = balance * r;\r\n      var principal = pmt - interest;\r\n      balance -= principal;\r\n      if (balance < 0) balance = 0;\r\n      rows.push({i:i, pmt:pmt, principal:principal, interest:interest, balance:balance});\r\n    }\r\n    return rows;\r\n  }\r\n\r\n  \/\/ Mortgage tab\r\n  var pieChart = null, lineChart = null, amortMode = 'yearly';\r\n  function updateMortgage(){\r\n    var price = num('mPrice');\r\n    var downAmt = num('mDownAmt');\r\n    var downPct = num('mDownPct');\r\n    var term = parseInt(($('mTerm')||{}).value) || 30;\r\n    var rate = num('mRate');\r\n    var taxYr = num('mTax');\r\n    var insYr = num('mIns');\r\n    var hoa = num('mHOA');\r\n    var pmiPct = num('mPMI');\r\n    var loan = price - downAmt;\r\n    if (loan < 0) loan = 0;\r\n    var pi = monthlyPI(loan, rate, term);\r\n    var taxMo = taxYr\/12, insMo = insYr\/12;\r\n    var pmiMo = (downPct < 20) ? (loan * pmiPct\/100)\/12 : 0;\r\n    var total = pi + taxMo + insMo + hoa + pmiMo;\r\n    var sched = amortSchedule(loan, rate, term);\r\n    var totalInt = sched.reduce(function(s,r){ return s+r.interest; }, 0);\r\n    var payoff = new Date(); payoff.setMonth(payoff.getMonth()+term*12);\r\n    $('mLoanAmt').textContent = fmt$(loan);\r\n    $('mPI').textContent = fmt$(pi);\r\n    $('mTaxMo').textContent = fmt$(taxMo);\r\n    $('mInsMo').textContent = fmt$(insMo);\r\n    $('mHOAMo').textContent = fmt$(hoa);\r\n    $('mPMIMo').textContent = fmt$(pmiMo);\r\n    $('mTotalInt').textContent = fmt$(totalInt);\r\n    $('mTotalMonthly').textContent = fmt$(total) + '\/mo';\r\n    $('mPayoff').textContent = payoff.toLocaleDateString('en-US',{month:'short',year:'numeric'});\r\n    \/\/ Pie chart\r\n    if (typeof Chart !== 'undefined'){\r\n      var pieData = {labels:['P&I','Tax','Insurance','HOA','PMI'],datasets:[{data:[pi,taxMo,insMo,hoa,pmiMo],backgroundColor:['#1a3c5e','#e8a83a','#5a8d5a','#888','#c25450']}]};\r\n      if (pieChart) pieChart.destroy();\r\n      pieChart = new Chart($('mPieChart'), {type:'doughnut',data:pieData,options:{plugins:{legend:{position:'right',labels:{font:{size:11}}}}}});\r\n      \/\/ Line chart\r\n      var labels = [], balData = [], intData = [], cumInt = 0;\r\n      sched.forEach(function(r, idx){\r\n        if (idx % 12 === 11 || idx === sched.length-1){\r\n          labels.push('Yr ' + Math.ceil((idx+1)\/12));\r\n          balData.push(Math.round(r.balance));\r\n        }\r\n      });\r\n      if (lineChart) lineChart.destroy();\r\n      lineChart = new Chart($('mLineChart'), {type:'line',data:{labels:labels,datasets:[{label:'Remaining Balance',data:balData,borderColor:'#1a3c5e',backgroundColor:'rgba(26,60,94,0.1)',fill:true,tension:0.2}]},options:{plugins:{legend:{display:false}},scales:{y:{ticks:{callback:function(v){return '$'+(v\/1000).toFixed(0)+'k';}}}}}});\r\n    }\r\n    \/\/ Amortization table\r\n    var tbody = $('amortTable').querySelector('tbody');\r\n    var html = '';\r\n    if (amortMode === 'yearly'){\r\n      var yPrin=0, yInt=0;\r\n      sched.forEach(function(r, idx){\r\n        yPrin += r.principal; yInt += r.interest;\r\n        if (idx % 12 === 11 || idx === sched.length-1){\r\n          html += '<tr><td>Year ' + Math.ceil((idx+1)\/12) + '<\/td><td>' + fmt$(pi*12) + '<\/td><td>' + fmt$(yPrin) + '<\/td><td>' + fmt$(yInt) + '<\/td><td>' + fmt$(r.balance) + '<\/td><\/tr>';\r\n          yPrin=0; yInt=0;\r\n        }\r\n      });\r\n    } else {\r\n      sched.forEach(function(r){\r\n        html += '<tr><td>' + r.i + '<\/td><td>' + fmt$(r.pmt) + '<\/td><td>' + fmt$(r.principal) + '<\/td><td>' + fmt$(r.interest) + '<\/td><td>' + fmt$(r.balance) + '<\/td><\/tr>';\r\n      });\r\n    }\r\n    tbody.innerHTML = html;\r\n  }\r\n  \/\/ Sync down amount and percent\r\n  if ($('mPrice')) {\r\n    $('mDownAmt').addEventListener('input', function(){\r\n      var pct = (num('mDownAmt')\/num('mPrice'))*100;\r\n      if (isFinite(pct)) $('mDownPct').value = pct.toFixed(2);\r\n      updateMortgage();\r\n    });\r\n    $('mDownPct').addEventListener('input', function(){\r\n      $('mDownAmt').value = Math.round(num('mPrice')*num('mDownPct')\/100);\r\n      updateMortgage();\r\n    });\r\n    ['mPrice','mTerm','mRate','mTax','mIns','mHOA','mPMI'].forEach(function(id){\r\n      $(id).addEventListener('input', updateMortgage);\r\n      $(id).addEventListener('change', updateMortgage);\r\n    });\r\n    $('amortYearly').addEventListener('click', function(){ amortMode='yearly'; updateMortgage(); });\r\n    $('amortMonthly').addEventListener('click', function(){ amortMode='monthly'; updateMortgage(); });\r\n  }\r\n\r\n  \/\/ ROI Rental\r\n  function updateRental(){\r\n    var price = num('rPrice'), down = num('rDown')\/100, rate = num('rRate'), term = num('rTerm');\r\n    var rent = num('rRent'), vac = num('rVac')\/100;\r\n    var tax = num('rTax'), ins = num('rIns'), hoa = num('rHOA');\r\n    var maintPct = num('rMaint')\/100, mgmtPct = num('rMgmt')\/100, closing = num('rClose');\r\n    var loan = price * (1-down);\r\n    var cashInvested = price*down + closing;\r\n    var pi = monthlyPI(loan, rate, term);\r\n    var annDebt = pi*12;\r\n    var egi = rent*12*(1-vac);\r\n    var opex = tax + ins + hoa*12 + rent*12*maintPct + rent*12*mgmtPct;\r\n    var noi = egi - opex;\r\n    var annCashFlow = noi - annDebt;\r\n    var coc = (annCashFlow\/cashInvested)*100;\r\n    var cap = (noi\/price)*100;\r\n    $('rCashIn').textContent = fmt$(cashInvested);\r\n    $('rEGI').textContent = fmt$(egi);\r\n    $('rOpEx').textContent = fmt$(opex);\r\n    $('rNOI').textContent = fmt$(noi);\r\n    $('rDebt').textContent = fmt$(annDebt);\r\n    $('rCashFlow').textContent = fmt$(annCashFlow);\r\n    $('rMoCashFlow').textContent = fmt$(annCashFlow\/12);\r\n    $('rCap').textContent = fmtPct(cap);\r\n    $('rCoCdisplay').textContent = fmtPct(coc);\r\n  }\r\n  ['rPrice','rDown','rRate','rTerm','rRent','rVac','rTax','rIns','rHOA','rMaint','rMgmt','rClose'].forEach(function(id){\r\n    if($(id)) $(id).addEventListener('input', updateRental);\r\n  });\r\n\r\n  \/\/ ROI Flip\r\n  function updateFlip(){\r\n    var price = num('fPrice'), repair = num('fRepair'), months = num('fMonths');\r\n    var holdMo = num('fHold'), buyClose = num('fBuyClose');\r\n    var sale = num('fSale'), sellPct = num('fSellPct')\/100;\r\n    var holdTotal = holdMo * months;\r\n    var sellCost = sale * sellPct;\r\n    var totalCost = price + repair + holdTotal + buyClose;\r\n    var netSale = sale - sellCost;\r\n    var profit = netSale - totalCost;\r\n    var roi = (profit\/totalCost)*100;\r\n    var annRoi = months>0 ? roi*(12\/months) : 0;\r\n    $('fTotalCost').textContent = fmt$(totalCost);\r\n    $('fHoldTotal').textContent = fmt$(holdTotal);\r\n    $('fSellCost').textContent = fmt$(sellCost);\r\n    $('fNetSale').textContent = fmt$(netSale);\r\n    $('fProfit').textContent = fmt$(profit);\r\n    $('fROIdisplay').textContent = fmtPct(roi);\r\n    $('fAnnROI').textContent = fmtPct(annRoi);\r\n  }\r\n  ['fPrice','fRepair','fMonths','fHold','fBuyClose','fSale','fSellPct'].forEach(function(id){\r\n    if($(id)) $(id).addEventListener('input', updateFlip);\r\n  });\r\n  \/\/ ROI sub-toggle\r\n  if ($('roiRentalBtn')){\r\n    $('roiRentalBtn').addEventListener('click', function(){\r\n      $('roiRentalBtn').classList.add('active');\r\n      $('roiFlipBtn').classList.remove('active');\r\n      $('roiRentalBox').style.display='block';\r\n      $('roiFlipBox').style.display='none';\r\n    });\r\n    $('roiFlipBtn').addEventListener('click', function(){\r\n      $('roiFlipBtn').classList.add('active');\r\n      $('roiRentalBtn').classList.remove('active');\r\n      $('roiFlipBox').style.display='block';\r\n      $('roiRentalBox').style.display='none';\r\n    });\r\n  }\r\n\r\n  \/\/ Property Comparison\r\n  function updateCompare(){\r\n    function calc(p){\r\n      var price = num('cmp'+p+'-price'), down = num('cmp'+p+'-down')\/100;\r\n      var rate = num('cmp'+p+'-rate'), term = num('cmp'+p+'-term');\r\n      var tax = num('cmp'+p+'-tax'), ins = num('cmp'+p+'-ins'), hoa = num('cmp'+p+'-hoa');\r\n      var rent = num('cmp'+p+'-rent');\r\n      var loan = price*(1-down);\r\n      var pi = monthlyPI(loan, rate, term);\r\n      var totalMo = pi + tax\/12 + ins\/12 + hoa;\r\n      var cashFlow = rent - totalMo;\r\n      var noi = rent*12 - (tax + ins + hoa*12);\r\n      var cap = (noi\/price)*100;\r\n      var cashIn = price*down;\r\n      var coc = ((cashFlow*12)\/cashIn)*100;\r\n      return {loan:loan, pi:pi, totalMo:totalMo, cashFlow:cashFlow, cap:cap, coc:coc};\r\n    }\r\n    var a = calc('A'), b = calc('B');\r\n    var rows = [\r\n      ['Loan Amount', fmt$(a.loan), fmt$(b.loan), null],\r\n      ['Monthly P&I', fmt$(a.pi), fmt$(b.pi), a.pi < b.pi ? 'A' : 'B'],\r\n      ['Total Monthly Cost', fmt$(a.totalMo), fmt$(b.totalMo), a.totalMo < b.totalMo ? 'A' : 'B'],\r\n      ['Monthly Cash Flow', fmt$(a.cashFlow), fmt$(b.cashFlow), a.cashFlow > b.cashFlow ? 'A' : 'B'],\r\n      ['Cap Rate', fmtPct(a.cap), fmtPct(b.cap), a.cap > b.cap ? 'A' : 'B'],\r\n      ['Cash-on-Cash', fmtPct(a.coc), fmtPct(b.coc), a.coc > b.coc ? 'A' : 'B']\r\n    ];\r\n    var html = '';\r\n    rows.forEach(function(r){\r\n      var aClass = r[3]==='A' ? ' class=\"winner\"' : '';\r\n      var bClass = r[3]==='B' ? ' class=\"winner\"' : '';\r\n      html += '<tr><td>' + r[0] + '<\/td><td'+aClass+'>' + r[1] + '<\/td><td'+bClass+'>' + r[2] + '<\/td><\/tr>';\r\n    });\r\n    $('cmpTable').querySelector('tbody').innerHTML = html;\r\n  }\r\n  ['cmpA-price','cmpA-down','cmpA-rate','cmpA-term','cmpA-tax','cmpA-ins','cmpA-hoa','cmpA-rent','cmpB-price','cmpB-down','cmpB-rate','cmpB-term','cmpB-tax','cmpB-ins','cmpB-hoa','cmpB-rent'].forEach(function(id){\r\n    if($(id)) $(id).addEventListener('input', updateCompare);\r\n  });\r\n\r\n  \/\/ Initial run on load (wait for Chart.js)\r\n  function init(){ updateMortgage(); updateRental(); updateFlip(); updateCompare(); }\r\n  if (typeof Chart !== 'undefined') init();\r\n  else { var tries=0; var iv=setInterval(function(){ if (typeof Chart !== 'undefined' || ++tries>40){ clearInterval(iv); init(); } }, 150); }\r\n})();\r\n<\/script>\r\n    \n","protected":false},"excerpt":{"rendered":"Real Estate Interactive Tools iLotusRealty.com Calculator Overview Property Comparison Mortgage Calculator ROI Analysis Real Estate Market Overview &amp; Education Welcome to the iLotus Realty interactive education center. Use the calculators above to model purchases, compare deals, and evaluate investment returns. Understanding Your Mortgage A mortgage is a loan secured by real estate. Your monthly payment [...]","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4387","page","type-page","status-publish","hentry","clearfix"],"_links":{"self":[{"href":"https:\/\/ilotusrealty.com\/index.php\/wp-json\/wp\/v2\/pages\/4387","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ilotusrealty.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ilotusrealty.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ilotusrealty.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ilotusrealty.com\/index.php\/wp-json\/wp\/v2\/comments?post=4387"}],"version-history":[{"count":2,"href":"https:\/\/ilotusrealty.com\/index.php\/wp-json\/wp\/v2\/pages\/4387\/revisions"}],"predecessor-version":[{"id":4393,"href":"https:\/\/ilotusrealty.com\/index.php\/wp-json\/wp\/v2\/pages\/4387\/revisions\/4393"}],"wp:attachment":[{"href":"https:\/\/ilotusrealty.com\/index.php\/wp-json\/wp\/v2\/media?parent=4387"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}