/*检测浏览器/操作系统类型
-----------------------------start-------------------------------------*/
var sUserAgent = navigator.userAgent;
var fAppVersion = parseFloat(navigator.appVersion);
//比较浏览器版本大小
function compareVersions(sVersion1,sVersion2){
	var aVersion1 = sVersion1.split(".");
	var aVersion2 = sVersion2.split(".");

	if(aVersion1.length>aVersion2.length){
		for(var i=0;i<aVersion1.length;i++)
			aVersion2.push("0");
	}else if(aVersion1.length<aVersion2.length){
		for(var i=0;i<aVersion2.length;i++)
			aVersion1.push("0");
	}

	for(var i=0;i<aVersion1.length;i++){
		if(aVersion1[i]<aVersion2[i])
			return -1;
		else if(aVersion1[i]>aVersion2[i])
			return 1;
	}
	return 0;
}
//检测是否Opera浏览器
var isOpera = sUserAgent.indexOf("Opera")>-1;
var isMinOpera4 = isMinOpera5 = isMinOpera6 = isMinOpera7 = isMinOpera7_5 = false;

if(isOpera){
	var fOperaVersion;
	if(navigator.appName == "Opera"){
		fOperaVersion = fAppVersion;
	} else {
		var reOperaVersion = new RegExp("Opera (\\d+\\.\\d+)");
		reOperaVersion.test(sUserAgent);
		fOperaVersion = parseFloat(RegExp["$1"]);
	}

	isMinOpera4 = fOperaVersion >= 4;
	isMinOpera5 = fOperaVersion >= 5;
	isMinOpera6 = fOperaVersion >= 6;
	isMinOpera7 = fOperaVersion >= 7;
	isMinOpera7_5 = fOperaVersion >= 7.5;
}
//检测是否Safari
var isKHTML = sUserAgent.indexOf("KHTML")>-1
				|| sUserAgent.indexOf("Konqueror")>-1
				|| sUserAgent.indexOf("AppleWebKit")>-1;

var isMinSafari1 = isMinSafari1_2 = false;
var isMinKonq2_2 = isMinKonq3 = isMinKonq3_1 = isMinKonq3_2 = false;
if(isKHTML){
	isSafari = sUserAgent.indexOf("AppleWebKit")>-1;
	isKonq = sUserAgent.indexOf("Konqueror")>-1;
	if(isSafari){
		var reAppleWebKit = new RegExp("AppleWebKit\\/(\\d+(?:\\.\\d*)?)");
		reAppleWebKit.test(sUserAgent);
		var fAppleWebKitVersion = parseFloat(RegExp["$1"]);
		
		isMinSafari1 = fAppleWebKitVersion >= 85;
		isMinSafari1_2 = fAppleWebKitVersion >= 124;
	} else if (isKonq) {
		var reKonq = new RegExp("Konqueror\\/(\\d+(?:\\.\\d+(?:\\.\\d)?)?)");
		reKonq.test(sUserAgent);
		isMinKonq2_2 = compareVersions(RegExp["$1"],"2.2") >= 0;
		isMinKonq3 = compareVersions(RegExp["$1"],"3.0") >= 0;
		isMinKonq3_1 = compareVersions(RegExp["$1"],"3.1") >= 0;
		isMinKonq3_2 = compareVersions(RegExp["$1"],"3.2") >= 0;
	}
}
//检测IE
var isIE = sUserAgent.indexOf("compatible") > -1
			&&sUserAgent.indexOf("MSIE") > -1
			&&!isOpera;

