//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 = 5
   myform.elements["pre"].selectedIndex= 3
   myform.elements["thenworth"].selectedIndex= 4

   myform.elements["age1"].selectedIndex= 10
   myform.elements["inf1"].selectedIndex= 3
   myform.elements["int1"].selectedIndex= 6
   myform.elements["soc1"].selectedIndex= 0
   myform.elements["work1"].selectedIndex= 6
   myform.elements["oth1"].selectedIndex= 0
   myform.elements["exp1"].selectedIndex= 7

   myform.elements["item2"].value = "Stop part-time work"
   myform.elements["age2"].selectedIndex= 14
   myform.elements["inf2"].selectedIndex= 3
   myform.elements["int2"].selectedIndex= 6
   myform.elements["soc2"].selectedIndex= 0
   myform.elements["work2"].selectedIndex= 0
   myform.elements["oth2"].selectedIndex= 0
   myform.elements["exp2"].selectedIndex= 7

   myform.elements["item3"].value = "Social Security starts"
   myform.elements["age3"].selectedIndex= 16
   myform.elements["inf3"].selectedIndex= 3
   myform.elements["int3"].selectedIndex= 6
   myform.elements["soc3"].selectedIndex= 10
   myform.elements["work3"].selectedIndex= 0
   myform.elements["oth3"].selectedIndex= 0
   myform.elements["exp3"].selectedIndex= 7

   myform.elements["eitem1"].value = "Weddings"
   myform.elements["eage1"].selectedIndex= 11
   myform.elements["eamt1"].selectedIndex= 6
   myform.elements["eitem2"].value = "Fishing boat"
   myform.elements["eage2"].selectedIndex= 16
   myform.elements["eamt2"].selectedIndex= 8
   myform.elements["iitem1"].value = "Inheritance"
   myform.elements["iage1"].selectedIndex= 20
   myform.elements["iamt1"].selectedIndex= 9
}

function kf(){
myform.elements["rone"].checked = false
myform.elements["rtwo"].checked = false
myform.elements["rten"].checked = false
}
function k1(){
myform.elements["rfloat"].checked = false
myform.elements["rtwo"].checked = false
myform.elements["rten"].checked = false
}
function k2(){
myform.elements["rfloat"].checked = false
myform.elements["rone"].checked = false
myform.elements["rten"].checked = false
}
function k10(){
myform.elements["rfloat"].checked = false
myform.elements["rone"].checked = false
myform.elements["rtwo"].checked = false
}


