function EventDelegate()
{
	this.eventListeners = [];
}

// public void addEventListener(Function eventListener);
EventDelegate.prototype.addEventListener = function(listener)
{
	if(!listener)
	{
		throw new Error("EventDelegate.addEventListener() - parameter 'listener' cannot be null");
	} else
	{
		this.eventListeners.push(listener);
	}
};

// void removeEventListener(Function eventListener)
EventDelegate.prototype.removeEventListener = function(listener)
{
	for(var i = 0; i < this.eventListeners.length; i++)
	{
		if(this.eventListeners[i] == listener)
		{
			this.eventListeners.splice(i, 1);
			break;
		}
	}
}

// void fireEvent(Function func);
EventDelegate.prototype.fireEvent = function(source /*, args.../*/)
{
	for(var i = 0; i < this.eventListeners.length; i++)
	{
		try
		{
			this.eventListeners[i].apply(null, arguments);
		} catch(e)
		{
			Log.warning("An event listener threw an error", e);
		}
	}
}

EventDelegate.prototype.toString = function()
{
	return "EventDelegate [listeners = " + this.eventListeners + "]";
}
