		
	/* 
	PROOFING AND REPORTING TOOL
	=====================================
	
	Revised 07 Jan 2001 to include check for RealPlayer, have warnings.
	Revised 14 Nov 2000 to add reporting and minimum requirements options.
	
	Run on launch index.html to check for presence of minimum site requirements,
	so we dont waste time and money on false feedback, and educate the user.

   ---------------------------------------------------------------------------------------- 

	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). 

	Everything you always wanted to know about your JavaScript client 
	but were afraid to ask ... "Is" is the constructor function for "is" object, 
	which has properties 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.nav4, is.nav4up, 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 ...) 
	(5) OS platform and version: 
		is.win, is.win16, is.win32, is.win31, is.win95, is.winnt, is.win98 
		is.os2 
		is.mac, is.mac68k, is.macppc 
		is.unix 
		is.sun, is.sun4, is.sun5, is.suni86 
		is.irix, is.irix5, is.irix6 
		is.hpux, is.hpux9, is.hpux10 
		is.aix, is.aix1, is.aix2, is.aix3, is.aix4 
		is.linux, is.sco, is.unixware, is.mpras, is.reliant 
		is.dec, is.sinix, is.freebsd, is.bsd 
		is.vms 
	
	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.
	*/
	
	function Is() 
	{ 
	 // 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. 
	 this.major = parseInt(navigator.appVersion); 
	 this.minor = parseFloat(navigator.appVersion); 

	 this.nav = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1) && (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1) && (agt.indexOf('webtv')==-1)); 
	 this.nav2 = (this.nav && (this.major == 2)); 
	 this.nav3 = (this.nav && (this.major == 3)); 
	 this.nav4 = (this.nav && (this.major == 4)); 
	 this.nav4up = (this.nav && (this.major >= 4)); 
	 this.navonly = (this.nav && ((agt.indexOf(";nav") != -1) || (agt.indexOf("; nav") != -1)) ); 
	 this.nav5 = (this.nav && (this.major == 5)); 
	 this.nav5up = (this.nav && (this.major >= 5)); 

	 this.ie = (agt.indexOf("msie") != -1); 
	 this.ie3 = (this.ie && (this.major < 4)); 
	 this.ie4 = (this.ie && (this.major == 4) && (agt.indexOf("msie 5.0")==-1) ); 
	 this.ie45 = (this.ie && (this.major == 4) && (agt.indexOf("msie 4.5")==-1) ); 
	 this.ie4up = (this.ie && (this.major >= 4)); 
	 this.ie5 = (this.ie && (this.major == 4) && (agt.indexOf("msie 5.0")!=-1) );
	 this.ie55 = (this.ie && (this.major == 4) && (agt.indexOf("msie 5.5")!=-1) );  
	 this.ie5up = (this.ie && !this.ie3 && !this.ie4); 

	 // KNOWN BUG: On AOL4, returns false if IE3 is embedded browser 
	 // or if this is the first browser window opened. Thus the 
	 // properties is.aol, is.aol3, and is.aol4 aren't 100% reliable. 
	 this.aol = (agt.indexOf("aol") != -1); 
	 this.aol3 = (this.aol && this.ie3); 
	 this.aol4 = (this.aol && this.ie4); 

	 this.opera = (agt.indexOf("opera") != -1); 
	 this.webtv = (agt.indexOf("webtv") != -1); 

	 // JAVASCRIPT VERSION CHECK
	 // ========================
	 if (this.nav2 || this.ie3) this.js = 1.0 
	 else if (this.nav3 || this.opera) this.js = 1.1 
	 else if ((this.nav4 && (this.minor <= 4.05)) || this.ie4) this.js = 1.2 
	 else if ((this.nav4 && (this.minor > 4.05)) || this.ie5) this.js = 1.3 
	 else if (this.nav5) this.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 (this.nav && (this.major > 5)) this.js = 1.4 
	 else if (this.ie && (this.major > 4)) this.js = 1.3 
	 // HACK: no idea for other browsers; always check for JS version with > or >= 
	 else this.js = 0.0; 

	 // PLATFORM
	 // ========
	 this.win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) ); 
	 // NOTE: On Opera 3.0, the userAgent string includes "Windows 95/NT4" on all 
	 // Win32, so you can't distinguish between Win95 and WinNT. 
	 this.win95 = ((agt.indexOf("win95")!=-1) || (agt.indexOf("windows 95")!=-1)); 

	 // is this a 16 bit compiled version? 
	 this.win16 = ((agt.indexOf("win16")!=-1) || (agt.indexOf("16bit")!=-1) || (agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("windows 16-bit")!=-1) ); 

	 this.win31 = ((agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("win16")!=-1) || (agt.indexOf("windows 16-bit")!=-1)); 

	 // NOTE: Reliable detection of Win98 may not be possible. It appears that: 
	 // - On Nav 4.x and before you'll get plain "Windows" in userAgent. 
	 // - On Mercury client, the 32-bit version will return "Win98", but 
	 // the 16-bit version running on Win98 will still return "Win95". 
	 this.win98 = ((agt.indexOf("win98")!=-1) || (agt.indexOf("windows 98")!=-1)); 
	 this.winnt = ((agt.indexOf("winnt")!=-1) || (agt.indexOf("windows nt")!=-1)); 
	 this.win2000 = ((agt.indexOf("winnt")!=-1) || (agt.indexOf("windows nt 5.0")!=-1)); 
	 this.win32 = ( this.win95 || this.winnt || this.win98 || ((this.major >= 4) && (navigator.platform == "Win32")) || (agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1) ); 

	 this.os2 = ((agt.indexOf("os/2")!=-1) || (navigator.appVersion.indexOf("OS/2")!=-1) || (agt.indexOf("ibm-webexplorer")!=-1)); 

	 this.mac = (agt.indexOf("mac")!=-1); 
	 this.mac68k = (this.mac && ((agt.indexOf("68k")!=-1) || (agt.indexOf("68000")!=-1))); 
	 this.macppc = (this.mac && ((agt.indexOf("ppc")!=-1) || (agt.indexOf("powerpc")!=-1))); 

	 this.sun = (agt.indexOf("sunos")!=-1); 
	 this.sun4 = (agt.indexOf("sunos 4")!=-1); 
	 this.sun5 = (agt.indexOf("sunos 5")!=-1); 
	 this.suni86= (this.sun && (agt.indexOf("i86")!=-1)); 
	 this.irix = (agt.indexOf("irix") !=-1); // SGI 
	 this.irix5 = (agt.indexOf("irix 5") !=-1); 
	 this.irix6 = ((agt.indexOf("irix 6") !=-1) || (agt.indexOf("irix6") !=-1)); 
	 this.hpux = (agt.indexOf("hp-ux")!=-1); 
	 this.hpux9 = (this.hpux && (agt.indexOf("09.")!=-1)); 
	 this.hpux10= (this.hpux && (agt.indexOf("10.")!=-1)); 
	 this.aix = (agt.indexOf("aix") !=-1); // IBM 
	 this.aix1 = (agt.indexOf("aix 1") !=-1); 
	 this.aix2 = (agt.indexOf("aix 2") !=-1); 
	 this.aix3 = (agt.indexOf("aix 3") !=-1); 
	 this.aix4 = (agt.indexOf("aix 4") !=-1); 
	 this.linux = (agt.indexOf("inux")!=-1); 
	 this.sco = (agt.indexOf("sco")!=-1) || (agt.indexOf("unix_sv")!=-1); 
	 this.unixware = (agt.indexOf("unix_system_v")!=-1); 
	 this.mpras = (agt.indexOf("ncr")!=-1); 
	 this.reliant = (agt.indexOf("reliantunix")!=-1); 
	 this.dec = ((agt.indexOf("dec")!=-1) || (agt.indexOf("osf1")!=-1) || (agt.indexOf("dec_alpha")!=-1) || (agt.indexOf("alphaserver")!=-1) || (agt.indexOf("ultrix")!=-1) || (agt.indexOf("alphastation")!=-1)); 
	 this.sinix = (agt.indexOf("sinix")!=-1); 
	 this.freebsd = (agt.indexOf("freebsd")!=-1); 
	 this.bsd = (agt.indexOf("bsd")!=-1); 
	 this.unix = ((agt.indexOf("x11")!=-1) || this.sun || this.irix || this.hpux || this.sco ||this.unixware || this.mpras || this.reliant || this.dec || this.sinix || this.aix || this.linux || this.bsd || this.freebsd); 

	 this.vms = ((agt.indexOf("vax")!=-1) || (agt.indexOf("openvms")!=-1)); 
	 
	} 

	var is; 
	var isIE3Mac = false;
	
	// this section is designed specifically for IE3 for the Mac 
	if ((navigator.appVersion.indexOf("Mac")!=-1) && (navigator.userAgent.indexOf("MSIE")!=-1) && (parseInt(navigator.appVersion)==3)) 
	 isIE3Mac = true;
	  
	else is = new Is();

