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 >
Wrap
Text File
|
1998-07-25
|
12KB
|
451 lines
var DEBUG = 0
function PV(rate, nper, pmt, fv)
{
var sto = parent
if (sto.DEBUG)
{
document.write('PV rate: ' + rate + '<br>')
document.write('PV nper: ' + nper + '<br>')
document.write('PV pmt: ' + pmt + '<br>')
document.write('PV fv: ' + fv + '<br>')
}
value = -((pmt * ((Math.pow(1 + rate, nper) - 1) / rate) + fv) /
Math.pow(1 + rate, nper))
if (sto.DEBUG)
{
document.write('PV value: ' + value + '<br>')
}
return(value)
}
function PMTofGrowAnnuityEnd(PV, Rate, nPer, Growth)
{
var value = 0
var sto = parent
if (sto.DEBUG)
{
document.write('PVofGrowingAnnuityEnd PV: ' + PV + '<br>')
document.write('PVofGrowingAnnuityEnd Rate: ' + Rate + '<br>')
document.write('PVofGrowingAnnuityEnd nPer: ' + nPer + '<br>')
document.write('PVofGrowingAnnuityEnd Growth: ' + Growth + '<br>')
}
value = PV /
((1 - (Math.pow(1 + Rate, -nPer) * Math.pow(1 + Growth, nPer)))
/ (Rate - Growth))
if (sto.DEBUG)
{
document.write('PVofGrowingAnnuityEnd value: ' + value + '<br>')
}
return(value)
}
function PVofGrowingAnnuity(Amount, Rate, GrowthRate, Term)
{
var sto = parent
var value = 0
var temp = 0
if (sto.DEBUG)
{
document.write('PVofGrowingAnnuity Amount: ' + Amount + '<br>')
document.write('PVofGrowingAnnuity Rate: ' + Rate + '<br>')
document.write('PVofGrowingAnnuity GrowthRate: ' + GrowthRate +
'<br>')
document.write('PVofGrowingAnnuity Term: ' + Term + '<br>')
}
temp = Math.pow((1 + GrowthRate) / (1 + Rate), Term)
value = Amount * ((1 - temp) / (Rate - GrowthRate))
if (sto.DEBUG)
{
document.write('PVofGrowingAnnuity value: ' + value + '<br>')
}
return(value)
}
function PVofGrowingAnnuityRatesEqual(Amount, Rate, GrowthRate, Term)
{
return(
Amount * (Term / (1 + GrowthRate))
)
}
function FFFF1(E4, E5, E11, E12, E13, E14)
{
if (E5 == E12)
{
return(
-PVofGrowingAnnuityRatesEqual(E11 * (1 - E4), E5, E12, E14 - E13 + 1)
)
}
else
{
return(
-PVofGrowingAnnuity(E11*(1-E4), E5, E12, E14-E13+1)
)
}
}
function FFFF2(E4, E5, E11, E12, E13, E14)
{
var sto = parent
if (sto.DEBUG)
{
document.write('FFFF2 E4: ' + E4 + '<br>')
document.write('FFFF2 E5: ' + E5 + '<br>')
document.write('FFFF2 E11: ' + E11 + '<br>')
document.write('FFFF2 E12: ' + E12 + '<br>')
document.write('FFFF2 E13: ' + E13 + '<br>')
document.write('FFFF2 E14: ' + E14 + '<br>')
}
if (E5 == E12)
{
value = -PVofGrowingAnnuityRatesEqual(E11*(1-E4), E5, E12, E14-E13+1)
}
else
{
temp = E11 * ( 1 - E4)
value = -PVofGrowingAnnuity(temp, E5, E12, E14-E13+1)
}
if (sto.DEBUG)
{
document.write('FFFF2 value is: ' + value + '<br>')
}
return(value)
}
<%
// E1 = After-Tax Savings AfterTaxSavings
// E2 = Rate of Return RateofReturn
// E3 = Inflation Rate InflatRate
// E4 = Marginal Tax Rate MarginalRate
// E5 = After-Tax Rate of Return AfterTaxRateofReturn
// E6 = Retirement Age RetirementAge
// E7 = Life Expectancy LifeExpectancy
// E8 = Planned Estate Amount PlannedEstateAmount
// E9 = Annual Capital Growth Rate CapitalGrowthRate
// E11 = Income Income
// E12 = Annual % Increase AnnualIncrease
// E13 = Start Year
// E14 = End Year
// Preserve Capital
// =IF(E3=E5,
// (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))
%>
function PreserveCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
E12, E13, E14)
{
var sto = parent
if (E3 == E5)
{
return(
E1 - PV(E5,
E7-E6,
0,
-E1
)
+
PV(E5,
E13 - sto.currentyear,
0,
FFFF1(E4, E5, E11, E12, E13, E14)
)
/
((E7-E6)/(1+E3))
)
}
else
{
return(
PMTofGrowAnnuityEnd(E1 -
PV(E5,
E7-E6,
0,
-E1
)
+
PV(E5,
E13-sto.currentyear,
0,
FFFF2(E4, E5, E11, E12, E13, E14)
),
E5,
E7-E6,
E3)
)
}
}
<%
// Grow Capital
// =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))
%>
function GrowCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
E12, E13, E14)
{
var sto = parent
if (E3 == E5)
{
return(
(E1 - PV(E5,
E7-E6,
0,
-E1 * Math.pow((1 + E9), (E7 - E6))))
+
(PV(E5,
E13-sto.currentyear,
0,
FFFF1
)
/
((E7 - E6) / (1 + E3)))
)
}
else
{
return(
PMTofGrowAnnuityEnd(E1
-
PV(E5,
E7-E6,
0,
-E1 * Math.pow((1+E9), (E7-E6))
)
+
PV(E5,
E13 - sto.currentyear,
0,
FFFF2(E4, E5, E11, E12, E13, E14)
),
E5,
E7-E6,
E3)
)
}
}
<%
// Spend Capital
// =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))
%>
function SpendCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
E12, E13, E14)
{
var sto = parent
if (E3 == E5)
{
return(E1 - PV(E5, E7-E6, 0, -E8)
+
PV(E5, E13 - sto.currentyear, 0,
FFFF1(E4, E5, E11, E12, E13, E14)
)
/
((E7-E6)/(1+E3))
)
}
else
{
return(
PMTofGrowAnnuityEnd(E1 -
PV(E5,
E7-E6,
0,
-E8
)
+
PV(E5,
E13-sto.currentyear,
0,
FFFF2(E4, E5, E11, E12, E13, E14)
),
E5,
E7-E6,
E3)
)
}
}
//following logic is used in Results and Summary page.
var sto = parent
var resultStr = '';
var value1 = 0
E1 = sto.amountsaved
E2 = sto.rateofreturn / 100
E3 = sto.inflationrate / 100
E4 = sto.effectivetaxrate / 100
E5 = E2 * ((1 - E4)==0?1:(1 - E4))
E6 = sto.retirementage
E7 = sto.lifeexpectancy
E8 = sto.estateamount
E9 = sto.growth / 100
E11 = sto.annualincome
E12 = sto.payraises / 100
E13 = sto.currentyear
E14 = sto.currentyear + sto.parttimework - 1
resultStr = 'Your retirement nest egg of '
+ numToDollars(sto.amountsaved)
+ ' will yield an annual '
+ '<b> after-tax income of '
if (sto.fundingtype == 'spend' )
{
value1 = SpendCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
E12, E13, E14)
resultStr += numToDollars(value1)
+ '</b> under the Spend Capital '
}
else if (sto.fundingtype == 'preserve' )
{
value1 = PreserveCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
E12, E13, E14)
resultStr += numToDollars(value1)
+ '</b> under the Preserve Capital '
}
else if (sto.fundingtype == 'grow' )
{
value1 = GrowCapital(E1, E2, E3, E4, E5, E6, E7, E8, E9, E11,
E12, E13, E14)
resultStr += numToDollars(value1)
+ '</b> under the Grow Capital '
}
else
{
resultStr += ' ERROR'
}
resultStr += "plan. "
if (sto.fundingtype == 'spend' )
{
resultStr += "The estate you leave your heirs will be <b>"
+ numToDollars(sto.estateamount)
+ "</b>."
}
else if (sto.fundingtype == 'preserve' )
{
resultStr += "The estate you leave your heirs will be <b>"
+ numToDollars(sto.amountsaved) + "</b>."
}
else if (sto.fundingtype == 'grow' )
{
var balance = 0
var income = 0
var taxes = 0
var earnings = 0
var available = 0
var parttimeend = 0
parttimeend = sto.parttimework + sto.retirementage
balance = sto.amountsaved
income = sto.annualincome
available = value
for (i = sto.retirementage; i < sto.lifeexpectancy; i++)
{
earnings = balance * (sto.rateofreturn / 100)
if (i < parttimeend)
{
t = earnings + income
}
else
{
t = earnings
}
taxes = t * (sto.effectivetaxrate / 100)
balance = balance + earnings - available - taxes
if (i < parttimeend)
{
balance += income
}
income += income * (sto.payraises / 100)
available += available * (sto.inflationrate / 100)
}
resultStr += "The estate you leave your heirs will be <b>"
+ numToDollars(balance) + '.</b>'
}
else
{
resultStr += ' ERROR'
}
//End of logic used for Results and Summary Page.