/***************************************

	Lightmaker.com
	Browser Detection Interrogation
	
	Coding by: Julian Wheaton
	  Updated: 12 September 2002
	  Version: 2.5
		
***************************************/


// Detect browser details
function detect()
{
	var ua=navigator.userAgent.toLowerCase();

	// Set up object, this will be passed back to the caller
	var o=new Object();

	// Version of detect
	o.detectversion=2.5;
	
	// Browser
	o.aol=(ua.indexOf('aol')!=-1)?true:false;
	o.opera=(ua.indexOf('opera')!=-1)?true:false;
	o.lynx=(ua.indexOf('lynx')!=-1)?true:false;
	o.ns=(!o.opera && navigator.appName.toLowerCase().indexOf('netscape')!=-1)?true:false;
	o.gecko=(ua.indexOf('gecko')!=-1)?true:false;
	o.ie=(!o.opera && ua.indexOf('msie')!=-1)?true:false;

	// Operating System
	o.unix=(ua.indexOf("x11")!=-1 || ua.indexOf("sunos")!=-1 || ua.indexOf("linux")!=-1)?true:false;
	o.mac=(ua.indexOf("mac")!=-1 || ua.indexOf("ppc")!=-1)?true:false;
	o.win=(ua.indexOf('win')!=-1)?true:false;

	// Web TV
	o.webtv=(ua.indexOf('webtv')!=-1)?true:false;

	// Can Detect Flash
	o.detectflash=false;

	// Determine browser version
	if (o.ie)
	{
		o.v=parseFloat(ua.substr(ua.indexOf("msie")+"msie".length));
	}
	else if (o.ns && ua.indexOf("netscape6/")!=-1)
	{
		o.v=parseFloat(ua.substr(ua.indexOf("netscape6/")+"netscape6/".length));
	}
	else if (o.ns && ua.indexOf("netscape/")!=-1)
	{
		o.v=parseFloat(ua.substr(ua.indexOf("netscape/")+"netscape/".length));
	}
	else if (o.ns)
	{
		o.v=parseFloat(navigator.appVersion);
	}
	else if (o.opera)
	{
		if (navigator.appName.toLowerCase().indexOf("opera")!=-1)
		{
			o.v=parseFloat(navigator.appVersion);
		}
		else
		{
			o.v=parseFloat(ua.substr(ua.indexOf("opera")+"opera".length));
		}
	}
	else if (o.aol)
	{
		o.v=parseFloat(ua.substr(ua.indexOf("aol")+"aol".length));
	}
	else
	{
		o.v=parseFloat(navigator.appVersion);
	}
	// Allow version to be read using .version and .v
	o.version=o.v;
	
	// Determine Flash version, 0 is returned if Flash can not be detected (on some browsers Flash can/may not be detected)
	o.flash=0;
	
	// Determine if RealPlayer version, 0 is return if RealPlayer can not be detected (on some browsers RealPlayer can/may not be detected)
	o.realplayer=0;
	
	// Use VBScript to detect for IE in Windows
	if (o.ie && o.win)
	{
		document.writeln('<script language="VBscript">');

		document.writeln('Function CheckMimeType(strName)');
		document.writeln('	on error resume next');
		document.writeln('	If ScriptEngineMajorVersion>=2 then');
		document.writeln('		CheckMimeType=False');
		document.writeln('		CheckMimeType=IsObject(CreateObject(strName))');
		document.writeln('		If (err) then');
		document.writeln('			CheckMimeType=False');
		document.writeln('		End If');
		document.writeln('	Else');
		document.writeln('		CheckMimeType=False');
		document.writeln('	End If');
		document.writeln('End Function');
		
		document.writeln('Function RealVersion(strName)');
		document.writeln('	on error resume next');
		document.writeln('	If ScriptEngineMajorVersion>=2 then');
		document.writeln('		RealVersion=0');
		document.writeln('		RealVersion=CreateObject(strName).GetVersionInfo()');
		document.writeln('		If (err) then');
		document.writeln('			RealVersion=0');
		document.writeln('		End If');
		document.writeln('	Else');
		document.writeln('		RealVersion=0');
		document.writeln('	End If');
		document.writeln('End Function');

		document.writeln('<'+'/'+'script>');

		var i=2;
		var mime=null;
		var blnflash=false;
		// Keep checking for versions of flash until the version is not present
		while (i<3 || blnflash==true)
		{
			i++;
			blnflash=(CheckMimeType("ShockwaveFlash.ShockwaveFlash."+i));
			if (blnflash==true)
			{
				mime=true;
			}
		}
		if (mime!=null)
		{
			// Set flash version
			o.flash=parseInt(i-1);
			o.detectflash=true;
		}
		// List of name RealPlayer may use (this is needed for CreateObject)
		var realnames=new Array("RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","rmocx.RealPlayer G2 Control","RealVideo.RealVideo(tm) ActiveX Control (32-bit)")
		var i=0;
		while (i<realnames.length)
		{
			var realv=parseFloat(RealVersion(realnames[i]));
			// Check for the highest version
			if (o.realplayer<realv)
			{
				// Set RealPlayer version
				o.realplayer=realv;
			}
			i++;
		}
	}
	else if (navigator.plugins)
	{
		// Check all the plugins
		var i=0;
		o.detectflash=true;
		while (i<navigator.plugins.length)
		{
			// If plugin name is Shockwave Flash
			if (navigator.plugins[i].name=="Shockwave Flash")
			{
				// Read version number
				var fv=parseFloat(navigator.plugins[i].description.substr("Shockwave Flash".length));
				// If version is higher than currently detected
				if (o.flash<fv)
				{
					// Set Flash version
					o.flash=fv;
				}
			}
			// If plugin name is for RealPlayer
			else if (navigator.plugins[i].name.indexOf("RealPlayer")>-1 || navigator.plugins[i].name.indexOf("RealAudio")>-1 || navigator.plugins[i].name.indexOf("RealVideo")>-1)
			{
				if (document.layers && !o.mac)
				{
					// Embed RealPlayer in page to find version
					document.write('<EMBED TYPE="audio/x-pn-realaudio-plugin" NAME="realplayerx" ID="realplayerx2" HEIGHT=0 WIDTH=0>');
					document.write('<'+'/'+'EMBED>');
					// Get version from the embed
					var realv=parseFloat(document.realplayerx.GetVersionInfo());
					// Check for the highest version
					if (o.realplayer<realv)
					{
						// Set RealPlayer version
						o.realplayer=realv;
					}
				}
				// Set version to 1 if RealPlayer exists but version cannot be found
				if (!o.realplayer>0)
				{
					o.realplayer=1;
				}
			}
			i++;
		}
	}

	// Return the created object
	return o;
}