//############################################################
//# EVENTS
//############################################################

function _addEventListener(obj,evnt,func) {
	if (window.attachEvent) {
		obj.attachEvent("on" + evnt,func);
	} else if (window.addEventListener) {
		obj.addEventListener(evnt,func,true);
	} else {
		obj["on" + evnt] = func;
	}
}

function _removeEventListener(obj,evnt,func) {
	if (window.detachEvent) {
		obj.detachEvent("on" + evnt,func);
	} else if (window.removeEventListener) {
		obj.removeEventListener(evnt,func,false);
	} else {
		obj["on" + evnt] = "";
	}
}

//############################################################
//# EVENT OBJ
//############################################################

function evntobj(e) {
	this.src = e.target ? e.target : e.srcElement;
	this.x = e.pageX ? e.pageX : e.clientX;
	this.y = e.pageY ? e.pageY : e.clientY;
	this.e = e ? e : window.event;
}

evntobj.prototype.consume = function () {
	if (this.e.stopPropagation) {
		this.e.stopPropagation();
		this.e.preventDefault();
	} else if (this.e.cancelBubble) {
		this.e.cancelBubble = true;
		this.e.returnValue  = false;
	}
}

evntobj.addEventListener = function(obj,evnt,func) {
	if (document.addEventListener) {
		obj.addEventListener(evnt,func,false);
	} else if (document.attachEvent) {
		obj.attachEvent("on"+evnt,func,false);
	} else {
		obj["on"+evnt] = func;
	}
}

evntobj.removeEventListener = function(obj,evnt,func) {
	if (document.removeEventListener) {
		obj.removeEventListener(evnt,func,false);
	} else if (document.detachEvent) {
		obj.detachEvent("on" + evnt,func,false);
	} else {
		obj["on"+evnt] = null;
	}
}