/*
Events 1.3
January 31, 2008

Creative Commons Attribution 2.0 License
http://creativecommons.org/licenses/by/2.0/

This is a variation of the addEvent script written by Dean Edwards (dean.edwards.name).
*/

if (!events)
{
	var events =
	{
		nEventID: 1,

		add: function(ndElement, sType, fnHandler)
		{
			if (!fnHandler.$$nEventID) fnHandler.$$nEventID = this.nEventID++;
			if (ndElement.objEvents === undefined) ndElement.objEvents = {};

			var aHandlers = ndElement.objEvents[sType];
			if (!aHandlers)
			{
				aHandlers = ndElement.objEvents[sType] = {};
				if (ndElement['on' + sType]) aHandlers[0] = ndElement['on' + sType];
			}

			aHandlers[fnHandler.$$nEventID] = fnHandler;
			ndElement['on' + sType] = this.handle;

			return true;
		},

		remove: function(ndElement, sType, fnHandler)
		{
			if (ndElement.objEvents && ndElement.objEvents[sType]) delete ndElement.objEvents[sType][fnHandler.$$nEventID];

			return true;
		},

		exists: function(ndElement, sType, fnHandler)
		{
			return (ndElement.objEvents && ndElement.objEvents[sType] && ndElement.objEvents[sType][fnHandler.$$nEventID]);
		},

		handle: function(e)
		{
			e = e || events.fix(event);

			var bReturn = true, aHandlers = this.objEvents[e.type];
			for (var nIndex in aHandlers)
			{
				this.$$handle = aHandlers[nIndex];
				if (this.$$handle(e) === false) bReturn = false;
			}

			return bReturn;
		},

		fix: function(e)
		{
			e.preventDefault = this.fix.preventDefault;
			e.stopPropagation = this.fix.stopPropagation;

			return e;
		},

		cancel: function(e)
		{
			e.preventDefault();
			e.stopPropagation();

			return false;
		},

		getposition: function(e)
		{
			e = e || events.fix(event);

			return ({'x' : (e.offsetX ? e.offsetX : (e.pageX ? e.pageX - e.target.offsetLeft : 0)), 'y' : (e.offsetY ? e.offsetY : (e.pageY ? e.pageY - e.target.offsetTop : 0))});
		}
	};

	events.fix.preventDefault = function()
	{
		this.returnValue = false;

		return true;
	}

	events.fix.stopPropagation = function()
	{
		this.cancelBubble = true;

		return true;
	}
}