Mortgage Loan Calculator
by Jorgelig
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout-validation/2.0.3/knockout.validation.min.js"></script>
<h2><span data-bind="text: calcText"></span> | <span data-bind="text: term"></span> años <span data-bind="text: paymentType"></span></h2>
<table border="1px">
<tr>
<td>Salary:</td>
<td>
<input type="text" data-bind="value: salary" />
</td>
</tr>
<tr>
<td>MonthlyDebt:</td>
<td>
<input type="text" data-bind="value: monthlyDebt" />
</td>
</tr>
<tr>
<td>Valor de propiedad</td>
<td><span data-bind="text: propertyValue().formatMoney(2, '.', ',')">-</span></td>
</tr>
<tr>
<td>Linea de crédito</td>
<td><span data-bind="text: creditLine().formatMoney(2, '.', ',')">-</span></td>
</tr>
<tr>
<td>Mensualidad</td>
<td><span data-bind="text: monthlyPayment().formatMoney(2, '.', ',')">-</span></td>
</tr>
<tr>
<td>Enganche</td>
<td><span data-bind="text: downPayment().formatMoney(2, '.', ',')">-</span></td>
</tr>
<tr>
<td>Gastos notariales</td>
<td><span data-bind="text: notaryExpenses().formatMoney(2, '.', ',')">-</span></td>
</tr>
<tr>
<td>Desembolso inicial</td>
<td><span data-bind="text: initialPayment().formatMoney(2, '.', ',')">-</span></td>
</tr>
<tr>
<td></td>
<td>
<button data-bind="click: calcByIncome">Calcular</button>
</td>
</tr>
</table>
<br/>
<br/>
<br/>
<table>
<tr>
<th style="width: 200px;"></th>
<th></th>
</tr>
<tr>
<td>Plazo</td>
<td>
<input type="radio" name="term" value="10" data-bind="checked: term, visible: isVisibleTerm(10)">
<label data-bind="visible: isVisibleTerm(10)">10 años</label>
<input type="radio" name="term" value="15" data-bind="checked: term, visible: isVisibleTerm(15)">
<label data-bind="visible: isVisibleTerm(15)">15 años</label>
<input type="radio" name="term" value="20" data-bind="checked: term, visible: isVisibleTerm(20)">
<label...
JavaScript
Number.prototype.formatMoney = function(c, d, t) {
c = c || 2;
d = d || '.';
t = t || ',';
var n = this,
c = isNaN(c = Math.abs(c)) ? 2 : c,
d = d == undefined ? "." : d,
t = t == undefined ? "," : t,
s = n < 0 ? "-" : "",
i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))),
j = (j = i.length) > 3 ? j % 3 : 0;
return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
};
var mortgageLoanTerms = {
"10": {
"Fixed": {
"PaymentToIncomeRatio": "0.42221489",
"PaymentToDisbursementFactor": "0.945013417",
"PaymentPerThousand": "13.836844",
"DamageInsurancePerThousand": "0.337600",
"LoanToValueRatio": "0.9000",
"InterestRate": "0.10850000",
"MonthlyInterestRate": "0.00904166666",
"DamageInsurancePerThousand": "0.337600",
"LifeInsurancePerThousand": "0.430000",
"MonthlyFeeFixedAmount": "290.00"
}
},
"15": {
"Fixed": {
"PaymentToIncomeRatio": "0.42221489",
"PaymentToDisbursementFactor": "0.934091562",
"PaymentPerThousand": "11.410489",
"DamageInsurancePerThousand": "0.337600",
"LoanToValueRatio": "0.9000",
"InterestRate": "0.10960000",
"MonthlyInterestRate": "0.00913333333",
"DamageInsurancePerThousand": "0.337600",
"LifeInsurancePerThousand": "0.430000",
"MonthlyFeeFixedAmount": "290.00"
},
"Graduaed": {
"PaymentToIncomeRatio": "0.42381121",
"PaymentToDisbursementFactor": "0.928184188",
"PaymentPerThousand": "10.405667",
"DamageInsurancePerThousand": "0.337600",
"LoanToValueRatio": "0.9000",
"InterestRate": "0.10960000",
"MonthlyInterestRate": "0.00913333333",
"DamageInsurancePerThousand": "0.337600",
"LifeInsurancePerThousand": "0.430000",
"MonthlyFeeFixedAmount": "290.00"
}
},
"20": {
"Fixed": {
"PaymentToIncomeRatio":...