flashFourInstalled=false;
flashFiveInstalled=false;


function Trim(inString)
{
	var retVal="";
	var start=0;
	while ((start < inString.length) && (inString.charAt(start) == ' '))
	{
    	++start;
	}
	var end=inString.length;
	while ((end > 0) && (inString.charAt(end - 1) == ' '))
	{
		--end;
	}
	retVal=inString.substring(start, end);
	return retVal;
}

function BrowserDetector(ua)
{
	// Defaults
	this.browser="Unknown";
	this.platform="Unknown";
	this.version="";
	this.majorver="";
	this.minorver="";

	uaLen=ua.length;

	var preparens="";
	var parenthesized="";

	i=ua.indexOf("(");
	if (i>=0)
	{
		preparens=Trim(ua.substring(0,i));
		parenthesized=ua.substring(i+1,uaLen);
		j=parenthesized.indexOf(")");
		if (j>=0)
		{
			parenthesized=parenthesized.substring(0,j);
		}
	}
	else
	{
		preparens=ua;
	}

	var browVer=preparens;

	var tokens=parenthesized.split(";");
	var token="";
	for (var i=0; i < tokens.length; i++)
	{
		token=Trim(tokens[i]);
		if (token == "compatible")
		{
		}
		else if (token.indexOf("MSIE") >= 0)
		{
			browVer=token;
		}
		else if (token.indexOf("Opera") >= 0)
		{
			browVer=token;
		}
		else if ((token.indexOf("X11") >= 0) || (token.indexOf("SunOS") >= 0) || (token.indexOf("Linux") >= 0))
		{
			this.platform="Unix";
		}
		else if (token.indexOf("Win") >= 0)
		{
			this.platform=token;
		}
		else if ((token.indexOf("Mac") >= 0) || (token.indexOf("PPC") >= 0))
		{
			this.platform=token;
		}
	}
	
	var msieIndex=browVer.indexOf("MSIE");
	if (msieIndex>=0)
	{
		browVer=browVer.substring(msieIndex,browVer.length);
	}

	var leftover="";
	if (browVer.substring(0, "Mozilla".length) == "Mozilla")
	{
		this.browser="Netscape";
		leftover=browVer.substring("Mozilla".length+1, browVer.length);
	}
	else if (browVer.substring(0, "Lynx".length) == "Lynx")
	{
		this.browser="Lynx";
		leftover=browVer.substring("Lynx".length+1, browVer.length);
	}
	else if (browVer.substring(0, "MSIE".length) == "MSIE")
	{
		this.browser="IE";
		leftover=browVer.substring("MSIE".length+1, browVer.length);
	}
	else if (browVer.substring(0, "Microsoft Internet Explorer".length) =="Microsoft Internet Explorer")
	{
		this.browser="IE"
		leftover=browVer.substring("Microsoft Internet Explorer".length+1,browVer.length);
	}
	else if (browVer.substring(0, "Opera".length) == "Opera")
	{
		this.browser="Opera"
		leftover=browVer.substring("Opera".length+1, browVer.length);
	}

	leftover=Trim(leftover);

	// # Try to get version info out of leftover stuff
	i=leftover.indexOf(" ");
	if (i >= 0)
	{
		this.version=leftover.substring(0, i);
	}
	else
	{
		this.version=leftover;
	}
	j=this.version.indexOf(".");
	if (j >= 0)
	{
		this.majorver=this.version.substring(0,j);
		this.minorver=this.version.substring(j+1, this.version.length);
	}
	else
	{
		this.majorver=this.version;
	}
}



