/*
	event library
	classes that manage event listener creation, event listener registration and event invocation; event-invoking classes should inherit from EventManager
	2000-11-03 Joe Walp <walpj@usa.net>
	Copyright (C) 2000 Jay R. Smith Mfg Co.
	Distributed under the GNU Lesser General Public License.

-	dependencies{}
*/

EventManager = function (eventIds)
{if(arguments.length>0){
	var i

	this.lists = new Object()
	this.listeners = new Array()
	for (i = eventIds.length - 1; i >= 0; i--) {
		this.lists[eventIds[i]] = new Array()
	}
};}
pEM = EventManager.prototype

//* methods {
pEM.addEventListener = function (listener) {
	var list = this.lists[listener.eventId]
	var listenerId = this.listeners.length

	listener.enabled = true
	this.listeners[listenerId] = listener
	list[list.length] = listener
	return listenerId
}

//* inefficient implementation if many events are removed
pEM.removeEventListener = function (listenerId) {
	this.listeners[listenerId].enabled = false
}

pEM.invokeEvent = function (eventId, evt) {
	var returnValue = true
	var list = this.lists[eventId]
	var i, listener

	for (i = list.length - 1; (i >= 0) && (returnValue); i--) {
		listener = list[i]
		if (listener.enabled) {
			returnValue = returnValue && listener.invoke(evt)
		}
	}
	return returnValue
}
// * methods }

EventFunctionListener = function (eventId, func, arg)
{if(arguments.length>0){
	this.eventId = eventId
	this.func = func
	this.arg = arg
	this.enabled = false
	this.invoke = function (evt) { return this.func(evt, this.arg) }
};}

EventMethodListener = function (eventId, object, methodIdentStr, arg)
{if(arguments.length>0){
	this.eventId = eventId
	this.object = object
	this.arg = arg
	this.enabled = false
	this.invoke = function (evt) { return eval("this.object." +
				methodIdentStr + "(evt, this.arg)") }
};}

