/*
Copyright (c) 2007, James Auldridge
All rights reserved.
Code licensed under the BSD License:
  http://www.jaaulde.com/license.txt

Version 1.0

Change Log:
	* 09 JAN 07 - Version 1.0 written

*/
//Preparing namespace
var jimAuld = window.jimAuld || {};
jimAuld.utils = jimAuld.utils || {};
/*
 * This library is a member of the jimAuld.utils namespace
 * The libary is useful for detecting Flash presence and major version with JavaScript
 * There are 4 methods in the flashsniffer library, each of which is documented separately below
 *
 */
jimAuld.utils.flashsniffer = {
	//Properties
	//Configurable: what was the last major release number of Flash?
	lastMajorRelease: 9,
	//End Configurables

	// installed : BOOL : TRUE if detect() finds Flash installed, false if not
	installed: false,
	// version : MIXED : INT representing major version number of installed Flash if detect() can find it, NULL if not
	version: null,

	//Methods
	/* METHOD: detect();
	 * PURPOSE: Determine if, and at what major version, Flash is installed
	 * ARGUMENTS: VOID
	 * RETURN: VOID (sets 'installed' and 'version' properties as documented above)
	 */
	detect: function()
	{
		var fp,fpd,fAX;
		if (navigator.plugins && navigator.plugins.length)
		{
			fp = navigator.plugins["Shockwave Flash"];
			if (fp)
			{
				jimAuld.utils.flashsniffer.installed = true;
				if (fp.description)
				{
					fpd = fp.description;
					jimAuld.utils.flashsniffer.version = fpd.charAt(fpd.indexOf('.')-1);
				}
			}
			else
			{
				jimAuld.utils.flashsniffer.installed = false;
			}
			if (navigator.plugins["Shockwave Flash 2.0"]){
				jimAuld.utils.flashsniffer.installed = true;
				jimAuld.utils.flashsniffer.version = 2;
			}
		}
		else if (navigator.mimeTypes && navigator.mimeTypes.length)
		{
			fp = navigator.mimeTypes['application/x-shockwave-flash'];
			if (fp && fp.enabledPlugin)
			{
				jimAuld.utils.flashsniffer.installed = true;
			}
			else
			{
				jimAuld.utils.flashsniffer.installed = false;
			}
		}
		else
		{
			for(var i=jimAuld.utils.flashsniffer.lastMajorRelease;i>=2;i--)
			{
				try
				{
					fAX = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+i);
					jimAuld.utils.flashsniffer.installed = true;
					jimAuld.utils.flashsniffer.version = i;
					break;
				}
				catch(e)
				{
				}
			}
			if(jimAuld.utils.flashsniffer.installed == null){
				try
				{
					fAX = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
					jimAuld.utils.flashsniffer.installed = true;
					jimAuld.utils.flashsniffer.version = 2;
				}
				catch(e)
				{
				}
			}
			if(jimAuld.utils.flashsniffer.installed == null)
			{
				jimAuld.utils.flashsniffer.installed = false;
			}
			fAX = null;
		}
	},
	/* METHOD: isVersion();
	 * PURPOSE: Determine if Flash is installed at a specified major version
	 * ARGUMENTS: exactVersion : INT : the exact version for which to check
	 * RETURN: BOOL : TRUE if Flash is at specified version, FALSE if not
	 */
	isVersion: function(exactVersion)
	{
		return (jimAuld.utils.flashsniffer.version!=null && jimAuld.utils.flashsniffer.version==exactVersion);
	},
	/* METHOD: isLatestVersion();
	 * PURPOSE: Determine if Flash is installed the latest released version of Flash (as configured in property 'lastMajorRelease' documented above)
	 * ARGUMENTS: VOID
	 * RETURN: BOOL : TRUE if Flash is at latest version, FALSE if not
	 */
	isLatestVersion: function()
	{
		return (jimAuld.utils.flashsniffer.version!=null && jimAuld.utils.flashsniffer.version==jimAuld.utils.flashsniffer.lastMajorRelease);
	},
	/* METHOD: meetsMinVersion();
	 * PURPOSE: Determine if Flash is installed at a specified minimum version
	 * ARGUMENTS: minVersion : INT : the version number that installed Flash should be at OR above
	 * RETURN: BOOL : TRUE if Flash is at minimum version, FALSE if not
	 */
	meetsMinVersion: function(minVersion)
	{
		return (jimAuld.utils.flashsniffer.version!=null && jimAuld.utils.flashsniffer.version>=minVersion);
	}
};
//Run detect() during page load so that the properties are immediately available.
jimAuld.utils.flashsniffer.detect();
	