// v.0.9b (c) 2006 fmethod.com

function FlashManager(params) {
	var checkList = {}; // the supported params are copies here and unknown params are detected and cause an error
	
	var enlistParam = function (param,def) {
		if (params[param] === undefined) params[param] = def;
		checkList[param] = params[param];
	}
	// list of supported params and their defaults
	enlistParam('movie','flash.swf');
	enlistParam('bgcolor',''); // expected format: "#XXXXXX"
	enlistParam('width','100%'); // accepts pixels (no unit) or %
	enlistParam('height','100%');	// accepts pixels (no unit) or %
	enlistParam('version','4,0,0,0'); // player version required for the content, in format A,B,C,D
	enlistParam('altContent','This content requires a new version of Flash Player. Please update your player <a href="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">here</a>.'); // shown when flash player isn't installed or too old
	enlistParam('flashVars',''); // pass data to Flash from a query string
	enlistParam('wmode','window'); // draw/control mode:  window (default), opaque, transparent
	enlistParam('name',''); // applies as "name" for <embed> and "id" for <object> and used for JS<->Flash communication
	enlistParam('swLiveConnect',false); // false (default), true: applies to <embed> to allow JS<->Flash communication
	enlistParam('expressInstall',false); // false (default), true: will pass special data via FlashVars required for Express Install
	
	// check for phantom params and dump on the object
	for (var i in params) {
		if (checkList[i] === undefined) alert("FlashManager: Unknown parameter \""+i+"\" passed to the constructor.");		
		this[i] = params[i];
	}
}

// encodes strings in form suitable for passing via GET and FlashVars to Flash
FlashManager.qscape = function(str) {
	str += '';
	str = str.split(' ');
	for (var i=0; i<str.length; i++) str[i] = escape(str[i]);
	return str.join('+');
}

// just writes the code to the document
// altBehaviour same as "getCode"
FlashManager.prototype.writeCode = function (altBehaviour) {
	document.write(this.getCode(altBehaviour));
}
// replaces the inner content of the element (if string is passed it's assumed an id) with the code
// altBehaviour same as "getCode"
FlashManager.prototype.replaceCodeIn = function (element,altBehaviour) {
	var reqVer = this.version.split(',');
	if (altBehaviour == "cancel" && !FlashManager.availFlash(reqVer[0],reqVer[1],reqVer[2])) return;
	
	if (typeof(element)=="string") element = document.getElementById(element);
	element.innerHTML = this.getCode(altBehaviour);
}

