// Ultimate client-side JavaScript client sniff.
// (C) Netscape Communications 1999.  Permission granted to reuse and distribute.
// Revised 17 May 99 to add is_nav5up and is_ie5up (see below).
// Revised 29 Jul 1999 by slipszi@yunord.net: removed OS detection
// Revised 14 Sep 1999 by slipszi@yunord.net: added is_nav3up

// Everything you always wanted to know about your JavaScript client
// but were afraid to ask. Creates "is_" variables indicating:
// (1) browser vendor:
//     is_nav, is_ie, is_opera
// (2) browser version number:
//     is_major (integer indicating major version number: 2, 3, 4...)
//     is_minor (float   indicating full  version number: 2.02, 3.01, 4.04...)
// (3) browser vendor AND major version number
//     is_nav2, is_nav3, is_nav3up, is_nav4, is_nav4up, is_nav5, is_nav5up,
//     is_ie3, is_ie4, is_ie4up, is_ie5, is_ie5up
// (4) JavaScript version number:
//     is_js (float indicating full JavaScript version number: 1, 1.1, 1.2...)
//
// See http://www.it97.de/JavaScript/JS_tutorial/bstat/navobj.html and
// http://www.it97.de/JavaScript/JS_tutorial/bstat/Browseraol.html
// for detailed lists of userAgent strings.
//
// Note: you don't want your Nav4 or IE4 code to "turn off" or
// stop working when Nav5 and IE5 (or later) are released, so
// in conditional code forks, use is_nav4up ("Nav4 or greater")
// and is_ie4up ("IE4 or greater") instead of is_nav4 or is_ie4
// to check version in code which you want to work on future
// versions.

// convert all characters to lowercase to simplify testing
var agt=navigator.userAgent.toLowerCase();

// *** BROWSER VERSION ***
// Note: On IE5, these return 4, so use is_ie5up to detect IE5.
var is_major=parseInt(navigator.appVersion);
var is_minor=parseFloat(navigator.appVersion);

// Note: Opera and WebTV spoof Navigator. We do strict client detection.
// If you want to allow spoofing, take out the tests for opera and webtv.
var is_nav    = ((agt.indexOf('mozilla')!=-1)&&(agt.indexOf('spoofer')==-1)
               &&(agt.indexOf('compatible') == -1)&&(agt.indexOf('opera')==-1)
               &&(agt.indexOf('webtv')==-1));
var is_nav2   = (is_nav&&(is_major==2));
var is_nav3   = (is_nav&&(is_major==3));
var is_nav3up = (is_nav&&(is_major>=3));
var is_nav4   = (is_nav&&(is_major==4));
var is_nav4up = (is_nav&&(is_major>=4));
var is_nav5   = (is_nav&&(is_major==5));
var is_nav5up = (is_nav&&(is_major>=5));

var is_ie     = (agt.indexOf("msie")!=-1);
var is_ie3    = (is_ie&&(is_major<4));
var is_ie4    = (is_ie&&(is_major==4)&&(agt.indexOf("msie 5.0")==-1));
var is_ie4up  = (is_ie&&(is_major>=4));
var is_ie5    = (is_ie&&(is_major==4)&&(agt.indexOf("msie 5.0")!=-1));
var is_ie5up  = (is_ie&&!is_ie3&&!is_ie4);

// KNOWN BUG: On AOL4, returns false if IE3 is embedded browser
// or if this is the first browser window opened.  Thus the
// variables is_aol, is_aol3, and is_aol4 aren't 100% reliable.
var is_aol    = (agt.indexOf("aol")!=-1);
var is_aol3   = (is_aol&&is_ie3);
var is_aol4   = (is_aol&&is_ie4);

var is_opera  = (agt.indexOf("opera")!=-1);
var is_webtv  = (agt.indexOf("webtv")!=-1);

// *** JAVASCRIPT VERSION CHECK ***
var is_js;
if(is_nav2||is_ie3)
	is_js=1.0
else if(is_nav3||is_opera)
	is_js=1.1
else if((is_nav4&&(is_minor<=4.05))||is_ie4)
	is_js=1.2
else if((is_nav4&&(is_minor>4.05))||is_ie5)
	is_js=1.3
else if(is_nav5)
	is_js=1.4
// NOTE: In the future, update this code when newer versions of JS
// are released. For now, we try to provide some upward compatibility
// so that future versions of Nav and IE will show they are at
// *least* JS 1.x capable. Always check for JS version compatibility
// with > or >=.
else if(is_nav&&(is_major>5))
	is_js=1.4
else if(is_ie&&(is_major>5))
	is_js=1.3
// HACK: no idea for other browsers; always check for JS version with > or >=
else
	is_js=0.0;
