// -----------------------------------------------
//               EventObject
//------------------------------------------------

EventObject = function(obj) {
	if (typeof obj == 'object') return EventObject.extend(obj);
	else return;
};

EventObject.eventHandlerCount = 0;

EventObject.extend = function(obj) {
	if (typeof obj != 'object') return null;
	
	obj.invokeEvent = EventObject.prototype.invokeEvent;
	obj.addEventHandler = EventObject.prototype.addEventHandler;
	obj.removeEventHandler = EventObject.prototype.removeEventHandler;
	obj.isEventObject = true;

	return obj;	
};

EventObject.prototype.invokeEvent = function(evt) {
	if (typeof evt == 'string') {
		evt = { type: evt };
	};

	if (this.eventHandlers && this.eventHandlers[evt.type]) {
		var h = this.eventHandlers[evt.type];
		for (var methodName in h) {
			this[methodName](evt);
		}
	};
	if (evt.bubble && this.getParent && this.getParent()) {
		this.getParent().invokeEvent(evt);
	};
};
EventObject.prototype.addEventHandler = function(eventType, method) {
	if (typeof method != 'function') {
		if (SimpleLib.verbose) SimpleLib.msg("LyrObj.addEventHandler:\n\tCan't add: Method is not a function");
		return;
	};
	// create arrays as needed
	if (!this.eventHandlers) this.eventHandlers = [];
	if (!this.eventHandlers[eventType]) this.eventHandlers[eventType] = [];
	
	var methodName = '_on' + eventType + '_' + EventObject.eventHandlerCount++;
	method.eventType = eventType;
	this[methodName] = this.eventHandlers[eventType][methodName] = method;
};
EventObject.prototype.removeEventHandler = function(method) {
	if (this.eventHandlers && this.eventHandlers[method.eventType])	{
		var h = this.eventHandlers[method.eventType];
		for (var name in h) {
			if (h[name] == method) {
				delete h[name];
				return;
			};
		};
	};
};
