var currSpeed = 0;

var currTimeout = null;

function updateSpeedo() {
    var max = 110.0;
	var step = 0.5;
	var timestep = 100; // ms
	var targetSpeed = 100.0;
	var bias = 0.02;
	
	var value = (Math.random() * 2.0); // get a value between 0 and 2
	value -= 1;  // value is between -1 and 1
	var diff = targetSpeed - currSpeed;
	value += diff * bias;
	value *= step; // value is between -step and step +- bias
	currSpeed += value;
	if( currSpeed > max ) currSpeed = max;
	if( currSpeed < 0.0 ) currSpeed = 0.0;
	
	drawSpeedo();
	currTimeout = setTimeout( updateSpeedo, timestep );
}

function drawSpeedo() {
	var imagePrecision = 2.5;
	var textPresision = 0.1;

	var speed = document.getElementById( 'speed' );

	var roundedSpeed = Math.round(currSpeed / imagePrecision) * imagePrecision;
	var intSpeed = Math.floor( roundedSpeed );
	var fracSpeed = roundedSpeed - intSpeed;
	fracSpeed *= 10;
	fracSpeed = Math.round(fracSpeed);
	var image = intSpeed;
	if( fracSpeed != 0 )
		image += '_' + fracSpeed;
	speed.style.background = "url('/wp-content/uploads/2007/04/" + image + ".gif')";
	
	roundedSpeed = Math.round(currSpeed / textPresision) * textPresision;
	intSpeed = Math.floor( roundedSpeed );
	fracSpeed = roundedSpeed - intSpeed;
	fracSpeed *= 10;
	fracSpeed = Math.round(fracSpeed);
	
	var speedText = intSpeed + '.' + fracSpeed;
	if( intSpeed < 10 ) {
		speedText = '00' + speedText;
	}
	else if( intSpeed < 100 ) {
		speedText = '0' + speedText;
	}
	speed.innerHTML = speedText + ' km/h';
}

function startSpeedo() {
	if( currTimeout != null ) {
		clearTimeout( currTimeout );
	}
	updateSpeedo();
	var control = document.getElementById( 'speedoControl' );
	control.onclick = stopSpeedo;
	control.innerHTML = 'Stop Speedo';
}

function stopSpeedo() {
	if( currTimeout != null ) {
		clearTimeout( currTimeout );
		currTimeout = null;
		var control = document.getElementById( 'speedoControl' );
		control.onclick = startSpeedo;
		control.innerHTML = 'Start Speedo';
		slowDown();
	}
}

function slowDown() {
	var timestep = 50; // ms
	currSpeed = Math.round( currSpeed - 1.0 );
	if( currSpeed < 0 ) {
		currSpeed = 0;
		currTimeout = null;
		drawSpeedo();
		return;
	}
	drawSpeedo();
	currTimeout = setTimeout( slowDown, timestep );	
}
