/* * jsBrwSniff v0.5 * * A browser sniffer library * http://jsbrwsniff.sf.net * * Released under the GNU LGPL license * Author: Pau Garcia i Quiles * */ function getBrowser(obj) { var b=new Array("unknown", "unknown", "unknown", "unknown"); (isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj); if (brs.search(/omniweb[\/\s]v?(\d+([\.-]\d)*)/) != -1) { // Omniweb b[0]="Omniweb"; b[1]=brs.match(/omniweb[\/\s]v?(\d+([\.-]\d)*)/)[1]; (b[1] > 4.5 ? b[2]="khtml" : b[2]="omniweb"); (brs.search(/omniweb[\/\s]((\d+([\.-]\d)*)-)?v(\d+([\.-]\d)*)/) == -1 ? b[3]=brs.match(/omniweb[\/\s](\d+([\.-]\d)*)/)[1] : b[3]=brs.match(/omniweb[\/\s]((\d+([\.-]\d)*)-)?v(\d+([\.-]\d)*)/)[4]); return b; } else if (brs.search(/opera[\/\s](\d+(\.?\d)*)/) != -1) { // Opera b[0]="Opera"; b[1]=brs.match(/opera[\/\s](\d+(\.?\d)*)/)[1]; b[2]="opera"; b[3]=b[1]; return b; } else if (brs.search(/crazy\s?browser\s(\d+(\.?\d)*)/) != -1) { // Crazy Browser b[0]="Crazy Browser"; b[1]=brs.match(/crazy\s?browser\s(\d+(\.?\d)*)/)[1]; b[2]="msie"; b[3]=getMSIEVersion(); return b; } else if (brs.search(/myie2/) != -1) { // MyIE2 b[0]="MyIE2"; b[2]="msie"; b[3]=brs.match(/msie\s(\d+(\.?\d)*)/)[1]; return b; } else if (brs.search(/netcaptor/) != -1) { // NetCaptor b[0]="NetCaptor"; b[1]=brs.match(/netcaptor\s(\d+(\.?\d)*)/)[1]; b[2]="msie"; b[3]=getMSIEVersion(); return b; } else if (brs.search(/avant\sbrowser/) != -1) { // Avant Browser b[0]="Avant Browser"; b[2]="msie"; b[3]=getMSIEVersion(); return b; } else if (brs.search(/msn\s(\d+(\.?\d)*)/) != -1) { // MSN Explorer b[0]="MSN Explorer"; b[1]=brs.match(/msn\s(\d+(\.?\d)*)/)[1]; b[2]="msie"; b[3]=getMSIEVersion(); return b; } else if (brs.search(/msie\s(\d+(\.?\d)*)/) != -1) { // MS Internet Explorer b[0]="MS Internet Explorer"; b[1]=getMSIEVersion(); b[2]="msie"; b[3]=b[1]; return b; } else if (brs.search(/powermarks\/(\d+(\.?\d)*)/) != -1) { // PowerMarks b[0]="PowerMarks"; b[1]=brs.match(/powermarks\/(\d+(\.?\d)*)/)[1]; b[2]="msie"; try { b[3]=getMSIEVersion(); } catch (e) { } return b; } else if (brs.search(/konqueror[\/\s](\d+([\.-]\d)*)/) != -1) { // Konqueror b[0]="Konqueror"; b[1]=brs.match(/konqueror[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="khtml"; return b; } else if (brs.search(/safari\/(\d)*/) != -1) { // Safari b[0]="Safari"; b[1]=brs.match(/safari\/(\d+(\.?\d*)*)/)[1]; b[2]="khtml"; b[3]=brs.match(/applewebkit\/(\d+(\.?\d*)*)/)[1]; return b; } else if(brs.search(/zyborg/) != -1) { // Zyborg (SSD) b[0]="Zyborg"; b[1]=brs.match(/zyborg\/(\d+(\.?\d)*)/)[1]; b[2]="robot"; b[3]="-1" return b; } else if (brs.search(/netscape6[\/\s](\d+([\.-]\d)*)/) != -1) { // Netscape 6.x b[0]="Netscape"; b[1]=brs.match(/netscape6[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/netscape\/(7\.\d*)/) != -1) { // Netscape 7.x b[0]="Netscape"; b[1]=brs.match(/netscape\/(7\.\d*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/galeon[\/\s](\d+([\.-]\d)*)/) != -1) { // Galeon b[0]="Galeon"; b[1]=brs.match(/galeon[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/nautilus[\/\s](\d+([\.-]\d)*)/) != -1) { // Nautilus b[0]="Nautilus"; b[1]=brs.match(/nautilus[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/firefox[\/\s](\d+([\.-]\d)*)/) != -1) { // Firefox b[0]="Firefox"; b[1]=brs.match(/firefox[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/k-meleon[\/\s](\d+([\.-]\d)*)/) != -1) { // K-Meleon b[0]="K-Meleon"; b[1]=brs.match(/k-meleon[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/firebird[\/\s](\d+([\.-]\d)*)/) != -1) { // Firebird b[0]="Firebird"; b[1]=brs.match(/firebird[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/phoenix[\/\s](\d+([\.-]\d)*)/) != -1) { // Phoenix b[0]="Phoenix"; b[1]=brs.match(/phoenix[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/camino[\/\s](\d+([\.-]\d)*)/) != -1) { // Camino b[0]="Camino"; b[1]=brs.match(/camino[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/epiphany[\/\s](\d+([\.-]\d)*)/) != -1) { // Epiphany b[0]="Epiphany"; b[1]=brs.match(/epiphany[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/chimera[\/\s](\d+([\.-]\d)*)/) != -1) { // Chimera b[0]="Chimera"; b[1]=brs.match(/chimera[\/\s](\d+([\.-]\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/icab[\s\/]?(\d+(\.?\d)*)/) !=-1) { // iCab b[0]="iCab"; b[1]=brs.match(/icab[\s\/]?(\d+(\.?\d)*)/)[1]; b[2]="icab"; b[3]=b[1]; return b; } else if (brs.search(/netfront\/(\d+([\._]\d)*)/) != -1) { // NetFront b[0]="NetFront"; b[1]=brs.match(/netfront\/(\d+([\._]\d)*)/)[1]; b[2]="netfront"; b[3]=b[1]; return b; } else if (brs.search(/netscape4\/(\d+([\.-]\d)*)/) != -1) { // Netscape 4.x b[0]="Netscape"; b[1]=brs.match(/netscape4\/(\d+([\.-]\d)*)/)[1]; b[2]="mozold"; b[3]=b[1]; return b; } else if ( (brs.search(/mozilla\/(4.\d*)/) != -1) && (brs.search(/msie\s(\d+(\.?\d)*)/) == -1) ) { b[0]="Netscape"; b[1]=brs.match(/mozilla\/(4.\d*)/)[1]; b[2]="mozold"; b[3]=b[1]; return b; } else if ((brs.search(/mozilla\/5.0/) != -1) && (brs.search(/gecko\//) != -1)) { // Mozilla Seamonkey b[0]="Mozilla Seamonkey"; b[1]=brs.match(/rv\x3a(\d+(\.?\d)*)/)[1]; b[2]="gecko"; b[3]=getGeckoVersion(); return b; } else if (brs.search(/elinks/) != -1) { // ELinks b[0]="ELinks"; (brs.search(/elinks\/(\d+(\.?\d)*)/) == -1 ? b[1]=brs.match(/elinks\s\x28(\d+(\.?\d)*)/)[1] : b[1]=brs.match(/elinks\/(\d+(\.?\d)*)/)[1]); b[2]="elinks"; b[3]=b[1]; return b; } else if (brs.search(/w3m\/(\d+(\.?\d)*)/) != -1) { // w3m b[0]="w3m" b[1]=brs.match(/(^w3m|\sw3m)\/(\d+(\.?\d)*)/)[2]; b[2]="w3m"; b[3]=b[1]; return b; } else if (brs.search(/links/) != -1) { // Links b[0]="Links"; (brs.search(/links\/(\d+(\.?\d)*)/) == -1 ? b[1]=brs.match(/links\s\x28(\d+(\.?\d)*)/)[1] : b[1]=brs.match(/links\/(\d+(\.?\d)*)/)[1]); b[2]="links"; b[3]=b[1]; return b; } else if (brs.search(/java[\/\s]?(\d+([\._]\d)*)/) != -1) { // Java (as web-browser) b[0]="Java"; b[1]=brs.match(/java[\/\s]?(\d+([\._]\d)*)/)[1]; b[2]="java"; b[3]=b[1]; return b; } else if(brs.search(/lynx/) != -1) { // Lynx (SSD) b[0]="Lynx"; b[1]=brs.match(/lynx\/(\d+(\.?\d)*)/)[1]; b[2]="libwww-fm"; b[3]=brs.match(/libwww-fm\/(\d+(\.?\d)*)/)[1]; return b; } else if(brs.search(/dillo/) != -1) { // Dillo (SSD) b[0]="Dillo"; b[1]=brs.match(/dillo\s*\/*(\d+(\.?\d)*)/)[1]; b[2]="dillo"; b[3]=b[1]; return b; } else if(brs.search(/wget/) != -1) { // wget (SSD) b[0]="wget"; b[1]=brs.match(/wget\/(\d+(\.?\d)*)/)[1]; b[2]="robot"; b[3]="-1" return b; } else if(brs.search(/googlebot\-image/) != -1) { // GoogleBot-Image (SSD) b[0]="GoogleBot - Image"; b[1]=brs.match(/googlebot\-image\/(\d+(\.?\d)*)/)[1]; b[2]="robot"; b[3]="-1" return b; } else if(brs.search(/googlebot/) != -1) { // GoogleBot (SSD) b[0]="GoogleBot"; b[1]=brs.match(/googlebot\/(\d+(\.?\d)*)/)[1]; b[2]="robot"; b[3]="-1" return b; } else if(brs.search(/msnbot/) != -1) { // MSNBot (SSD) b[0]="MSNBot"; b[1]=brs.match(/msnbot\/(\d+(\.?\d)*)/)[1]; b[2]="robot"; b[3]="-1" return b; } else if(brs.search(/turnitinbot/) != -1) { // Turnitin (SSD) b[0]="Turnitin Bot"; b[1]=brs.match(/turnitinbot\/(\d+(\.?\d)*)/)[1]; b[2]="robot"; b[3]="-1" return b; } else { b[0]="unknown"; return b; } } // Return browser's (actual) major version or -1 if bad version entered function getMajorVersion(v) { return (isEmpty(v) ? -1 : (hasDot(v) ? v : v.match(/(\d*)(\.\d*)*/)[1])) } // Return browser's (actual) minor version or -1 if bad version entered function getMinorVersion(v) { return (!isEmpty(v) ? (!hasDot(v) ? v.match(/\.(\d*([-\.]\d*)*)/)[1] : 0) : -1) } // Return operating system we are running on top of function getOS(obj) { var os=new Array("unknown", "unknown"); (isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj); if (brs.search(/windows\sce/) != -1) { os[0]="wince"; try { os[1]=brs.match(/windows\sce\/(\d+(\.?\d)*)/)[1]; } catch (e) { } return os; } else if ( (brs.search(/windows/) !=-1) || ((brs.search(/win9\d{1}/) !=-1)) ) { os[0]="Windows"; if (brs.search(/nt\s5\.1/) != -1) { os[1]="XP"; } else if (brs.search(/nt\s5\.0/) != -1) { os[1]="2000"; } else if ( (brs.search(/win98/) != -1) || (brs.search(/windows\s98/)!= -1 ) ) { os[1]="98"; } else if (brs.search(/windows\sme/) != -1) { os[1]="ME"; } else if (brs.search(/nt\s5\.2/) != -1) { os[1]="2003"; } else if ( (brs.search(/windows\s95/) != -1) || (brs.search(/win95/)!= -1 ) ) { os[1]="95"; } else if ( (brs.search(/nt\s4\.0/) != -1) || (brs.search(/nt4\.0/) ) != -1) { os[1]="NT 4"; } return os; } else if (brs.search(/linux/) !=-1) { os[0]="Linux"; try { os[1] = brs.match(/linux\s?(\d+(\.?\d)*)/)[1]; } catch (e) { } return os; } else if (brs.search(/mac\sos\sx/) !=-1) { os[0]="Mac OS X"; return os; } else if (brs.search(/freebsd/) !=-1) { os[0]="FreeBSD"; try { os[1] = brs.match(/freebsd\s(\d(\.\d)*)*/)[1]; } catch (e) { } return os; } else if (brs.search(/sunos/) !=-1) { os[0]="SunOS"; try { os[1]=brs.match(/sunos\s(\d(\.\d)*)*/)[1]; } catch (e) { } return os; } else if (brs.search(/irix/) !=-1) { os[0]="IRIX"; try { os[1]=brs.match(/irix\s(\d(\.\d)*)*/)[1]; } catch (e) { } return os; } else if (brs.search(/openbsd/) !=-1) { os[0]="OpenBSD"; try { os[1] = brs.match(/openbsd\s(\d(\.\d)*)*/)[1]; } catch (e) { } return os; } else if ( (brs.search(/macintosh/) !=-1) || (brs.search(/mac\x5fpowerpc/) != -1) ) { os[0]="Mac Classic"; return os; } else if (brs.search(/os\/2/) !=-1) { os[0]="OS2"; try { os[1]=brs.match(/warp\s((\d(\.\d)*)*)/)[1]; } catch (e) { } return os; } else if (brs.search(/openvms/) !=-1) { os[0]="OpenVMS"; try { os[1]=brs.match(/openvms\sv((\d(\.\d)*)*)/)[1]; } catch (e) { } return os; } else if ( (brs.search(/amigaos/) !=-1) || (brs.search(/amiga/) != -1) ) { os[0]="Amiga"; try { os[1]=brs.match(/amigaos\s?(\d(\.\d)*)*/)[1]; } catch (e) { } return os; } else if (brs.search(/hurd/) !=-1) { os[0]="Hurd"; return os; } else if (brs.search(/hp\-ux/) != -1) { os[0]="HPUX"; try { os[1]=brs.match(/hp\-ux\sb\.[\/\s]?(\d+([\._]\d)*)/)[1]; } catch (e) { } return os; } else if ( (brs.search(/unix/) !=-1) || (brs.search(/x11/) != -1 ) ) { os[0]="Unix"; return os; } else if (brs.search(/cygwin/) !=-1) { os[0]="cygwin"; return os; } else if (brs.search(/java[\/\s]?(\d+([\._]\d)*)/) != -1) { os[0]="Java"; try { os[1]=brs.match(/java[\/\s]?(\d+([\._]\d)*)/)[1]; } catch (e) { } return os; } else if (brs.search(/palmos/) != -1) { os[0]="Palm"; return os; } else if (brs.search(/symbian\s?os\/(\d+([\._]\d)*)/) != -1) { os[0]="Symbian"; try { os[1]=brs.match(/symbian\s?os\/(\d+([\._]\d)*)/)[1]; } catch (e) { } return os; } else { os[0]="unknown"; return os; } } // Return Gecko version function getGeckoVersion() { return brs.match(/gecko\/([0-9]+)/)[1]; } // Return MSIE version function getMSIEVersion() { return brs.match(/msie\s(\d+(\.?\d)*)/)[1]; } // Return full browser UA string function getFullUAString(obj) { (isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj); return brs; } // Is Flash plug-in installed? function hasFlashPlugin(obj) { (isEmpty(obj) ? brs=navigator.userAgent.toLowerCase() : brs=obj); var f=new Array("0", "0"); var brwEng=getBrowser(obj)[2]; //if (getBrowser(obj)[2]!="msie") { if ( (brwEng=="gecko") || (brwEng="opera") || (brwEng="khtml") || (brwEng="mozold")) { // Non-IE Flash plug-in detection if (navigator.plugins && navigator.plugins.length) { x = navigator.plugins["Shockwave Flash"]; if (x) { f[0] = 2; if (x.description) { y = x.description; f[1] = y.charAt(y.indexOf('.')-1); } } else { f[0] = 1; } if (navigator.plugins["Shockwave Flash 2.0"]) { f[0] = 2; f[0] = 2; } } else if (navigator.mimeTypes && navigator.mimeTypes.length) { x = navigator.mimeTypes['application/x-shockwave-flash']; if (x && x.enabledPlugin) { f[0] = 2; } else { f[0] = 1; } } return f; } else if (brwEng=="msie") { // IE flash detection. for(var i=7; i>0; i--) { try { var flash = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i); f[1] = i; break; //return; } catch(e) { } } if (f[1]>0) { f[0]=2 } else { f[0]=1 } return f; } else { f[0]=0; f[1]=0; return f; } } /* FOR INTERNAL USE ONLY. THIS FUNCTIONS ARE SUBJECT TO CHANGE, DON'T TRUST THEM */ // Is input empty? function isEmpty(input) { return (input==null || input =="") } // Does this string contain a dot? function hasDot(input) { return (input.search(/\./) == -1) } /* END OF FOR INTERNAL USE ONLY FUNCTIONS */ var br=new Array(4); var os=new Array(2); br=getBrowser(); os=getOS(); stat_bName = br[0]; stat_bVer = br[1]; stat_br = escape(stat_bName + " " + stat_bVer); stat_os = escape(os[0] + ' ' + os[1]); stat_pt = ""; if (document.cookie) var stat_cook = 1; else var stat_cook = 0; var stat_path='/app/modules/stats/count.cfm?t=0&'; var stat_ref = escape(document.referrer); var stat_url='' + escape(document.URL); stat_wth=screen.width; stat_hgt=screen.height; if (navigator.appName != 'Netscape') {stat_clr=screen.colorDepth;} else {stat_clr=screen.pixelDepth;} var stat_js=navigator.javaEnabled(); var stat_name = "statistex"; var stat_new = "1"; if(document.cookie.indexOf(stat_name)!=-1) {stat_new = "0";} else {document.cookie = stat_name + "=1; expires=Mon, 01 Jan 2029 23:59:59 GMT;";} stat_info='w=' + stat_wth + '&h=' + stat_hgt + '&c=' + stat_clr + '&r=' + stat_ref + '&u='+ stat_url + '&b=' + stat_br + '&j=' + stat_js + '&n=' + stat_new + '&k=' + stat_cook + '&pt=' + stat_pt + "&o=" + stat_os; document.write('');