Evt.ON = "on";

function Evt(evt,isDragStart) {
	var docEl 				= document.documentElement;
	var body 				= document.body;

	evt =		 			(evt) ? evt : (window.event) ? window.event : null;
	this.self =				evt;
	this.target = 			(evt.target) ? evt.target : 
							(evt.srcElement) ? evt.srcElement : null;
	this.currentTarget =	(evt.currentTarget) ? evt.currentTarget : 
							(this) ? this : null;
	this.relatedTarget =	(evt.relatedTarget) ? evt.relatedTarget : 
							(evt.fromElement) ? evt.fromElement : null;
	
	this.initX =			(evt.pageX) ? evt.pageX : 
							(docEl.scrollLeft) ? (docEl.scrollLeft+evt.clientX) : 
							(body.scrollLeft) ? (body.scrollLeft + evt.clientX) :
							evt.clientX;
	this.initY =			(evt.pageY) ? evt.pageY : 
							(docEl.scrollTop) ? (docEl.scrollTop + evt.clientY) : 
							(body.scrollTop) ?  (body.scrollTop  + evt.clientY) :
							evt.clientY;
	// Static Initializer
	if (isDragStart) {
		Evt.staticTarget = 	this.target;
		//Evt.deltaX =		this.initX - parseInt(Evt.staticTarget.style.left);
		Evt.deltaX =		0;
		//Evt.deltaY =		this.initY - parseInt(Evt.staticTarget.style.top);
		Evt.deltaY =		0;
	}
	
	this.posX =				(this.initX - Evt.deltaX);
	this.posY =				(this.initY - Evt.deltaY);

}

Evt.prototype.cancel = function () {
	if (!this.self) return false;
	if (this.self.stopPropagation) {
		this.self.stopPropagation();
		this.self.preventDefault();
	} else if (typeof this.self.cancelBubble != undefined) {
		this.self.cancelBubble = true;
		this.self.returnValue = false;
	} else {
		this.self = null;
	}
	return false;
};

Evt.subscribe = function (eventTarget,eventType,eventHandler,captures) {
	captures = (captures) ? captures : false;
	if ( document.addEventListener ) {
		eventTarget.addEventListener(eventType,eventHandler,captures);
	} else if (document.attachEvent) {
		eventType = Evt.ON + eventType;
		eventTarget.attachEvent(eventType,eventHandler);
	} else {
		eventType = Evt.ON + eventType;
		eventTarget[eventType] = eventHandler(event);
	}
};

Evt.unsubscribe = function (eventTarget,eventType,eventHandler,captures) {
	captures = (captures) ? captures : false;
	if ( document.removeEventListener ) {
		eventTarget.removeEventListener(eventType,eventHandler,captures);
	} else if (document.detachEvent) {
		eventType = Evt.ON + eventType;
		eventTarget.detachEvent(eventType,eventHandler);
	} else {
		eventType = Evt.ON + eventType;
		eventTarget[eventType] = null;
	}
};