/*
 Events handlers implementation
 */
function ThEvents()
{
}
function ThEvents( element )
{
 	this._element = element;
 	this._events = new Array();
}
ThEvents.prototype.add =  function( element,type, func )
{
	this._element = element;
	if ( this._element.addEventListener)
	{
		this._element.addEventListener( type, func, false );
		document.addEventListener( type, func, false );
	}
	else if ( this._element.attachEvent )
	{
		if (!this._events)
		{
			this._events = new Array();
		}
		if (!this._events[type])
		{
			this._events[type] = new Array();
		}
		
		var f = function() { func.apply( this._element, new Array()) }
		var fd = function() { func.apply( document, new Array()) }
		this._events[type][func] = f;
		this._element.attachEvent('on' + type, f);
		document.attachEvent('on' + type, fd);
	}
}

ThEvents.prototype.remove = function ( element,type, func )
{
	
	this._element = element;
	if (this._element.removeEventListener) 
	{
		this._element.removeEventListener(type, func, false);
		//document.removeEventListener(type, func, false);
	}
	else if (this._element.detachEvent) 
	{
		if (this._events 
				&& this._events[type] 
				&& this._events[type][func]) 
		{
	
			this._element.detachEvent('on' + type,this._events[type][func]);
			//document.detachEvent('on' + type,this._events[type][func]);
		}
	} 
}

ThEvents.prototype.get = function ( event )
{
	if (!event) 
	{
		event = window.event;
	}
	if (event != null)
	{
		if (event.target != null)
		{
			if (event.target.nodeType == 3)
			{
				event.target = event.target.parentNode;
				
			}
			
		}
		else if (event.srcElement != null)
		{
			event.target = event.srcElement;
		}
		event._name = event.target.name;
	}
	return event;
}