function q1() {
   myform.elements["soc1"].selectedIndex=0
   myform.elements["soc2"].selectedIndex=0
   myform.elements["soc3"].selectedIndex=0
   myform.elements["soc4"].selectedIndex=0
   myform.elements["soc5"].selectedIndex=0
   myform.elements["soc6"].selectedIndex=0
   myform.elements["soc7"].selectedIndex=0
   myform.elements["work1"].selectedIndex=0
   myform.elements["work2"].selectedIndex=0
   myform.elements["work3"].selectedIndex=0
   myform.elements["work4"].selectedIndex=0
   myform.elements["work5"].selectedIndex=0
   myform.elements["work6"].selectedIndex=0
   myform.elements["work7"].selectedIndex=0
   myform.elements["oth1"].selectedIndex=0
   myform.elements["oth2"].selectedIndex=0
   myform.elements["oth3"].selectedIndex=0
   myform.elements["oth4"].selectedIndex=0
   myform.elements["oth5"].selectedIndex=0
   myform.elements["oth6"].selectedIndex=0
   myform.elements["oth7"].selectedIndex=0
   NetW()
}
function q2() {
   myform.elements["exp1"].selectedIndex=0
   myform.elements["exp2"].selectedIndex=0
   myform.elements["exp3"].selectedIndex=0
   myform.elements["exp4"].selectedIndex=0
   myform.elements["exp5"].selectedIndex=0
   myform.elements["exp6"].selectedIndex=0
   myform.elements["exp7"].selectedIndex=0
   NetW()
}
function q3() {
   myform.elements["inf1"].selectedIndex=0
   myform.elements["inf2"].selectedIndex=0
   myform.elements["inf3"].selectedIndex=0
   myform.elements["inf4"].selectedIndex=0
   myform.elements["inf5"].selectedIndex=0
   myform.elements["inf6"].selectedIndex=0
   myform.elements["inf7"].selectedIndex=0
   NetW()
}
function q4() {
   myform.elements["inf1"].selectedIndex=3
   myform.elements["inf2"].selectedIndex=3
   myform.elements["inf3"].selectedIndex=3
   myform.elements["inf4"].selectedIndex=3
   myform.elements["inf5"].selectedIndex=3
   myform.elements["inf6"].selectedIndex=3
   myform.elements["inf7"].selectedIndex=3
   NetW()
}
function q5() {
   myform.elements["int1"].selectedIndex=0
   myform.elements["int2"].selectedIndex=0
   myform.elements["int3"].selectedIndex=0
   myform.elements["int4"].selectedIndex=0
   myform.elements["int5"].selectedIndex=0
   myform.elements["int6"].selectedIndex=0
   myform.elements["int7"].selectedIndex=0
   NetW()
}
function q6() {
   myform.elements["int1"].selectedIndex=6
   myform.elements["int2"].selectedIndex=6
   myform.elements["int3"].selectedIndex=6
   myform.elements["int4"].selectedIndex=6
   myform.elements["int5"].selectedIndex=6
   myform.elements["int6"].selectedIndex=6
   myform.elements["int7"].selectedIndex=6
   NetW()
}
function q7() {
   myform.elements["iamt1"].selectedIndex=0
   myform.elements["iamt2"].selectedIndex=0
   myform.elements["iamt3"].selectedIndex=0
   myform.elements["iamt4"].selectedIndex=0
   myform.elements["iamt5"].selectedIndex=0
   myform.elements["iamt6"].selectedIndex=0
   myform.elements["iitem1"].value=""
   myform.elements["iitem2"].value=""
   myform.elements["iitem3"].value=""
   myform.elements["iitem4"].value=""
   myform.elements["iitem5"].value=""
   myform.elements["iitem6"].value=""
   NetW()
}
function q8() {

   myform.elements["eamt1"].selectedIndex=0
   myform.elements["eamt2"].selectedIndex=0
   myform.elements["eamt3"].selectedIndex=0
   myform.elements["eamt4"].selectedIndex=0
   myform.elements["eamt5"].selectedIndex=0
   myform.elements["eamt6"].selectedIndex=0
   myform.elements["eitem1"].value=""
   myform.elements["eitem2"].value=""
   myform.elements["eitem3"].value=""
   myform.elements["eitem4"].value=""
   myform.elements["eitem5"].value=""
   myform.elements["eitem6"].value=""
   NetW()
}

