/*
  interestCalc.js
  Copyright (c) 2008 David Gauer
  http://ratfactor.com
*/


var tableData;  // array used to hold monthly table

/*
  called by the user, grabs input from fields, makes calculations,
  builds table, and then calls results functions
*/
function calc(){
	var initial         = parseFloat(get("initial").value);
  var contrib         = parseFloat(get("contrib").value);
  var contrib_inc     = parseFloat(get("contrib_inc").value);
  var contrib_inc2    = parseFloat(get("contrib_inc2").value);
  var interest        = parseFloat(get("interest").value);
  var inflation       = parseFloat(get("inflation").value);
  var period          = parseFloat(get("period").value);
  var retireperiod    = parseFloat(get("retireperiod").value);
  var fees            = parseFloat(get("fees").value);
	var retireliveonint = get("retireliveonint").checked;

  tableData = new Array();

  for(var i=0; i<period; i++){
    var rowData = new Array();
    if(retireperiod == 0) retireperiod = 1000;
    year = i+1;
    rowData[0] = year;
    rowData[1] = money(initial);
    interest_earned = initial * (interest / 100);
    rowData[2] = (year > retireperiod && retireliveonint) ? "*" : "";
    rowData[2] += money(interest_earned);
    if(year <= retireperiod){ rowData[3] = money(contrib); }
    else{ rowData[3] = "**" + money(0); }
    initial -= fees;
    if(year <= retireperiod){ initial += contrib; }
    if(year <= retireperiod || !retireliveonint){ initial += interest_earned; }
    rowData[4] = money(initial);
    inflation_amt = initial / Math.pow(1+(inflation/100),year);
    rowData[5] = money(inflation_amt);
    rowData[6] = money(inflation_amt * (interest / 100));
    if(contrib_inc > 0){ contrib += (contrib * (contrib_inc / 100)); }
    if(contrib_inc2 > 0){ contrib += contrib_inc2; }
    tableData.push(rowData);
  }

  show("main");
  clearTag(get("drawTable"));
  show("drawingMsg");
	window.setTimeout("drawTable();",100);
}



/*
  drawTable and makeRow are called by calc() to display the data
  stored in the tableData array
*/
function drawTable(){
	var drawTable = get("drawTable");
	var newTable = newFromTemplate("tableTemplate");
	clearTag(drawTable);
	drawTable.appendChild(newTable);
	var tableBody = newTable.appendChild(document.createElement("tbody"));
	for(var i=0; i<tableData.length; i++){
		var row = makeRow(tableData[i]);
		tableBody.appendChild(row);
	}
	showObject(newTable);
	hide("drawingMsg");
}

function makeRow(dataArray){
	var row = newFromTemplate("rowTemplate");
	for(var i=0; i<dataArray.length; i++){
		var cell = getTag(row, "td", i);
		clearTag(cell);
		cell.appendChild(makeText(dataArray[i]));
	}
	return row;
}


/*
  turn floating number into formatted currency string
*/
function money(num) {
	// adapted from original currency formatter
	// by Cyanide_7 (leo7278@hotmail.com)
	num = num.toString().replace(/\|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + num + '.' + cents);
}
