
function Events()
{
	var events = this;
	var eventList = Array();


	this.getCount = function()
	{
		return eventList.length;
	}


	this.getByIndex = function(eIndex)
	{
		return eventList[eIndex];
	}


	this.add = function (target, event, handler)
	{
		if (!target || !event || !handler) { return }

		var eventProps = { eIndex: eventList.length, eTarget: target, eEvent: event, eHandler: handler };

		if (target.addEventListener)
		{
			target.addEventListener(event, handler, false);
		}
		else if (target.attachEvent)
		{
			target.attachEvent('on'+event, handler);
		}
		else
		{
			return;
		}

		eventList.push(eventProps);

		return eventProps;
	}

	this.remove = function (eventObj)
	{
		if (!eventObj) { return }

		if (eventObj.eTarget.removeEventListener)
		{
			eventObj.eTarget.removeEventListener(eventObj.eEvent, eventObj.eHandler, false);
		}
		else if (eventObj.eTarget.attachEvent)
		{
			eventObj.eTarget.detachEvent('on'+eventObj.eEvent, eventObj.eHandler);
		}

		eventList.splice(eventObj.eIndex, 1);

		var i;
		for (i = 0; i < eventList.length; i++)
		{
			eventList[i].eIndex = i;
		}
	}


	this.clearAll = function()
	{
		while (eventList.length > 0)
		{
			var eObj = eventList[0];
			events.remove(eObj);
		}
	}
}

var eventList = new Events();

function addListener(target, event, handler)
{
	return eventList.add(target, event, handler);
}

function removeListener(eventObj)
{
	eventList.remove(eventObj);
}
