function gaxInitObj() {
	var obj;
 	var msxmlhttp = new Array('Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP');
	for (var i = 0; i < msxmlhttp.length; i++) {
		try {
			obj = new ActiveXObject(msxmlhttp[i]);
		} catch (e) {
			obj = null;
		}
	}

	if (!obj && typeof XMLHttpRequest != "undefined") {
		obj = new XMLHttpRequest();
	}
	
	return obj;
}
		
var gaxRequests = new Array();


function gaxCall() {
	
	act = gaxCall.arguments[0];
	
	var a = new Array();
	for (i = 0; i < gaxCall.arguments.length; i++) {
		a.push(gaxCall.arguments[i]);
	}
	
	post_data = new Array();
	post_data.push('SN='+SN);
	
	for (i = 1; i < a.length; i++) {
		post_data.push('args[]=' + escape(a[i]));
	}

	var x = gaxInitObj();
	if (x == null) {
		return false;
	} else {
		x.open('POST', '/gax.php/' + act + '.xml', true);
		
		x.setRequestHeader("Method", "POST " + window.location + " HTTP/1.1");
		x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		
		gaxRequests.push(x);
	
		x.onreadystatechange = function () {
			if (x.readyState != 4) {
				return;
			}
			
			if (x.responseXML) {
				var response = x.responseXML.getElementsByTagName('response').item(0);
				if (response == undefined) {
					return;
				}
				var callback = response.attributes.getNamedItem('callback').value;
				
				eval(callback + '(response)');
			}
			
		}
	}
	
	x.send(post_data.join('&'));
	delete x;
	return true;
}


function wolExec(){
	for (var i = 0; i < wolStack.length; i++) {
		eval(wolStack[i]);
	}
}

function wolAdd(func){
	wolStack.push(func);
}

var wolStack = new Array();
window.onload = wolExec;



function news() {
	var foo = gaxInitObj();
	if (foo == null) {
		return false;
	} else {
		foo.open('GET', '/rss/rnnews.xml', true);

		foo.onreadystatechange = function () {
			if (foo.readyState != 4) {
				return;
			}

			if (foo.responseXML) {

				var container = document.getElementById('news');
				container.innerHTML = '';

				h3 = document.createElement('h3');
				h3.innerHTML = 'Breaking News';
				container.appendChild(h3);

				var items = foo.responseXML.getElementsByTagName('item');
				var len = Math.min(3, items.length);
				for (var i = 0; i < len; i++) {
					var a = document.createElement('a');
					a.innerHTML = items[i].getElementsByTagName('title').item(0).childNodes[0].nodeValue;
					a.href = items[i].getElementsByTagName('link').item(0).childNodes[0].nodeValue
					a.target = '_blank';
					var p = document.createElement('p');
					p.appendChild(a);
					container.appendChild(p);
				}
			}
		}
	}

	foo.send('');
	delete foo;

	setTimeout('news()', 60000);
}

wolAdd('news()');

function setAction(action) {
	
	var container = document.getElementById('mainBody');
	container.innerHTML = '';
	img = document.createElement('img');
	img.src = '/images/loading.gif';
	container.appendChild(img);
	
	var actionTitle = document.getElementById('actionTitle');
	for (var i = 0; i < mActions.length; i++) {
		if (mActions[i].action == action) {
			actionTitle.innerHTML = mActions[i].name;
			break;
		}
	}
	
	for (var i = 0; i < gaxRequests.length; i++) {
		gaxRequests[i].abort();
		clearInterval(currentTimer);
	}
	gaxRequests = new Array();
	
	a = new Array();
	if (setAction.arguments) {
		for (var i = 0; i < setAction.arguments.length; i++) {
			a.push(setAction.arguments[i]);
		}
	}
	
	currentAction = action;
	eval('gaxCall("' + a.join('", "') + '")');
	currentTimer = setInterval('gaxCall("' + a.join('", "') + '")', 10000);
	pageTime = new Date();
}

var currentAction = null;
var currentTimer = null;
function fillEntrants() {
	
	var prefix = '';
	if (fillEntrants.arguments) {
		if (fillEntrants.arguments[0] != undefined) {
			prefix = fillEntrants.arguments[0];
		} 
	}
	
	if (entrants.length == 0) {
		setTimeout('fillEntrants("'+prefix+'")', 1000);
		return;
	}
	
	for (var i = 0; i < entrants.length; i++) {
		td = document.getElementById(prefix + 'ent' + entrants[i].no);
		if (td) {
			td.innerHTML = entrants[i].driver + '<br />' + entrants[i].codriver + '<br />' + entrants[i].car;
		}
	}
}

