component = function(name, parentObj) {
	this.name = name;
	this.parentObj = parentObj;
	
	this.handlersEvent = new Object();
	
	for (i in this) {
		if ( typeof(this[i]) != 'string' ) {
			this.parentObj[i] = this[i];
		}
        }
}

component.prototype = {
	setEventHandlerData : function(name, value) {
		if (this.parentObj.eventTarget.userData == null) { this.parentObj.eventTarget.userData = new Object(); }
		this.parentObj.eventTarget.userData[name] = value;
	},

	setEventHandler : function(eventName, value, obj) {
		if (this.handlersEvent[eventName] == null) { this.handlersEvent[eventName] = new Object(); }
				
		if (this.handlersEvent[eventName]['method'] != null) { 
			if (this.handlersEvent[eventName]['array'] == null) { 
				this.handlersEvent[eventName]['array'] = new Array();
				oTmp = new Object();
				oTmp['method'] = this.handlersEvent[eventName]['method'];
				if (this.handlersEvent[eventName]['object'] != null) { oTmp['object'] = this.handlersEvent[eventName]['object']; }
				this.handlersEvent[eventName]['array'].push(oTmp);
			}
			oTmp = new Object();
			oTmp['method'] = value;
			if (obj != null) { oTmp['object'] = obj; }
			
			if (this.existEvent(this.handlersEvent[eventName]['array'], oTmp)) { return; }
			
			this.handlersEvent[eventName]['array'].push(oTmp);
		}
		else {
			this.handlersEvent[eventName]['method'] = value;
			if (obj != null) { this.handlersEvent[eventName]['object'] = obj; }
		}
	},
	
	setExtarEvents : function(e, eventName) {
		if (!e) e = normalizeEvent(window.event);
		//alert(e);
		if (this.handlersEvent[eventName] == null) { return; }
		
		var eTmp = copyObj(e);
		eTmp.target = this.parentObj.eventTarget; eTmp.type = eventName;
		//eTmp = this.parentObj.eventTarget;
		
		if (this.handlersEvent[eventName]['array'] != null) {
			for (var i = 0; i < this.handlersEvent[eventName]['array'].length; i++) {
				oTmp = this.handlersEvent[eventName]['array'][i];
				this.execEvent(oTmp, eTmp);
			}
		}
		else {
			this.execEvent(this.handlersEvent[eventName], eTmp);
		}
	},
	
	execEvent : function(oTmp, e){
		if (oTmp['object'] != null) {
			var obj = oTmp['object']; obj[oTmp['method']](e);
		}
		else {
			oTmp['method'](e);
		}
	},
	
	existEvent : function(aTmp, oEvent) {
		for(var i=0;i<aTmp.length;i++){
			if (oEvent['method'] == aTmp[i]['method'] && oEvent['object'] == aTmp[i]['object'] ) { return true; }
		}
		return false;
	}
}