function NetW() {
   var NetS = new Array(101)
   var NetE = new Array(101)
   var Expense = new Array(101)
   var Income = new Array(101)
   var InfRate = new Array(101)
   var InfYear = new Array(101)
   var IntRate = new Array(101)
   var temp = 0
   var RetireAge = parseInt(myform.elements["age1"].value)
   var TodayAge = parseInt(myform.elements["nowage"].value)
   var StartInflation = Math.pow(1.0 + parseFloat(myform.elements["pre"].value)/100,RetireAge-TodayAge-1)
   var MaxNetWorth = myform.elements["thenworth"].value
   var MinNetWorth = myform.elements["thenworth"].value
   var ZeroPoint = 0
   var Scale = 10000000

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

//simple totals - periodic
  myform.elements["tot1"].value = parseInt(myform.elements["soc1"].value) + parseInt(myform.elements["work1"].value) + parseInt(myform.elements["oth1"].value);
  myform.elements["tot2"].value = parseInt(myform.elements["soc2"].value) + parseInt(myform.elements["work2"].value) + parseInt(myform.elements["oth2"].value);
  myform.elements["tot3"].value = parseInt(myform.elements["soc3"].value) + parseInt(myform.elements["work3"].value) + parseInt(myform.elements["oth3"].value);
  myform.elements["tot4"].value = parseInt(myform.elements["soc4"].value) + parseInt(myform.elements["work4"].value) + parseInt(myform.elements["oth4"].value);
  myform.elements["tot5"].value = parseInt(myform.elements["soc5"].value) + parseInt(myform.elements["work5"].value) + parseInt(myform.elements["oth5"].value);
  myform.elements["tot6"].value = parseInt(myform.elements["soc6"].value) + parseInt(myform.elements["work6"].value) + parseInt(myform.elements["oth6"].value);
  myform.elements["tot7"].value = parseInt(myform.elements["soc7"].value) + parseInt(myform.elements["work7"].value) + parseInt(myform.elements["oth7"].value);

//spread monthly interest, inflation, expenses, and income
  for ( i=1 ; i < 101 ; i++) {
     InfRate[i] = 0
     InfYear[i] = 0
     IntRate[i] = 0
     Income[i]  = 0
     Expense[i] = 0
     NetE[i] = 0
     NetS[i] = 0
  }
     for ( i=parseInt(myform.elements["age1"].value) ; i < 101 ; i++) {
        InfRate[i] = parseFloat(myform.elements["inf1"].value)/100
        IntRate[i] = parseFloat(myform.elements["int1"].value)/100
        Income[i]  = parseFloat(myform.elements["tot1"].value)*12
        Expense[i] = parseFloat(myform.elements["exp1"].value)*12
     }
  if ( parseInt(myform.elements["tot2"].value) > 0 || parseInt(myform.elements["exp2"].value) > 0 ) {
     for ( i=parseInt(myform.elements["age2"].value) ; i < 101 ; i++) {
        InfRate[i] = parseFloat(myform.elements["inf2"].value)/100
        IntRate[i] = parseFloat(myform.elements["int2"].value)/100
        Income[i]  = parseFloat(myform.elements["tot2"].value)*12
        Expense[i] = parseFloat(myform.elements["exp2"].value)*12
      }
   }
  if ( parseInt(myform.elements["tot3"].value) > 0 || parseInt(myform.elements["exp3"].value) > 0 ) {
     for ( i=parseInt(myform.elements["age3"].value) ; i < 101 ; i++) {
        InfRate[i] = parseFloat(myform.elements["inf3"].value)/100
        IntRate[i] = parseFloat(myform.elements["int3"].value)/100
        Income[i]  = parseFloat(myform.elements["tot3"].value)*12
        Expense[i] = parseFloat(myform.elements["exp3"].value)*12
      }
   }
  if ( parseInt(myform.elements["tot4"].value) > 0 || parseInt(myform.elements["exp4"].value) > 0 ) {
     for ( i=parseInt(myform.elements["age4"].value) ; i < 101 ; i++) {
        InfRate[i] = parseFloat(myform.elements["inf4"].value)/100
        IntRate[i] = parseFloat(myform.elements["int4"].value)/100
        Income[i]  = parseFloat(myform.elements["tot4"].value)*12
        Expense[i] = parseFloat(myform.elements["exp4"].value)*12
      }
   }
  if ( parseInt(myform.elements["tot5"].value) > 0 || parseInt(myform.elements["exp5"].value) > 0 ) {
     for ( i=parseInt(myform.elements["age5"].value) ; i < 101 ; i++) {
        InfRate[i] = parseFloat(myform.elements["inf5"].value)/100
        IntRate[i] = parseFloat(myform.elements["int5"].value)/100
        Income[i]  = parseFloat(myform.elements["tot5"].value)*12
        Expense[i] = parseFloat(myform.elements["exp5"].value)*12
      }
   }
  if ( parseInt(myform.elements["tot6"].value) > 0 || parseInt(myform.elements["exp6"].value) > 0 ) {
     for ( i=parseInt(myform.elements["age6"].value); i < 101 ; i++) {
        InfRate[i] = parseFloat(myform.elements["inf6"].value)/100
        IntRate[i] = parseFloat(myform.elements["int6"].value)/100
        Income[i]  = parseFloat(myform.elements["tot6"].value)*12
        Expense[i] = parseFloat(myform.elements["exp6"].value)*12
      }
   }
  if ( parseInt(myform.elements["tot7"].value) > 0 || parseInt(myform.elements["exp7"].value) > 0 ) {
     for ( i=parseInt(myform.elements["age7"].value) ; i < 101 ; i++) {
        InfRate[i] = parseFloat(myform.elements["inf7"].value)/100
        IntRate[i] = parseFloat(myform.elements["int7"].value)/100
        Income[i]  = parseFloat(myform.elements["tot7"].value)*12
        Expense[i] = parseFloat(myform.elements["exp7"].value)*12
      }
   }

//cumulative inflation
   InfYear[TodayAge]=StartInflation
   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]
      Income[i]  = Income[i]  * InfYear[i]
   }

