/*
 * 具有对事件添加删除的基对象(2009.2.11)
 */
var EventObject = function() {
	// 允许的所有事件名称
	this.allowEvents = [];
	// 所有事件句柄
	this.eventHandlers = {};
}

EventObject.prototype = {
	
	getEventHandlers	:	function(eventName) {
		return this.eventHandlers && this.eventHandlers[eventName];
	},
	// 添加事件侦听
	attachEvent			:	function(eventName, eventHandler) {
		// 检测事件名是否存在		
		if(!this.hasEvent(eventName)) {
			return;
		}
		
		// 检测事件函数
		//if(!(eventHandler && (eventHandler instanceof Function))) {
		if(!(eventHandler && typeof(eventHandler) == 'function')) {
			return;
		}
		
		// 当前事件的所有触发函数
		var currentEventHandlers = this.getEventHandlers(eventName);
		
		if(!currentEventHandlers) {
			this.eventHandlers[eventName] = [];
		}
		
		this.eventHandlers[eventName].push(eventHandler);
	},
	// 删除指定的事件侦听
	detachEvent			:	function(eventName, eventHandler) {
		// 当前事件的所有触发函数
		var currentEventHandlers = this.getEventHandlers(eventName);
		
		if(!currentEventHandlers) {
			return;
		}
		
		var detachIndex = -1;
		
		jQuery(currentEventHandlers).each(function(index, item){
			if(this == eventHandler) {
				detachIndex = index;
			}
		});
		
		currentEventHandlers.splice(detachIndex, 1);
	},
	// 删除所有的事件侦听
	clearEvent			:	function(eventName) {
		// 当前事件的所有触发函数
		var currentEventHandlers = this.getEventHandlers(eventName);
		
		if(!currentEventHandlers) {
			return;
		}
		
		currentEventHandlers.length = 0;
	},
	// 检测事件名是否存在
	hasEvent			:	function(eventName) {
		for(var i = 0; i < this.allowEvents.length; i++) {
			if(this.allowEvents[i] == eventName) {
				return true;
			}
		}
		
		return false;
	},
	// 触发事件
	fireEvent		:	function(eventName, args) {
		
		var eventHandlers = this.getEventHandlers(eventName);
		
		if(!eventHandlers) {
			return;
		}
		
		var instance = this;
		
		jQuery(eventHandlers).each(function(){
			this.apply(instance, args || []);
		});
	}
}