// this is where we write out the VBScript for MSIE Windows
var WM_startTagFix='</';
var msie_windows=0;
if ((navigator.userAgent.indexOf('MSIE') != -1) && (navigator.userAgent.indexOf('Win') != -1))
{
	msie_windows=1;
	document.writeln('<script language="VBscript">');
	document.writeln('\'This will scan for plugins for all versions of Internet Explorer that have a VBscript engine version 2 or greater.');
	document.writeln('\'This includes all versions of IE4 and beyond and some versions of IE 3.');
	document.writeln('Dim WM_detect_through_vb');
	document.writeln('WM_detect_through_vb=0');
	document.writeln('If ScriptEngineMajorVersion >= 2 then');
	document.writeln('  WM_detect_through_vb=1');
	document.writeln('End If');
	document.writeln('Function WM_activeXDetect(activeXname)');
	document.writeln('  on error resume next');
	document.writeln('  If ScriptEngineMajorVersion >= 2 then');
	document.writeln('     WM_activeXDetect=False');
	document.writeln('     WM_activeXDetect=IsObject(CreateObject(activeXname))');
	document.writeln('     If (err) then');
	document.writeln('        WM_activeXDetect=False');
	document.writeln('     End If');
	document.writeln('   Else');
	document.writeln('     WM_activeXDetect=False');
	document.writeln('   End If');
	document.writeln('End Function');
	document.writeln(WM_startTagFix+'script>');
}

function WM_pluginDetect(plugindescription, pluginxtension, pluginmime, activeXname)
{
	//This script block will test all user agents that have a real plug-in array
	//(i.e. Netscape) and set the variables, otherwise it directs the routine
	// to WM_activeXDetect to detect the activeX control.
	// First define some variables
	var i,plugin_undetectable=0,detected=0, daPlugin=new Object();

	// Then we check to see if it's an MSIE browser that you can actually

	// check for the plugin in question. 

	if (msie_windows && WM_detect_through_vb)
	{
		plugin_undetectable=0;
	}
	else
	{
		plugin_undetectable=1;
	}
	// If it has a real plugins or mimetypes array, we look there for the plugin first
	if(navigator.plugins)
	{
		numPlugins=navigator.plugins.length;
		if (numPlugins > 1)
		{
			if (navigator.mimeTypes && navigator.mimeTypes[pluginmime] && navigator.mimeTypes[pluginmime].enabledPlugin && (navigator.mimeTypes[pluginmime].suffixes.indexOf(pluginxtension) != -1))
			{ // seems like we have it, let's just make sure and check the version (if specified)
				if ((navigator.appName == 'Netscape') && (navigator.appVersion.indexOf('4.0') != -1))
				{ // stupid, stupid Netscape can't handle the references to navigator.plugins by number, sooo...
					for(i in navigator.plugins)
					{
						if ((navigator.plugins[i].description.indexOf(plugindescription) != -1) || (i.indexOf(plugindescription) != -1))
						{ // some versions of quicktime have no description. feh!
							detected=1;
							break;
						}
					}
				}
				else
				{
					for (i=0; i < numPlugins; i++)
					{
						daPlugin=navigator.plugins[i];
						if ((daPlugin.description.indexOf(plugindescription) != -1) || (daPlugin.name.indexOf(plugindescription) != -1))
						{
							detected=1;
							break;
						}
					}
				}
				// Mac weirdness
				if (navigator.mimeTypes[pluginmime] == null)
				{
					detected=0;
				}
			}
			return detected;
		}
		else if((msie_windows == 1) && !plugin_undetectable)
		{
			return WM_activeXDetect(activeXname);
		}
		else
		{ 		
			return 0;
		}
	}
	else
	{
		return 0;
	}
}


// this next function just makes it easy to detect the common plugins

