//keeping all objects inside one class emulates namespaces, which prevents name collisions.

//helper class
helper={
	//cross-browser ataching events to elements method
	addLoadEvent:function(func){
		var oldOnLoad = window.onload;
		if(typeof window.onload != 'function')
		{
			window.onload = func;
		}
		else
		{
			window.onload = function(){
				oldOnLoad();
				func();
			}
		}
	},
	
	addEvent:function(elm, evType, fn, useCapture){
		if(elm)
		{
			if (elm.addEventListener)
			{
				elm.addEventListener(evType, fn, useCapture);
				return true;
			} 
			else if (elm.attachEvent) {
				var r = elm.attachEvent('on' + evType, fn);
				return r;
			} else {
				elm['on' + evType] = fn;
			}
		}
	},
	
	cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
			return;
		}
		if (e){
			e.stopPropagation();
			e.preventDefault();
		}
	},
	
	getTarget:function(e){
		//var target = window.event ? window.event.srcElement : e ? e.target : null;
		var target = window.event ? window.event.srcElement : e ? e.target : null;
		if (!target){return false;}
		//if (target.nodeName.toLowerCase() != 'a'){target = target.parentNode;}
		return target;
	},
	
	getScrollingPosition:function()
	{
		var position = [0, 0];
		
		if (typeof window.pageYOffset != "undefined")
		{
			position = [
				window.pageXOffset,
				window.pageYOffset
			];
		}
		
		else if (typeof document.documentElement.scrollTop != "undefined" && document.documentElement.scrollTop >0 )
		{
			position = [
				document.documentElement.scrollLeft,
				document.documentElement.scrollTop
			];
		}
		
		else if (typeof document.body.scrollTop != "undefined")
		{
			position = [
				document.body.scrollLeft,
				document.body.scrollTop
			];
		}
		
		return position;
		
	},
	
	getCursorPosition:function(e)
	{ 
		if (typeof e == "undefined") 
		{ 
			e = window.e; 
		} 

		var scrollingPosition = helper.getScrollingPosition(); 

		var cursorPosition = [0, 0]; 

		if (typeof e.pageX != "undefined" && typeof e.x != "undefined") 
		{
			cursorPosition[0] = e.pageX;
			cursorPosition[1] = e.pageY;
		}
		else
		{
			cursorPosition[0] = e.clientX + scrollingPosition[0]; 
			cursorPosition[1] = e.clientY + scrollingPosition[1]; 
		}
		
		return cursorPosition;
	},
	
	getViewportSize:function()
	{
		var size = [0, 0];
		if ( typeof window.innerWidth != "undefined")
		{
			size = [
				window.innerWidth,
				window.innerHeight
			];
		}
		else if (typeof document.documentElement != "undefined" && typeof document.documentElement.clientWidth != "undefined" && document.documentElement.clientWidth != 0)
		{
			size = [
				document.documentElement.clientWidth,
				document.documentElement.clientHeight
			];
		}
		else
		{
			size = [
				document.getElementsByTagName("body")[0].clientWidth,
				document.getElementsByTagName("body")[0].clientHeight,
			];
		}
		
		return size;
	}
}