function loadEntrants(res) {
	
	ents = res.getElementsByTagName('ent');
	for (var i = 0; i < ents.length; i++) {
		attr = ents[i].attributes;
		entrants.push(new Entrant(
			attr.getNamedItem('no').value,
			attr.getNamedItem('entrant').value,
			attr.getNamedItem('driver').value + '&nbsp;(' + attr.getNamedItem('nat').value + ')',
			attr.getNamedItem('coDriver').value + '&nbsp;(' + attr.getNamedItem('coNat').value + ')',
			attr.getNamedItem('car').value,
			attr.getNamedItem('cls').value,
			attr.getNamedItem('pri').value
		));
		
	}
}

function Entrant(no, entrant, driver, codriver, car, cls, pri) {
	this.no = no;
	this.entrant = entrant;
	this.driver = driver;
	this.codriver = codriver;
	this.car = car;
	this.cls = cls;
	this.pri = pri;
}

var entrants = new Array();

wolAdd("gaxCall('loadEntrants')");
function getDiff(tHigh, tLow) {
	
	highParts = tHigh.split(':').reverse();
	secsHigh = 0;
	for (var i = 0; i < highParts.length; i++) {
		secsHigh = secsHigh + parseFloat(highParts[i]) * Math.max(1, Math.pow(60, i));
	}
	
	lowParts = tLow.split(':').reverse();
	secsLow = 0;
	for (var i = 0; i < lowParts.length; i++) {
		secsLow = secsLow + parseFloat(lowParts[i]) * Math.max(1, Math.pow(60, i));
	}
	
	var tenthSecsDiff = Math.round((secsHigh - secsLow) * 10);
	
	var H = Math.floor( tenthSecsDiff / 36000 );
	var M = Math.floor( ( tenthSecsDiff - H * 3600 ) / 600 );
	var S = Math.floor( ( tenthSecsDiff - H * 3600 - M * 600 ) ) / 10;
	
	var diffs = new Array();
	if (H > 0) {
		if (H.toString() < 2) {
			H = '0' + H.toString();
		}
		diffs.push(H);
	}
	if (M > 0) {
		if (M.toString().length < 2) {
			M = '0' + M.toString();
		}
		
		diffs.push(M);
		
		if (Math.round(S) < 10) {
			S = '0' + S.toString();
		}
	}
	if (S.toString().indexOf('.') == -1) {
		S = S.toString() + '.0';
	}
	diffs.push(S);
	
	return '+&nbsp;' + diffs.join(':');
}
function stage(res) {
	
	var container = document.getElementById('mainBody');
	container.innerHTML = '';
	
	h3 = document.createElement('h3');
	attr = res.getElementsByTagName('stg').item(0).attributes;
	h3.innerHTML = 'SS ' + attr.getNamedItem('no').value + ' &ndash; ' + attr.getNamedItem('name').value + ' (' + attr.getNamedItem('km').value + ' km)';
	
	if (stageListItems[attr.getNamedItem('no').value] != undefined) {
		h3.innerHTML = h3.innerHTML + ' &ndash; First Car ' + stageListItems[attr.getNamedItem('no').value].firstcar;
	}
	
	container.appendChild(h3);
	
	tables = res.getElementsByTagName('cls');
	for (var tIndex = 0; tIndex < tables.length; tIndex++) {
		var cls = tables[tIndex];
		table = document.createElement('table');
		tbody = document.createElement('tbody');
		
		tr = document.createElement('tr');
		
		h = new Array('Pos', 'Competitor', 'Time', 'Diff next', 'Diff 1st');
		
		for (var hIndex = 0; hIndex < h.length; hIndex++) {
			th = document.createElement('th');
			th.innerHTML = h[hIndex];
			th.className = 'col' + hIndex;
			tr.appendChild(th);
		}
		
		tbody.appendChild(tr);
		
		rows = cls.getElementsByTagName('cmp');
		for (var rowIndex = 0; rowIndex < rows.length; rowIndex++) {
			rowAttr = rows[rowIndex].attributes;
			
			var tThis = rowAttr.getNamedItem('time').value
			
			if (rowIndex == 0) {
				var tLdr = tThis;
				var tPrev = tLdr;
			}
			
			tr = document.createElement('tr');
			if (rowIndex % 2 == 0) {
				tr.className = 'alt';
			}
			
			var fields = new Array(
				rowIndex + 1,
				'&nbsp;',
				rowAttr.getNamedItem('time').value,
				getDiff(tThis, tPrev),
				getDiff(tThis, tLdr)
			);
			
			tPrev = tThis;
			
			for (var fIndex = 0; fIndex < fields.length; fIndex++) {
				td = document.createElement('td');
				td.className = 'col' + fIndex;
				if (fIndex == 1) {
					td.id = cls.attributes.getNamedItem('type').value + 'ent' + rowAttr.getNamedItem('no').value;
				}
				td.innerHTML = fields[fIndex];
				tr.appendChild(td);
			}
			
			tbody.appendChild(tr);
			
		}
		
		table.appendChild(tbody);
		table.className = 'stage';
		div = document.createElement('div');
		div.id = cls.attributes.getNamedItem('type').value;
		h4 = document.createElement('h4');
		h4.innerHTML = cls.attributes.getNamedItem('type').value;
		div.appendChild(h4);
		div.appendChild(table);
		container.appendChild(div);
		
		fillEntrants(cls.attributes.getNamedItem('type').value);
	}

}
function stageList(res) {
	
	var container = document.getElementById('stageList');
	container.innerHTML = '';
	
	
	legs = res.getElementsByTagName('leg');
	for (var i = 0; i < legs.length; i++) {
		attr = legs[i].attributes;
		h3 = document.createElement('h3');
		h3.innerHTML = 'Leg ' + (parseInt(i)+1);
		container.appendChild(h3);
		
		list = document.createElement('ol');
		stages = legs[i].getElementsByTagName('stage');
		for (var stg = 0; stg < stages.length; stg++) {
			if (stg == 0) {
				list.start = stages[stg].attributes.getNamedItem('no').value
			}
			
			stageListItems[stages[stg].attributes.getNamedItem('no').value] = new StageItem (
					stages[stg].attributes.getNamedItem('no').value,
					stages[stg].attributes.getNamedItem('name').value,
					stages[stg].attributes.getNamedItem('fc').value,
					stages[stg].attributes.getNamedItem('status').value
			);
			
			li = document.createElement('li');
			
			a = document.createElement('a');
			a.innerHTML = stages[stg].attributes.getNamedItem('name').value;
			a.name = stages[stg].attributes.getNamedItem('no').value;
			
			a.onmouseover = function (e) {
				
				var posx = 0;
				var posy = 0;
				if (!e) var e = window.event;
				if (e.pageX || e.pageY) 	{
					posx = e.pageX;
					posy = e.pageY;
				}
				else if (e.clientX || e.clientY) 	{
					posx = e.clientX + document.body.scrollLeft
						+ document.documentElement.scrollLeft;
					posy = e.clientY + document.body.scrollTop
						+ document.documentElement.scrollTop;
				}
				
				div = document.getElementById('infodiv');
				div.innerHTML = '';
				
				tbody = document.createElement('tbody');
				
				tr = document.createElement('tr');
				td = document.createElement('td');
				strong = document.createElement('strong');
				strong.innerHTML = 'SS&nbsp;' + stageListItems[this.name].no + '&nbsp;' +  stageListItems[this.name].name;
				td.appendChild(strong);
				tr.appendChild(td);
				tbody.appendChild(tr);
				
				tr = document.createElement('tr');
				td = document.createElement('td');
				td.innerHTML = 'First Car ' + stageListItems[this.name].firstcar;
				tr.appendChild(td);
				tbody.appendChild(tr);
				
				tr = document.createElement('tr');
				td = document.createElement('td');
				td.innerHTML = statusCodeToName(stageListItems[this.name].status);
				tr.appendChild(td);
				tbody.appendChild(tr);
				
				tbl = document.createElement('table');
				tbl.appendChild(tbody);
				div.appendChild(tbl);
				div.style.top = posy + 'px';
				div.style.left = posx + 40 + 'px';
				div.style.visibility = 'visible';
			}
			a.onmouseout = function () {
				document.getElementById('infodiv').style.visibility = 'hidden';
			}
			
			if (stages[stg].attributes.getNamedItem('status').value > 1) {
				a.href = window.location;
				a.onclick = function () {
					pageTracker._trackPageview('/results/' + SN + '/stage/ss' + this.name);
					setAction('stage', this.name);
					return false;
				}
			} else {
				a.className = 'dis';
			}
			
			li.appendChild(a);
			
			list.appendChild(li);
		}
		container.appendChild(list);
	}
	
}

