function Event() {
   this.listeners = new Array();

   this.trigger = __trigger;
   this.subscribe = __subscribe;
   this.unsubscribe = __unsubscribe;   
}

function __subscribe(listener) {
   this.listeners.push(listener);
}

function __unsubscribe(listener) {
	var list = new Array();
	for (var i = 0; i < this.listeners.length; i++) {
		if (this.listeners[i] != listener) {
			list.push(this.listeners[i]);
		}
	}
	this.listeners = list;
}

function __trigger(params) {
   for (var l = 0; l < this.listeners.length; l++) {
		//alert(sprintf('%d of %d', l + 1, this.listeners.length));
		try {
			this.listeners[l](params);
		} catch(e) { }
   }
}
