EventDispatcher = function()
{
	var m_arListeners = new Array();
	
	return {
		
		addListener : function(strName, fnCallback)
		{
			m_arListeners.push({name: strName, callback: fnCallback});
		},
		
		removeListener : function(strName, fnCallback)
		{
			var iPos = -1;
			var i;
			
			for (i = 0; i < m_arListeners.length; i++)
			{
				if (m_arListeners[i] == {name: strName, callback: fnCallback})
				{
					iPos = i;
					break;
				};
			};
			
			if (iPos > -1)
			{
				m_arListeners.splice(iPos, 1);
			};
		},
		
		removeAllListeners : function(strName)
		{
			var oListener;
			var iPos = -1;
			var i;
			
			for (i = m_arListeners.length - 1; i > -1; i--)
			{
				oListener = m_arListeners[i];
				
				if (oListener.name == strName)
				{
					m_arListeners.splice(i, 1);
				};
			};
		},
		
		dispatch : function(strName)
		{
			var i;
			
			for (i = 0; i < m_arListeners.length; i++)
			{
				if (m_arListeners[i].name == strName)
				{
					m_arListeners[i].callback();
				};
			};
		}
		
	};
}();