function StageItem(no, name, firstcar, status) {
	this.no = no;
	this.name = name;
	this.firstcar = firstcar;
	this.status = status;
}

var stageListItems = new Array();

wolAdd("initInfoDiv()");
wolAdd("gaxCall('stageList')");
var stageListInterval = setInterval("gaxCall('stageList')", 10000);

function initInfoDiv() {
	div = document.createElement('div');
	div.style.position = 'absolute';
	div.style.visibility = 'hidden';
	div.id = 'infodiv';
	document.getElementsByTagName('body').item(0).appendChild(div);
}

function statusCodeToName(code) {
	switch (code) {
		case '1':
			return 'To Run';
			break;
		case '2':
			return 'Running';
			break;
		case '3':
			return 'Complete';
			break;
		case '4':
			return 'Cancelled';
			break;
	
		default:
			return code;
			break;
	}
}
function mAction(name, action) {
	this.name = name;
	this.action = action;
}

var mActions = new Array(
	new mAction('Stage Times', 'stage'),
	new mAction('Entry List', 'entrylist'),
	new mAction('Time Table', 'timetable'),
	new mAction('Penalties', 'penalties'),
	new mAction('Retirements', 'retirements')
);

function initMenu() {
	
	var mainMenu = document.getElementById('mainMenu');

	for (var i = 0; i < mActions.length; i++) {
		a = document.createElement('a');
		a.href = window.location;
		a.innerHTML = mActions[i].name;
		a.id = mActions[i].action;
		a.onclick = function () {
			pageTracker._trackPageview('/results/' + SN + '/' + this.id);
			setAction(this.id);
			return false;
		};
		li = document.createElement('li');
		li.appendChild(a);
		mainMenu.appendChild(li);
	}
}

