var currentGPOffset = 0;
var currentSessionOffset = 0;
var now;

function getNow()
{
	now = new Date();
}


function GPItem(fn, t)
{
	this.start = new Date(t);
	this.end = new Date();
	this.end.setTime(this.start.getTime() + 120*60*1000);
	this.countdown = new Date(0);
	this.inProgress = false;

	this.fullname = fn;
	return this;
}

function findCurrent()
{
	var gp;

	for (; currentGPOffset < grand_prix.length; currentGPOffset++)
	{
		gp = grand_prix[currentGPOffset]
		if (gp.end >= now)
		{
			break;
		}

		gp = false;
	}

	if (!gp)
	{
		this.start = false;
	}
	else
	{
		if (gp.start <= now)
		{
			this.inProgress = true;
		}

		this.fullname = gp.fullname;
		this.start = gp.start;
		this.end = gp.end
		this.countdown = new Date(gp.start - now);
	}

	return this;
}



var grand_prix = new Array();
grand_prix[0] = new GPItem("2010 Bahrain Grand Prix", "14 Mar 2010 12:00:00 GMT");
grand_prix[1] = new GPItem("2010 Australian Grand Prix", "28 Mar 2010 06:00:00 GMT");


function setNumber(s, m)
{
	var v,n,o,ss;

	m = m + "";
	m = (m=="10")?"":m;

	if (document.getElementById)
	{
		v = document.getElementById(s);
	}
	else if (document.all)
	{
		v = document.all[s];
	}

	if (v == null)
	{
		return;
	}

	if (v.innerHTML != m)
	{
		v.innerHTML = m;
	}
}

function setCDTitle(t)
{
	if (document.getElementById)
	{
		v = document.getElementById("cdt");
	}
	else if (document.all)
	{
		v = document.all["cdt"];
	}

	v.innerHTML = t;
}

var mode = 0;

function updateClock()
{

	getNow();
	var gp = new findCurrent();

	if (gp.start != false)
	{
		if (!gp.inProgress)
		{
			var y, n;

			if (mode != 1)
			{
				setCDTitle('Countdown to<br />' + gp.fullname);
			}

			do
			{
				y = gp.countdown.getUTCSeconds();
				n = y % 10;
				setNumber("cds1", n);
				if ((n != 9) && (mode == 1))
				{
					break;
				}
				n = Math.floor(y / 10);
				setNumber("cds2", n);
				if ((n != 5) && (mode == 1))
				{
					break;
				}

				y = gp.countdown.getUTCMinutes();
				n = y % 10;
				setNumber("cdm1", n);
				if ((n != 9) && (mode == 1))
				{
					break;
				}
				n = Math.floor(y / 10);
				setNumber("cdm2", n);
				if ((n != 5) && (mode == 1))
				{
					break;
				}

				y = gp.countdown.getUTCHours();
				setNumber("cdh1", y % 10);
				setNumber("cdh2", Math.floor(y/10));

				y = Math.floor(gp.countdown.getTime() / (24 * 3600000));
				setNumber("cdd1", y % 10);

				n = Math.floor(y / 10) % 10;
				setNumber("cdd2", n);

				n = Math.floor(y / 100);
				if (n == 0)
				{
					n = 10;
				}
				setNumber("cdd3", n);
			}
			while(0);
			mode = 1;
		}
		else
		{
			if (mode != 2)
			{
				setCDTitle(gp.fullname + '<br />currently in progress');
				if (mode != 1)
				{
					setNumber("cdd1", 0);
					setNumber("cdd2", 0);
					setNumber("cdd3", 10);
					setNumber("cdh1", 0);
					setNumber("cdh2", 0);
					setNumber("cdm1", 0);
					setNumber("cdm2", 0);
					setNumber("cds1", 0);
					setNumber("cds2", 0);
				}
			}
			mode = 2;
		}
	}
	else
	{	
		if (mode != 3)
		{
			setTitle('The ' + grand_prix[grand_prix.length-1].start.getUTCFullYear() + ' season<br />has concluded');

			setNumber("cdd1", 0);
			setNumber("cdd2", 0);
			setNumber("cdd3", 10);
			setNumber("cdh1", 0);
			setNumber("cdh2", 0);
			setNumber("cdm1", 0);
			setNumber("cdm2", 0);
			setNumber("cds1", 0);
			setNumber("cds2", 0);
		}
		mode = 3;
	}

	setTimeout("updateClock()", 1001 - (new Date()).getMilliseconds());
}