//example refDate --> "2005:01:04:11"; //<==Data. Starting time. Interpretted as Washington DC time.
//example refAmount --> 7601016892663.19; //<==Data. Starting amount
//example refRate --> 570; //<==Data. Change in $ billion / year
var off= 5;		// GMT offset from DC time, 5 winter, 4 summer
var cps = 1;		// updates per second on the counters
var xps;
var timeStart;
var xStart;
var cents = 0;		// 0 = no cents, 1 = cents
var elemId = 'NDC';
var maxCounters = 10;
var numCounters = 0;
var counterId = new Array(maxCounters);
var counterXPS = new Array(maxCounters);
var counterXstart = new Array(maxCounters);

// note: rows need to include:
// 1) element ID for reference
// 2) xps
// 3) xStart

function setupCounterSpeed(speed) {
	if (speed>=0.1 && speed<=100) {
		cps = speed;
	}
}

function setupCounter(elementId, refDate, refAmount, refRate) {
	if (numCounters >= maxCounters) {
		alert('Code limited to a maximum of ' + maxCounters + ' counters.');
		return;
	}
 	counterId[numCounters] = elementId;
 	counterXPS[numCounters] = refRate*1000000000/(365*24*60*60);
 	counterXstart[numCounters] = refAmount + counterXPS[numCounters]*(UTsecs() - str2date(refDate,off));
 	numCounters++;
 	//alert('counter ' + numCounters + ' set up with values ' + elementId + ' : ' + refDate + ' : ' + refAmount + ' : ' + refRate);
}

function beginCounters() {
	//alert('beginning counters');
	timeStart = (new Date())/1000; // JavaScript (client) start time
	looper();
}

function looper() { 
	var timeNow = (new Date())/1000;
	var secs = timeNow - timeStart;
	for (var i=0; i<numCounters; i++) {
		var xNow = counterXstart[i] + counterXPS[i] * secs;
		// note: removed extra step of assigning num2str(xNow) to a var -- did this have a purpose?
		document.getElementById(counterId[i]).firstChild.nodeValue = num2str(xNow);
	}
	setTimeout('looper();', 1000/cps);
}

function str2date(str,off)		// converts 'y:m:d:h:m:s' to (y, m, d, h, m, s) and then to seconds since 1970 GMT
{ var s = str;						// Less significant parts can be dropped, but sting must not end with ':'
  var dA = new Array(7);		// 2004:4 is the beggining of March 31. 2004:4:1 is the beginning of April 1.
  for (i=1; i<7; i++)			// off gives GMT offset in hours from local str time. DC is 4 (daylight) or 5 (winter)
  { if (s.length)
    {  ndx = s.indexOf(':')
		 if (ndx==-1) { s0 = s; s = ''; }
	    else 			 s0 = s.substring(0, ndx);
	 }
	 else   s0 = 0;
    if (i==2) s0 -= 1;  // Months go from 0 to 11 in JS
	 dA[i] = s0;
	 s = s.substring(ndx+1);
  }
  dA[4] =dA[4]*1 + off;
  return (Date.UTC(dA[1], dA[2], dA[3], dA[4], dA[5], dA[6]))/1000	// date in secs since 1970
}

function UTsecs()	// Returns # of secs between 1970 GMT (=UTC) and now.
{	return (new Date())/1000;			// date in secs since 1970
}

function num2str(xNum) 					// convert xNum to a string with commas, in style N (cents or not)
{  var sign = "";
  if (xNum < 0)
    { xNum = -xNum; sign = "-"; }			// conver to positve and save sign
  xDols = Math.floor(xNum);						// xF is the "dollar" value
  var sDols = xDols.toString ();
  DLen = sDols.length;
  dCom = ""
  while (DLen > 3)
  { digits3 = sDols.substr(DLen-3, 3);		// take last 3 digits.
    sDols   = sDols.substr(0, DLen-3);		// take all but last 3 digits.
	 DLen = DLen -3;
  	 dCom = "," + digits3 + dCom;
  }
  dCom = sDols + dCom;
  if (cents)
  {
	xNum = xNum - xDols;		// number of cents
	var sCents = xNum.toString ();
	sCents = sCents.substr(1,3);	// take decimal point and 2 digits
  
  	return sign + dCom + sCents;	// dollars and cents
  }
  else
	return sign + dCom;			//  dollars not cents
}