/* ---------------------------------------------------------------------------------------- */
	
	// GET SCREEN ENV INFO
	// ===================
	
	var scw = screen.availWidth || screen.width
	var sch = screen.availHeight || screen.height
	
/* ---------------------------------------------------------------------------------------- */

	/*
	DETECT FLASH PLUGINS
	====================
	
	moock fpi [f.lash p.layer i.nspector]
	version: 1.3.4
	written by colin moock
	code maintained at: http://www.moock.org/webdesign/flash/detection/moockfpi/
	*/


	// #############################################
	// these are the user defined globals
	// modify the following variables to customize the inspection behaviour

	var requiredVersion = 4;			// version the user needs to view site (max is 5, min is 2)
	var useRedirect = false; 			// "true" loads new flash or non-flash page into browser
										// "false" embeds movie or alternate html code into current page (eg set status var)

	// set next three vars if useRedirect is true...
	var flashPage = "index.htm"		// the location of the flash movie page
	var noFlashPage = "pages/download.html"	// send user here if they don't have the plugin or we can't detect it
	var upgradePage = "pages/download.html"	// send user here if we detect an old plugin
	// #############################################



	// *************
	// everything below this point is internal until after the body tag
	// do not modify! 
	// *************

	// system globals
	var flash2Installed = false;		// boolean. true if flash 2 is installed
	var flash3Installed = false;		// boolean. true if flash 3 is installed
	var flash4Installed = false;		// boolean. true if flash 4 is installed
	var flash5Installed = false;		// boolean. true if flash 5 is installed
	var maxVersion = 5;					// highest version we can actually detect
	var actualVersion = 0;				// version the user really has
	var actualFlashVersion = 0;				// version the user really has
	var hasRightVersion = false;		// boolean. true if it's safe to embed the flash movie in the page
	var jsVersion = 1.0;				// the version of javascript supported

	// this is a js1.1 code block, so make note that js1.1 is supported.
	jsVersion = 1.1;

	// write vbscript detection if we're not on mac.
	if(is.ie && is.win){ // don't write vbscript tags on anything but ie win
		document.write('<SCR' + 'IPT LANGUAGE=VBScript\> \n');
		document.write('on error resume next \n');
		document.write('flash2Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.2"))) \n');
		document.write('flash3Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.3"))) \n');
		document.write('flash4Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.4"))) \n');
		document.write('flash5Installed = (IsObject(CreateObject("ShockwaveFlash.ShockwaveFlash.5"))) \n');	
		document.write('<' + '/SCR' + 'IPT\> \n'); // break up end tag so it doesn't end our script
	}

	// next comes the standard javascript detection that uses the navigator.plugins array
	// we pack the detector into a function so it loads before we run it

	function detectFlash()
	{	
		if (navigator.plugins)
		{													// does navigator.plugins exist?
			if (navigator.plugins["Shockwave Flash 2.0"] 	// yes>> then is Flash 2 
			|| navigator.plugins["Shockwave Flash"]){		// or flash 3+ installed?

				// set convenient references to flash 2 and the plugin description
				var isVersion2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
				var flashDescription = navigator.plugins["Shockwave Flash" + isVersion2].description;
				// a flash plugin-description looks like this: Shockwave Flash 4.0 r5
				// so we can get the major version by grabbing the character before the period
				// note that we don't bother with minor version detection. do that in your movie with $version
				var flashVersion = parseInt(flashDescription.charAt(flashDescription.indexOf(".") - 1));

				// we know the version, now set appropriate version flags
				flash2Installed = flashVersion == 2;		
				flash3Installed = flashVersion == 3;
				flash4Installed = flashVersion == 4;
				flash5Installed = flashVersion == 5;
			}
		}
		
		// loop through all versions we're checking, and set actualFlashVersion to highest detected version
		for (var i = 2; i <= maxVersion; i++) {	
			if (eval("flash" + i + "Installed") == true) actualFlashVersion = i;
		}
		// if we're on webtv, the version supported is 2 (pre-summer2000, or 3, post-summer2000)
		// note that we don't bother sniffing varieties of webtv. you could if you were sadistic...
		if(is.webtv) actualFlashVersion = 2;	
		
		// uncomment next line to display flash version during testing
		// alert("version detected: " + actualFlashVersion);


		// we're finished getting the version. time to take the appropriate action

		return actualFlashVersion;
	}
	
