// Array to hold each digit's starting background-position Y value
var initialPos = [0, -456, -912, -1368, -1824, -2280, -2736, -3192, -3648, -4104];
// Amination frames
var animationFrames = 5;
// Frame shift
var frameShift = 76;
// Increment
var increment = 1;
// Pace of counting in milliseconds
var pace = 483;

// Initializing variables
var digitsOld = [], digitsNew = [], subStart, subEnd, x, y;

// Function that controls counting
function doCount(){
	x = theNumber.toString();
	theNumber += increment;
	y = theNumber.toString();
	if(maxCount >= theNumber){
		digitCheck(x,y);
	} else {
		clearInterval(intval);
	}
}

// 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 76px 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)){
			jQuery("#d" + n).delay(speed).animate({'background-position': '0 ' + pos + 'px'}, 0, function(){
				// At end of animation, shift position to new digit.
				jQuery("#d" + n).css({'background-position': '0 ' + initialPos[newDigit] + 'px'}, 0);
			});
		}
		else{
			jQuery("#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 digits on load
function initialDigitCheck(initial){
	var digits = splitToArray(initial.toString());
	for (var i = 0; i < digits.length; i++){
		jQuery("#d" + i).css({'background-position': '0 ' + initialPos[digits[i]] + 'px'});
	}
}
