ccEvent = {

	/*
	*	@name: addEvent(obj, evType, fn)
	*	@version: ---
	*	@author: Stuart Langridge, adaptado por Cristiano Carlos da Silva
	*	@param: obj => Node Object
	*	@param: evType => String
	*	@param: fn => Function Object
	*	@return: Boolean
	*	@description:
	*/
	addEvent: function(obj, evType, fn, ba){

		//alert('ogo: '+evType+' '+obj+' '+ba);
		
		//var obj = $(obj); // rárárá gostei - isso permite observar um evento de um id

		if (obj.addEventListener){
			obj.addEventListener(evType, fn, false);
			return true;
		}
		else if (obj.attachEvent){
			var r = obj.attachEvent("on"+evType, fn);
			return r;
		} 
		else {
		   return false;
		}
	},

	/*
	*	@name: removeEvent(obj, evType, fn)
	*	@version: 1.1
	*	@author: Andre Metzen
	*	@param: obj => Node Object
	*	@param: evType => String
	*	@param: fn => Function Object
	*	@return: Boolean
	*	@description:
	*/
	removeEvent: function(obj, evType, fn){
		
		if (obj.removeEventListener){
			obj.removeEventListener(evType, fn, true);
			return true;
		}
		else if (document.detachEvent){
			obj.detachEvent('on'+ evType, fn, true);
			return true;
		}		
	},

	/*
	*	@name: getSource(e)
	*	@version: ---
	*	@author: Elcio Ferreira
	*	@param: e => Event Object
	*	@return: void
	*	@description: Retorna o objeto no qual o evento foi realizado
	*/
	getSource: function(e){
		if(typeof e == 'undefined'){
			var e=window.event;
		}
		var source = typeof e.target != 'undefined' ? e.target : typeof e.srcElement != 'undefined' ? e.srcElement : true;
		if(source.nodeType == 3){
			source = source.parentNode;
		}
		return source;
	},

	formatEvent: function (oEvent){
		if (window.event) {
			oEvent = window.event;
			oEvent.charCode = (oEvent.type == "keypress") ? oEvent.keyCode : 0;

			if (oEvent.type == "mouseout") {
				oEvent.relatedTarget = oEvent.toElement;
			} 
			else if (oEvent.type == "mouseover") {
				oEvent.relatedTarget = oEvent.fromElement;
			}

			oEvent.preventDefault = function () {
				this.returnValue = false;
			};

			oEvent.stopPropagation = function () {
				this.cancelBubble = true;
			};
			//oEvent.target = oEvent.srcElement; // esse cara aqui nao ta pra habilitar pq da pau no opera
			oEvent.time = (new Date).getTime();		
		}
		return oEvent;
	},

	keyControls: function(oEvent){		
		/*
		No onkeypress esses casos tem o mesmo código no IE e Ópera
		[!]	33
		["]	34
		[#]	35
		[$]	36
		[%]	37
		[&]	38
		[']	39
		[(]	40
		[-]	45
		[.]	46
		[p]	112
		[q]	113
		[r]	114
		[s]	115
		[t]	116
		[u]	117
		[v]	118
		[w]	119
		[x]	120
		[y]	121
		[z]	122
		[{]	123
		*/
		if(oEvent.keyCode == 8 || /*backspace*/
			oEvent.keyCode == 9 || /*tab*/
			/*oEvent.keyCode == 13 ||enter*/
			oEvent.keyCode == 16 || /*shift*/
			oEvent.keyCode == 17 || /*ctrl*/
			oEvent.keyCode == 18 || /*alt*/
			oEvent.keyCode == 20 || /*caps lock*/
			oEvent.keyCode == 27 || /*esc*/
			oEvent.keyCode == 33 || /*page up*/
			oEvent.keyCode == 34 || /*page down*/
			oEvent.keyCode == 35 || /*end*/
			oEvent.keyCode == 36 || /*home*/
			oEvent.keyCode == 37 || /*left arrow*/
			oEvent.keyCode == 38 || /*up arrow*/
			oEvent.keyCode == 39 || /*right arrow*/
			oEvent.keyCode == 40 || /*down arrow*/
			oEvent.keyCode == 45 || /*insert*/
			oEvent.keyCode == 46 || /*delete*/
			oEvent.keyCode == 112 || /*F1*/
			oEvent.keyCode == 113 || /*F2*/
			oEvent.keyCode == 114 || /*F3*/
			oEvent.keyCode == 115 || /*F4*/
			oEvent.keyCode == 116 || /*F5*/
			oEvent.keyCode == 117 || /*F6*/
			oEvent.keyCode == 118 || /*F7*/
			oEvent.keyCode == 119 || /*F8*/
			oEvent.keyCode == 120 || /*F9*/
			oEvent.keyCode == 121 || /*F10*/
			oEvent.keyCode == 122 || /*F11*/
			oEvent.keyCode == 123 || /*F12*/
			oEvent.ctrlKey /*ctrl+?*/
			){
			return true;
		}
		else{
			return false;
		}
	}
}
