var s_lFlashRequireMajorVer = 10;
var s_lFlashRequireMinorVer = 0;
var s_lFlashRequireRevision = 0;

function FlashGetVersionIE ()
{
	var sVersion = null, oAX, oX;

	// new ActiveXObject ( sClass ) throws an exception if sClass is not in registry

	try // 7.x or greater players
	{
		oAX = new ActiveXObject ( "ShockwaveFlash.ShockwaveFlash.7" );
		sVersion = oAX.GetVariable ( "$version" );
	}
	catch ( oX )
	{
	}

	if ( !sVersion ) // 6.x players
	{
		try
		{
			oAX = new ActiveXObject ( "ShockwaveFlash.ShockwaveFlash.6" );
			sVersion = "WIN 6,0,21,0"; // default to first public version
			oAX.AllowScriptAccess = "always"; // throws if AllowScripAccess is missing (introduced in 6.0r47)		

			// crash for versions 6.0.22 through 6.0.29
			// safe to call for 6.0r47 or greater
			sVersion = oAX.GetVariable ( "$version" );
		}
		catch ( oX )
		{
		}
	}

	if ( !sVersion ) // 4.x or 5.x player
	{
		try
		{
			oAX = new ActiveXObject ( "ShockwaveFlash.ShockwaveFlash.3" );
			sVersion = oAX.GetVariable ( "$version" );
		}
		catch ( oX )
		{
		}
	}

	if ( !sVersion ) // 3.x player
	{
		try
		{
			oAX = new ActiveXObject ( "ShockwaveFlash.ShockwaveFlash.3" );
			sVersion = "WIN 3,0,18,0";
		}
		catch ( oX )
		{
		}
	}

	if ( !sVersion ) // 2.x player
	{
		try
		{
			oAX = new ActiveXObject ( "ShockwaveFlash.ShockwaveFlash" );
			sVersion = "WIN 2,0,0,11";
		}
		catch ( oX )
		{
			sVersion = null;
		}
	}
	
	return ( sVersion );
}

function FlashGetVersion ()
{
	var sFlashVersion = null;
	
	if ( ( navigator.plugins != null ) && ( navigator.plugins.length > 0 ) ) // NS/Opera version >= 3 check for Flash plugin
	{
		if ( navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"] )
		{
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split ( " " );
			var tempArrayMajor = descArray[2].split ( "." );			

			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var 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" ) );
			}

			sFlashVersion = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	else if ( s_sUserAgent.indexOf ( "webtv/2.6" ) != -1 ) // MSN/WebTV 2.6 - Flash 4
		sFlashVersion = "4.0.0";
	else if ( s_sUserAgent.indexOf ( "webtv/2.5" ) != -1 ) // WebTV 2.5 - Flash 3
		sFlashVersion = "3.0.0";
	else if ( s_sUserAgent.indexOf ( "webtv" ) != -1 ) // older WebTV - Flash 2
		sFlashVersion = "2.0.0";
	else if ( IsWinIE () )
		sFlashVersion = FlashGetVersionIE ();

	return ( sFlashVersion );
}

function FlashVerifyVersion ( lMinMajor, lMinMinor, lMinRevision )
{
	var sVer = FlashGetVersion ();
	
	if ( sVer != null )
	{
		var oTokens;

		if ( IsWinIE () ) // "WIN 2,0,0,11"
		{
			var oTmpArr = sVer.split ( " " );
			oTokens = oTmpArr[1].split ( "," );
		}
		else // "2.0.11"
			oTokens = sVer.split ( "." );
		
		var lMajor = oTokens[0];
		var lMinor = oTokens[1];
		var lRevision = oTokens[2];

		lMinMajor = parseFloat ( lMinMajor );
        
		if ( lMajor > lMinMajor )
			return ( true );
		else if ( lMajor == lMinMajor )
		{
			lMinMinor = parseFloat ( lMinMinor );

			if ( lMinor > lMinMinor )
				return ( true );
			else if ( lMinor == lMinMinor )
			{
				if ( lRevision >= parseFloat ( lMinRevision ) )
					return ( true );
			}
		}
	}

	return ( false );
}

function FlashGetFlashControl ( sID )
{
	if ( IsIE () )
		return ( window[sID] );
	else
		return ( document[sID] );
}

function FlashAddExtension ( src, ext )
{
	if ( src.indexOf ( '?' ) != -1 )
		return ( src.replace ( /\?/, ext + '?' ) );
	else
		return ( src + ext );
}

function FlashGenerateObj ( objAttrs, params, embedAttrs )
{ 
	var sCmd = '<object ';
	for ( var i in objAttrs )
		sCmd += i + '="' + objAttrs[i] + '" ';

	sCmd += '>';
	for ( var i in params )
		sCmd += '<param name="' + i + '" value="' + params[i] + '" /> ';

	sCmd += '<embed ';
	for ( var i in embedAttrs )
		sCmd += i + '="' + embedAttrs[i] + '" ';

	sCmd += ' ></embed></object>';

	return ( sCmd );
}

function FlashWriteRunCommand ( sCmd )
{
	document.write ( sCmd );
}

function FlashFLRunContent ()
{
	var bCorrectVersion = FlashVerifyVersion ( s_lFlashRequireMajorVer,
		s_lFlashRequireMinorVer, s_lFlashRequireRevision );

	if ( bCorrectVersion == true )
	{
		var ret = FlashGetArgs ( arguments, ".swf", "movie",
			"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",
			"application/x-shockwave-flash" );

		FlashWriteRunCommand ( FlashGenerateObj ( ret.objAttrs, ret.params, ret.embedAttrs ) );
	}
	else
	{
		FlashHandleInvalidVersion ();
	}
}

function FlashHandleInvalidVersion ()
{
	var sHtml = "<div id=\"divWrongFlashVer\"><p class=\"FlashWarningText\"><img class=\"FlashVerWarningImage\" src=\"Images/ExclamationSign.gif\">" +
		"You do not have the required Adobe Flash Player version installed in your browser. Please follow " +
		"<a href=\"Viewer.aspx?n=install_flash_player\">this link</a> for more information.</p></div>";

	document.write ( sHtml );
}

function FlashFLBuildContent ()
{
	var ret = FlashGetArgs ( arguments, ".swf", "movie",
		"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",
		"application/x-shockwave-flash" );

	return ( FlashGenerateObj ( ret.objAttrs, ret.params, ret.embedAttrs ) );
}

function FlashSWRunContent ()
{
	var ret = FlashGetArgs ( arguments, ".dcr", "src",
		"clsid:166B1BCA-3F9C-11CF-8075-444553540000",
		null );
  
	FlashWriteRunCommand ( FlashGenerateObj ( ret.objAttrs, ret.params, ret.embedAttrs ) );
}

function FlashGetArgs ( args, ext, srcParamName, classid, mimeType )
{
	var ret = new Object ();
    
	ret.embedAttrs = new Object ();
	ret.params = new Object ();
	ret.objAttrs = new Object ();
    
	for ( var i = 0; i < args.length; i += 2 )
	{
		var currArg = args[i].toLowerCase ();    

        switch ( currArg )
        {
			case "classid":
				break;
			case "pluginspage":
				ret.embedAttrs[args[i]] = args[i+1];
				break;
			case "src":
			case "movie":	
				args[i+1] = FlashAddExtension ( args[i+1], ext );
				ret.embedAttrs["src"] = args[i+1];
				ret.params[srcParamName] = args[i+1];
				break;
			case "onafterupdate":
			case "onbeforeupdate":
			case "onblur":
			case "oncellchange":
			case "onclick":
			case "ondblClick":
			case "ondrag":
			case "ondragend":
			case "ondragenter":
			case "ondragleave":
			case "ondragover":
			case "ondrop":
			case "onfinish":
			case "onfocus":
			case "onhelp":
			case "onmousedown":
			case "onmouseup":
			case "onmouseover":
			case "onmousemove":
			case "onmouseout":
			case "onkeypress":
			case "onkeydown":
			case "onkeyup":
			case "onload":
			case "onlosecapture":
			case "onpropertychange":
			case "onreadystatechange":
			case "onrowsdelete":
			case "onrowenter":
			case "onrowexit":
			case "onrowsinserted":
			case "onstart":
			case "onscroll":
			case "onbeforeeditfocus":
			case "onactivate":
			case "onbeforedeactivate":
			case "ondeactivate":
			case "type":
			case "codebase":
				ret.objAttrs[args[i]] = args[i+1];
				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[args[i]] = ret.objAttrs[args[i]] = args[i+1];
				break;
			default:
				ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
		}
	}
    
	ret.objAttrs["classid"] = classid;
	if ( mimeType )
		ret.embedAttrs["type"] = mimeType;
	return ( ret );
}
