JSLIB.namespace("JSLIB.event");
JSLIB.namespace("JSLIB.eventData");

JSLIB.eventData = function(registeredTarget, domEvent) {
	// browser event object
	this.domEvent=domEvent;
	
	this.registeredTarget=registeredTarget;
	this.target=(domEvent.target)?domEvent.target:domEvent.srcElement;

	this.type=domEvent.type;

	// mouse specific
	this.clientX=domEvent.clientX;
	this.clientY=domEvent.clientY;
	this.button=domEvent.button;
	
	// keyboard specific
	this.keyCode=domEvent.keyCode;
	this.altKey=domEvent.altKey;
	this.ctrlKey=domEvent.ctrlKey;
	this.shiftKey=domEvent.shiftKey;
}

JSLIB.event = new function () {
	return {
		addListener:function(elem, eventName, callbackFunc) {
			var obj = JSLIB.dom.get(elem);
			if (!obj) {
				return false;
			}
			
			var wrapfunc = function(evt) {
				var realEvent = evt || window.event;
				return callbackFunc(new JSLIB.eventData(obj, realEvent));
			};

			if(obj.attachEvent){ // IE
				obj.attachEvent("on"+eventName,	wrapfunc);
				return true;
			}
			else if(obj.addEventListener){ // Mozilla
				obj.addEventListener(eventName, wrapfunc, false);
				return true;
			}
			return false;
		},
		
		preventDefault:function (eventData) {
			if (isIE) {
				eventData.domEvent.returnValue = false;
			}
			else if (eventData.domEvent.preventDefault) {
				eventData.domEvent.preventDefault();
			}
		},
		
		stopPropagation:function (eventData) {
			if (isIE) {
				eventData.domEvent.cancelBubble = true;
			}
			else if (eventData.domEvent.stopPropagation) {
				eventData.domEvent.stopPropagation();
			}
		}
	}
}