var isMinIE4 = isMinIE5 = isMinIE5_5 = isMinIE6 = isMinIE7 = isMinIE8 = false;
if(isIE){
	var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
	reIE.test(sUserAgent);
	var fIEVersion = parseFloat(RegExp["$1"]);
	
	isMinIE4 = fIEVersion >=4;
	isMinIE5 =  fIEVersion >=5;
	isMinIE5_5 = fIEVersion >=5.5;
	isMinIE6 = fIEVersion >=6;
	isMinIE7 = fIEVersion >=7;
	isMinIE8 = fIEVersion >=8;
}
//检测Firfox
var isFF = sUserAgent.indexOf("Firefox")>-1&&!isKHTML;
var isMinFF1 = isMinFF2 =isMinFF3 = false;
if(isFF){
	var reFF = new RegExp("Firefox\\/(\\d+\\.\\d+(?:\\.\\d+\\.\\d+)?)");
	reFF.test(sUserAgent);
	isMinFF1 = compareVersions(RegExp["$1"],"1.0") >=0;
	isMinFF2 = compareVersions(RegExp["$1"],"2.0") >=0;
	isMinFF3 = compareVersions(RegExp["$1"],"3.0") >=0;
}
//检测Mozilla
var isMoz = sUserAgent.indexOf("Gecko")>-1&&!isKHTML;
var isMinMoz1 = isMinMoz1_4 = isMinMoz1_5 = isMinMoz1_8 = false;
if(isMoz){
	var reMoz = new RegExp("rv:(\\d+\\.\\d+(?:\\.\\d+)?)");
	reMoz.test(sUserAgent);
	isMinMoz1 = compareVersions(RegExp["$1"],"1.0") >=0;
	isMinMoz1_4 = compareVersions(RegExp["$1"],"1.4") >=0;
	isMinMoz1_5 = compareVersions(RegExp["$1"],"1.5") >=0;
	isMinMoz1_8 = compareVersions(RegExp["$1"],"1.8") >=0;
}
var isNS4 = !isIE&&!isOpera&&!isMoz&&!isKHTML
			&&(sUserAgent.indexOf("Mozilla")==0)
			&&(navigator.appName == "Netscape")
			&&(fAppVersion >= 4.0 && fAppVersion <5.0);
var isMinNS4 = isMinNS4_5 = isMinNS4_7 =isMinNS4_8 = false;

if(isNS4){
	isMinNS4 = true;
	ifMinNS4_5 = fAppVersion >= 4.5;
	ifMinNS4_7 = fAppVersion >= 4.7;
	ifMinNS4_8 = fAppVersion >= 4.8;
}
//检测操作系统
var isWin = (navigator.platform == "Win32") || (navigator.platform == "Windows");
var isMac = (navigator.platform == "Mac68K") || (navigator.platform == "MacPPC")
			|| (navigator.platform == "Macintosh");

var isUnix = (navigator.platform == "X11" && !isWin && !isMac);

var isWin95 = isWin98 = isWinNT4 = isWin2K = isWinME = isWinXP = isWin2K3 = isVista = false;
var isMac68K = isMacPPC = false;
var isSunOS = isMinSunOS4 = isMinSunOS5 = isMinSunOS5_5 = false;
//Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 3.0.04506)
if(isWin){
	isWin95 = sUserAgent.indexOf("Win95") > -1 || sUserAgent.indexOf("Windows 95") >-1;
	isWin98 = sUserAgent.indexOf("Win98") > -1 || sUserAgent.indexOf("Windows 98") >-1;
	isWinME = sUserAgent.indexOf("Win 9x 4.90") > -1 || sUserAgent.indexOf("Windows ME") >-1;
	isWin2K = sUserAgent.indexOf("Windows NT 5.0") > -1 || sUserAgent.indexOf("Windows 2000") >-1;
	isWinXP = sUserAgent.indexOf("Windows NT 5.1") > -1 || sUserAgent.indexOf("Windows XP") >-1;
	isWin2K3 = sUserAgent.indexOf("Windows NT 5.2") > -1 || sUserAgent.indexOf("Windows 2003") >-1;
	//检测Vista系统可能有bug
	isVista = sUserAgent.indexOf("Windows NT 6.0") > -1 || sUserAgent.indexOf("Windows Vista") >-1;
	if(!isWin2K3&&!isVista){
		isWinNT4 = sUserAgent.indexOf("WinNT") > -1
					|| sUserAgent.indexOf("Windows NT") >-1
					|| sUserAgent.indexOf("WinNT4.0") >-1
					|| (sUserAgent.indexOf("Windows NT 4.0") >-1)
					&& (!isWinME&&!isWin2K&&!isWinXP);
	}
}

