
/* Against quirksmode.com */

// if (self != top) {
// 	top.location.replace(location.href);
// }

/* QUIRKSMODE JAVASCRIPT */

var blogs = ['/blog/','/bugreports/','/elsewhere/'];
var archivedText = 'You\'re looking at outdated content that is no longer maintained. Use with care.';

var advancedJavaScriptSupport = createXMLHTTPObject() && document.createElement && document.getElementsByTagName;

window.onload = function () {
	
	/* See if browser supports advanced interface */

	if (!advancedJavaScriptSupport) return;
	
	/* Miscellaneous */
	if (Preferences.siteNavPos && Preferences.siteNavPos != 'fixed') {
		document.getElementById('header').style.position = Preferences.siteNavPos;
	}
	else {
		setMenuOffset.initialPos = getStyle('header','top');
		window.onscroll = document.documentElement.onscroll = setMenuOffset;
		setMenuOffset();
		/* in Moz 1.7.12/FF 1.5 window.onscroll is wiped when you use the mouse wheel while 
		the pointer is NOT above a true page element (ie. when it is above the naked documentElement)
		 ... or something ...
		Of course Safari doesn't accept document.documentElement.onscroll; Op and IE 7 do */
	}

	/* Initialise blog and bilingual scripts, if they're there */

	if (self.initBlogs)
		initBlogs();
	
	
	/* Initialise example scripts on content pages in all browsers */
	
	if (self.init)
		init();

}	

function setMenuOffset() { 
	var header = document.getElementById('header');
	if (!header) return;
	var currentOffset = document.documentElement.scrollTop || document.body.scrollTop; // body for Safari
	var startPos = parseInt(setMenuOffset.initialPos) || 190;
	var desiredOffset = 280 - currentOffset;
	if (desiredOffset < 10)
		desiredOffset = 10;
	if (desiredOffset != parseInt(header.style.top)) 
		header.style.top = desiredOffset + 'px';

	//var currentLeftOffset = document.documentElement.scrollLeft || document.body.scrollLeft; // body for Safari
	//if (currentLeftOffset != - parseInt(header.style.left))
	if (document.body){
		var larg = (document.body.clientWidth);
	}
	else{
		var larg = (window.innerWidth);
	}
	currentLeftOffset = (((larg) - 1000)/2) + 7; 
	if(currentLeftOffset < 7){currentLeftOffset = 7;}
	header.style.left = + currentLeftOffset + 'px';
}
/***************************************/
/*                                     */
/*             UTILITIES               */
/*                                     */
/***************************************/


/* XMLHTTP */

function sendRequest(url,callback,postData) {
	var req = createXMLHTTPObject();
	if (!req) return;
	var method = (postData) ? "POST" : "GET";
	req.open(method,url,true);
	req.setRequestHeader('User-Agent','XMLHTTP/1.0');
	if (postData)
		req.setRequestHeader('Content-type','application/x-www-form-urlencoded');
	req.onreadystatechange = function () {
		if (req.readyState != 4) return;
		if (req.status != 200 && req.status != 304) {
		//	alert('HTTP error ' + req.status);
			return;
		}
		callback(req);
	}
	if (req.readyState == 4) return;
	req.send(postData);
}

function XMLHttpFactories() {
	return [
		function () {return new XMLHttpRequest()},
		function () {return new ActiveXObject("Msxml2.XMLHTTP")},
		function () {return new ActiveXObject("Msxml3.XMLHTTP")},
		function () {return new ActiveXObject("Microsoft.XMLHTTP")}
	];
}

function createXMLHTTPObject() {
	var xmlhttp = false;
	var factories = XMLHttpFactories();
	for (var i=0;i<factories.length;i++) {
		try {
			xmlhttp = factories[i]();
		}
		catch (e) {
			continue;
		}
		break;
	}
	return xmlhttp;
}

/* COOKIES */

var Cookies = {
	init: function () {
		var allCookies = document.cookie.split('; ');
		for (var i=0;i<allCookies.length;i++) {
			var cookiePair = allCookies[i].split('=');
			this[cookiePair[0]] = cookiePair[1];
		}
	},
	create: function (name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
		this[name] = value;
	},
	erase: function (name) {
		this.create(name,'',-1);
		this[name] = undefined;
	}
};
Cookies.init();

/* INITIALISE PREFERENCES (needs cookies) */

var Preferences = {
	init: function () {
		if (!Cookies.sitePrefs) return;
		sitePrefs = Cookies.sitePrefs.split(',,');
		for (var i=0;i<sitePrefs.length;i++) {
			var oneSitePref = sitePrefs[i].split(':');
			this[oneSitePref[0]] = oneSitePref[1];
		}	
	}
};
Preferences.init();

/* GET STYLES */

function getStyle(el,styleProp) {
	var x = document.getElementById(el);
	if (x.currentStyle)
		var y = x.currentStyle[styleProp];
	else if (window.getComputedStyle)
		var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
	return y;
}

/* ULTRA-SIMPLE EVENT ADDING */

function addEventSimple(obj,evt,fn) {
	if (obj.addEventListener)
		obj.addEventListener(evt,fn,false);
	else if (obj.attachEvent)
		obj.attachEvent('on'+evt,fn);
}

function removeEventSimple(obj,evt,fn) {
	if (obj.removeEventListener)
		obj.removeEventListener(evt,fn,false);
	else if (obj.detachEvent)
		obj.detachEvent('on'+evt,fn);
}

/* TRANSFORMATION */

var transform = {
	object: undefined,
	init: function () {
		this.object = document.createElement('div');
	},
	DomToString: function (DOMTree) {			// gets documentFragment or other valid DOM tree
		this.object.innerHTML = '';
		this.object.appendChild(DOMTree.cloneNode(true));
		return this.object.innerHTML;			// returns string
	},
	StringToDom: function (string) {			// gets string
		this.object.innerHTML = string;
		var container = document.createDocumentFragment();
		var children = this.object.childNodes;
		for (var i=0;i<children.length;i++) {
			container.appendChild(children[i].cloneNode(true));
		}
		return container;				// returns documentFragment
	}
}
transform.init();
