/**
 * (c) 2005 Primary Brokers S.A. - http://www.primary.com.ar/
 * Version 2
 */
function EventHandler (){
	this.debug=0;
	this.listeners = new Array();
	this.addListener=function(listener){
		if (this.containsListener(listener)) {
			this.log("addListener: "+ listener + " Ya esta agregado!");
			return;
		}
		this.listeners.push(listener);
		this.log("addListener:  " + this.getObjId(listener));
		this.log("addListener. listeners.length:  " + this.listeners.length);
	};
	
	this.getObjId=function(obj) {
		if (obj.name) {
			return "name: " + obj.name;
		} else if (obj.id) {
			return "id: " + obj.id;
		} else {
			return obj;
		} 
	};

	this.updateListeners=function(event) {
		for (i in this.listeners) {
			var l = this.listeners[i];
			try {
				this.log("updateListener " + i + ": " + this.getObjId(l));
				l.onData(event);
			} catch(err) {
				if (l != null) {
					this.log("ERROR listener id="+this.getObjId(l)+", err="+err);
				} else {
					this.log("ERROR listener(null)="+l+", err="+err);
				}
				this.removeListener(l);
			}
		}
		this.log("updateListeners: Todos los listeners actualizados");
	};

	this.onData=function(event) {
		this.log("onData: " + event);
		this.updateListeners(event);
	};
	
	this.log=function(msg) {
		if (this.debug==1){
			pstatus("EventHandler: " + msg);
		}
	};
		
	this.containsListener=function(obj) {
		for (var l in this.listeners) {
			if (this.listeners[l]==obj) {
				return true;
			}
		}
		return false;
	};
	this.removeListener=function(obj) {
		try {
			var nlist = new Array();
			for (l in this.listeners) {
				var lis=this.listeners[l];
				if (lis !=null && lis != obj) {
					nlist.push(lis);
				}
			}
			this.listeners=nlist;
		} catch (err) {
			this.log("ERROR: removeListener. : " + err);
		}
		this.log("removeListener. listeners.length:  " + this.listeners.length);
	};
}


