home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 November / pcwk_11_98a.iso / Wtestowe / Money99 / money99.1 / retire / logic.js < prev    next >
Text File  |  1998-07-25  |  12KB  |  451 lines

  1.  
  2. var DEBUG = 0
  3.  
  4. function PV(rate, nper, pmt, fv)
  5. {
  6.     var sto = parent
  7.  
  8.     if (sto.DEBUG)
  9.     {
  10.         document.write('PV rate: ' + rate + '<br>')
  11.         document.write('PV nper: ' + nper + '<br>')
  12.         document.write('PV pmt: ' + pmt + '<br>')
  13.         document.write('PV fv: ' + fv + '<br>')
  14.     }
  15.  
  16.     value =  -((pmt * ((Math.pow(1 + rate, nper) - 1) / rate) + fv) /
  17.               Math.pow(1 + rate, nper))
  18.  
  19.     if (sto.DEBUG)
  20.     {
  21.         document.write('PV value: ' + value + '<br>')
  22.     }
  23.  
  24.     return(value)
  25.  
  26. }
  27.  
  28. function PMTofGrowAnnuityEnd(PV, Rate, nPer, Growth)
  29. {
  30.     var value = 0
  31.     var sto = parent
  32.  
  33.     if (sto.DEBUG)
  34.     {
  35.         document.write('PVofGrowingAnnuityEnd PV: ' + PV + '<br>')
  36.         document.write('PVofGrowingAnnuityEnd Rate: ' + Rate + '<br>')
  37.         document.write('PVofGrowingAnnuityEnd nPer: ' + nPer + '<br>')
  38.         document.write('PVofGrowingAnnuityEnd Growth: ' + Growth + '<br>')
  39.     }
  40.  
  41.     value = PV / 
  42.                ((1 - (Math.pow(1 + Rate, -nPer) * Math.pow(1 + Growth, nPer)))
  43.                / (Rate - Growth))
  44.  
  45.     if (sto.DEBUG)
  46.     {
  47.         document.write('PVofGrowingAnnuityEnd value: ' + value + '<br>')
  48.     }
  49.  
  50.     return(value)
  51.  
  52. }
  53.  
  54. function PVofGrowingAnnuity(Amount, Rate, GrowthRate, Term)
  55. {
  56.     var sto = parent
  57.     var value = 0
  58.     var temp = 0
  59.  
  60.     if (sto.DEBUG)
  61.     {
  62.         document.write('PVofGrowingAnnuity Amount: ' + Amount + '<br>')
  63.         document.write('PVofGrowingAnnuity Rate: ' + Rate + '<br>')
  64.         document.write('PVofGrowingAnnuity GrowthRate: ' + GrowthRate +
  65.                        '<br>')
  66.         document.write('PVofGrowingAnnuity Term: ' + Term + '<br>')
  67.     }
  68.  
  69.     temp = Math.pow((1 + GrowthRate) / (1 + Rate), Term)
  70.  
  71.     value = Amount * ((1 - temp) / (Rate - GrowthRate))
  72.  
  73.     if (sto.DEBUG)
  74.     {
  75.         document.write('PVofGrowingAnnuity value: ' + value + '<br>')
  76.     }
  77.  
  78.     return(value)
  79.  
  80. }
  81.  
  82. function PVofGrowingAnnuityRatesEqual(Amount, Rate, GrowthRate, Term)
  83. {
  84.  
  85.     return(
  86.         Amount * (Term / (1 + GrowthRate))
  87.     )
  88.  
  89. }
  90.  
  91. function FFFF1(E4, E5, E11, E12, E13, E14)
  92. {
  93.  
  94.     if (E5 == E12)
  95.     {
  96.         return(
  97.         -PVofGrowingAnnuityRatesEqual(E11 * (1 - E4), E5, E12, E14 - E13 + 1)
  98.         )
  99.     }
  100.     else
  101.     {
  102.         return(
  103.         -PVofGrowingAnnuity(E11*(1-E4), E5, E12, E14-E13+1)
  104.         )
  105.     }
  106.  
  107. }
  108.  
  109.  
  110. function FFFF2(E4, E5, E11, E12, E13, E14)
  111. {
  112.     var sto = parent
  113.  
  114.     if (sto.DEBUG)
  115.     {
  116.         document.write('FFFF2 E4: ' + E4 + '<br>')
  117.         document.write('FFFF2 E5: ' + E5 + '<br>')
  118.         document.write('FFFF2 E11: ' + E11 + '<br>')
  119.         document.write('FFFF2 E12: ' + E12 + '<br>')
  120.         document.write('FFFF2 E13: ' + E13 + '<br>')
  121.         document.write('FFFF2 E14: ' + E14 + '<br>')
  122.     }
  123.  
  124.     if (E5 == E12)
  125.     {
  126.         
  127.         value = -PVofGrowingAnnuityRatesEqual(E11*(1-E4), E5, E12, E14-E13+1)
  128.         
  129.     }
  130.     else
  131.     {
  132.  
  133.         temp = E11 * ( 1 - E4)
  134.  
  135.         value =  -PVofGrowingAnnuity(temp, E5, E12, E14-E13+1)
  136.  
  137.     }
  138.  
  139.     if (sto.DEBUG)
  140.     {
  141.         document.write('FFFF2 value is: ' + value + '<br>')
  142.     }
  143.  
  144.     return(value)
  145.  
  146. }
  147.  
  148. <%
  149. // E1 = After-Tax Savings        AfterTaxSavings
  150. // E2 = Rate of Return            RateofReturn
  151. // E3 = Inflation Rate            InflatRate
  152. // E4 = Marginal Tax Rate        MarginalRate
  153. // E5 = After-Tax Rate of Return    AfterTaxRateofReturn
  154. // E6 = Retirement Age            RetirementAge
  155. // E7 = Life Expectancy            LifeExpectancy
  156. // E8 = Planned Estate Amount        PlannedEstateAmount
  157. // E9 = Annual Capital Growth Rate    CapitalGrowthRate
  158. // E11 = Income                Income
  159. // E12 = Annual % Increase        AnnualIncrease
  160. // E13 = Start Year
  161. // E14 = End Year
  162.  
  163. // Preserve Capital
  164.  
  165. // =IF(E3=E5,
  166. // (E1-PV(E5,E7-E6,0,-E1)+PV(E5,E13-YEAR(NOW()),,IF(E5=E12,-PVofGrowingAnnuityRatesEqual(E11*(1-E4), E5, E12, E14-E13+1),-PVofGrowingAnnuity(E11*(1-E4), E5, E12, E14-E13+1))))/((E7-E6)/(1+E3)),PMTofGrowAnnuityEnd(E1-PV(E5,E7-E6,0,-E1)+PV(E5,E13-YEAR(NOW()),,IF(E5=E12,-PVofGrowingAnnuityRatesEqual(E11*(1-E4), E5, E12, E14-E13+1),-PVofGrowingAnnuity(E11*(1-E4), E5, E12, E14-E13+1))), E5, E7-E6, E3))
  167. %>
  168.  
  169. function PreserveCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
  170.                          E12, E13, E14)
  171. {
  172.     var sto = parent
  173.  
  174.     if (E3 == E5)
  175.     {
  176.  
  177.         return(
  178.  
  179.             E1 - PV(E5,
  180.                     E7-E6,
  181.                     0,
  182.                     -E1
  183.                  )
  184.  
  185.             +
  186.  
  187.             PV(E5,
  188.                E13 - sto.currentyear,
  189.                0,
  190.                FFFF1(E4, E5, E11, E12, E13, E14)
  191.             )
  192.  
  193.             /
  194.  
  195.             ((E7-E6)/(1+E3))
  196.  
  197.         )
  198.  
  199.     }
  200.     else
  201.     {
  202.  
  203.         return(
  204.  
  205.             PMTofGrowAnnuityEnd(E1 - 
  206.                                     PV(E5,
  207.                                        E7-E6,
  208.                                        0,
  209.                                        -E1
  210.                                     )
  211.                                     +
  212.                                     PV(E5,
  213.                                        E13-sto.currentyear,
  214.                                        0,
  215.                                        FFFF2(E4, E5, E11, E12, E13, E14)
  216.                                     ),
  217.                                 E5,
  218.                                 E7-E6,
  219.                                 E3)
  220.  
  221.         )
  222.     }
  223.  
  224. }
  225.  
  226.  
  227. <%
  228. // Grow Capital
  229.  
  230. // =IF(E3=E5,(E1-PV(E5,E7-E6,0,-E1*((1+E9)^(E7-E6))))+PV(E5,E13-YEAR(NOW()),,IF(E5=E12,-PVofGrowingAnnuityRatesEqual(E11*(1-E4), E5, E12, E14-E13+1),-PVofGrowingAnnuity(E11*(1-E4), E5, E12, E14-E13+1)))/((E7-E6)/(1+E3)),PMTofGrowAnnuityEnd(E1-PV(E5,E7-E6,0,-E1*((1+E9)^(E7-E6)))+PV(E5,E13-YEAR(NOW()),,IF(E5=E12,-PVofGrowingAnnuityRatesEqual(E11*(1-E4), E5, E12, E14-E13+1),-PVofGrowingAnnuity(E11*(1-E4), E5, E12, E14-E13+1))), E5, E7-E6, E3))
  231. %>
  232.  
  233. function GrowCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
  234.                      E12, E13, E14)
  235. {
  236.     var sto = parent
  237.  
  238.     if (E3 == E5)
  239.     {
  240.         return(
  241.  
  242.             (E1 - PV(E5,
  243.                      E7-E6,
  244.                      0,
  245.                      -E1 * Math.pow((1 + E9), (E7 - E6))))
  246.             +
  247.             (PV(E5,
  248.                 E13-sto.currentyear,
  249.                 0,
  250.                 FFFF1
  251.              )
  252.              /
  253.              ((E7 - E6) / (1 + E3)))
  254.         )
  255.     }
  256.     else
  257.     {
  258.         return(
  259.             PMTofGrowAnnuityEnd(E1 
  260.                                   - 
  261.                                   PV(E5,
  262.                                      E7-E6,
  263.                                      0,
  264.                                      -E1 * Math.pow((1+E9), (E7-E6))
  265.                                   )
  266.                                   +
  267.                                   PV(E5,
  268.                                      E13 - sto.currentyear,
  269.                                      0,
  270.                                      FFFF2(E4, E5, E11, E12, E13, E14)
  271.                                   ),
  272.                                 E5,
  273.                                 E7-E6,
  274.                                 E3)
  275.         )
  276.  
  277.     }
  278. }
  279.  
  280. <%
  281. // Spend Capital
  282.  
  283. // =IF(E3=E5,(E1-PV(E5,E7-E6,0,-E8)+PV(E5,E13-YEAR(NOW()),,IF(E5=E12,-PVofGrowingAnnuityRatesEqual(E11*(1-E4), E5, E12, E14-E13+1),-PVofGrowingAnnuity(E11*(1-E4), E5, E12, E14-E13+1))))/((E7-E6)/(1+E3)),PMTofGrowAnnuityEnd(E1-PV(E5,E7-E6,0,-E8)+PV(E5,E13-YEAR(NOW()),,IF(E5=E12,-PVofGrowingAnnuityRatesEqual(E11*(1-E4), E5, E12, E14-E13+1),-PVofGrowingAnnuity(E11*(1-E4), E5, E12, E14-E13+1))), E5, E7-E6, E3))
  284. %>
  285.  
  286. function SpendCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
  287.                       E12, E13, E14)
  288. {
  289.     var sto = parent
  290.  
  291.     if (E3 == E5)
  292.     {
  293.  
  294.         return(E1 - PV(E5, E7-E6, 0, -E8)
  295.             +
  296.             PV(E5, E13 - sto.currentyear, 0,
  297.               FFFF1(E4, E5, E11, E12, E13, E14)
  298.             )
  299.             /
  300.             ((E7-E6)/(1+E3))
  301.         )
  302.     }
  303.     else
  304.     {
  305.  
  306.         return(
  307.  
  308.             PMTofGrowAnnuityEnd(E1 - 
  309.                                     PV(E5,
  310.                                        E7-E6,
  311.                                        0,
  312.                                        -E8
  313.                                     )
  314.                                     +
  315.                                     PV(E5,
  316.                                        E13-sto.currentyear,
  317.                                        0,
  318.                                        FFFF2(E4, E5, E11, E12, E13, E14)
  319.                                     ),
  320.                                 E5,
  321.                                 E7-E6,
  322.                                 E3)
  323.  
  324.         )
  325.     }
  326.  
  327. }
  328.  
  329. //following logic is used in Results and Summary page.
  330.     var sto = parent
  331.     var resultStr = '';
  332.  
  333.     var value1 = 0
  334.  
  335.     E1 = sto.amountsaved
  336.     E2 = sto.rateofreturn / 100
  337.     E3 = sto.inflationrate / 100
  338.     E4 = sto.effectivetaxrate / 100
  339.     E5 = E2 * ((1 - E4)==0?1:(1 - E4))
  340.     E6 = sto.retirementage
  341.     E7 = sto.lifeexpectancy
  342.     E8 = sto.estateamount
  343.     E9 = sto.growth / 100
  344.     E11 = sto.annualincome
  345.     E12 = sto.payraises / 100
  346.     E13 = sto.currentyear
  347.     E14 = sto.currentyear + sto.parttimework - 1
  348.  
  349.  
  350.     resultStr = 'Your retirement nest egg of '
  351.     + numToDollars(sto.amountsaved)
  352.     + ' will yield an annual '
  353.     + '<b> after-tax income of '
  354.  
  355.     if (sto.fundingtype == 'spend' )
  356.     {
  357.         value1 = SpendCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
  358.                              E12, E13, E14)
  359.  
  360.         resultStr += numToDollars(value1)
  361.         + '</b> under the Spend Capital '
  362.     }
  363.     else if (sto.fundingtype == 'preserve' )
  364.     {
  365.         value1 = PreserveCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
  366.                         E12, E13, E14)
  367.  
  368.         resultStr += numToDollars(value1)
  369.         + '</b> under the Preserve Capital '
  370.     }
  371.     else if (sto.fundingtype == 'grow' )
  372.     {
  373.         value1 = GrowCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
  374.                             E12, E13, E14)
  375.  
  376.         resultStr += numToDollars(value1)
  377.         + '</b> under the Grow Capital '
  378.     }
  379.     else
  380.     {
  381.         resultStr += ' ERROR'
  382.     }
  383.  
  384.     resultStr += "plan. "
  385.  
  386.     if (sto.fundingtype == 'spend' )
  387.     {
  388.         resultStr += "The estate you leave your heirs will be <b>"
  389.         + numToDollars(sto.estateamount)
  390.         + "</b>."
  391.     }
  392.     else if (sto.fundingtype == 'preserve' )
  393.     {
  394.         resultStr += "The estate you leave your heirs will be <b>"
  395.         + numToDollars(sto.amountsaved) + "</b>."
  396.     }
  397.     else if (sto.fundingtype == 'grow' )
  398.     {
  399.         var balance = 0
  400.         var income = 0
  401.         var taxes = 0
  402.         var earnings = 0
  403.         var available = 0
  404.         var parttimeend = 0
  405.  
  406.         parttimeend = sto.parttimework + sto.retirementage
  407.  
  408.         balance = sto.amountsaved
  409.  
  410.         income = sto.annualincome
  411.  
  412.         available = value
  413.  
  414.         for (i = sto.retirementage; i < sto.lifeexpectancy; i++)
  415.         {
  416.  
  417.             earnings = balance * (sto.rateofreturn / 100)
  418.  
  419.             if (i < parttimeend)
  420.             {
  421.                 t = earnings + income
  422.             }
  423.             else
  424.             {
  425.                 t = earnings
  426.             }
  427.  
  428.             taxes = t * (sto.effectivetaxrate / 100)
  429.  
  430.             balance = balance + earnings - available - taxes
  431.  
  432.             if (i < parttimeend)
  433.             {
  434.                 balance += income
  435.             }
  436.  
  437.             income += income * (sto.payraises / 100)
  438.  
  439.             available += available * (sto.inflationrate / 100)
  440.  
  441.         }
  442.  
  443.         resultStr += "The estate you leave your heirs will be <b>"
  444.         + numToDollars(balance) + '.</b>'
  445.     }
  446.     else
  447.     {
  448.         resultStr += ' ERROR'
  449.     }
  450. //End of logic used for Results and Summary Page.
  451.