var EventDispatcher = new Object();
EventDispatcher.initialize = function(obj) {
	obj.__listeners = new Object();
	obj.addListener = this.addListener;
	obj.removeListener = this.removeListener;
	obj.dispatchEvent = this.dispatchEvent;
}
EventDispatcher.addListener = function(evtName, target) {
	var tbl = this.__listeners[evtName];
	if (!tbl) this.__listeners[evtName]=tbl= new Array();
	for (var i=0; i<tbl.length; i++) if (tbl[i] == target) return;
	tbl.push(target);
}
EventDispatcher.removeListener = function(evtName, target) {
	var tbl = this.__listeners[evtName];if (!tbl) return;
	for (var i=0; i<tbl.length; i++) {
		if (tbl[i] == target) {tbl.splice(i, 1);break;}
	}
}
EventDispatcher.dispatchEvent = function(evtObj) {
	evtObj.target = this;var tbl, i, obj;
	if (!(tbl = this.__listeners[evtObj.type])) return;
	for (i=0; i<tbl.length; i++) {
		if (typeof(obj = tbl[i]) == "function") obj(evtObj);
		else if (typeof(obj[evtObj.type]) == "function") obj[evtObj.type](evtObj);
	}
}

