//<script>

var Events = { 
	fixWindowWidth  : new Array(),
	fixWindowHeight : new Array(),

	addEvent : function (obj, type, fn) {
		if(!window._eventRecord)
			window._eventRecord = new Array;
		
		if(obj.addEventListener) {
			try {
				obj.addEventListener(type, fn, false);
				_eventRecord.push(arguments);
			}
			catch (o) {}
		}
		else if(document.addEventListener && obj == window)
			document.addEventListener(type, fn, false); // Kickstart Opera 7.54 and 7.23 Windows.
		else {
			if(!obj["_" + type])
				obj["_" + type] = new Array;
			
			_eventRecord[_eventRecord.length] = Array(obj, type, obj["_" + type][obj["_" + type].length] = obj[fn] = fn);
			
			obj["on" + type] = function() {
				var events = new Array();
				
				for(var i = 0; i < obj["_" + type].length; i++)
					events.push(obj[obj["_" + type][i]]);
				
				for(var i = 0; i < events.length; i++)
					events[i](window.event);
				
				events = null;
			};
		}
	},
	
	removeEvent : function (obj, type, fn) {
		if(obj.removeEventListener)
			obj.removeEventListener(type, fn, false);
		else {
			if(!obj["_" + type]) return;
			
			for(var i = 0; i < obj["_" + type].length; i++) {
				if(obj["_" + type][i] == obj[fn]) {
					for(var j = i; j < obj["_" + type].length - 1; j++) // Instead of splice method to allow IE5 users
						obj["_" + type][j] = obj["_" + type][j + 1];
					
					obj["_" + type].length += -1;
				}
			}
			
			if(obj["_" + type].length == 0)
				obj["on" + type] = "";
		}
	},
	
	setSelectionEnabled : function (target, bool) {
		if (typeof target.onselectstart!="undefined") //IE route
			target.onselectstart = function () { return bool };
		else if (typeof target.style.MozUserSelect != "undefined") //Firefox route
			target.style.MozUserSelect = (bool ? "" : "none");
		else //All other route (ie: Opera)
			target.onmousedown = function () { return bool };
	},
	
	checkTarget : function (pE, pObj) {
		if(pE && pE.relatedTarget) {
			var reltg = pE.relatedTarget;
			while (reltg != pObj && reltg.nodeName != 'HTML') 
				reltg = reltg.parentNode
			
			if (reltg == pObj) 
				return false;
				
			return true;
		}
	},
	
	getMouseButton : function (pButton) {
		var IEMButtons = [null, 0, 2, null, 1];
		var FFMButtons = [0, 1, 2];
		
		if(isBrowserVersion('msie'))
			return (IEMButtons[pButton] != null ? IEMButtons[pButton] : 0);
		else
			return FFMButtons[pButton];
	},
	
	setContextMenuEnabled : function (pElement, pBool) {
		if(!pElement)
			return false;
		
		pElement.oncontextmenu = function() {
			return pBool;
		}
	},
	
	fixResizeDimensions : function (pName) {
		var windowH = ((window.innerHeight) ? window.innerHeight : (document.documentElement.offsetHeight ? document.documentElement.offsetHeight : 0));
		var windowW = ((window.innerWidth) ? window.innerWidth : (document.documentElement.offsetWidth ? document.documentElement.offsetWidth : 0));
		
		if(typeof Events.fixWindowWidth[pName] == "undefined" || Events.fixWindowWidth[pName] == null)
			Events.fixWindowWidth[pName] = windowW;
		
		if(typeof Events.fixWindowHeight[pName] == "undefined" || Events.fixWindowHeight[pName] == null)
			Events.fixWindowHeight[pName] = windowH;
		
		if(Events.fixWindowWidth[pName] != windowW) {
			Events.fixWindowWidth[pName] = null;
			return 1; // Resized horizontal
		}
		else if(Events.fixWindowHeight[pName] != windowH) {
			Events.fixWindowHeight[pName] = null;
			return 2; // Resized vertival
		}
		else {
			Events.fixWindowWidth[pName] = windowW;
			Events.fixWindowHeight[pName] = windowH;
			return 0; // Not Resized
		}
	} 
}