////////////////////////////////////////////////////
// PEventManager
//
// Kamap's event handling has bad signatures... 
// let's use our own.
////////////////////////////////////////////////////
PEventManager = function() {
	this.listeners = {};
	this.contexts = {};
}
PEventManager.prototype.addListener = function(eventId, f, context) {
	if (!f) throw 'No listener function provided';

	var eid = new String(eventId);
	if (this.listeners[eid]) {
		this.listeners[eid].push(f);
		this.contexts[eid].push(context||window);
	}else{ 
		this.listeners[eid] = [f];
		this.contexts[eid] = [context||window]
	}
}
PEventManager.prototype.removeListener = function(eventId, f) {
	var eid = new String(eventId);
	var listeners = this.listeners[eid];
	var contexts = this.contexts[eid];
	var l = listeners ? listeners.length : 0;
	for (var i=0; i<l; i++) {
		if (listeners[i] == f){
			listeners.splice(i, 1);
			contexts.splice(i,1);
		}
	}
}
PEventManager.prototype.triggerListeners = function(eventId) {
	// make array of args to pass to listener
	var passables = [];
	var l = arguments.length;
	for (var i=1; i<l; i++) {
		passables.push(arguments[i]);
	}
	
	// call each listener with args
	var eid = new String(eventId);
	var listeners = this.listeners[eid];
	var contexts = this.contexts[eid];
	l = listeners ? listeners.length : 0;
	for (var i=0; i<l; i++) {
		listeners[i].apply(contexts[i], passables);
	}
}
