// Array to hold each digit's starting background-position Y value
var initialPos = [0, -228, -456, -684, -912, -1140, -1368, -1596, -1824, -2052]; //38
/*var initialPos = [0, -618, -1236, -1854, -2472, -3090, -3708, -4326, -4944, -5562]; //103*/
// Amination frames
var animationFrames = 5;
// Frame shift
var frameShift = 38;

// Starting number
var theBase = 9700000000;
var theStepper = 118;
var theNumber;
// Increment
var increment = 13;
// Pace of counting in milliseconds
var pace = 140;

// Initializing variables
var digitsOld = [], digitsNew = [], subStart, subEnd, x, y;

// Function that controls counting
function doCount(){
	x = theNumber.toString();
	theNumber += increment;
	y = theNumber.toString();
	digitCheck(x,y);
}

// This checks the old count value vs. new value, to determine how many digits
// have changed and need to be animated.
function digitCheck(x,y){
	digitsOld = splitToArray(x);
	digitsNew = splitToArray(y);
	for (var i = 0; i < digitsNew.length; i++){
		if (digitsNew[i] != digitsOld[i]){
			animateDigit(i, digitsOld[i], digitsNew[i]);
		}
	}
}

// Animation function
function animateDigit(n, oldDigit, newDigit){
	// I want three different animations speeds based on the digit,
	// because the pace and increment is so high. If it was counting
	// slower, just one speed would do.
	// 1: Changes so fast is just like a blur
	// 2: You can see complete animation, barely
	// 3: Nice and slow
	switch (n){
		case 0:
			speed = pace/8;
			break;
		case 1:
			speed = pace/4;
			break;
		default:
			speed = pace/2;
			break;
	}
	// Cap on slowest animation can go
	speed = (speed > 100) ? 100 : speed;
	// Get the initial Y value of background position to begin animate
	var pos = initialPos[oldDigit];
	// Each animation is 5 frames long, and 103px down the background image.
	// We delay each frame according to the speed we determined above.
	for (var k = 0; k < animationFrames; k++){
		pos = pos - frameShift;
		if (k == (animationFrames - 1)){
			$("#d" + n).delay(speed).animate({'background-position': '0 ' + pos + 'px'}, 0, function(){
				// At end of animation, shift position to new digit.
				$("#d" + n).css({'background-position': '0 ' + initialPos[newDigit] + 'px'}, 0);
			});
		}
		else{
			$("#d" + n).delay(speed).animate({'background-position': '0 ' + pos + 'px'}, 0);
		}
	}
}

// Splits each value into an array of digits
function splitToArray(input){
	var digits = new Array();
	for (var i = 0; i < input.length; i++){
		subStart = input.length - (i + 1);
		subEnd = input.length - i;
		digits[i] = input.substring(subStart, subEnd);
	}
	return digits;
}

// Sets the correct number
function calculatePassedTime(){
  var today = new Date();
  var baseTime = new Date("1/6/2011");
  
  //Calculate difference btw the two dates, and convert to second
  return (Math.ceil((today.getTime()-baseTime.getTime())/(1000)));
}

// Sets the correct digits on load
function initialDigitCheck(initial, stepper){
  theNumber = initial + (calculatePassedTime() * stepper);
	var digits = splitToArray(theNumber.toString());

	for (var i = 0; i < digits.length; i++){
		$("#d" + i).css({'background-position': '0 ' + initialPos[digits[i]] + 'px'});
	}
}


// Start it up
initialDigitCheck(theBase, theStepper);
setInterval(doCount, pace);