function WM_easyDetect(whichPlugin)
{
    // this function just makes it easy to do basic plug-in detection without

    // knowing all the mimetypes and activeX names and such
    var isItThere=0;
    if( (whichPlugin == 'flash') || (whichPlugin == 'Flash') ) {
	isItThere=WM_pluginDetect('Flash', 'swf', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash');
    } else if( (whichPlugin == 'director') || (whichPlugin == 'Director') ) {
	isItThere=WM_pluginDetect('Shockwave', 'dcr', 'application/x-director', 'SWCtl.SWCtl.1');
    } else if( (whichPlugin == 'quicktime') || (whichPlugin == 'Quicktime') || (whichPlugin == 'QuickTime') ) {
	isItThere=WM_pluginDetect('QuickTime', 'mov', 'video/quicktime', '');
    } else if( (whichPlugin == 'realaudio') || (whichPlugin == 'Realaudio') || (whichPlugin == 'RealAudio') ) {
	isItThere=(WM_pluginDetect('RealPlayer', 'rpm', 'audio/x-pn-realaudio-plugin', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)')) || (WM_pluginDetect('RealPlayer', 'rpm', 'audio/x-pn-realaudio-plugin','rmocx.RealPlayer G2 Control')) || (WM_pluginDetect('RealPlayer', 'rpm', 'audio/x-pn-realaudio-plugin','RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)')) || (WM_pluginDetect('RealPlayer', 'rpm', 'audio/x-pn-realaudio-plugin','RealVideo.RealVideo(tm) ActiveX Control (32-bit)'))
    } else {

	alert('You need to tell me which plug-in to look for, like so:\n\n' + '          WM_easyDetect(\'flash\')\n\n' + '          WM_easyDetect(\'director\')\n\n' + '          WM_easyDetect(\'quicktime\')\n\n' + '          WM_easyDetect(\'realaudio\')');
    }
    return isItThere;
}


// Returns whether or not version 'vrsn' (or above) of Flash 
// is installed and enabled.
function detectFlashMime(vrsn)
{
	var plugin=( (navigator.mimeTypes && navigator.mimeTypes["application/x-shockwave-flash"]) ? navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin : 0);
	return (plugin && parseInt(plugin.description.substring(plugin.description.indexOf(".")-1)) >= vrsn);
}


function interrogate()
{
	var obj=new Object();
	
	var bd=new BrowserDetector(navigator.userAgent);
	var mac=0;
	
	obj.v=bd.version;
	obj.vmajor=bd.majorver;
	obj.vminor=bd.minorver;
	
	obj.ie=(bd.browser=="IE")?true:false;
	obj.ns=(bd.browser=="Netscape")?true:false;
	obj.aol=(navigator.userAgent.indexOf("AOL")>-1)?true:false;
	obj.gecko=(navigator.userAgent.indexOf("Gecko")>-1)?true:false;
	if (obj.gecko && (navigator.userAgent.indexOf("Netscape6")>-1))
	{
		obj.v=navigator.userAgent.substr(navigator.userAgent.indexOf("Netscape6/")+"Netscape6/".length,30)
		var j=obj.v.indexOf(".");
		if (j >= 0)
		{
			obj.vmajor=obj.v.substring(0,j);
			obj.vminor=obj.v.substring(j+1, obj.v.length);
		}
		else
		{
			obj.vmajor=obj.v;
			obj.vminor=0;
		}
	}
	var i=0;
	var n='';
	while (i<obj.vminor.length)
	{
		if ("0123456789".indexOf(obj.vminor.charAt(i))>-1)
		{
			n+=obj.vminor.charAt(i);
		}
		else
		{
			break;
		}
		i++;
	}
	obj.vminor=eval('0.'+n);

	obj.lynx=(bd.browser=="Lynx")?true:false;
	obj.opera=(bd.browser=="Opera")?true:false;
	
	obj.win=(bd.platform.indexOf("Win")>=0)?true:false;
	obj.unix=(bd.platform.indexOf("Unix")>=0)?true:false;
	obj.mac=(bd.platform.indexOf("Mac") >= 0) || (bd.platform.indexOf("PPC") >= 0)?true:false;
	
	if (bd.platform.indexOf("Mac")>=0)
	{
		mac=1;
	}
	if (!((bd.browser=="IE") && (mac==1)))
	{
		// Check for Flash 4 or 5
		//var haveFlash=(bd.browser.indexOf("IE") >= 0) ? (flashFourInstalled || flashFiveInstalled) : (detectFlashMime(4) || detectFlashMime(5));

		var haveFlashFour, haveFlashFive;
		haveFlashFour=false;
		haveFlashFive=false;

		if (bd.browser.indexOf("IE") >= 0)
		{
			haveFlashFour=flashFourInstalled;
			haveFlashFive=flashFiveInstalled;
		}
		else
		{
			haveFlashFour=detectFlashMime(4);
			haveFlashFive=detectFlashMime(5);
		}
	}

	obj.flash4=haveFlashFour;
	obj.flash5=haveFlashFive;
	
	return obj;
}

