//Copyright Gary L. Beene 2004
function randomvalue(low, high) {
   return Math.floor(Math.random() * (1 + high - low) + low);
}

function Sample() {
   myform.reset()
   myform.elements["nowage"].selectedIndex = 4
   myform.elements["nowworth"].selectedIndex= 10
   myform.elements["monthly"].selectedIndex= 5
   myform.elements["nowint"].selectedIndex= 10
   myform.elements["retage"].selectedIndex= 11
   myform.elements["retint"].selectedIndex= 8
   myform.elements["retinf"].selectedIndex= 4
   myform.elements["secamt"].selectedIndex= 11
   myform.elements["secage"].selectedIndex= 21
   myform.elements["incamt"].selectedIndex= 3
   myform.elements["incage"].selectedIndex= 10
   myform.elements["exp"].selectedIndex= 8
   myform.elements["edesc1"].value = "Weddings"
   myform.elements["eage1"].selectedIndex= 11
   myform.elements["eamt1"].selectedIndex= 6
   myform.elements["idesc1"].value = "Inheritance"
   myform.elements["iage1"].selectedIndex= 21
   myform.elements["iamt1"].selectedIndex= 9
}

function NetW() {
   var NetS = new Array(101)
   var NetE = new Array(101)
   var Expense = new Array(101)
   var IncomeT = new Array(101)
   var InfRate = new Array(101)
   var InfYear = new Array(101)
   var IntRate = new Array(101)
   var temp = 0

   var TodayAge = parseInt(myform.elements["nowage"].value)
   var TodayWorth = parseFloat(myform.elements["nowworth"].value)
   var TodayMonthly = parseFloat(myform.elements["monthly"].value)
   var TodayInf = parseFloat(myform.elements["nowinf"].value)
   var TodayInt = parseFloat(myform.elements["nowint"].value)

   var RetireAge = parseInt(myform.elements["retage"].value)
   var RetireInf = parseFloat(myform.elements["retinf"].value)
   var RetireInt = parseFloat(myform.elements["retint"].value)
   var IncAge = parseInt(myform.elements["incage"].value)
   var IncAmt = parseFloat(myform.elements["incamt"].value)
   var SecAge = parseInt(myform.elements["secage"].value)
   var SecAmt = parseFloat(myform.elements["secamt"].value)
   var Expenses = parseFloat(myform.elements["exp"].value)

   var MaxNetWorth = TodayWorth
   var MinNetWorth = TodayWorth
   var ZeroPoint = 0


//check for valid values
  if (TodayAge > RetireAge) {
     alert("Current Age cannot be greater than Retirement Age!  No calculation made!")
     return
  }

// inflation
     for ( i=1  ; i < 101 ; i++) {
        InfRate[i] = 0.0
        InfYear[i] = 0.0
        IntRate[i] = 0.0
        IncomeT[i] = 0.0
        Expense[i] = 0.0
        NetE[i] = 0.0
        NetS[i] = 0.0
     }
     for ( i=TodayAge ; i < RetireAge ; i++) {
        InfRate[i] = TodayInf/100
        IntRate[i] = TodayInt/100
        IncomeT[i] = TodayMonthly*12
     }
     
     for ( i=RetireAge ; i < 101 ; i++) {
        InfRate[i] = RetireInf/100
        IntRate[i] = RetireInt/100
        if (i < IncAge) { IncomeT[i] = IncomeT[i] + IncAmt*12 }
        if (i >=  SecAge) { IncomeT[i] = IncomeT[i] + SecAmt*12 }
        Expense[i] = Expenses*12
     }


//cumulative inflation
   InfYear[TodayAge]=1
   for ( i=TodayAge+1 ; i < 101 ; i++) {
      InfYear[i] = InfYear[i-1] * (1+InfRate[i])
   }

//raise expenses and income to then-year inflation levels
   for ( i=RetireAge ; i < 101 ; i++) {
      Expense[i] = Expense[i] * InfYear[i]
      IncomeT[i]  = IncomeT[i]  * InfYear[i]
   }

//calculate then$ lump expenses
  myform.elements["ethen1"].value = Math.round(parseFloat(myform.elements["eamt1"].value) * InfYear[parseInt(myform.elements["eage1"].value)])
  myform.elements["ethen2"].value = Math.round(parseFloat(myform.elements["eamt2"].value) * InfYear[parseInt(myform.elements["eage2"].value)])
  myform.elements["ethen3"].value = Math.round(parseFloat(myform.elements["eamt3"].value) * InfYear[parseInt(myform.elements["eage3"].value)])
  myform.elements["ithen1"].value = Math.round(parseFloat(myform.elements["iamt1"].value) * InfYear[parseInt(myform.elements["iage1"].value)])
  myform.elements["ithen2"].value = Math.round(parseFloat(myform.elements["iamt2"].value) * InfYear[parseInt(myform.elements["iage2"].value)])
  myform.elements["ithen3"].value = Math.round(parseFloat(myform.elements["iamt3"].value) * InfYear[parseInt(myform.elements["iage3"].value)])

//add lump sums to Expense and Income arrays
  Expense[parseInt(myform.elements["eage1"].value)] = Expense[parseInt(myform.elements["eage1"].value)] + parseFloat(myform.elements["ethen1"].value)
  Expense[parseInt(myform.elements["eage2"].value)] = Expense[parseInt(myform.elements["eage2"].value)] + parseFloat(myform.elements["ethen2"].value)
  Expense[parseInt(myform.elements["eage3"].value)] = Expense[parseInt(myform.elements["eage3"].value)] + parseFloat(myform.elements["ethen3"].value)
  IncomeT[parseInt(myform.elements["iage1"].value)] = IncomeT[parseInt(myform.elements["iage1"].value)] + parseFloat(myform.elements["ithen1"].value)
  IncomeT[parseInt(myform.elements["iage2"].value)] = IncomeT[parseInt(myform.elements["iage2"].value)] + parseFloat(myform.elements["ithen2"].value)
  IncomeT[parseInt(myform.elements["iage3"].value)] = IncomeT[parseInt(myform.elements["iage3"].value)] + parseFloat(myform.elements["ithen3"].value)

//calculate net worth
   NetS[TodayAge] = TodayWorth
   for ( i=TodayAge ; i < 101 ; i++) {
      NetE[i] = (NetS[i] - Expense[i] + IncomeT[i]) * (1+IntRate[i])
      NetS[i+1] = NetE[i]
      if (NetS[i] > MaxNetWorth) { MaxNetWorth = NetS[i] }
      if (NetE[i] > MaxNetWorth) { MaxNetWorth = NetE[i] }
      if (NetS[i] < MinNetWorth) { MinNetWorth = NetS[i] }
      if (NetE[i] < MinNetWorth) { MinNetWorth = NetE[i] }
      if (NetE[i] <=0 && ZeroPoint == 0) { ZeroPoint = i }
   }

//plot results
   temp = MaxNetWorth
   var j = 0
   for ( i=TodayAge ; i < RetireAge ; i++) {
      myform.elements["I"+i].src = "../images/bar2.gif"
   }
   for ( i=RetireAge ; i < 101 ; i++) {
      myform.elements["I"+i].src = "../images/bar.gif"
   }
   for ( i=20 ; i < 101 ; i++) {
      myform.elements["I"+i].height = NetS[i] / temp * 100 *1.8
      // if (myform.elements["I"+i].height<2) { myform.elements["I"+i].height = 2 }
   }

//display the results
   for ( k=20 ; k < 101 ; k++) {
      results.elements["A"+k].value = k
      results.elements["B"+k].value = Comma2(NetS[k])
      results.elements["C"+k].value = Comma2(Expense[k])
      results.elements["D"+k].value = Comma2(IncomeT[k])
      results.elements["E"+k].value = Comma2(NetE[k])
   }

//message
   myform.elements["msg1"].value = "Start: " + Comma2(NetS[TodayAge])
   myform.elements["msg2"].value = "Retire: " + Comma2(NetS[RetireAge])
   if (NetE[100]>0) {
      myform.elements["msg5"].value = "End:   " + Comma2(NetE[100])
    }   
   else {
      myform.elements["msg5"].value = "End:   0"
   }
   myform.elements["msg3"].value = "Max:   " + Comma2(MaxNetWorth)
   if (ZeroPoint != 0) { 
      myform.elements["msg4"].value = "Zero during age " + (ZeroPoint)
   }
   else {
      myform.elements["msg4"].value = "Min:   " + Comma2(MinNetWorth)
   }
}

