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

  1. // This function calculates annual interest rate income on monthly
  2. // compound basis.
  3. function annualDeposit(balance, interest)
  4. {
  5.     var    numMon = 12
  6.     var    retBal = balance
  7.     var    monthlyInt = interest / numMon
  8.  
  9.     while(numMon > 0) {            // do the monthly compounding
  10.         retBal = retBal * (1 + monthlyInt)
  11.         numMon = numMon - 1
  12.     }
  13.     retBal = retBal - balance    // get net interest rate income
  14.     return retBal
  15. }
  16.  
  17. // This function calculates annual interest rate income on monthly
  18. // compound and quarterly deposit basis.
  19. function quarterDeposit(balance, interest, amount)
  20. {
  21.     var    retBal = balance
  22.     var    monthlyInt = interest / 12    // monthly interest
  23.     var    i, j
  24.     
  25.     i = 0
  26.     while(i < 4) {            // quarterly loop
  27.         j = 0
  28.         while(j < 3) {        // monthly loop
  29.             retBal = retBal * (1 + monthlyInt)
  30.             j = j + 1
  31.         }
  32.         i = i + 1
  33.         retBal = retBal + amount    // add the quarterly deposit
  34.     }
  35.     retBal = retBal - (balance + amount * 4)    // net interest rate income
  36.     return retBal
  37. }
  38.  
  39. // This function calculates annual interest rate income on monthly
  40. // compound and monthly deposit basis.
  41. function monthDeposit(balance, interest, amount)
  42. {
  43.     var retBal = balance
  44.     var    monthlyInt = interest / 12    // monthly interest
  45.     var i
  46.  
  47.     i = 0
  48.     while(i < 12) {
  49.         retBal = retBal * (1 + monthlyInt)
  50.         retBal = retBal + amount
  51.         i = i + 1
  52.     }
  53.     retBal = retBal - (balance + amount * 12)
  54.     return retBal
  55. }
  56.  
  57.  
  58. var sto = parent
  59.  
  60. var calcType = sto.calcType // Either "contribute" or "spend"
  61.  
  62. var interestRate = sto.rateOfReturn;
  63. var inflationRate = sto.rateOfCostIncrease;
  64. var taxRate = sto.marginalTaxRate / 100;
  65. var cost = sto.currentCostCollege;
  66. var length = sto.lengthOfEducation;
  67. var yearsUntilCollege = sto.yearsUntilCollege;
  68. var initialBalance = sto.initialBalance;
  69. var depositInterval = sto.depositInterval;
  70. var depositAmount = sto.regularDeposit;
  71. var numKids = sto.numberOfChildren;
  72.  
  73.  
  74. if(calcType == "contribute") {
  75.     // Calculate how much the user needs to contribute to his/her college fund to
  76.     // meet the cost of the education at the specified time in the future
  77.     
  78.     var monthlyInt = interestRate / (12 * 100);
  79.     var    inflation = 1 + inflationRate / 100;
  80.  
  81.     // calculate total college year cost including inflation
  82.     b0 = 0;
  83.     for(j=0; j<length; j++)
  84.         b0 += Math.pow(inflation, j);
  85.     cost = cost * b0;
  86.  
  87.     amt = numKids * cost * Math.pow(inflation, yearsUntilCollege);
  88.  
  89.     if (interestRate != 0) {
  90.         // if no marginal tax, use standard capital gains tax.
  91.         if(sto.bTaxedAnnually == "no") {
  92.             if(sto.bCapitalGains == "yes")
  93.                 taxRate = 0.28;
  94.             else
  95.                 taxRate = 0;
  96.         }
  97.  
  98.         // the goal is to save enough until the end of the last college year.
  99.         var b0 = 1 + monthlyInt;
  100.         b0 = (1 - taxRate) * Math.pow(b0, 12) + taxRate;
  101.         bn = b0;
  102.         bn =(1 - Math.pow(b0, yearsUntilCollege)) / (1 - b0)
  103.  
  104.         // calculate annual deposit amount
  105.         dep = (amt - initialBalance * Math.pow(b0, yearsUntilCollege)) / bn;
  106.     }
  107.     else {
  108.         taxRate = 0;
  109.  
  110.         dep = (amt - initialBalance) / yearsUntilCollege;
  111.     }
  112.     // calculate total interest earned and tax paid
  113.     prevBal = initialBalance;
  114.     totalDeposits = dep * yearsUntilCollege;
  115.     totalReturn = 0;
  116.     totalTaxes = 0;
  117.     for(j=0; j<yearsUntilCollege; j++) {
  118.         yearlyRet = prevBal * (Math.pow(1+monthlyInt, 12) - 1);
  119.         totalReturn += yearlyRet;
  120.         totalTaxes += yearlyRet * taxRate;
  121.         prevBal += dep + yearlyRet * (1 - taxRate);
  122.     }
  123.     totalCostOfCollege = amt;
  124.     annualPayment = dep;
  125. }
  126. else {
  127.     // Calculate how much education the user will be able to afford for his/her
  128.     // children based on current savings patterns
  129.  
  130.     var n=0;
  131.     var tmpRate = interestRate / 100.0;
  132.     var totalDeposits = 0;
  133.     
  134.     // if no marginal tax, use standard capital gains tax.
  135.     if(sto.bTaxedAnnually == "no") {
  136.         if(sto.bCapitalGains == "yes")
  137.             taxRate = 0.28;
  138.         else
  139.             taxRate = 0;
  140.     }
  141.  
  142.     if(depositInterval == "annually")
  143.         totalDeposits = depositAmount * yearsUntilCollege;
  144.     else
  145.     if(depositInterval == "quarterly")
  146.         totalDeposits = depositAmount * yearsUntilCollege*4;
  147.     else // depositInterval == "monthly"
  148.         totalDeposits = depositAmount * yearsUntilCollege*12;
  149.     
  150.     var totalReturn = 0.0;
  151.     var totalTaxes = 0.0;
  152.     var totalCostOfCollege = initialBalance;
  153.  
  154.     for(i=0; i<yearsUntilCollege; i++) {
  155.         if(depositInterval == "annually") {
  156.             yearlyRet = annualDeposit(totalCostOfCollege, tmpRate)
  157.             tmpAnnualPayment = depositAmount;
  158.         }
  159.         else if(depositInterval == "quarterly") {
  160.             yearlyRet = quarterDeposit(totalCostOfCollege, tmpRate, depositAmount);
  161.             tmpAnnualPayment = depositAmount * 4;
  162.         }
  163.         else if(depositInterval == "monthly") {
  164.             yearlyRet = monthDeposit(totalCostOfCollege, tmpRate, depositAmount);
  165.             tmpAnnualPayment = depositAmount * 12;
  166.         }
  167.  
  168.         totalReturn += yearlyRet;
  169.         totalTaxes += yearlyRet * taxRate;
  170.         totalCostOfCollege +=  yearlyRet * (1 - taxRate);
  171.  
  172.         totalCostOfCollege += tmpAnnualPayment;
  173.     }
  174.  
  175.     var tmpInflation = 1.0 + (inflationRate/100.0);
  176.     ftotal = tmpInflation;
  177.     for(n=1; n < yearsUntilCollege; n++) 
  178.         ftotal *= tmpInflation;
  179.     var cvalue = (totalCostOfCollege / ftotal) / length / numKids;
  180.     var ctemp = totalCostOfCollege / length / numKids;
  181.     
  182.     var privateYears = 4 * cvalue / privateCost;
  183.     var publicYears = 4 * cvalue / publicCost;
  184.     var communityYears = 4 * cvalue / communityCost;
  185.     
  186.     var cost = Math.round(cvalue);
  187.     totalCostOfCollege = Math.round(totalCostOfCollege);
  188.     totalDeposits = Math.round(totalDeposits);
  189.     totalReturn = Math.round(totalReturn);
  190.     totalTaxes = Math.round(totalTaxes);
  191.         
  192. }
  193.