
// necessary for XHTML with Gecko.
// http://simon.incutio.com/archive/2003/06/15/javascriptWithXML
function createElement(element) {
	if (typeof document.createElementNS != "undefined") {
		return document.createElementNS("http://www.w3.org/1999/xhtml", element);
	}
	if (typeof document.createElement != "undefined") {
		return document.createElement(element);
	}
	return false;
}

function insertJavaScript(srcURL) {
	var head = document.getElementsByTagName("head").item(0);
	var scriptElement = document.createElement('script');
	scriptElement.src = srcURL;
	scriptElement.type = "text/javascript";
	head.appendChild(scriptElement);
}

var waitingPageview;
var pageTracker = null;

function isAnalyticsInitialized() {
	if (window._gat && (typeof _gat != "undefined")
			&& _gat._getTracker 
			&& (typeof _gat._getTracker != "undefined")) {
		return true;
	} else {
		return false;
	}
}

function myTrackPageview(url) {
	if (pageTracker != null && isAnalyticsInitialized()) {
		pageTracker._trackPageview(url);
	} else {
		// save the URL to be set when analytics is initialized
		waitingPageview = url;
	}
}

function initializeAnalyticsWhenReady() {
	if (!isAnalyticsInitialized()) {
		setTimeout("initializeAnalyticsWhenReady()", 100);
	} else {
		pageTracker = _gat._getTracker("UA-5120535-1");
		pageTracker._initData();
		pageTracker._trackPageview();
		if (waitingPageview) {
			pageTracker._trackPageview(waitingPageview);
		}
	}
}

function initializeAnalytics() {
	insertJavaScript("http://www.google-analytics.com/ga.js");
	initializeAnalyticsWhenReady();
}

var additionalOnDOMLoadedFunctions = new Array();

function onDOMLoaded() {
   // quit if this function has already been called
   if (arguments.callee.done) return;
   // flag this function so we don't do the same thing twice
   arguments.callee.done = true;
   // do the stuff we want to do when page loaded
   for (var i = 0, n = additionalOnDOMLoadedFunctions.length; i < n; i++) {
	   additionalOnDOMLoadedFunctions[i]();
   }
   initializeAnalytics();
}

function addOnDOMLoadedFunction(fnToAdd) {
	additionalOnDOMLoadedFunctions[additionalOnDOMLoadedFunctions.length] =
		fnToAdd;
}

// http://www.openjs.com/articles/prevent_default_action/
function stopEvent(e) {
	if (!e) var e = window.event;
	//e.cancelBubble is supported by IE - this will kill the bubbling process.
	e.cancelBubble = true;
	e.returnValue = false;
	//e.stopPropagation works only in Firefox.
	if (e.stopPropagation) {
		e.stopPropagation();
		e.preventDefault();
	}
	return false;
}

function newTrackFunction(newHref, oldOnClick) {
	return function(e) {
		stopEvent(e);
		if (oldOnClick) {
			oldOnClick();
		}
		document.location.href = '/o/' + newHref;
		return false;
	};
}

function trackSetup() {
	var map = new Object();
	map['http://www.xl.com/'] = 'xl';
	map['http://www.virgin-atlantic.com/'] = 'virgin-atlantic';
	map['http://www.britishairways.com/travel/home/public/en_gb'] = 'british-airways';
	var as = document.getElementsByTagName('a');
	for (var i = 0, n = as.length; i < n; i++) {
		if (map[as[i].href]) {
			var a = as[i];
			a.onclick = newTrackFunction(map[a.href], a.onclick);
		}
	}
}

function addTrackSetup() {
	addOnDOMLoadedFunction(trackSetup);
}


/* Following is the code to set off the onDOMLoaded method after DOM has loaded,
 * or in the window.onload event if no browser specific hacks can be used to get
 * it to run earlier.
 */

/* for Mozilla */
if (document.addEventListener) {
   document.addEventListener("DOMContentLoaded", onDOMLoaded, null);
}

/* for Internet Explorer - conditional compilation */
/*@cc_on @*/
/*@if (@_win32)
   document.write("<script defer src=\"/template/ie_onload.js\"><"+"/script>");
/*@end @*/

/* for other browsers */
window.onload = onDOMLoaded;