// returns code to embed flash content
// altBehaviour (when Flash is not available): 
//   "altContent" (default) shows altContent
//   "force" returns Flash code
//   "cancel" cancels the action and/or returns nothing
FlashManager.prototype.getCode = function (altBehaviour) {
	FlashManager.detectFlash();
	var reqVer = this.version.split(',');
	if (altBehaviour=="force" || FlashManager.availFlash(reqVer[0],reqVer[1],reqVer[2])) {
		if (this.expressInstall) {
			if (document.title.indexOf("Flash Player Installation") == -1) { // to ensure the document is not without a title
				document.title = document.title.slice(0, 47) + (document.title.length?" - ":"") + "Flash Player Installation";
			}
		}
		
		var cont = '';
		
		cont +=                           '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ';
		if (this.name) cont +=            'id="'+this.name+'" ';
		cont +=                           'codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version='+this.version+'" ';
		cont +=                           'width="'+this.width+'" height="'+this.height+'">';
		cont +=                           '<param name="movie" value="'+this.movie+(this.expressInstall?('?MMredirectURL='+FlashManager.qscape(window.location)+"&MMplayerType=ActiveX&MMdoctitle="+FlashManager.qscape(document.title)):"")+'" />';
		if (this.bgcolor) cont +=         '<param name="bgcolor" value="'+this.bgcolor+'" />';
		if (this.flashVars) cont +=       '<param name="flashvars" value="'+this.flashVars+'" />';
		if (this.wmode!="window") cont += '<param name="wmode" value="'+this.wmode+'" />';
		
		cont +=                           '<embed src="'+this.movie+(this.expressInstall?('?MMredirectURL='+FlashManager.qscape(window.location)+"&MMplayerType=PlugIn&MMdoctitle="+FlashManager.qscape(document.title)):"")+'" ';
		if (this.name) cont +=            'name="'+this.name+'" ';		
		if (this.bgcolor) cont +=         'bgcolor="'+this.bgcolor+'" ';
		if (this.swLiveConnect) cont +=   'swLiveConnect="true" ';		
		if (this.flashVars) cont +=       'flashvars="'+this.flashVars+'" ';
		if (this.wmode!="window") cont += 'wmode="'+this.wmode+'" ';
		cont +=                           'width="'+this.width+'" height="'+this.height+'" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
		cont +=                           '<\/object>';		
	} else if (altBehaviour=="cancel") {
		var cont = '';
	} else {
		var cont = this.altContent;
	}
	return cont;
}
FlashManager.isWinIE = ((navigator.appVersion.indexOf("MSIE") != -1) ? true : false) && ((navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false) && !((navigator.userAgent.indexOf("Opera") != -1) ? true : false);

FlashManager.detected = false; // to avoid detection running multiple times

FlashManager.detectFlash = function () { // returns array with major version, minor version and version revision (no flash = 0,0,0)
	if (!FlashManager.detected) {
		FlashManager.detected = true;
		
		// loop backwards until we find newest version
		if (FlashManager.isWinIE) {
			for (var i = 16; i > 0; i--) {
				var versionArray = FlashManager_detectFlashVB(i).split(" ")[1].split(",");
				if (versionArray[0]>0) break;
			}
		} else {
			var versionArray = FlashManager_detectFlashJS().split(".");
		}
		FlashManager.verMajor = parseInt(versionArray[0]);
		FlashManager.verMinor = parseInt(versionArray[1]);
		FlashManager.verRevision = parseInt(versionArray[2]);		
	}	
	return [FlashManager.verMajor, FlashManager.verMinor, FlashManager.verRevision];
}

// return true if equal or greater version detected
FlashManager.availFlash = function (reqMajorVer, reqMinorVer, reqRevision) {
	FlashManager.detectFlash();	
	var reqVector = reqMajorVer*1000000 + reqMinorVer*1000 + parseInt(reqRevision);
	var availVector = FlashManager.verMajor*1000000 + FlashManager.verMinor*1000 + FlashManager.verRevision;
	return availVector >= reqVector;
}

// helper functions that do the actual detection
if (FlashManager.isWinIE) {
	var s = '';
	s += '<script language="VBScript" type="text/vbscript">\n';
	s += 'Function FlashManager_detectFlashVB(i)\n';
		s += 'on error resume next\n';
		s += 'Dim swControl, swVersion\n';
		s += 'swVersion = "NA 0,0,0,0"\n';
		s += 'set swControl = CreateObject("ShockwaveFlash.ShockwaveFlash." + CStr(i))\n';
		s += 'if (IsObject(swControl)) then\n';
			s += 'swVersion = swControl.GetVariable("$version")\n';
		s += 'end if\n';
		s += 'FlashManager_detectFlashVB = swVersion\n';
	s += 'End Function\n';
	s += '<\/script>\n';
	document.write(s);
}
function FlashManager_detectFlashJS() {
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		var plugRefr = navigator.plugins["Shockwave Flash"];
		if (!plugRefr) plugRefr = navigator.plugins["Shockwave Flash 2.0"];
		 
		if (plugRefr) {
			var descArray = plugRefr.description.split(" ");
			var tempArrayMajor = descArray[2].split(".");
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];

			if ( descArray[3] != "" ) {
				var tempArrayMinor = descArray[3].split("r");
			} else {
				var tempArrayMinor = descArray[4].split("r");
			}
      var versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		} else {
			var flashVer = "0.0.0";
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = "4.0.0";
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = "3.0.0";
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = "2.0.0";
	// can't detect in all other cases
	else flashVer = "0.0.0";
	
	return flashVer;
} 