/* --------------------------------------------------------------------*\
*                                                                       *
*  This file is a part of ArtWeb effects manager, created by ArtWeb OÜ. *
*                                                                       *
*  Any unauthorized use of this file is strictly prohibited.            *
*  For all questions concerning the usage of this code please send an   * 
*  email to info@art-web.ee or contact us on http://www.art-web.ee      *
*                                                                       *
/* --------------------------------------------------------------------*/

function getEventTarget(event) 
{
	var eventElement = null;
	if (event.target)
	{
		eventElement = event.target;
	}
	else if (event.srcElement)
	{
		eventElement = event.srcElement;
	}
	return eventElement;
}
function addHandler(object, event, handler) 
{
	if (object == null || typeof object != 'object')
	{
		return false;
	}
	if (handler == null || typeof handler != 'function')
	{
		return false;
	}
	if (object.addEventListener)
	{
		if (event === 'mouseenter')
		{ 
			object.addEventListener('mouseover', mouseEnter(handler), false); 
		}
		else if (event === 'mouseleave')
		{
			object.addEventListener('mouseout', mouseEnter(handler), false); 
		}
		else if (event == 'mousewheel') 
		{
			object.addEventListener('DOMMouseScroll', handler, false);
		}
		object.addEventListener(event, handler, false);
	} 
	else if (object.attachEvent) 
	{
		object.attachEvent('on' + event, handler);
	}
	else if (event === 'readystatechange') //this is for Internet Explorer, not supporting attachEvent on XMLHTTPRequest 
	{ 
		object.onreadystatechange = handler;
	}
	return true;
}
function mouseEnter(handler)
{
	return function(event)
	{
		var relTarget = event.relatedTarget;
		if (this === relTarget || isAChildOf(this, relTarget))
		{
			return; 
		}
		handler.call(this, event);
	}
}
function isAChildOf(_parent, _child)
{
	if (_parent === _child) 
	{ 
		return false; 
	}
	while (_child && _child !== _parent)
	{ 
		_child = _child.parentNode; 
	}
	
	return _child === _parent;
}
function fireEvent(object, eventName)
{
	if (document.createEventObject)
	{
		var eventObject = document.createEventObject();
		return object.fireEvent('on'+eventName, eventObject)
	}
	else
	{
		var eventObject = document.createEvent("HTMLEvents");
		eventObject.initEvent(eventName, true, true);
		return !object.dispatchEvent(eventObject);
	}
}
function removeHandler(object, event, handler) 
{
	if (object.removeEventListener) 
	{
		if (event == 'mousewheel') 
		{
			object.removeEventListener('DOMMouseScroll', handler, false);
		}
		object.removeEventListener(event, handler, false);
	}
	else if (object.detachEvent) 
	{
		object.detachEvent('on' + event, handler);
	}
}
function cancelBubbling(event)
{
	event.cancelBubble = true;
	if (event.stopPropagation) 
	{
		event.stopPropagation();
	}
}
function preventDefaultAction(event)
{
	if (event.preventDefault)
	{
		event.preventDefault();
	}
	event.returnValue = false;
}

