/**
* @author kikko / http://kikko.fr
*/

var EventDispatcher = function() {
	this._events = {};
};
EventDispatcher.prototype = {
	addListener: function(eventName, callback, scope) {
		var events = this._events;
		var callbacks = events[eventName] = events[eventName] || [];
		callbacks.push({callback:callback, scope:scope});
	},
	dispatchEvent: function(eventName) {
		var callbacks = this._events[eventName];
		for (var i = 0, l = callbacks.length; i < l; i++) {
			callbacks[i].callback.apply(callbacks[i].scope, arguments);
		}
	},
	removeListener: function(eventName, callback) {
		var callbacks = this._events[eventName];
		for (var i = 0, l = callbacks.length; i < l; i++) {
			
			if(callback==callbacks[i].callback) {
				callbacks.splice(i, 1);
				if(callbacks.length>0) i--;
			}
		}
	}
};

function delegate(obj, func) { 
	return function() { func.apply(obj, arguments); } 
}
