/**
 * Copyright (c) Copyright (c) 2007, Carl S. Yestrau All rights reserved.
 * Code licensed under the BSD License: http://www.featureblend.com/license.txt
 * Version: 1.0.3
 *
 * Documentation and downloads at
 *
 * == Properties ==
 * bool FlashDetect.installed
 * number FlashDetect.major
 * number FlashDetect.minor
 * number FlashDetect.revision
 * number FlashDetect.revisionStr
 * string FlashDetect.activeXVersion
 *
 * == Methods ==
 * bool FlashDetect.majorAtLeast(number majorNumber)
 */
var FlashDetect = new function()
{
	var self = this;

	self.installed = false;
	self.raw = "";
	self.major = -1;
	self.minor = -1;
	self.revision = -1;
	self.revisionStr = "";

	var activeXDetectRules = [
		{
			"name":"ShockwaveFlash.ShockwaveFlash.7",
			"version":function(obj)
			{
				return getActiveXVersion(obj);
			}
		},
		{
			"name":"ShockwaveFlash.ShockwaveFlash.6",
			"version":function(obj)
			{
				var version = "6,0,21";
				try
				{
					obj.AllowScriptAccess = "always";
					version = getActiveXVersion(obj);
				}
				catch(err)
				{
				}
				return version;
			}
		},
		{
			"name":"ShockwaveFlash.ShockwaveFlash",
			"version":function(obj)
			{
				return getActiveXVersion(obj);
			}
		}
	];
	var getActiveXVersion = function(activeXObj)
	{
		var version = -1;
		try
		{
			version = activeXObj.GetVariable("$version");
		}
		catch(err)
		{
		}
		return version;
	};
	var getActiveXObject = function(name)
	{
		var obj = -1;
		try
		{
			obj = new ActiveXObject(name);
		}
		catch(err)
		{
		}
		return obj;
	};
	var parseActiveXVersion = function(str)
	{
		var versionArray = str.split(",");//replace with regex
		return {
			"raw":str,
			"major":parseInt(versionArray[0].split(" ")[1], 10),
			"minor":parseInt(versionArray[1], 10),
			"revision":parseInt(versionArray[2], 10),
			"revisionStr":versionArray[2]
		};
	};
	var parseStandardVersion = function(str)
	{
		var descParts = str.split(/ +/);
		var majorMinor = descParts[2].split(/\./);
		var revisionStr = descParts[3];
		return {
			"raw":str,
			"major":parseInt(majorMinor[0], 10),
			"minor":parseInt(majorMinor[1], 10),
			"revisionStr":revisionStr,
			"revision":parseRevisionStrToInt(revisionStr)
		};
	};
	var parseRevisionStrToInt = function(str)
	{
		return parseInt(str.replace(/[a-zA-Z]/g, ""), 10) || self.revision;
	};
	self.majorAtLeast = function(version)
	{
		return self.major >= version;
	};
	self.FlashDetect = function()
	{
		if (navigator.plugins && navigator.plugins.length > 0)
		{
			var type = 'application/x-shockwave-flash';
			var mimeTypes = navigator.mimeTypes;
			if (mimeTypes && mimeTypes[type] && mimeTypes[type].enabledPlugin && mimeTypes[type].enabledPlugin.description)
			{
				var version = mimeTypes[type].enabledPlugin.description;
				var versionObj = parseStandardVersion(version);
				self.raw = versionObj.raw;
				self.major = versionObj.major;
				self.minor = versionObj.minor;
				self.revisionStr = versionObj.revisionStr;
				self.revision = versionObj.revision;
				self.installed = true;
			}
		}
		else if (navigator.appVersion.indexOf("Mac") == -1 && window.execScript)
		{
			var version = -1;
			for (var i = 0; i < activeXDetectRules.length && version == -1; i++)
			{
				var obj = getActiveXObject(activeXDetectRules[i].name);
				if (typeof obj == "object")
				{
					self.installed = true;
					version = activeXDetectRules[i].version(obj);
					if (version != -1)
					{
						var versionObj = parseActiveXVersion(version);
						self.raw = versionObj.raw;
						self.major = versionObj.major;
						self.minor = versionObj.minor;
						self.revision = versionObj.revision;
						self.revisionStr = versionObj.revisionStr;
					}
				}
			}
		}
	}();
};
FlashDetect.release = "1.0.3";
