/* jslint verified 2008.10.02 */
/*jslint browser: true, onevar: true, undef: true, white: false, eqeqeq: true */
/*globals ActiveXObject, activeXVersion */
// Flash Player Version Detection - Rev 1.6
// Detect Client Browser type
// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
// Modified by Derek Prothro 5/2008

var FlashDetect = function () {
	var self = {},
		isIE  = (navigator.appVersion.toUpperCase().indexOf("MSIE") !== -1) ? true : false,
		isWin = (navigator.appVersion.toLowerCase().indexOf("win") !== -1) ? true : false,
		isOpera = (navigator.userAgent.toLowerCase().indexOf("opera") !== -1) ? true : false;
	self.mustBeGreaterThanVersion = "9.0.114";
	self.accepted = function () {
		var minParts = self.mustBeGreaterThanVersion.split("."),
			ver = self.version(),
			verParts = ver.split("."),
			len = Math.min(minParts.length, verParts.length),
			yes = false,
			i, minVerInt, verInt;
		for (i=0; i<len; ++i) {
			minVerInt = parseInt(minParts[i], 10);
			verInt = parseInt(verParts[i], 10);
			if (verInt > minVerInt) { yes = true; break; }
			else if (verInt < minVerInt) { yes = false; break; }
		}
		return yes;
	};
	
	self.version = function () {
		// NS/Opera version >= 3 check for Flash plugin in plugin array
		var flashVer = null,
			swVer2, flashDescription, descArray,
			tempArrayMajor, versionMajor, versionMinor,
			versionRevision;
		
		if (navigator.plugins !== null && navigator.plugins.length > 0) {
			if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
				swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
				flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
				descArray = flashDescription.split(" ");
				tempArrayMajor = descArray[2].split(".");
				versionMajor = tempArrayMajor[0];
				versionMinor = tempArrayMajor[1];
				versionRevision = descArray[3];
				if (versionRevision === "") {
					versionRevision = descArray[4];
				}
				if (versionRevision[0] === "d") {
					versionRevision = versionRevision.substring(1);
				} else if (versionRevision[0] === "r") {
					versionRevision = versionRevision.substring(1);
					if (versionRevision.indexOf("d") > 0) {
						versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
					}
				}
				flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
				//alert("flashVer="+flashVer);
			}
		} else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") !== -1) {
			// MSN/WebTV 2.6 supports Flash 4
			flashVer = 4;
		} else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") !== -1) {
			// WebTV 2.5 supports Flash 3
			flashVer = 3;
		} else if (navigator.userAgent.toLowerCase().indexOf("webtv") !== -1) {
			// older WebTV supports Flash 2
			flashVer = 2;
		} else if ( isIE && isWin && !isOpera ) {
			flashVer = activeXVersion();
		}	
		return flashVer;
	};
	
	function activeXVersion() {
		var version = null, axo, matches;
		
		try {
			// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
			// version will be set for 7.X or greater players
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
			version = axo.GetVariable("$version");
		} catch (e) {}
	
		if (!version) {
			try {
				// version will be set for 6.X players only
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
				
				// installed player is some revision of 6.0
				// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
				// so we have to be careful. 
				
				// default to the first public version
				version = "WIN 6,0,21,0";
	
				// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
				axo.AllowScriptAccess = "always";
	
				// safe to call for 6.0r47 or greater
				version = axo.GetVariable("$version");
	
			} catch (ex) {}
		}
		if (!version) {
			try {
				// version will be set for 4.X or 5.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = axo.GetVariable("$version");
			} catch (exc) {}
		}
	
		if (!version) {
			try {
				// version will be set for 3.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = "WIN 3,0,18,0";
			} catch (exce) {}
		}
		if (!version) {
			try {
				// version will be set for 2.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
				version = "WIN 2,0,0,11";
			} catch (excep) {}
		}
		matches = version.match(/^WIN (\d+),(\d+),(\d+)/);
		if (matches && matches.length === 4) {
			version = matches[1] + "." + matches[2] + "." + matches[3];
		}
		return version;
	}
	
	return self;
}();
