/**
 *	EventListener functions
 *	---------------------------------------------
 *	Author - Peter Nederlof
 *  Hacker - Martin Reurings
 *  Updated: Added a hack to cancel click events in Safari 
 */

//addEventHandler
function addEventHandler(element, type, handler) {
	if (element==null) return false;
	try {
		element.addEventListener(type, handler, false);
	} catch(inferiorBrowserException) {
		if(element.attachEvent) 
			element.attachEvent('on'+type, handler);
		else 
			element['on'+type] = handler;
	}
	return [element, type, handler];
}

function removeEventHandler(o, eventName, handler) {
	if (o.removeEventListener) {
		o.removeEventListener(eventName, handler, true);
	} else {
		o.detachEvent("on"+eventName, handler);
	}
}

function isSafari() {
	return sRE.test(navigator.userAgent);
}
var sRE = /safari/i;

function cancelEvent(e) {
	try {
		e.preventDefault();
		e.stopPropagation();
	} catch (someException) {
		e.cancelBubble = true;
		e.returnValue = false;
	}
	if (isSafari()) {
		var target = e.target;
		while (target.nodeType > 1) target = target.parentNode;
	 	if (/^a$/i.test(target.nodeName)) {
	 		target.onclick = function() {
				return false;
			};
		}
	}
	return false;
}

var loadInit = addEventHandler(window, "load", function(e) {
	onloadHandler.run();
	removeEventHandler(window, "load", loadInit); //Cleaning itsself up
});

var onloadHandler = {
	handlers:new Array(),
	run:function() {
		for (var i=0; i < this.handlers.length; i++) {
			if (this.handlers[i]!=null) this.handlers[i]();
		}
	},
	add:function(handler){
		var id = this.handlers.length
		this.handlers[id] = handler;
		return id;
	}
}

onloadHandler.add(function() {
	if (document.getElementById) document.body.className += " DOMenabled";
});


var unloadInit = addEventHandler(window, "unload", function(){
	onunloadHandler.run();
	removeEventHandler(window, "unload", unloadInit); //Cleaning itsself up
});

var onunloadHandler = {
	handlers:new Array(),
	run:function() {
		for (var i=0; i < this.handlers.length; i++) {
			if (this.handlers[i]!=null) this.handlers[i]();
		}
	},
	add:function(handler){
		var id = this.handlers.length
		this.handlers[id] = handler;
		return id;
	}
}