//simple totals - 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["ethen4"].value = Math.round(parseFloat(myform.elements["eamt4"].value) * InfYear[parseInt(myform.elements["eage4"].value)])
  myform.elements["ethen5"].value = Math.round(parseFloat(myform.elements["eamt5"].value) * InfYear[parseInt(myform.elements["eage5"].value)])
  myform.elements["ethen6"].value = Math.round(parseFloat(myform.elements["eamt6"].value) * InfYear[parseInt(myform.elements["eage6"].value)])

//simple totals - lump income
  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)])
  myform.elements["ithen4"].value = Math.round(parseFloat(myform.elements["iamt4"].value) * InfYear[parseInt(myform.elements["iage4"].value)])
  myform.elements["ithen5"].value = Math.round(parseFloat(myform.elements["iamt5"].value) * InfYear[parseInt(myform.elements["iage5"].value)])
  myform.elements["ithen6"].value = Math.round(parseFloat(myform.elements["iamt6"].value) * InfYear[parseInt(myform.elements["iage6"].value)])

//add lump expenses to Expense array
   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)
   Expense[parseInt(myform.elements["eage4"].value)] = Expense[parseInt(myform.elements["eage4"].value)] + parseFloat(myform.elements["ethen4"].value)
   Expense[parseInt(myform.elements["eage5"].value)] = Expense[parseInt(myform.elements["eage5"].value)] + parseFloat(myform.elements["ethen5"].value)
   Expense[parseInt(myform.elements["eage6"].value)] = Expense[parseInt(myform.elements["eage6"].value)] + parseFloat(myform.elements["ethen6"].value)

//add lump income to Income array
   Income[parseInt(myform.elements["iage1"].value)] = Income[parseInt(myform.elements["iage1"].value)] + parseFloat(myform.elements["ithen1"].value)
   Income[parseInt(myform.elements["iage2"].value)] = Income[parseInt(myform.elements["iage2"].value)] + parseFloat(myform.elements["ithen2"].value)
   Income[parseInt(myform.elements["iage3"].value)] = Income[parseInt(myform.elements["iage3"].value)] + parseFloat(myform.elements["ithen3"].value)
   Income[parseInt(myform.elements["iage4"].value)] = Income[parseInt(myform.elements["iage4"].value)] + parseFloat(myform.elements["ithen4"].value)
   Income[parseInt(myform.elements["iage5"].value)] = Income[parseInt(myform.elements["iage5"].value)] + parseFloat(myform.elements["ithen5"].value)
   Income[parseInt(myform.elements["iage6"].value)] = Income[parseInt(myform.elements["iage6"].value)] + parseFloat(myform.elements["ithen6"].value)

//calculate net worth
   NetS[RetireAge] = myform.elements["thenworth"].value
   for ( i=RetireAge ; i < 101 ; i++) {
      NetE[i] = (NetS[i] - Expense[i] + Income[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
   if (myform.elements["rfloat"].checked == true) { Scale = MaxNetWorth }
   if (myform.elements["rone"].checked == true) { Scale = 1000000 }
   if (myform.elements["rtwo"].checked == true) { Scale = 2000000 }
   if (myform.elements["rten"].checked == true) { Scale = 10000000 }
   for ( i=50 ; i < 101 ; i++) {
      myform.elements["I"+i].height = NetS[i] / Scale * 100 * 1.4
   }

//display the results
   for ( k=50 ; 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(Income[k])
      results.elements["E"+k].value = Comma2(NetE[k])
   }

//message
   myform.elements["msg1"].value = "Start: " + Comma2(NetS[RetireAge])
   if (NetE[100]>0) {
      myform.elements["msg2"].value = "End:   " + Comma2(NetE[100])
    }   
   else {
      myform.elements["msg2"].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 Comma3(number) {
//return Math.round(number)
number = Math.round(number)
var s = ""
var j = 0
for (i=number.length ; i > 0 ; i--) {
   s = s + charAt(number,i)
   j = j + 1
   if (j%3 == 0 && j < number.length) { s = "," + s}
   }
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("retirement")   //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 = "retirement=" + escape(bigcookie) + ";expires=" + CookieDate 
     status = "Information Saved "  + escape(bigcookie).length
   }
}

