var isIE = navigator.userAgent.indexOf('MSIE') != -1;

var EventHandler = function(){
	if (isIE){
		document.attachEvent("onmousemove", EventHandler.setEvent, true);
		document.attachEvent("onmouseover", EventHandler.setEvent, true);
		document.attachEvent("onmouseout", EventHandler.setEvent, true);
		document.attachEvent("onclick", EventHandler.setEvent, true);
		document.attachEvent("ondblclick", EventHandler.setEvent, true);
		document.attachEvent("onkeydown", EventHandler.setEvent, true);
		document.attachEvent("onkeyup", EventHandler.setEvent, true);
		document.attachEvent("onkeypress", EventHandler.setEvent, true);
	} else {
		document.addEventListener("mousemove", EventHandler.setEvent, true);
		document.addEventListener("mouseover", EventHandler.setEvent, true);
		document.addEventListener("mouseout", EventHandler.setEvent, true);
		document.addEventListener("click", EventHandler.setEvent, true);
		document.addEventListener("dblclick", EventHandler.setEvent, true);
		document.addEventListener("keydown", EventHandler.setEvent, true);
		document.addEventListener("keyup", EventHandler.setEvent, true);
		document.addEventListener("keypress", EventHandler.setEvent, true);
	}
}

EventHandler.setEvent = function(e){
	EventHandler.event = new Object;
	
	if (isIE){
		EventHandler.event.screenX = event.clientX;
		EventHandler.event.screenY = event.clientY;
		EventHandler.event.srcElement = event.srcElement;
		EventHandler.event.toElement = event.relatedTarget;
		EventHandler.event.shiftKey = event.shiftKey;
	} else {
		EventHandler.event.screenX = e.pageX;
		EventHandler.event.screenY = e.pageY;
		EventHandler.event.srcElement = e.target;
		EventHandler.event.toElement = e.relatedTarget;
		EventHandler.event.shiftKey = e.shiftKey;
	}
}

EventHandler.getEvent = function(){
	return EventHandler.event;
}

EventHandler.navigateEvent = function(url){
	this.url = url;
	this.fire = function(){
		document.location = url;
		return false;
	}
}

EventHandler.scriptEvent = function(script){
	this.script = script;
	this.fire = function(){
		eval(script);
		return false;
	}
}

EventHandler.attachClickEvent = function(componentId, evt){
	document.getElementById(componentId).onclick = evt.fire;
}

EventHandler.attachDblClickEvent = function(componentId, evt){
	document.getElementById(componentId).ondblclick = evt.fire;
}

new EventHandler();

if(typeof HTMLElement != "undefined" && !HTMLElement.prototype.insertAdjacentElement){
	HTMLElement.prototype.insertAdjacentElement = function (where, parsedNode){
		switch (where){
			case 'BeforeBegin': this.parentNode.insertBefore(parsedNode,this); break;
			case 'AfterBegin': this.insertBefore(parsedNode,this.firstChild); break;
			case 'BeforeEnd': this.appendChild(parsedNode); break;
			case 'AfterEnd': if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling); else this.parentNode.appendChild(parsedNode); break;
		}
	}
	
	HTMLElement.prototype.insertAdjacentHTML = function (where, htmlStr){
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where, parsedHTML);
	}
	
	
	HTMLElement.prototype.insertAdjacentText = function (where, txtStr){
		var parsedText = document.createTextNode(txtStr);
		this.insertAdjacentElement(where, parsedText);
	}
}
