/*
$Date: 2007/10/13 11:10:54 $
$Name: ukconcept_v1_r56 $
$Revision: 1.4 $
$State: Exp $
*/

// Set up variables (populated on page load)
var currentTime;
var countdown;
var countdownRace;
var countdownDays;
var countdownHours;
var countdownMins;
var countdownSecs;
var trackImagesBaseUrl = "http://www.aolcdn.com/aoluk/formula1_portal/tracks/";
var bubbleImagesBaseUrl = "http://www.aolcdn.com/aoluk/formula1_portal/track_bubbles/";
var raceCount = 0;

// Create new race object
function F1Race(n, sn, fn, t) {
	this.name = n;
	this.num = raceCount + 1;
	raceCount = raceCount + 1;
	this.shortname = sn;
	this.fullname = fn;
	this.start = new Date(t);
	this.end = new Date;
	this.end.setTime(this.start.getTime() + 120 * 60 * 1000);
	return this;
}

// Set the current time
function getCurrentTime() {
	currentTime = new Date();
}

// Return the current race
function getCurrentRace() {
	return new findCurrentRace();
}

// Find the current race for the countdown
function findCurrentRace() {
	seasonFinished = false;
	var currentRace;
	
	for (var i=0; i < F1RaceArray.length; i++) {
		currentRace = F1RaceArray[i]
		if (currentRace.end >= currentTime)
			break;
	}
	
	if (currentRace.start > currentTime) {
	  currentRace.inProgress = false;
	}
	else if (currentRace.end >= currentTime) {
		currentRace.inProgress = true;
	}
	else {
	  seasonFinished = true;
	}

	currentRace.countdown = new Date(currentRace.start - currentTime);
	return currentRace;
}

// Runs every second to refresh the countdown timer
function refreshTimer() {
  getCurrentTime();
	var currentRace = getCurrentRace();
	
	if (currentRace)	{
  	if (seasonFinished) {  // Season has finished
    	countdown.innerHTML = "Season finished";
    	setTimeout("refreshTimer()", 30000);
  	}
  	else if (!currentRace.inProgress) {  // Race coming up
    	countdownRace.innerHTML = currentRace.name + " countdown";
    	
    	secondsLeft = Math.floor((currentRace.countdown) / 1000);
    	daysLeft = Math.floor(secondsLeft / 60 / 60 / 24);
    	secondsLeft -= daysLeft * 60 * 60 * 24;
    	hoursLeft = Math.floor(secondsLeft / 60 / 60);
    	secondsLeft -= hoursLeft * 60 * 60;
      minutesLeft = Math.floor(secondsLeft / 60);
      secondsLeft -= minutesLeft * 60;
          	
      countdownDays.innerHTML = formatTimer(daysLeft);
      countdownHours.innerHTML = formatTimer(hoursLeft);
      countdownMins.innerHTML = formatTimer(minutesLeft);
      countdownSecs.innerHTML = formatTimer(secondsLeft);
      
      var trackImage = document.getElementById('track_' + currentRace.shortname);
      trackImage.className = "currentTrack";

      setTimeout("refreshTimer()", 1000);
	  }
	  else {  // Race in progress
  	  countdownDiv.innerHTML = currentRace.name + " race in progress";
  	  var trackImg = document.getElementById('track_' + currentRace.shortname);
    	trackImage.className = "currentTrack";
  	  setTimeout("refreshTimer()", 30000);
	  }
  }
}

// Format time numbers with leading zero
function formatTimer(number) {
  number = number < 10 ? "0" + number : number;
  return number;
}

// Swap track image to highlight
// Now moves position on spritemap instead for speed
function swapTrackImage(e) {
  var currentRace = getCurrentRace();
  var trackImage = e.currentTarget;
  var shortname = trackImage.id.substring(6,9);
  var bubble = document.getElementById('bubble');

  bubble.style.left = getX(trackImage) - (bubble.offsetWidth / 2) + (trackImage.offsetWidth / 2);
  bubble.style.top = getY(trackImage) + (trackImage.offsetHeight);
  
  if (bubble.className == shortname) {
    bubble.className = "";
    bubble.style.visibility = 'hidden';
  }
  else {
    bubble.className = shortname;
    bubble.style.visibility = 'visible';
  }
}

// Get X coordinates of an object
function getX(obj) {
  var x = obj.offsetLeft;
  while (obj = obj.offsetParent) x += obj.offsetLeft;
  return x;
}

// Get Y coordinates of an object
function getY(obj) {
  var y = obj.offsetTop;
  while (obj = obj.offsetParent) y += obj.offsetTop;
  return y;
}

// Details of all races
var F1RaceArray = new Array();
F1RaceArray[0] = new F1Race("melbourne", "aus", "2007 Australian Grand Prix", "18 Mar 2007 03:00:00 GMT");
F1RaceArray[1] = new F1Race("kuala lumpur", "mal",  "2007 Malaysian Grand Prix", "08 Apr 2007 06:00:00 GMT");
F1RaceArray[2] = new F1Race("bahrain", "bah",  "2007 Bahrain Grand Prix", "15 Apr 2007 10:30:00 GMT");
F1RaceArray[3] = new F1Race("catalunya", "spa",  "2007 Spanish Grand Prix", "13 May 2007 12:00:00 GMT");
F1RaceArray[4] = new F1Race("monte carlo", "mon",  "2007 Monaco Grand Prix", "27 May 2007 12:00:00 GMT");
F1RaceArray[5] = new F1Race("montreal", "can",  "2007 Canadian Grand Prix", "10 Jun 2007 17:00:00 GMT");
F1RaceArray[6] = new F1Race("indianapolis", "usa",  "2007 United States Grand Prix", "17 Jun 2007 17:00:00 GMT");
F1RaceArray[7] = new F1Race("magny cours", "fra",  "2007 French Grand Prix", "01 Jul 2007 12:00:00 GMT");
F1RaceArray[8] = new F1Race("silverstone", "bri",  "2007 British Grand Prix", "08 Jul 2007 12:00:00 GMT");
F1RaceArray[9] = new F1Race("nurburgring", "ger",  "2007 German Grand Prix", "22 Jul 2007 12:00:00 GMT");
F1RaceArray[10] = new F1Race("budapest", "hun",  "2007 Hungarian Grand Prix", "05 Aug 2007 12:00:00 GMT");
F1RaceArray[11] = new F1Race("istanbul", "tur",  "2007 Turkish Grand Prix", "26 Aug 2007 12:00:00 GMT");
F1RaceArray[12] = new F1Race("monza", "ita",  "2007 Italian Grand Prix", "09 Sep 2007 12:00:00 GMT");
F1RaceArray[13] = new F1Race("spa", "bel",  "2007 Belgian Grand Prix", "16 Sep 2007 12:00:00 GMT");
F1RaceArray[14] = new F1Race("fuji", "jap",  "2007 Japanese Grand Prix", "30 Sep 2007 04:30:00 GMT");
F1RaceArray[15] = new F1Race("shanghai", "chi",  "2007 China Grand Prix", "07 Oct 2007 06:00:00 GMT");
F1RaceArray[16] = new F1Race("sao paulo", "bra",  "2007 Brazilian Grand Prix", "21 Oct 2007 16:00:00 GMT");

