var bIsOpera = false;
var fOperaVersion = 0.0;
var bIsIE = false;
var fIEVersion = 0.0;
var bIsMozilla = false;
var sMozillaVersion = "0.0";
var bIsWindows = false;
var bIsUndefinedBrowser = false;

function compareVersions(sVersion1, sVersion2) {
	var version1 = sVersion1.toString().split(".");
	var version2 = sVersion2.toString().split(".");
	if(version1.length > version2.length) {
		for(var i = 0; i < version1.length - version2.length; i++) version2.push("0");
	} else if(version2.length > version2.length) {
		for(var i = 0; i < version2.length - version1.length; i++) version1.push("0");
	}
	for(var i = 0; i < version1.length; i++) {
		if(version1[i] < version2[i]) return -1;
		else if(version1[i] > version2[i]) return 1;
	}
	return 0;
}

function checkBrowsers()
{
	userAgent = navigator.userAgent;
	bIsOpera = userAgent.indexOf("Opera") > -1;
	if(bIsOpera) {
		if(navigator.appName == "Opera") {
			fOperaVersion = parseFloat(navigator.appVersion);
		} else {
			var reOperaVersion = new RegExp("Opera (\\d+\\.\\d+)");
			reOperaVersion.test(userAgent);
			fOperaVersion = parseFloat(RegExp["$1"]);
		}
	}
	bIsIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1 && !bIsOpera;
	if(bIsIE) {
		var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
		reIE.test(userAgent);
		fIEVersion = parseFloat(RegExp["$1"]);
	}
	bIsMozilla = userAgent.indexOf("Gecko") > -1 && !(userAgent.indexOf("KHTML") > -1 || userAgent.indexOf("Konqueror") > -1 || userAgent.indexOf("AppleWebKit") > -1);
	var reMozillaVersion = new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)");
	reMozillaVersion.test(userAgent);
	sMozillaVersion = RegExp["$1"];
	bIsWindows = navigator.platform.indexOf("Win") > -1;
	bIsUndefinedBrowser = (!bIsIE && !bIsOpera && !bIsMozilla);
}

checkBrowsers();

var EventUtil = new Object;

EventUtil.addEventHandler = function(target, type, handler) {
	if(target.addEventListener) target.addEventListener(type, handler, false);
	else if(target.attachEvent) target.attachEvent("on" + type, handler);
	else target["on" + type] = handler;
}

EventUtil.removeEventHandler = function(target, type, handler) {
	if(target.removeEventListener) target.removeEventListener(type, handler, false);
	else if(target.detachEvent) target.detachEvent("on" + type, handler);
	else target["on" + type] = null;
}

EventUtil.formatEvent = function(e) {
	if(bIsIE && bIsWindows) {
		e.charCode = (e.type == "keypress") ? e.keyCode : 0;
		e.eventPhase = 2;
		e.isChar = (e.charCode > 0);
		e.pageX = e.clientX + document.body.scrollLeft;
		e.pageY = e.clientY + document.body.scrollTop;
		e.preventDefault = function() {
			this.returnValue = false;
		};
		if(e.type == "mouseout") e.relatedTarget = e.toElement;
		else if(e.type == "mouseover") e.relatedTarget = e.fromElement;
		e.stopPropagation = function() {
			this.cancelBubble = true;
		};
		e.target = e.srcElement;
		e.timeStamp = (new Date).getTime();
	}
	
	return e;
}

EventUtil.getEvent = function() {
	if(window.event) return this.formatEvent(window.event);
	else return EventUtil.getEvent.caller.arguments[0];
}
