/*
*	Interface for objects that can fire events and have event listeners
*/

Class.createNameSpace('ps.util.event');
ps.util.event.Listenable = new Class({
	
	__eventbindings : null,
	
	addEvent : function(ev, fn){
		if (this.__eventbindings == null) this.__eventbindings = {};
		if (!$type(this.__eventbindings[ev])) this.__eventbindings[ev] = [];
		this.__eventbindings[ev].push(fn);
	},
	
	removeEvent : function(ev,fn){
		if ((this.__eventbindings == null) || (!$type(this.__eventbindings[ev]))) return;
		this.__eventbindings[ev].remove(fn);
	},
	
	fireEvent : function(ev,args){
		if ((this.__eventbindings == null) || ($type(this.__eventbindings[ev]) != 'array')) return;
		if ($type(args) != 'array') args = [args];
		this.__eventbindings[ev].each(function(i){(i.pass(args))();});
	}
	
});