function EventDispatcher()
{

}

EventDispatcher.prototype = new Object();

EventDispatcher.prototype.listener = new Array();
EventDispatcher.prototype.listenerCount = 0;


EventDispatcher.prototype.addListener = function(type, callback)
{
	if(!(this.listener[type] instanceof Array))
		this.listener[type] = new Array();
	
	for(i=0; i<this.listener[type].length; i++)
	{
		if(this.listener[type][i]==callback)
		{
			throw "A function "+callback.name+" is already added as a listener";
			return false;
		}
	}
	
	this.listener[type].push(callback);
	this.listenerCount++;
	
	return true;
}

EventDispatcher.prototype.getListenerCount = function()
{
	return this.listenerCount;
}

EventDispatcher.prototype.removeListener = function(type, callback)
{
	for(i=0; i<this.listener[type].length; i++)
	{
		if(this.listener[type][i]==callback)
		{
			this.listener[type].splice(i, 1);
			break;
		}
	}
	this.listenerCount--;
}

EventDispatcher.prototype.removeAllListener = function(type)
{
	for(i=0; i<this.listener[type].length; i++)
	{
		this.listener[type].splice(i, 1);
		this.listenerCount--;
	}
	
}

EventDispatcher.prototype.dispatchEvent = function(type, event)
{
	if(!(this.listener[type] instanceof Array) || this.listener[type].length==0)
		return false;
	
	for(var i=0; i<this.listener[type].length; i++)
		this.listener[type][i].call(this.listener[type][i], event);
	
	return true;
}