Advertisement
Guest User

Untitled

a guest
Mar 29th, 2015
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 39.11 KB | None | 0 0
  1. KJE.MortgageLoanCalculation = function() {
  2. this.bTERMINMONTHS = KJE.parameters.get("TERM_IN_MONTHS", false);
  3. this.MSG_YEAR_NUMBER = KJE.parameters.get("MSG_YEAR_NUMBER", "Year Number");
  4. this.MSG_POP_PRINCIPAL = KJE.parameters.get("MSG_POP_PRINCIPAL", "Total Principal for");
  5. this.MSG_POP_INTEREST = KJE.parameters.get("MSG_POP_INTEREST", "Total Interest for");
  6. this.MSG_PRINCIPAL = KJE.parameters.get("MSG_PRINCIPAL", "Principal");
  7. this.MSG_INTEREST = KJE.parameters.get("MSG_INTEREST", "Interest");
  8. this.MSG_PRINCIPAL_BALANCE = KJE.parameters.get("MSG_PRINCIPAL_BALANCE", "Principal Balance");
  9. this.MSG_POP_PRINCIPAL_NORMAL = KJE.parameters.get("MSG_POP_PRINCIPAL_NORMAL", "Principal Balance for Normal Payments Year");
  10. this.MSG_POP_PRINCIPAL_PREPAY = KJE.parameters.get("MSG_POP_PRINCIPAL_PREPAY", "Principal Balance for Prepayments Year");
  11. this.MSG_PREPAYMENTS = KJE.parameters.get("MSG_PREPAYMENTS", "Prepayments");
  12. this.MSG_NORMAL_PAYMENTS = KJE.parameters.get("MSG_NORMAL_PAYMENTS", "Normal");
  13. this.MSG_PREPAY_MESSAGE = KJE.parameters.get("MSG_PREPAY_MESSAGE", "Your planned prepayment(s) will shorten your mortgage by PREPAY_SHORTEN_TERM.");
  14. this.MSG_RETURN_AMOUNT = KJE.parameters.get("MSG_RETURN_AMOUNT", "A monthly payment of MONTHLY_PI at INTEREST_RATE for TERM years will give you a mortgage amount of LOAN_AMOUNT.");
  15. this.MSG_RETURN_PAYMENT = KJE.parameters.get("MSG_RETURN_PAYMENT", "A loan amount of LOAN_AMOUNT at INTEREST_RATE for TERM years will give you a monthly payment (PI) of MONTHLY_PI.");
  16. this.MSG_ERROR_BALLOON = KJE.parameters.get("MSG_ERROR_BALLOON", "Loan term must be less than the amortization term.");
  17. this.PITI_PERCENT = KJE.parameters.get("PITI_PERCENT", false);
  18. this.SHOW_PITI = KJE.parameters.get("SHOW_PITI", false);
  19. this.USE_OTHER_FEES_AMOUNT = KJE.parameters.get("USE_OTHER_FEES_AMOUNT", true);
  20. this.ADJUSTABLE_RATE = false;
  21. this.sSchedule = new KJE.Repeating();
  22. this.sAdjSchedule = null
  23. };
  24. KJE.MortgageLoanCalculation.prototype.clear = function() {
  25. this.ADJUSTABLE_RATE_CAP = 0;
  26. this.ADJUSTABLE_RATE_FEQ = 12;
  27. this.ADJUSTABLE_RATE_FIXED = 0;
  28. this.ADJUSTABLE_RATE_INCR = 0;
  29. this.BALLOON_PAYMENT = 0;
  30. this.DISCOUNT_POINTS_PERCENT = 0;
  31. this.FEDERAL_TAX_RATE = 0;
  32. this.INFLATION_RATE = 3;
  33. this.INTEREST_ONLY = false;
  34. this.INTEREST_RATE = 0;
  35. this.LOAN_AMOUNT = 0;
  36. this.MARGINAL_TAX_RATE = 0;
  37. this.MSG_TERM = "";
  38. this.ORIGINATION_FEES_PERCENT = 0;
  39. this.OTHER_FEES = 0;
  40. this.OTHER_FEES_RATE = 0;
  41. this.PAYMENT_CALC = 1;
  42. this.PREPAY_AMOUNT = 0;
  43. this.PREPAY_BALLOON_PAYMENT = 0;
  44. this.PREPAY_STARTS_WITH = 1;
  45. this.PREPAY_TYPE = KJE.Default.PREPAY_NONE;
  46. this.PURCHASE_PRICE = 0;
  47. this.RATE_INDEX = 0;
  48. this.RATE_INDEX_MARGIN = 0;
  49. this.RECAST_TO_AMORTIZE = 1000000;
  50. this.SAVINGS_RATE = 0;
  51. this.STATE_TAX_RATE = 0;
  52. this.TERM = 0;
  53. this.TERM_BALLOON = 0;
  54. this.YEARS_IN_HOME = 0;
  55. this.YEARLY_HOME_INSURANCE = 0;
  56. this.YEARLY_PROPERTY_TAXES = 0;
  57. this.BY_YEAR = true
  58. };
  59. KJE.MortgageLoanCalculation.prototype.calculate = function(h) {
  60. var aH = KJE;
  61. if (this.PITI_PERCENT && this.SHOW_PITI) {
  62. this.YEARLY_PROPERTY_TAXES = aH.round((this.YEARLY_PROPERTY_TAXES / 100) * this.LOAN_AMOUNT);
  63. this.YEARLY_HOME_INSURANCE = aH.round((this.YEARLY_HOME_INSURANCE / 100) * this.LOAN_AMOUNT)
  64. }
  65. var U = this.ADJUSTABLE_RATE_CAP;
  66. var aP = this.ADJUSTABLE_RATE_FEQ;
  67. var m = this.ADJUSTABLE_RATE_FIXED;
  68. var L = this.ADJUSTABLE_RATE_INCR;
  69. var b = this.ADJUSTABLE_RATE;
  70. var aK = this.BALLOON_PAYMENT;
  71. var bk = this.bTERMINMONTHS;
  72. var W = this.DISCOUNT_POINTS_PERCENT;
  73. var aW = this.FEDERAL_TAX_RATE;
  74. var C = this.INFLATION_RATE;
  75. var ac = this.INTEREST_ONLY;
  76. var a2 = this.INTEREST_RATE;
  77. var a5 = this.LOAN_AMOUNT;
  78. var O = this.MARGINAL_TAX_RATE;
  79. var at = this.ORIGINATION_FEES_PERCENT;
  80. var N = this.OTHER_FEES_RATE;
  81. var X = this.OTHER_FEES;
  82. var aL = this.PAYMENT_CALC;
  83. var P = this.PREPAY_AMOUNT;
  84. var d = this.PREPAY_BALLOON_PAYMENT;
  85. var a9 = this.PREPAY_STARTS_WITH;
  86. var w = this.PREPAY_TYPE;
  87. var ae = this.PURCHASE_PRICE;
  88. var aC = this.RATE_INDEX_MARGIN;
  89. var t = this.RATE_INDEX;
  90. var aM = this.RECAST_TO_AMORTIZE;
  91. var k = this.SAVINGS_RATE;
  92. var Y = this.STATE_TAX_RATE;
  93. var ax = this.TERM_BALLOON;
  94. var V = this.TERM;
  95. var H = this.YEARLY_HOME_INSURANCE;
  96. var aF = this.YEARLY_PROPERTY_TAXES;
  97. var aj = this.YEARS_IN_HOME;
  98. var al = this.BY_YEAR;
  99. var M = "";
  100. var R = 0;
  101. var j = "";
  102. var a7 = 0;
  103. var bh = 0;
  104. var D = 0;
  105. var p = 0;
  106. var ah = 0;
  107. var aB = 0;
  108. var bc = 0;
  109. var aQ = 0;
  110. var ak = 0;
  111. var aT = 0;
  112. var a8 = 0;
  113. var l = 0;
  114. var o = 0;
  115. var T = 0;
  116. var f = 0;
  117. var aI = 0;
  118. var be;
  119. var e = 0;
  120. var Q = 0;
  121. var a1 = 0;
  122. var bn = "";
  123. var ag = 0;
  124. var aU = 0;
  125. var bg = 0;
  126. var av = 0;
  127. var a6 = 0;
  128. var ba = 0;
  129. var bf = 0;
  130. var bt = 0;
  131. var ay = 0;
  132. var bi = 0;
  133. var bd = 0;
  134. var c = 0;
  135. var bb = 0;
  136. var S = 0;
  137. var af = 0;
  138. var g = 0;
  139. if (bk) {
  140. this.MONTHS = af = V % 12;
  141. this.TERM = V = Math.floor(V / 12)
  142. }
  143. var y = this.TOTAL_MONTHS = af + V * 12;
  144. if (O == 0) {
  145. O = ((Y / 100) * (1 - aW / 100)) * 100 + aW
  146. }
  147. if (aL == 0) {
  148. if (ac) {
  149. a5 = aH.round(l / (a2 / 1200), 2)
  150. } else {
  151. a5 = aH.round(KJE.PV(a2 / 1200, V * 12 + af, l), 2)
  152. }
  153. M = this.MSG_RETURN_AMOUNT
  154. } else {
  155. if (ac) {
  156. l = aH.round((a2 / 1200 * a5), 2)
  157. } else {
  158. l = aH.round(KJE.PMT(a2 / 1200, V * 12 + af, a5), 2)
  159. }
  160. M = this.MSG_RETURN_PAYMENT
  161. }
  162. if (aj == 0) {
  163. aj = V + (af / 12)
  164. } else {
  165. if (aj > V) {
  166. aj = V + (af / 12)
  167. }
  168. }
  169. var I = aj * 12;
  170. var ad = true;
  171. if (ae == 0) {
  172. ae = a5;
  173. ad = false
  174. }
  175. if (!this.USE_OTHER_FEES_AMOUNT) {
  176. X = aH.round((N / 100) * a5, 2)
  177. }
  178. D = aH.round((W / 100) * a5, 2);
  179. aI = aH.round((at / 100) * a5, 2);
  180. bt = D + aI + X;
  181. aT = (a5 / ae);
  182. a8 = aH.round(H / 12, 2);
  183. f = aH.round(aF / 12, 2);
  184. o = a8 + f + l;
  185. ah = aH.round((a2 / 1200) * a5, 2);
  186. aB = (ac ? 0 : l - ah);
  187. var v = a2 / 1200;
  188. var aS = O / 100;
  189. var B = k / 1200;
  190. g = (t + aC) / 100;
  191. if (b && g != a2 / 100 && g != 0) {
  192. bi = KJE.MortgageLoanCalculation.APRAdjustable(V * 12 + af, a5, bt, a2 / 100, m, aP, g, L / 100, U)
  193. } else {
  194. bi = KJE.APR(V * 12 + af, l, v, a5, bt) * 12
  195. }
  196. bd = aH.round(KJE.PMT(v, V * 12 + af, a5 + bt), 2);
  197. c = a5 + bt;
  198. bf = (a2 / 100) * (1 - (aS * (a5 > 1000000 ? 1000000 / a5 : 1)));
  199. bb = (bi) * (1 - (aS * (a5 > 1000000 ? 1000000 / a5 : 1)));
  200. ay = 0;
  201. ak = 0;
  202. var aA = false;
  203. if (ax > 0) {
  204. if (ax > V) {
  205. throw this.MSG_ERROR_BALLOON
  206. }
  207. aA = true
  208. }
  209. if (ac && aM < ax) {
  210. ax = V;
  211. aA = true
  212. }
  213. var aE = Math.round(aA ? ax : V) + 1;
  214. var az = 0;
  215. var aJ = this.DS_PRINCIPAL_BAL = KJE.FloatArray(aE);
  216. var aD = this.DS_PREPAY_PRINCIPAL_BAL = KJE.FloatArray(aE);
  217. var aY = this.DS_INTEREST_PAID = KJE.FloatArray(aE);
  218. var a4 = this.DS_PAYMENTS = KJE.FloatArray(aE);
  219. var z = new Array(aE);
  220. var x = true;
  221. var a0 = aF;
  222. av = (w == KJE.Default.PREPAY_ONETIME && a9 == 0 ? P : 0);
  223. var bm = a5 - av;
  224. var aX = 0;
  225. var aG = 0;
  226. var br = 0;
  227. var E = 0;
  228. var ar = 0;
  229. var aZ = (ac ? ah : l);
  230. var bj = 0;
  231. var J = 0;
  232. var aR = a5;
  233. var aw = 0;
  234. var aq = 0;
  235. var A = 0;
  236. var bs = 0;
  237. var K = 0;
  238. var Z = l;
  239. var a3 = 0;
  240. var bp = 0;
  241. var bl = 0;
  242. var u = 0;
  243. var aa = 0;
  244. var bq = 0;
  245. if (w == KJE.Default.PREPAY_NONE) {
  246. x = false
  247. }
  248. if (a9 == 0 && w != KJE.Default.PREPAY_ONETIME) {
  249. a9 = 1
  250. }
  251. var ap = 0;
  252. z[ap] = "0";
  253. aD[ap] = bm;
  254. aJ[ap] = a5;
  255. aY[ap] = 0;
  256. a4[ap] = 0;
  257. ap += 1;
  258. if (h) {
  259. var am = this.sSchedule;
  260. am.clearRepeat();
  261. if (x) {
  262. am.addHeader("&nbsp;", {
  263. sCell: KJE._sHeadingUnderline,
  264. sContent: am.sReportCol("Regular Payment Schedule", 10),
  265. sFormat: "COLSPAN=3"
  266. }, {
  267. sCell: KJE._sHeadingUnderline,
  268. sContent: am.sReportCol("Prepayment Payment Schedule", 11),
  269. sFormat: "COLSPAN=3"
  270. })
  271. }
  272. if (!al && x) {
  273. am.addHeader(am.sReportCol("<BR><BR>Nbr", 1), am.sReportCol("<BR><BR>Payment", 2), am.sReportCol("<BR><BR>Interest", 4), am.sReportCol("Ending<BR>Principal<BR>Balance", 5), am.sReportCol("<BR><BR>Payment", 2), am.sReportCol("<BR><BR>Interest", 4), am.sReportCol("Ending<BR>Principal<BR>Balance", 5))
  274. } else {
  275. if (!al && !x) {
  276. am.addHeader(am.sReportCol("<BR><BR>Nbr", 1), am.sReportCol("<BR><BR>Payment", 2), am.sReportCol("<BR><BR>Principal", 3), am.sReportCol("<BR><BR>Interest", 4), am.sReportCol("Ending<BR>Principal<BR>Balance", 5))
  277. } else {
  278. if (al && x) {
  279. am.addHeader(am.sReportCol("<BR><BR>Yr ", 6), am.sReportCol("<BR>Total<BR>Payments", 7), am.sReportCol("<BR>Interest<BR>Paid", 8), am.sReportCol("Ending<BR>Principal<BR>Balance", 5), am.sReportCol("<BR>Total<BR>Payments", 7), am.sReportCol("<BR>Interest<BR>Paid", 8), am.sReportCol("Ending<BR>Principal<BR>Balance", 5))
  280. } else {
  281. am.addHeader(am.sReportCol("<BR><BR>Year", 6), am.sReportCol("<BR>Total<BR>Payments", 7), am.sReportCol("<BR>Principal<BR>Paid", 9), am.sReportCol("<BR>Interest<BR>Paid", 8), am.sReportCol("Ending<BR>Principal<BR>Balance", 5))
  282. }
  283. }
  284. }
  285. if (x) {
  286. am.addRepeat("&nbsp;", "&nbsp;", "&nbsp;", aH.dollars(aR, 2), (w == KJE.Default.PREPAY_ONETIME && a9 == 0 ? aH.dollars(P, 2) : ""), "&nbsp;", "&nbsp;", aH.dollars(bm, 2))
  287. } else {
  288. am.addRepeat("&nbsp;", "&nbsp;", "&nbsp;", "&nbsp;", aH.dollars(aR, 2))
  289. }
  290. }
  291. a7 = l;
  292. var aO = l;
  293. var ab = l;
  294. var bo = a2 / 100;
  295. var ao = a2 / 100;
  296. var aV = 0;
  297. if (b && L != 0) {
  298. if (this.sAdjSchedule == null) {
  299. this.sAdjSchedule = new KJE.Repeating()
  300. }
  301. var G = this.sAdjSchedule;
  302. G.clearRepeat();
  303. G.addHeader(G.sReportCol("Payment Number", 12), G.sReportCol("Interest Rate", 13), G.sReportCol("Monthly Payment", 14));
  304. G.addRepeat("1", aH.percent(ao, 2), aH.dollars(l, 2))
  305. }
  306. var F = (aA ? ax * 12 : V * 12 + af);
  307. for (var au = 1; au <= F; au++) {
  308. az = au - 1;
  309. aZ = aO;
  310. Z = ab;
  311. bj = 0;
  312. a3 = 0;
  313. if (x && (a9 <= au)) {
  314. if (w == KJE.Default.PREPAY_ONETIME && a9 == au) {
  315. bj = P
  316. } else {
  317. if (w == KJE.Default.PREPAY_YEARLY) {
  318. if (((au - a9) % 12) == 0) {
  319. bj = P
  320. }
  321. } else {
  322. if (w == KJE.Default.PREPAY_MONTHLY) {
  323. bj = P
  324. }
  325. }
  326. }
  327. }
  328. aw = aH.round(v * aR, 2);
  329. if (ac && au <= aM) {
  330. Z = aw
  331. }
  332. bl = aH.round(v * (aR > 1000000 ? 1000000 : aR), 2);
  333. aq = (ac && au < aM ? 0 : Z - aw);
  334. aR -= aq;
  335. if (aR == 0) {
  336. Z = 0;
  337. aq = 0;
  338. aw = 0
  339. } else {
  340. if (aR < 0 || (aR > 0.005 && F == au && !aA)) {
  341. aq += aR;
  342. aR = 0;
  343. Z = aq + aw
  344. } else {
  345. if (F == au && !aA) {
  346. aR = 0
  347. }
  348. }
  349. }
  350. aX = aH.round(v * bm, 2);
  351. if (ac && au <= aM) {
  352. aZ = aX
  353. }
  354. u = aH.round(v * (bm > 1000000 ? 1000000 : bm), 2);
  355. if (ac && au < aM) {
  356. if (bm == 0) {
  357. aZ = 0;
  358. aG = 0;
  359. aX = 0;
  360. bj = 0
  361. } else {
  362. aG = aZ - aX;
  363. bm -= aG + bj;
  364. if (bm < 0) {
  365. bj += bm;
  366. bm = 0
  367. }
  368. }
  369. } else {
  370. aG = aZ - aX;
  371. bm -= aG + bj;
  372. if (bm == 0) {
  373. aZ = 0;
  374. aG = 0;
  375. aX = 0;
  376. bj = 0
  377. } else {
  378. if (bm < 0) {
  379. bj += bm;
  380. if (bj < 0) {
  381. aG += bj;
  382. bj = 0
  383. }
  384. bm = 0;
  385. aZ = aG + aX
  386. } else {
  387. if (bm > 0.005 && F == au && !aA) {
  388. aG += bm;
  389. bm = 0;
  390. aZ = aG + aX
  391. } else {
  392. if (F == au && !aA) {
  393. bm = 0
  394. }
  395. }
  396. }
  397. }
  398. }
  399. if (aZ < 0) {
  400. aZ = 0
  401. }
  402. if (bm == 0 && aU == 0) {
  403. ag = au;
  404. aU = V * 12 + af - au
  405. }
  406. br += aX;
  407. aa += u;
  408. E += aG;
  409. ar += aZ;
  410. J += bj;
  411. av += aZ + bj;
  412. Q += aX;
  413. A += aw;
  414. bq += bl;
  415. bs += aq;
  416. K += Z;
  417. ay += Z;
  418. ak += aw;
  419. if ((au % 12) == 0) {
  420. if (au == 12) {
  421. bc = A;
  422. e = br;
  423. aQ = (O / 100 * (D + bq + a0));
  424. a3 = aQ
  425. } else {
  426. a0 *= 1 + C;
  427. a3 = ((O / 100) * (bq + a0))
  428. }
  429. bp += a3;
  430. bq = 0;
  431. aa = 0;
  432. a3 = 0
  433. }
  434. if (aA && F == au) {
  435. aK = aR + Z;
  436. aR = 0;
  437. d = bm + aZ + bj;
  438. bm = 0;
  439. ay -= Z;
  440. av -= bj + aZ
  441. }
  442. if (!al && h) {
  443. if (x) {
  444. am.addRepeat(aH.number(au), aH.dollars((aA && F == au ? aK : Z), 2), aH.dollars(aw, 2), aH.dollars(aR, 2), aH.dollars((aA && F == au ? d : bj + aZ), 2), aH.dollars(aX, 2), aH.dollars(bm, 2))
  445. } else {
  446. am.addRepeat(aH.number(au), aH.dollars((aA && F == au ? aK : Z), 2), aH.dollars((aA && F == au ? aK - aw : aq), 2), aH.dollars(aw, 2), aH.dollars(aR, 2))
  447. }
  448. }
  449. if ((au % 12) == 0) {
  450. z[ap] = "" + ap;
  451. if (aA && F == au) {
  452. aD[ap] = d;
  453. aJ[ap] = aK
  454. } else {
  455. aD[ap] = bm;
  456. aJ[ap] = aR
  457. }
  458. aY[ap] = A;
  459. a4[ap] = (aA && F == au ? aK - Z + K : K);
  460. ap += 1;
  461. if (al && h) {
  462. if (x) {
  463. am.addRepeat(aH.number(au / 12), aH.dollars((aA && F == au ? aK - Z + K : K), 2), aH.dollars(A, 2), aH.dollars(aR, 2), aH.dollars((aA && F == au ? d - bj - aZ + ar + J : ar + J), 2), aH.dollars(br, 2), aH.dollars(bm, 2))
  464. } else {
  465. am.addRepeat(aH.number((au / 12)), aH.dollars((aA && F == au ? aK - Z + K : K), 2), aH.dollars((aA && F == au ? aK + bs - aw - aq : bs), 2), aH.dollars(A, 2), aH.dollars(aR, 2))
  466. }
  467. }
  468. A = 0;
  469. bq = 0;
  470. bs = 0;
  471. K = 0;
  472. br = 0;
  473. aa = 0;
  474. E = 0;
  475. ar = 0;
  476. J = 0
  477. }
  478. if ((au == aM) || ((au < m ? 1 : (au - m) % aP) == 0 && au != 1 && b && au != V * 12 + af && L != 0 && au >= m)) {
  479. ao += L / 100;
  480. if (ao > U / 100) {
  481. ao = U / 100
  482. }
  483. if (ao < 0.02) {
  484. ao = 0.02
  485. }
  486. if (ao != bo || (au == aM)) {
  487. bo = ao;
  488. v = ao / 12;
  489. aO = aH.round(KJE.PMT(v, V * 12 + af - au, bm), 2);
  490. ab = aH.round(KJE.PMT(v, V * 12 + af - au, aR), 2);
  491. if (R == 0) {
  492. R = ab
  493. }
  494. S = ab;
  495. if (a7 < ab) {
  496. a7 = ab
  497. }
  498. if (b && L != 0) {
  499. G.addRepeat(au, aH.percent(ao, 2), aH.dollars(ab, 2))
  500. }
  501. }
  502. }
  503. }
  504. if (b && L != 0) {
  505. j = G.getRepeat();
  506. G.clearRepeat()
  507. }
  508. this.PREPAY_SHORTEN_TOTAL_MONTHS = aU;
  509. bg = (aU / 12);
  510. aU = (aU % 12);
  511. bn = this.MSG_PREPAY_MESSAGE;
  512. bh = (bp / (V + af / 12));
  513. p = aR;
  514. be = bm;
  515. av = Q + a5 - be;
  516. ay = ak + a5 - p;
  517. var an = 1;
  518. if (x) {
  519. an = 2
  520. }
  521. var aN = this.DS_INTEREST = new Array(an);
  522. var a = this.DS_PRINCIPAL = new Array(an);
  523. var ai = this.totalpaid_cats = new Array(an);
  524. aN[0] = ak;
  525. a[0] = a5 - p;
  526. ai[0] = this.MSG_NORMAL_PAYMENTS;
  527. if (x) {
  528. aN[1] = Q;
  529. a[1] = a5 - be;
  530. ai[1] = this.MSG_PREPAYMENTS;
  531. a1 = ak - Q
  532. }
  533. this.cats = z;
  534. this.sReturnMessage = M;
  535. this.MARGINAL_TAX_RATE = O;
  536. this.ADJUSTABLE_AFTER_FIRST_ADJ = R;
  537. this.ADJUSTABLE_PAYMENT_AMTS = j;
  538. this.ADJUSTABLE_RATE_HIGHEST = a7;
  539. this.AVG_TAX_SAVINGS = bh;
  540. this.DISCOUNT_POINTS_AMT = D;
  541. this.ENDING_BALANCE = p;
  542. this.FIRST_MONTH_INTEREST = ah;
  543. this.FIRST_MONTH_PRINCIPAL = aB;
  544. this.FIRST_YEAR_INTEREST = bc;
  545. this.FIRST_YEAR_TAX_SAVINGS = aQ;
  546. this.FULLY_INDEX_RATE = g;
  547. this.FULLY_INDEXED_PAYMENT = S;
  548. this.INTEREST_PAID = ak;
  549. this.LOAN_APR = bi;
  550. this.LOAN_APR_AFT = bb;
  551. this.LOAN_APR_AMOUNT = c;
  552. this.LOAN_APR_PAYMENT = bd;
  553. this.LOAN_TO_VALUE = aT;
  554. this.MONTHLY_HOME_INSURANCE = a8;
  555. this.MONTHLY_PI = l;
  556. this.MONTHLY_PITI = o;
  557. this.MONTHLY_PROPERTY_TAXES = f;
  558. this.MONTHS = af;
  559. this.ORIGINATION_FEES_AMT = aI;
  560. this.PREPAY_ENDING_BALANCE = be;
  561. this.PREPAY_FIRST_YEAR_INTEREST = e;
  562. this.PREPAY_INTEREST_PAID = Q;
  563. this.PREPAY_INTEREST_SAVINGS = a1;
  564. this.PREPAY_MESSAGE = bn;
  565. this.PREPAY_PAYOFF_MONTHS = ag;
  566. this.PREPAY_SHORTEN_MONTHS = aU;
  567. this.PREPAY_SHORTEN_YEARS = bg;
  568. this.PREPAY_TOTAL_OF_PAYMENTS = av;
  569. this.PREPAY_TOTAL_VALUE = a6;
  570. this.PREPAY_TOTAL_VALUE_AFTX = ba;
  571. this.TAX_ADJ_RATE = bf;
  572. this.TOTAL_CLOSING_COSTS = bt;
  573. this.TOTAL_OF_PAYMENTS = ay;
  574. this.OTHER_FEES = X;
  575. this.BALLOON_PAYMENT = aK;
  576. this.PREPAY_BALLOON_PAYMENT = d;
  577. this.REGULAR_PAYMENTS = aH.input(this.TERM_BALLOON * 12 - 1)
  578. };
  579. KJE.MortgageLoanCalculation.prototype.formatReport = function(a) {
  580. var b = KJE;
  581. var c = a;
  582. c = KJE.replace("FIXED_YEARS", b.number(this.ADJUSTABLE_RATE_FIXED / 12), c);
  583. c = KJE.replace("ADJUSTABLE_YEARS", b.number(this.TERM + this.MONTHS / 12 - this.ADJUSTABLE_RATE_FIXED / 12), c);
  584. c = KJE.replace("RECAST_TO_AMORTIZE_YEARS", b.number(this.RECAST_TO_AMORTIZE / 12), c);
  585. c = KJE.replace("RECAST_TO_AMORTIZE", b.number(this.RECAST_TO_AMORTIZE), c);
  586. c = KJE.replace("REMAIN_AFTER_AMORTIZE", b.number(this.TERM * 12 + this.MONTHS - this.RECAST_TO_AMORTIZE), c);
  587. c = KJE.replace("MSG_TERM", this.MSG_TERM, c);
  588. c = KJE.replace("RESULT_MESSAGE", this.sReturnMessage, c);
  589. c = KJE.replace("YEARS_IN_HOME", b.number(this.YEARS_IN_HOME), c);
  590. c = KJE.replace("YEARLY_PROPERTY_TAXES", b.dollars(this.YEARLY_PROPERTY_TAXES, 2), c);
  591. c = KJE.replace("YEARLY_HOME_INSURANCE", b.dollars(this.YEARLY_HOME_INSURANCE, 2), c);
  592. c = KJE.replace("TOTAL_CLOSING_COSTS", b.dollars(this.TOTAL_CLOSING_COSTS, 2), c);
  593. c = KJE.replace("TERM_BALLOON", b.number(this.TERM_BALLOON), c);
  594. if (this.MONTHS > 0) {
  595. c = KJE.replace("TERM", b.number(this.TERM * 12 + this.MONTHS), c);
  596. c = KJE.replace("years", "months", c)
  597. } else {
  598. c = KJE.replace("TERM", b.number(this.TERM), c)
  599. }
  600. c = KJE.replace("TAX_ADJ_RATE", b.percent(this.TAX_ADJ_RATE, 3), c);
  601. c = KJE.replace("SAVINGS_RATE", b.percent(this.SAVINGS_RATE / 100, 3), c);
  602. c = KJE.replace("PURCHASE_PRICE", b.dollars(this.PURCHASE_PRICE, 2), c);
  603. c = KJE.replace("ADJUSTABLE_RATE_FEQ", b.number(this.ADJUSTABLE_RATE_FEQ), c);
  604. c = KJE.replace("ADJUSTABLE_RATE_INCR", b.percent(this.ADJUSTABLE_RATE_INCR / 100, 2), c);
  605. c = KJE.replace("ADJUSTABLE_RATE_CAP", b.percent(this.ADJUSTABLE_RATE_CAP / 100, 3), c);
  606. c = KJE.replace("ADJUSTABLE_PAYMENT_AMTS", this.ADJUSTABLE_PAYMENT_AMTS, c);
  607. c = KJE.replace("ADJUSTABLE_RATE_HIGHEST", b.dollars(this.ADJUSTABLE_RATE_HIGHEST, 2), c);
  608. c = KJE.replace("ADJUSTABLE_AFTER_FIRST_ADJ", b.dollars(this.ADJUSTABLE_AFTER_FIRST_ADJ, 2), c);
  609. c = KJE.replace("ADJUSTABLE_RATE_FIXED", b.number(this.ADJUSTABLE_RATE_FIXED), c);
  610. c = KJE.replace("RATE_INDEX_MARGIN", b.percent(this.RATE_INDEX_MARGIN / 100, 3), c);
  611. c = KJE.replace("RATE_INDEX", b.percent(this.RATE_INDEX / 100, 3), c);
  612. c = KJE.replace("ADJUSTABLE_RATE", b.yesno(this.ADJUSTABLE_RATE), c);
  613. c = KJE.replace("REGULAR_PAYMENTS", this.REGULAR_PAYMENTS, c);
  614. if (this.PREPAY_TYPE == KJE.Default.PREPAY_NONE) {
  615. c = KJE.replace("PREPAY_MESSAGE", "", c);
  616. c = KJE.replace("PREPAY_TYPE", this.PREPAY_TYPE, c);
  617. c = KJE.replace("PREPAY_TOTAL_VALUE_AFTX", "", c);
  618. c = KJE.replace("PREPAY_TOTAL_VALUE", "", c);
  619. c = KJE.replace("PREPAY_TOTAL_OF_PAYMENTS", "", c);
  620. c = KJE.replace("PREPAY_SHORTEN_TERM", "", c);
  621. c = KJE.replace("PREPAY_STARTS_WITH", "", c);
  622. c = KJE.replace("PREPAY_SHORTEN_YEARS", "", c);
  623. c = KJE.replace("PREPAY_SHORTEN_MONTHS", "", c);
  624. c = KJE.replace("PREPAY_INTEREST_SAVINGS", "", c);
  625. c = KJE.replace("PREPAY_INTEREST_PAID", "", c);
  626. c = KJE.replace("PREPAY_FIRST_YEAR_INTEREST", "", c);
  627. c = KJE.replace("PREPAY_AMOUNT", "", c);
  628. c = KJE.replace("PREPAY_ENDING_BALANCE", "", c);
  629. c = KJE.replace("PREPAY_BALLOON_PAYMENT", "", c);
  630. c = KJE.replace("PREPAY_PAYOFF_PERIODS", "", c)
  631. } else {
  632. c = KJE.replace("PREPAY_MESSAGE", this.PREPAY_MESSAGE, c);
  633. c = KJE.replace("PREPAY_TYPE", KJE.Default.PREPAY_PERIODS[this.PREPAY_TYPE], c);
  634. c = KJE.replace("PREPAY_TOTAL_VALUE_AFTX", b.dollars(this.PREPAY_TOTAL_VALUE_AFTX, 2), c);
  635. c = KJE.replace("PREPAY_TOTAL_VALUE", b.dollars(this.PREPAY_TOTAL_VALUE, 2), c);
  636. c = KJE.replace("PREPAY_TOTAL_OF_PAYMENTS", b.dollars(this.PREPAY_TOTAL_OF_PAYMENTS, 2), c);
  637. c = KJE.replace("PREPAY_STARTS_WITH", b.number(this.PREPAY_STARTS_WITH), c);
  638. c = KJE.replace("PREPAY_SHORTEN_TERM", KJE.getTermLabel(this.PREPAY_SHORTEN_TOTAL_MONTHS), c);
  639. c = KJE.replace("PREPAY_SHORTEN_YEARS", b.number(this.PREPAY_SHORTEN_YEARS), c);
  640. c = KJE.replace("PREPAY_SHORTEN_MONTHS", b.number(this.PREPAY_SHORTEN_MONTHS), c);
  641. c = KJE.replace("PREPAY_INTEREST_SAVINGS", b.dollars(this.PREPAY_INTEREST_SAVINGS, 2), c);
  642. c = KJE.replace("PREPAY_INTEREST_PAID", b.dollars(this.PREPAY_INTEREST_PAID, 2), c);
  643. c = KJE.replace("PREPAY_FIRST_YEAR_INTEREST", b.dollars(this.PREPAY_FIRST_YEAR_INTEREST, 2), c);
  644. c = KJE.replace("PREPAY_AMOUNT", b.dollars(this.PREPAY_AMOUNT, 2), c);
  645. c = KJE.replace("PREPAY_ENDING_BALANCE", b.dollars(this.PREPAY_ENDING_BALANCE, 2), c);
  646. c = KJE.replace("PREPAY_BALLOON_PAYMENT", b.dollars(this.PREPAY_BALLOON_PAYMENT, 2), c);
  647. c = KJE.replace("PREPAY_PAYOFF_PERIODS", KJE.getTermLabel(this.PREPAY_PAYOFF_MONTHS), c)
  648. }
  649. c = KJE.replace("OTHER_FEES", b.dollars(this.OTHER_FEES, 2), c);
  650. c = KJE.replace("ORIGINATION_FEES_PERCENT", b.percent(this.ORIGINATION_FEES_PERCENT / 100, 2), c);
  651. c = KJE.replace("ORIGINATION_FEES_AMT", b.dollars(this.ORIGINATION_FEES_AMT, 2), c);
  652. c = KJE.replace("MONTHLY_PROPERTY_TAXES", b.dollars(this.MONTHLY_PROPERTY_TAXES, 2), c);
  653. c = KJE.replace("MONTHLY_PITI", b.dollars(this.MONTHLY_PITI, 2), c);
  654. c = KJE.replace("MONTHLY_PI", b.dollars(this.MONTHLY_PI, 2), c);
  655. c = KJE.replace("MONTHLY_HOME_INSURANCE", b.dollars(this.MONTHLY_HOME_INSURANCE, 2), c);
  656. c = KJE.replace("MARGINAL_TAX_RATE", b.percent(this.MARGINAL_TAX_RATE / 100, 2), c);
  657. c = KJE.replace("FEDERAL_TAX_RATE", b.percent(this.FEDERAL_TAX_RATE / 100, 2), c);
  658. c = KJE.replace("STATE_TAX_RATE", b.percent(this.STATE_TAX_RATE / 100, 2), c);
  659. c = KJE.replace("LOAN_TO_VALUE", b.percent(this.LOAN_TO_VALUE, 2), c);
  660. c = KJE.replace("LOAN_APR_AFT", b.percent(this.LOAN_APR_AFT, 3), c);
  661. c = KJE.replace("LOAN_APR_PAYMENT", b.dollars(this.LOAN_APR_PAYMENT, 2), c);
  662. c = KJE.replace("LOAN_APR_AMOUNT", b.dollars(this.LOAN_APR_AMOUNT, 2), c);
  663. c = KJE.replace("LOAN_APR", b.percent(this.LOAN_APR, 3), c);
  664. c = KJE.replace("LOAN_AMOUNT", b.dollars(this.LOAN_AMOUNT, 2), c);
  665. c = KJE.replace("INTEREST_RATE", b.percent(this.INTEREST_RATE / 100, 3), c);
  666. c = KJE.replace("INTEREST_PAID", b.dollars(this.INTEREST_PAID, 2), c);
  667. c = KJE.replace("INFLATION_RATE", b.percent(this.INFLATION_RATE / 100, 2), c);
  668. c = KJE.replace("FIRST_YEAR_TAX_SAVINGS", b.dollars(this.FIRST_YEAR_TAX_SAVINGS, 2), c);
  669. c = KJE.replace("FIRST_YEAR_INTEREST", b.dollars(this.FIRST_YEAR_INTEREST, 2), c);
  670. c = KJE.replace("FIRST_MONTH_PRINCIPAL", b.dollars(this.FIRST_MONTH_PRINCIPAL, 2), c);
  671. c = KJE.replace("FIRST_MONTH_INTEREST", b.dollars(this.FIRST_MONTH_INTEREST, 2), c);
  672. c = KJE.replace("DISCOUNT_POINTS_PERCENT", b.number(this.DISCOUNT_POINTS_PERCENT, 2), c);
  673. c = KJE.replace("DISCOUNT_POINTS_AMT", b.dollars(this.DISCOUNT_POINTS_AMT, 2), c);
  674. c = KJE.replace("AVG_TAX_SAVINGS", b.dollars(this.AVG_TAX_SAVINGS, 2), c);
  675. c = KJE.replace("TOTAL_OF_PAYMENTS", b.dollars(this.TOTAL_OF_PAYMENTS, 2), c);
  676. c = KJE.replace("ENDING_BALANCE", b.dollars(this.ENDING_BALANCE, 2), c);
  677. c = KJE.replace("BALLOON_PAYMENT", b.dollars(this.BALLOON_PAYMENT, 2), c);
  678. c = KJE.replace("FULLY_INDEXED_PAYMENT", b.dollars(this.FULLY_INDEXED_PAYMENT, 2), c);
  679. c = KJE.replace("INTEREST_ONLY", b.yesno(this.INTEREST_ONLY ? 1 : 0), c);
  680. c = KJE.replace("CHECKBOX_BY_MONTH", (this.BY_YEAR ? "" : "CHECKED"), c);
  681. c = KJE.replace("CHECKBOX_BY_YEAR", (this.BY_YEAR ? "CHECKED" : ""), c);
  682. c = c.replace("**REPEATING GROUP**", this.sSchedule.getRepeat());
  683. this.sSchedule.clearRepeat();
  684. return c
  685. };
  686. KJE.MortgageLoanCalculation.prototype.getCategories = function() {
  687. return this.cats
  688. };
  689. KJE.MortgageLoanCalculation.prototype.getAmountPaidCategories = function() {
  690. return this.totalpaid_cats
  691. };
  692. KJE.MortgageLoanCalculation.APRAdjustable = function(t, q, d, k, s, j, c, f, l) {
  693. var b = q;
  694. var p = k / 12;
  695. var r = p;
  696. var h = KJE.PMT(p, t, b);
  697. var g = 0;
  698. var e = new Array();
  699. e[0] = Math.round(100 * (-q + d));
  700. for (var o = 1; o <= t; o++) {
  701. b -= h - (p * b);
  702. g += h;
  703. e[o] = Math.round(100 * h);
  704. if ((o < s ? 1 : (o - s) % j) == 0 && o != 1 && o != t) {
  705. var m = c / 12;
  706. if (m > (r + f)) {
  707. m = r + f
  708. }
  709. if (m > l / 12) {
  710. m = l / 12
  711. }
  712. if (m != r) {
  713. r = m;
  714. p = m;
  715. h = KJE.PMT(p, t - o, b)
  716. }
  717. }
  718. }
  719. var a = (c > k ? c : k);
  720. return (KJE.MortgageLoanCalculation.IRR(e, a / 12) * 12)
  721. };
  722. KJE.MortgageLoanCalculation.IRR = function(f, e) {
  723. var c = e / 2;
  724. var b;
  725. var d = f.length;
  726. while (true) {
  727. b = 0;
  728. for (var a = 0; a < d; a++) {
  729. b += f[a] / Math.pow((1 + e), a)
  730. }
  731. if (b > -1 && b < 1) {
  732. break
  733. }
  734. e += (b > 0 ? c : -c);
  735. c = c / 2
  736. }
  737. return e
  738. };
  739. KJE.Default.PREPAY_NONE = 0;
  740. KJE.Default.PREPAY_WEEKLY = 1;
  741. KJE.Default.PREPAY_BIWEEKLY = 2;
  742. KJE.Default.PREPAY_2XMONTHLY = 3;
  743. KJE.Default.PREPAY_MONTHLY = 4;
  744. KJE.Default.PREPAY_YEARLY = 5;
  745. KJE.Default.PREPAY_ONETIME = 6;
  746. KJE.Default.PREPAY_FREQUENCY = [0, 52, 26, 24, 12, 1, 0];
  747. KJE.Default.getPrepayDrop = function(c, b, g) {
  748. KJE.Default.PREPAY_PERIOD_IDs = KJE.parameters.get("ARRAY_PREPAY_PERIOD_ID", [KJE.Default.PREPAY_NONE, KJE.Default.PREPAY_MONTHLY, KJE.Default.PREPAY_YEARLY, KJE.Default.PREPAY_ONETIME]);
  749. KJE.Default.PREPAY_PERIODS = KJE.parameters.get("ARRAY_PREPAY_PERIODS", [KJE.parameters.get("MSG_PREPAY_NONE", "none"), "Weekly", "bi-weekly", "semi-monthly", KJE.parameters.get("MSG_PREPAY_MONTHLY", "monthly"), KJE.parameters.set("MSG_PREPAY_YEARLY", "yearly"), KJE.parameters.get("MSG_PREPAY_ONETIME", "one-time")]);
  750. var a = KJE.Default.PREPAY_PERIOD_IDs;
  751. var f = a.length;
  752. var e = KJE.Default.PREPAY_PERIODS;
  753. var d = new Array(f);
  754. for (i = 0; i < f; i++) {
  755. d[i] = e[a[i]]
  756. }
  757. return KJE.getDropBox(c, KJE.parameters.get(c, (!b ? KJE.Default.PAY_LOAN_IDs : b)), a, d, g)
  758. };
  759. KJE.CalcName = "Adjustable Rate Mortgage Calculator";
  760. KJE.CalcType = "mortgageadjustable";
  761. KJE.CalculatorTitleTemplate = "Starting adjustable monthly payment is KJE1";
  762. KJE.parseInputs = function(a) {
  763. a = KJE.replace("**TERM**", KJE.getMortgageTermDrop("TERM", 30), a);
  764. return a
  765. };
  766. KJE.initialize = function() {
  767. KJE.CalcControl = new KJE.MortgageLoanCalculation();
  768. KJE.GuiControl = new KJE.MortgageAdjustable(KJE.CalcControl)
  769. };
  770. KJE.MortgageAdjustable = function(m) {
  771. var d = KJE;
  772. var b = KJE.gLegend;
  773. var g = KJE.inputs.items;
  774. m.ADJUSTABLE_RATE = true;
  775. KJE.MortgageAmtSlider("LOAN_AMOUNT", "Mortgage amount");
  776. KJE.MortgageTermDropBoxSlider("TERM", "Term in years");
  777. KJE.MortgageRateSlider("INTEREST_RATE", "Interest rate");
  778. KJE.Label("MONTHLY_PAYMENT", m.SHOW_PITI ? "Monthly payment (PI)" : "Monthly payment", null, null, "KJEBold");
  779. KJE.Radioboxes("BY_YEAR", "Report amortization", true, "Annually", "Monthly");
  780. KJE.NumberSlider("ADJUSTABLE_RATE_FIXED", "Months before first adjustment", 0, 120, 0);
  781. KJE.NumberSlider("ADJUSTABLE_RATE_FEQ", "Months between adjustments", 1, 60, 0);
  782. KJE.PercentSlider("ADJUSTABLE_RATE_INCR", "Expected Adjustment", -5, 5, 2);
  783. KJE.PercentSlider("ADJUSTABLE_RATE_CAP", "Interest rate cap", 0, 20, 3);
  784. if (KJE.parameters.get("ADJUSTABLE_RATE_CAP_ABOVE", 0) > 0) {
  785. g.ADJUSTABLE_RATE_CAP.setValue((KJE.parameters.get("INTEREST_RATE", 0) + KJE.parameters.get("ADJUSTABLE_RATE_CAP_ABOVE", 0)), true)
  786. }
  787. KJE.Label("ADJUSTABLE_RATE_HIGHEST", "Maximum payment", null, null, "KJEBold");
  788. var a = KJE.parameters.get("MSG_DROPPER_TITLE", "Loan information: ");
  789. var c = KJE.parameters.get("MSG_DROPPER_CLOSETITLE", "KJE1 loan for KJE2 years at KJE3");
  790. var o = KJE.parameters.get("MSG_PREPAY_IMMEDIATE", "starting immediately");
  791. var e = function() {
  792. return a + KJE.subText(KJE.getKJEReplaced(c, d.dollars(m.LOAN_AMOUNT), d.number(m.TERM), d.percent(m.INTEREST_RATE / 100, 3)), "KJECenter")
  793. };
  794. KJE.addDropper(new KJE.Dropper("INPUTS", true, a, e), KJE.colorList[0]);
  795. var n = KJE.parameters.get("MSG_DROPPER2_TITLE", "Adjustments:");
  796. var j = KJE.parameters.get("MSG_DROPPER2_TITLECLOSE", "Rate fixed for KJE1 months, adjusts every KJE2 months KJE3");
  797. var k = function() {
  798. return n + KJE.subText(KJE.getKJEReplaced(j, g.ADJUSTABLE_RATE_FIXED.getFormatted(), g.ADJUSTABLE_RATE_FEQ.getFormatted(), g.ADJUSTABLE_RATE_INCR.getFormatted(), g.ADJUSTABLE_RATE_CAP.getFormatted()), "KJECenter")
  799. };
  800. KJE.addDropper(new KJE.Dropper("PREPAY", false, n, k), KJE.colorList[0]);
  801. var f = KJE.gNewGraph(KJE.gSTACKED, "GRAPH1", true, false, KJE.colorList[1], "Total Payments KJE1<div class=KJESubTitle>Total Interest KJE2</div>");
  802. f._legend._iOrientation = (KJE.gLegend.TOP_RIGHT);
  803. f._showItemLabel = false;
  804. var h = KJE.gNewGraph(KJE.gCOLUMN, "GRAPH2", true, true, KJE.colorList[1], KJE.parameters.get("MSG_GRAPH_TITLE2", "Principal Balances by Year"));
  805. h._legend._iOrientation = KJE.gLegend.GRID_TOP_RIGHT;
  806. h._iArea = KJE.gGraphLine.AREA_ALL
  807. };
  808. KJE.MortgageAdjustable.prototype.setValues = function(b) {
  809. var a = KJE.inputs.items;
  810. b.ADJUSTABLE_RATE_CAP = a.ADJUSTABLE_RATE_CAP.getValue();
  811. b.ADJUSTABLE_RATE_INCR = a.ADJUSTABLE_RATE_INCR.getValue();
  812. b.ADJUSTABLE_RATE_FEQ = a.ADJUSTABLE_RATE_FEQ.getValue();
  813. b.ADJUSTABLE_RATE_FIXED = a.ADJUSTABLE_RATE_FIXED.getValue();
  814. b.LOAN_AMOUNT = a.LOAN_AMOUNT.getValue();
  815. b.TERM = a.TERM.getValue();
  816. b.INTEREST_RATE = a.INTEREST_RATE.getValue();
  817. b.BY_YEAR = a.BY_YEAR.getValue();
  818. b.INTEREST_RATE = a.INTEREST_RATE.getValue()
  819. };
  820. KJE.MortgageAdjustable.prototype.refresh = function(f) {
  821. var e = KJE;
  822. var d = KJE.gLegend;
  823. var b = KJE.inputs.items;
  824. var a = KJE.gGraphs[0];
  825. var c = KJE.gGraphs[1];
  826. KJE.setTitleTemplate(e.dollars(f.SHOW_PITI ? f.MONTHLY_PITI : f.MONTHLY_PI, 2));
  827. a.removeAll();
  828. a.setGraphCategories(f.getAmountPaidCategories());
  829. a.setTitleTemplate(e.dollars(f.TOTAL_OF_PAYMENTS), e.dollars(f.INTEREST_PAID));
  830. a._axisX.setVisible(false);
  831. a.add(new KJE.gGraphDataSeries(f.DS_INTEREST, f.MSG_INTEREST, a.getColor(1), "", f.MSG_POP_INTEREST));
  832. a.add(new KJE.gGraphDataSeries(f.DS_PRINCIPAL, f.MSG_PRINCIPAL, a.getColor(2), "", f.MSG_POP_PRINCIPAL));
  833. a.paint();
  834. c.removeAll();
  835. c._titleXAxis.setText(f.MSG_YEAR_NUMBER);
  836. c.setGraphCategories(f.getCategories());
  837. c.add(new KJE.gGraphDataSeries(f.DS_PRINCIPAL_BAL, f.MSG_NORMAL_PAYMENTS, c.getColor(1), "", f.MSG_POP_PRINCIPAL_NORMAL + " "));
  838. c._legend.setVisible(false);
  839. c.paint();
  840. b.ADJUSTABLE_RATE_HIGHEST.setText(e.dollars(f.ADJUSTABLE_RATE_HIGHEST, 2));
  841. b.MONTHLY_PAYMENT.setText(e.dollars(f.MONTHLY_PI, 2))
  842. };
  843. KJE.InputScreenText = " <div id=KJE-D-INPUTS><div id=KJE-P-INPUTS>Mortgage information:</div></div> <div id=KJE-E-INPUTS > <div id=\"KJE-C-LOAN_AMOUNT\"><input id=\"KJE-LOAN_AMOUNT\" /></div> <div id=\"KJE-C-TERM\">**TERM**</div> <div id=\"KJE-C-INTEREST_RATE\"><input id=\"KJE-INTEREST_RATE\" /></div> <div id=\"KJE-C-MONTHLY_PAYMENT\"><div id=\"KJE-MONTHLY_PAYMENT\"></div></div> <div id=\"KJE-C-BY_YEAR\"><input id=\"KJE-BY_YEAR1\" type=radio name=BY_YEAR /><input id=\"KJE-BY_YEAR2\" type=radio name=BY_YEAR /></div> <div style=\"height:10px\"></div> </div> <div id=KJE-D-PREPAY><div id=KJE-P-PREPAY>Adjustment information</div></div> <div id=KJE-E-PREPAY > <div id='KJE-C-ADJUSTABLE_RATE_FIXED'><input id='KJE-ADJUSTABLE_RATE_FIXED' /></div> <div id='KJE-C-ADJUSTABLE_RATE_FEQ'><input id='KJE-ADJUSTABLE_RATE_FEQ' /></div> <div id='KJE-C-ADJUSTABLE_RATE_INCR'><input id='KJE-ADJUSTABLE_RATE_INCR' /></div> <div id='KJE-C-ADJUSTABLE_RATE_CAP'><input id='KJE-ADJUSTABLE_RATE_CAP' /></div> <div id='KJE-C-ADJUSTABLE_AFTER_FIRST_ADJ'><div id='KJE-ADJUSTABLE_AFTER_FIRST_ADJ'></div></div> <div id='KJE-C-ADJUSTABLE_RATE_HIGHEST'><div id='KJE-ADJUSTABLE_RATE_HIGHEST'></div></div> <div style=\"height:10px\"></div> </div> **GRAPH1** **GRAPH2** ";
  844. KJE.DefinitionText = ' <div><dt>Adjustable rate mortgage (ARM)</dt><dd>This calculator shows a fully amortizing ARM which is the most common type of ARM. The monthly payment is calculated to payoff the entire mortgage balance at the end of the term. The term is typically 30 years. After any fixed interest rate period has passed, the interest rate and payment adjusts at the frequency specified. A Fully Amortizing ARM will also have a maximum rate that it will not exceed. Below is a list of the most common types of Fully Amortizing ARMs. <div class=KJECenter> <div class=KJEReportTableDiv style="width:95%"><table class=KJEReportTable> <tr class=KJEHeaderRow><th class=KJEHeading colspan=2>Common Adjustable Rate Mortgages</th></tr> <tr class="KJEFooterRow"><td class="KJELabel KJECellBorder KJECell40">ARM Type</td><td class="KJELabel KJECell60 KJECenter">Months Fixed</td></tr> <tr class="KJEEvenRow"><td class="KJECellBorder KJELabel">10/1 ARM</td><td class="KJECell KJELeft">Fixed for 120 months, adjusts annually for the remaining term of the loan.</td></tr> <tr class="KJEOddRow"><td class="KJECellBorder KJELabel">7/1 ARM</td><td class="KJECell KJELeft">Fixed for 84 months, adjusts annually for the remaining term of the loan.</td></tr> <tr class="KJEEvenRow"><td class="KJECellBorder KJELabel">5/1 ARM</td><td class="KJECell KJELeft">Fixed for 60 months, adjusts annually for the remaining term of the loan.</td></tr> <tr class="KJEOddRow"><td class="KJECellBorder KJELabel">3/1 ARM</td><td class="KJECell KJELeft">Fixed for 36 months, adjusts annually for the remaining term of the loan.</td></tr> </table></div> </div></dd> </div> <div id=\'KJE-D-LOAN_AMOUNT\' ><dt>Mortgage amount</dt><dd>Original or expected balance for your mortgage.</dd></div> <div id=\'KJE-D-INTEREST_RATE\' ><dt>Starting interest rate</dt><dd>Initial annual interest rate for this mortgage.</dd></div> <div id=\'KJE-D-TERM\' ><dt>Term in years</dt><dd>The number of years over which you will repay this loan. The most common mortgage terms are 15 years and 30 years.</dd></div> <div id=\'KJE-D-ADJUSTABLE_RATE_CAP\' ><dt>Interest rate cap</dt><dd>This is the highest interest rate allowed by your mortgage. Your actual interest rate will not be adjusted above this rate.</dd></div> <div id=\'KJE-D-ADJUSTABLE_RATE_FIXED\' ><dt>Months before first adjustment</dt><dd>This is the number of months that the interest rate is fixed. After this period, the interest rate will be subject to rate adjustments. If you enter zero in this field, we assume that the rate will begin making adjustments after initial period of time between adjustments has passed. If any number other than zero is entered, the first adjustment will take place at that time, and adjustments will happen at the frequency entered in the &quot;months between adjustments&quot; field.</dd></div> <div id=\'KJE-D-ADJUSTABLE_RATE_INCR\' ><dt>Expected adjustment</dt><dd>The amount you believe that your mortgage\'s interest rate will change. This amount will be added to or subtracted from your interest rate.</dd></div> <div id=\'KJE-D-ADJUSTABLE_RATE_FEQ\' ><dt>Months between adjustments</dt><dd>The number of payment periods between potential adjustments to your interest rate. The most common is 12 months, which means your payment could change at most once per year.</dd></div> <div id=\'KJE-D-MONTHLY_PAYMENT\' ><dt>Starting monthly payment</dt><dd>Monthly principal and interest payment (PI) based on your beginning balance and starting interest rate.</dd></div> <div><dt>Total payments</dt><dd>Total of all monthly payments over the full term of the mortgage. This total payment amount assumes that there are no prepayments of principal.</dd></div> <div><dt>Total interest</dt><dd>Total of all interest paid over the full term of the mortgage. This total interest amount assumes that there are no prepayments of principal.</dd></div> ';
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement