/*******************************************************
*	FLASH DETECTION - km 05-2005
*	Slapped some odds and ends together to make this robust detection 
*	script. It handles all flavors of flash, from flat to those that import vars.
*	Exposed variables are:
*		flash.installed -> true/false
*		flash.version -> #.0
*
*	There is also backward compatibility for old calls. No re-writes needed 
*	but the new call should be used in all future pages. One major thing to 
*	note with the new call is that you only need to define the attributes you
*	will use. The required ones are src, width and height. The other optional
*	attributes that can be used are:
*		altcontent : alternative content (HTML or text)
*		flashvars	: variables that get loaded into the flash at runtime
*		redirect		: specifies a url that the user should be redirected to if they don't have flash.
*
*	USAGE:
*
######################## 
FAIRLY BASIC NEW CALL:

		drawFlash(
			{
			'src' : '/images/games/games_hdr_main.swf', 
			'width' : '760', 
			'height' : '50',
			'altcontent' : '<img src="/images/games/games_hdr_main.gif" border=0>'
			}
		);
		
######################## 
CALL WITH FLASH VARIABLES:

		var videoURL = 'missing_0311_webspot';
		var episodeText = '<b>Next Episode:<\/b> Something happens which gets described here &#151; very complicated. Let\'s make this 4 lines for fun.';	
		
		drawFlash(
			{
			'src' : '/images/shows/missing/1800_homeflash_extdata.swf', 
			'width' : '565', 
			'height' : '192',
			'altcontent' : 
				'<img src="/images/shows/missing/missing_index_main.jpg" border=0 usemap="#missing_index_main">'+
				'<MAP NAME="missing_index_main">'+
				'<AREA SHAPE="rect" ALT="Get a Sneak Peak" COORDS="8,124,133,148" '+
				'HREF="javascript:openWindow(\'/shows/missing/video/index.html?url=/shows/missing/' + videoURL + '&date=081603\',\'video\',468,335,0)"><\/MAP>',
			'flashvars' : 'videoURL=' + videoURL + '&episodeText=' + episodeText
			}
		);

######################## 
LEGACY CALL:
Arguments must be in this order, and all must be specified. if there is no value, an empty string must be used.
Order: url, width, height, altcontent, required version

		drawFlash(
			'/astro/indexflash/astro_index_tealeaves.swf',
			325,
			172,
			'<a href="/astro/tea_leaves/index.html"><img src="/images/astro/astro_index_tea.gif" border=0><\/a>',
			''
			);

*******************************************************/

//flash: version 8 - get future cab updates from macromedia
var f_clsid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000";
var f_cabURL = "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=";
var f_dlURL = "http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash";
var f_mime = "application/x-shockwave-flash";
var f_version = "8,0,0,0";

/*******************************************************
FLASH DETECT 2.5
All code by Ryan Parman and mjac, unless otherwise noted.
(c) 1997-2004 Ryan Parman and mjac
http://www.skyzyx.com
*******************************************************/

// This script will test up to the following version.
flash_versions = 20;

// Initialize variables and arrays
var flash = new Object();
flash.installed=false;
flash.version='0.0';

// Dig through Netscape-compatible plug-ins first.
if (navigator.plugins && navigator.plugins.length) {
	for (x=0; x < navigator.plugins.length; x++) {
		if (navigator.plugins[x].name.indexOf('Shockwave Flash') != -1) {
			flash.version = navigator.plugins[x].description.split('Shockwave Flash ')[1];
			flash.installed = true;
			break;
		}
	}
}

// Then, dig through ActiveX-style plug-ins afterwords
else if (window.ActiveXObject) {
	for (x = 2; x <= flash_versions; x++) {
		try {
			oFlash = eval("new ActiveXObject('ShockwaveFlash.ShockwaveFlash." + x + "');");
			if(oFlash) {
				flash.installed = true;
				flash.version = x + '.0';
			}
		}
		catch(e) {}
	}
}

// Create sniffing variables in the following style: flash.ver[x]
// Modified by mjac
flash.ver = Array();
for(i = 4; i <= flash_versions; i++) {
	eval("flash.ver[" + i + "] = (flash.installed && parseInt(flash.version) >= " + i + ") ? true : false;");
}


/*******************************************************
note: Javascript v.1.2 required
*******************************************************/
var requiredVersion = "";
var altContent = "";
var redirectURL = "";

function drawFlash() {

	var args = {};

	if (arguments.length>1) {
		//more than 1 arg, must be a legacy call - getVars provides backward compatibility
		args = getVars(arguments);
	}
	else {
		args = arguments[0]; //hash
		//if there is altcontent, set the global. when done copying, set it to blank
		altContent = args['altcontent'] || '';	
		args['altcontent'] = '';
  	}
  	
  	//some of these params should have defaults, but overrides are still possible
	if ((typeof args['allowScriptAccess']=='undefined')||(args['allowScriptAccess']==""))
		{ args['allowScriptAccess'] = "sameDomain"	}
	if ((typeof args['quality']=='undefined')||(args['quality']==""))
		{ args['quality'] = "high" }
	
	if ((typeof args['movie']=='undefined')||(args['movie']==""))
		{ args['movie'] = args['src'] }
		
	if ((typeof args['play']=='undefined')||(args['play']==""))
		{ args['play'] = "true" }
		
	if ((typeof args['menu']=='undefined')||(args['menu']==""))
		{ args['menu'] = "false" }
		
	if (args['wmode'] != 'no-param') {	
		if ((typeof args['wmode']=='undefined')||(args['wmode']==""))
			{ args['wmode'] = "opaque" }
	}
//	if ((typeof args['wmode']=='undefined')||(args['wmode']==""))
//		{ args['wmode'] = "no-param" }
 
 	var versionRequirement = 
		( (typeof args['requiredversion']!='undefined') && (args['requiredversion']!="") );
		
	var flashRedirect = 
		( (typeof args['redirect']!='undefined') && (args['redirect']!="") );	
		
	var altContentProvided = (altContent!="");
		
	//km changed 03/07/06 - if there is a vers req, why would we blank it?
	//dont we wanna know what it is?
	//if (versionRequirement) { args['requiredversion'] = ""; }
	
	if (flashRedirect) {
		redirectURL = args['redirect'];
		args['redirect'] = '';
	}
	
  	var ret = _getTagParams(args, "", "movie", f_clsid, f_cabURL, f_dlURL, f_mime, f_version);
 	var tagHTML = _generateTag(ret.objAttrs, ret.params, ret.embedAttrs);

	//if there is no version requirement...
	if (!versionRequirement) 
	{
		if (flashRedirect) 
		{
			window.location = "http://" + location.hostname + redirectURL;
		}
		//some version of flash - try to load it
		if (flash.installed)
		{
			//alert('some version of flash installed');
			document.write(tagHTML);
		}
		//no flash but altcontent given in its place
		if (!flash.installed & altContentProvided)
		{
			//alert('no flash but alt content given');
			getFlashMsg(args['width'],args['height']);
			document.write(altContent);
		}
		//no flash and no alt content, let the browser handle
		if (!flash.installed & !altContentProvided)
		{
			//alert('no flash and no alt content');
			document.write(tagHTML);
		}
	}
	else 
	{
		if (flash.version < args['requiredversion'])
		{
		//alert('required version necessary');
			getFlashMsg(args['width'],args['height']);
			document.write(altContent);
		}
		else
		{
			document.write(tagHTML);
		}
	}
	
}

function getFlashMsg(w,h) {
	var noflashmsg = '<span style="color:#FFFFFF;font-family:verdana;font-size:9px"><a href="'+f_dlURL+'" target="_blank" style="color:#CCCCCC">Our site uses the Flash plug-in version ' + f_version.split(',')[0] + ' or greater</a>. ';
	if (w<400) noflashmsg+='<br>';
	noflashmsg += '<a href="'+f_dlURL+'" target="_blank" style="color:#CCCCCC">For the full experience, download it by clicking here</a>.</span>';
	
	//write the img hugger
	if ( (altContent.indexOf('<table')!=-1) || (altContent.indexOf('<img')!=-1) )
	{
		document.write(
			'<table width='+w+' cellpadding=2 cellspacing=0>',
			'<tr bgcolor="#000000">','<td align=center>'+noflashmsg+'</td>',
			'</tr>','</table>'
			);
	}
	//write the little text and/or link button
	else 
	{
		noflashmsg = '<a href="'+f_dlURL+'" target="_blank"><img src="/images/common/get_flash_player.gif" border="0"></a><br>' 
		//noflashmsg = noflashmsg.replace(/F{6}/,'000000');
		document.write(noflashmsg);
	}
}

function _getTagParams(args, ext, srcParamName, classid, codebase, pluginsPage, mimeType, cbVers){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  
  for (key in args) {
		var currArg = key.toLowerCase();
		
		switch (currArg){	
		  case "codebase":
		  case "pluginspage":
		  case "type":
		  case "classid":
			break;
		  case "src":
		  case "movie":	
			args[key] = _addExtension(args[key], ext);
			ret.embedAttrs["src"] = args[key];
			ret.params[srcParamName] = args[key];
			break;
		  case "minversion":
			cbVers = args[key];
			break;
		  case "width":
		  case "height":
		  case "align":
		  case "vspace": 
		  case "hspace":
		  case "class":
		  case "title":
		  case "accesskey":
		  case "name":
		  case "id":
		  case "tabindex":
			ret.embedAttrs[key] = ret.objAttrs[key] = args[key];
			break;
		  default:
			ret.embedAttrs[key] = ret.params[key] = args[key];
		}
  }
  
  ret.objAttrs["classid"] = classid;
  ret.objAttrs["codebase"] = codebase + cbVers;
  ret.embedAttrs["pluginspage"] = pluginsPage;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}

//v1.0
function _addExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}

function _generateTag(objAttrs, params, embedAttrs) 
{ 
  var str = '<object ';
  for (var i in objAttrs)
	str += i + '="' + objAttrs[i] + '" ';
 	str += '>';
  
  for (var i in params)
    str += '<param name="' + i + '" value="' + params[i] + '">';
	str += '<embed ';
  
  for (var i in embedAttrs)
  	str += i + '="' + embedAttrs[i] + '" ';
 	str += ' ></embed></object>';

  return str;
}


/******************************************************
Legacy Functions 
******************************************************/

//** 5-2005 for Backward Comp. **//
function getOtherParams(paramStr) {
	var newParamSet = {};
	var paramArray = paramStr.split(",");
	var paramHash = new Array();
	
	var i;
	for (i=0;i<paramArray.length;i++) {
		if (paramArray[i].indexOf("::")!=-1) 	{
			paramHash[paramArray[i].split("::")[0]] = paramArray[i].split("::")[1];
		}
		else {
			paramHash[paramArray[i].split("=")[0]] = paramArray[i].split("=")[1];
		}		
	}
	
	var j;
	for (j in paramHash) {
		if (j.toLowerCase() == 'flashvars') {
			newParamSet['flashVars'] = flashStringEncode(paramHash[j]);
		}
		else
		{
			newParamSet[j] = paramHash[j];
		}
	}
	
	return newParamSet;
}

//** 5-2005 for Backward Comp. **//
function getVars(arglist) {
	var newArgList = 
		{ 
		'src' 					: arglist[0],
		'width' 				: arglist[1],
		'height' 			: arglist[2]
		}
		
	altContent = arglist[3] || '';
	var otherparams = arglist[4] || '';
	var flashver = arglist[5] || '';
	
	if (flashver != "") {
		requiredVersion = flashver;
	}
	
	if (otherparams != "") {
		var paramList = getOtherParams(otherparams);
		
		for (p in paramList) {
			newArgList[p] = paramList[p];	
		}
	}
	
	return newArgList;
}

function addOtherParams(params,type) {
	//user will add name value pairs like "external=foo,swfURL=foobar"
	//this function will split this and return useful HTML to contribute
	//to the building of the 'oeTags' string in drawFlash() at runtime.
	//added by km031003
	if (!params) { 
		return ""; 
	} else {
		var oeTagHTML = "";	
		var paramArray = params.split(",");
		
		var paramHash = new Array();
		var i;
		for (i=0;i<paramArray.length;i++) {
			if (paramArray[i].indexOf("::")!=-1) 	{
				paramHash[paramArray[i].split("::")[0]] = paramArray[i].split("::")[1];
			}
			else {
				paramHash[paramArray[i].split("=")[0]] = paramArray[i].split("=")[1];
			}		
		}
		var j;
		if (type == 'param') {
			for (j in paramHash) {
				if (j.toLowerCase() == 'flashvars') {
					paramHash[j] = flashStringEncode(paramHash[j]);
				}
				oeTagHTML += '<param name="'+j+'" value="'+paramHash[j]+'">\n';
	
	
			}
		} else if (type == 'embed') {
			for (j in paramHash) {
				if (j.toLowerCase() == 'flashvars') {
					paramHash[j] = flashStringEncode(paramHash[j]);				
				}
				oeTagHTML += j+'="'+paramHash[j]+'" ';
			}		
		}
		return oeTagHTML;
	}
}

function flashStringEncode(string) {
	//we're going to be splitting on & later
	//so let's get entities out of the way for now
	var charEntity = /&(#?[\w]+;)/g;
	var charEntityFix = /\^\^\^/g;
	string = string.replace(charEntity,'^^^$1');
	var flashVarsArray = string.split("&");
	var k = 0;
	var tempName, tempValue;
	var encodedSpace = new RegExp(" ","g");
	for (k=0;k<flashVarsArray.length;k++) {
		// if there's no = something's wrong, don't bother
		if (flashVarsArray[k].indexOf('=') != -1) {
			//make the entities nice nice.
			flashVarsArray[k] = flashVarsArray[k].replace(charEntityFix,'&');
			tempName = flashVarsArray[k].substr(0,flashVarsArray[k].indexOf('=')+1);
			tempValue = flashVarsArray[k].substr(flashVarsArray[k].indexOf('=')+1);
			tempValue = tempValue.replace(encodedSpace,'+');
			flashVarsArray[k] = tempName + tempValue;
		}
	}
	return flashVarsArray.join("&");
}