if(isMac){
	isMac68K = sUserAgent.indexOf("Mac_68000") > -1 || sUserAgent.indexOf("68K") > -1;
	isMacPPC = suserAgent.indexOf("MacPowerPC") > -1 || sUserAgent.indexOf("PPC") > -1;
}

if(isUnix){
	isSunOS = sUserAgent.indexOf("SunOS") > -1;
	if(isSunOS){
		var reSunOS = new RegExp("SunOS (\\d+\\.\\d+(?:\\.\\d+)?)");
		reSunOS.test(sUserAgent);
		isMinSunOS4 = compareVersions(RegExp["$1"],"4.0") >= 0;
		isMinSunOS5 = compareVersions(RegExp["$1"],"5.0") >= 0;
		isMinSunOS5_5 = compareVersions(RegExp["$1"],"5.5") >= 0;
	}
}
/*
----------------------------- end -------------------------------------*/
var Utils = new Object;
//首先定义addEventHandler()方法,用来代替IE与其它浏览器中的事件处理函数
//参数一:要分配事件处理的对象;参数二:处理的事件名称;参数三:要分配的函数
Utils.addEventHandler=function(oTarget,sEventType,fnHandler){
	if(oTarget.addEventListener){//DOM兼容浏览器
		oTarget.addEventListener(sEventType,fnHandler,false);
	}else if(oTarget.attachEvent){//IE
		oTarget.attachEvent("on" + sEventType,fnHandler);
	}else{//其它
		oTarget["on" + sEventType] = fnHandler;
	}
};
//删除的方法
Utils.delEventHandler=function(oTarget,sEventType,fnHandler){
	if(oTarget.removeEventListener){//DOM兼容浏览器
		oTarget.removeEventListener(sEventType,fnHandler,false);
	}else if(oTarget.detachEvent){//IE
		oTarget.detachEvent("on" + sEventType,fnHandler);
	}else{//其它
		oTarget["on" + sEventType] = null;
	}
};
//格式化event对象
Utils.formatEvent = function(oEvent){
	if(isIE&&isWin){
		//当事件keypress发生时,为IE创建charCode属性
		oEvent.charCode=(oEvent.type=="keypress")?oEvent.keyCode:0;
		//由于IE仅支持冒泡阶段,因此将eventPhase的值设置为2
		oEvent.eventPhase=2;
		oEvent.isChar = (oEvent.charCode>0);//按键是否有字符与之相关
		//为IE创建pageX、pageY属性
		var scrollX=0;
		var scrollY=0;
		if(document.all){ 
			if(!document.documentElement.scrollLeft)
				scrollX=document.body.scrollLeft;
			else
				scrollX=document.documentElement.scrollLeft;
			if(!document.documentElement.scrollTop)
				scrollY=document.body.scrollTop;
			else
				scrollY=document.documentElement.scrollTop;
		}
		else{
			scrollX=window.pageXOffset;
			scrollY=window.pageYOffset;
		}
		oEvent.scrollX = scrollX;
		oEvent.scrollY = scrollY;
		oEvent.pageX=oEvent.clientX+scrollX;
		oEvent.pageY=oEvent.clientY+scrollY;
		oEvent.preventDefault=function(){this.returnvalue=false;};
		if(oEvent.type=="mouseout")
			oEvent.relatedTarget=oEvent.toElement;
		else if(oEvent.type=="mouseover")
			oEvent.relatedTarget=oEvent.fromElement;
		oEvent.stopPropagation=function(){this.cancelBubble=true;};
		oEvent.target=oEvent.srcElement;
		oEvent.time=(new Date()).getTime();
	}
	return oEvent;
};
//获取event的方法
Utils.getEvent=function(event){
	return this.formatEvent(event ? event : (window.event ? window.event : null));
};