function Comma2(number) {
number = Math.round(number)
number = '' + number;
if (number.length > 3) {
var mod = number.length % 3;
var output = (mod > 0 ? (number.substring(0,mod)) : '');
for (i=0 ; i < Math.floor(number.length / 3); i++) {
if ((mod == 0) && (i == 0))
output += number.substring(mod+ 3 * i, mod + 3 * i + 3);
else
output+= ',' + number.substring(mod + 3 * i, mod + 3 * i + 3);
}
return (output);
}
else return number;
}

function ReadCookie(name) {
	if (document.cookie == '') { 
	return false;
	} else {
	var firstChar, lastChar;
	var theBigCookie = document.cookie;
	firstChar = theBigCookie.indexOf(name);
	if(firstChar != -1)  {
	firstChar += name.length + 1;
	lastChar = theBigCookie.indexOf(';', firstChar);
	if(lastChar == -1) lastChar = theBigCookie.length;
	return unescape(theBigCookie.substring(firstChar, lastChar));
	} else {
	return false;
	}
    }
}

function Restore() {
   var bigcookie = ReadCookie("retirementeasy")   //unescape(document.cookie)
   if (bigcookie==false) {
      alert("No data available to restore!")
      return
   }

   var elementarray = new Array()
   var oneelement = new Array()
   var i = 0
   elementarray = bigcookie.split("||")
   for ( i ; i < elementarray.length ; i++) {
        oneelement = elementarray[i].split("|") 
        switch ( oneelement[0] ) {
             case "text" :
              if (typeof oneelement[1] == "undefined") { oneelement[1] = "" }
                myform.elements[i].value = oneelement[1]
                break
             case "select-one" :
                myform.elements[i].selectedIndex = oneelement[1]
                break
             case "radio" :
                if (oneelement[1] == "true")   { myform.elements[i].checked = true  }
                if (oneelement[1] == "false")  { myform.elements[i].checked = false }
                break
             case "checkbox" :
                if (oneelement[1] == "true")   { myform.elements[i].checked = true  }
                if (oneelement[1] == "false")  { myform.elements[i].checked = false }
                break
          }
   }
   status = "Information Restored"
}

function Save() {
   var bigcookie = ""
   var i = 0
   var valuetosave = ""
   for ( i ; i < myform.elements.length ; i++) {
           switch ( myform.elements[i].type ) {
             case "text" :
                valuetosave = myform.elements[i].value
                break
             case "select-one" :
                valuetosave = myform.elements[i].selectedIndex
                break
             case "radio" :
                valuetosave = myform.elements[i].checked
                break
             case "checkbox" :
                valuetosave = myform.elements[i].checked
                break
          }
          if (i > 0) { bigcookie = bigcookie + "||" + myform.elements[i].type + "|" + valuetosave }
          else { bigcookie = myform.elements[i].type + "|" + valuetosave }
   }
   var Z = new Date ()
   Z.setTime (Z.getTime() + (1000 * 60 * 60 * 24 * 365));   // one year expiration
   var CookieDate = Z.toGMTString()         // toGMTString() is a date object method
   if (escape(bigcookie).length > 4096) { 
     alert("Content too large. Save was aborted!") 
     status = "Save aborted!"
   }
   else {
     document.cookie = "retirementeasy=" + escape(bigcookie) + ";expires=" + CookieDate 
     status = "Information Saved "  + escape(bigcookie).length
   }
}