wolAdd('initMenu()');

function error(res) {
	/*
	container = document.getElementById('mainBody');
	container.innerHTML = '';
	
	p = document.createElement('p');
	p.innerHTML = 'Data is not available. Please refresh your browser or try again later.';
	p.className = 'error';
	
	container.appendChild(p);
	*/
	currentError = res;
}

var currentError = null
function penalties(res) {
	var container = document.getElementById('mainBody');
	container.innerHTML = '';
	
	tbody = document.createElement('tbody');
	
	h = new Array('#', 'Competitor', 'Control', 'Reason', 'Penalty');
	tr = document.createElement('tr');
	for (var i = 0; i < h.length; i++) {
		th = document.createElement('th');
		th.className = 'col' + i.toString();
		th.innerHTML = h[i];
		tr.appendChild(th);
	}
	tbody.appendChild(tr);
	
	rows = res.getElementsByTagName('entry');
	for (var i = 0; i < rows.length; i++) {
		
		pens = rows[i].getElementsByTagName('pen');
		
		tr = document.createElement('tr');
		if (i % 2 == 0) {
			tr.className = 'alt';
		}
		
		td = document.createElement('td');
		td.rowSpan = pens.length;
		td.innerHTML = rows[i].attributes.getNamedItem('no').value;
		tr.appendChild(td);
		
		td = document.createElement('td');
		td.rowSpan = pens.length;
		td.id = 'ent' + rows[i].attributes.getNamedItem('no').value;
		td.innerHTML = '&nbsp;';
		tr.appendChild(td);
		
		for (var j = 0; j < pens.length; j++) {
			if (j > 0) {
				tr = document.createElement('tr');
				if (i % 2 == 0) {
					tr.className = 'alt';
				}
			}
			
			a = new Array(
				pens[j].attributes.getNamedItem('ctrl').value,
				pens[j].attributes.getNamedItem('desc').value,
				pens[j].attributes.getNamedItem('time').value
			);
			
			for (var k = 0; k < a.length; k++) {
				td = document.createElement('td');
				td.innerHTML = a[k];
				td.className = 'col' + (k + 2);
				tr.appendChild(td);
			}
			
			tbody.appendChild(tr);
		}

	}
	table = document.createElement('table');
	table.className = 'penalties';
	table.appendChild(tbody);
	container.appendChild(table);
	
	fillEntrants();

}
function retirements(res) {
	var container = document.getElementById('mainBody');
	container.innerHTML = '';
	
	tbody = document.createElement('tbody');
	
	h = new Array('#', 'Competitor', 'Description', 'Stage');
	tr = document.createElement('tr');
	for (var i = 0; i < h.length; i++) {
		th = document.createElement('th');
		th.className = 'col' + i.toString();
		th.innerHTML = h[i];
		tr.appendChild(th);
	}
	
	tbody.appendChild(tr);
	
	rows = res.getElementsByTagName('ret');
	for (var i = 0; i < rows.length; i++) {
		tr = document.createElement('tr');
		if (i % 2 == 0) {
			tr.className = 'alt';
		}
		
		td = document.createElement('td');
		td.innerHTML = rows[i].attributes.getNamedItem('no').value;
		td.className = 'col0';
		tr.appendChild(td);
		
		td = document.createElement('td');
		td.innerHTML = '&nbsp;'
		td.id = 'ent' + rows[i].attributes.getNamedItem('no').value;
		td.className = 'col1';
		tr.appendChild(td);
		
		td = document.createElement('td');
		td.innerHTML = rows[i].attributes.getNamedItem('desc').value;
		td.className = 'col2';
		tr.appendChild(td);
		
		td = document.createElement('td');
		td.innerHTML = rows[i].attributes.getNamedItem('stg').value;
		td.className = 'col3';
		tr.appendChild(td);
		
		tbody.appendChild(tr);
	}
	
	table = document.createElement('table');
	table.className = 'retirements';
	table.appendChild(tbody);
	container.appendChild(table);
	
	fillEntrants();
	
}
function timetable(res) {

	var container = document.getElementById('mainBody');
	container.innerHTML = '';
	legs = res.getElementsByTagName('leg');
	for (var lIndex = 0; lIndex < legs.length; lIndex++) {
		
		var date = legs[lIndex].attributes.getNamedItem('date');
		if (date == undefined) {
			continue;
		}
		
		h3 = document.createElement('h3');
		h3.innerHTML = 'Leg ' + (lIndex + 1) + ' ' + date.value;
		container.appendChild(h3);
		
		tbody = document.createElement('tbody');
		
		h = new Array('Stg', 'Name', 'km', 'First Car');
		tr = document.createElement('tr');
		for (var i = 0; i < h.length; i++) {
			th = document.createElement('th');
			th.className = 'col' + i.toString();
			th.innerHTML = h[i];
			tr.appendChild(th);
		}
		tbody.appendChild(tr);
		
		rows = legs[lIndex].getElementsByTagName('stg');
		for (var rIndex = 0; rIndex < rows.length; rIndex++) {
			tr = document.createElement('tr');
			if (rIndex % 2 == 0) {
				tr.className = 'alt';
			}
			
			attr = rows[rIndex].attributes;
			for (aIndex = 0; aIndex < attr.length; aIndex++) {
				td = document.createElement('td');
				td.className = 'col' + aIndex.toString();
				td.innerHTML = attr.item(aIndex).value;
				tr.appendChild(td);
			}
			
			tbody.appendChild(tr);
		}
		
		table = document.createElement('table');
		table.className = 'itinerary';
		table.appendChild(tbody);
		container.appendChild(table);
	}
	
}function entrylist(res) {
	
	var container = document.getElementById('mainBody');
	container.innerHTML = '';
	
	tbody = document.createElement('tbody');
	
	tr = document.createElement('tr');
	
	h = new Array('#', 'Entrant', 'Driver/Co-Driver', 'Car', 'Class', 'Priority');
	
	for (var i = 0; i < h.length; i++) {
		th = document.createElement('th');
		th.innerHTML = h[i];
		th.className = 'col' + i.toString();
		tr.appendChild(th);
	}
	
	tbody.appendChild(tr);
	
	ents = res.getElementsByTagName('ent');
	for (var i = 0; i < ents.length; i++) {
		tr = document.createElement('tr');
		if (i % 2 == 0) {
			tr.className = 'alt';
		}
		
		attr = ents[i].attributes;
		
		d = new Array(
			attr.getNamedItem('no').value,
			attr.getNamedItem('entrant').value,
			attr.getNamedItem('driver').value + '&nbsp;(' + attr.getNamedItem('nat').value + ')<br />' + attr.getNamedItem('coDriver').value + '&nbsp;(' + attr.getNamedItem('coNat').value + ')',
			attr.getNamedItem('car').value,
			attr.getNamedItem('cls').value,
			attr.getNamedItem('pri').value
		);
		
		for (var j = 0; j < d.length; j++) {
			td = document.createElement('td');
			td.className = 'col' + j.toString();
			td.innerHTML = d[j];
			tr.appendChild(td);
		}
		
		tbody.appendChild(tr);
	}
	table = document.createElement('table');
	table.className = 'entrylist';
	table.appendChild(tbody);
	container.appendChild(table);
	
}var pageTime = new Date();
var pageTimer = setInterval('pageTimeout()', 1000);

function pageTimeout() {
	var now = new Date();
	if (pageTime.getTime() / 1000 < now.getTime() / 1000 - 600) {
		for (var i = 0; i < gaxRequests.length; i++) {
			gaxRequests[i].abort();
			clearInterval(currentTimer);
		}
		gaxRequests = new Array();
		setAction(currentAction);
		gaxCall('stageList');
	}
}

if (location.search == '?debug') {
	window.open ('/debug.html', "debugWindow");
}


