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

 *

 * Macromedia Flash Dispatcher -- a scriptable detector for Flash Player

 *

 *

 * copyright (c) 2000 Macromedia, Inc.

 *

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





/*

 * URL of the Flash self-detecting movie ("sniffer").

 *

 * Reset this if you move the file out of the directory in which the

 * document containing the script that calls MM_FlashDispatch() resides.

 */



var MM_FlashSnifferURL = "flash/detectFlash.swf";





/*

 * Latest available revisions of the Plug-in.

 */



var MM_latestPluginRevision = new Object();

MM_latestPluginRevision["6.0"] = new Object();

MM_latestPluginRevision["5.0"] = new Object();

MM_latestPluginRevision["4.0"] = new Object();

MM_latestPluginRevision["3.0"] = new Object();

MM_latestPluginRevision["2.0"] = new Object();



/*

 * This table must be updated as new versions and revisions of the

 * plug-in are released, in support of the 'requireLatestRevision'

 * option in MM_FlashDispatch().

 */

//FS 103101 - the 6.0 revision numbers need to be updated once we know the revision numbers will be.

MM_latestPluginRevision["6.0"]["Windows"] = 00;

MM_latestPluginRevision["6.0"]["Macintosh"] = 00;



MM_latestPluginRevision["5.0"]["Windows"] = 30;

MM_latestPluginRevision["5.0"]["Macintosh"] = 30;



MM_latestPluginRevision["4.0"]["Windows"] = 28;

MM_latestPluginRevision["4.0"]["Macintosh"] = 27;

MM_latestPluginRevision["4.0"]["Unix"] = 12;



MM_latestPluginRevision["3.0"]["Windows"] = 10;

MM_latestPluginRevision["3.0"]["Macintosh"] = 10;



MM_latestPluginRevision["2.0"]["Windows"] = 11;

MM_latestPluginRevision["2.0"]["Macintosh"] = 11;





/*

 * MM_FlashInfo() -- construct an object representing Flash Player status

 *

 * Constructor:

 *

 *	new MM_FlashInfo()

 *

 * Properties:

 *

 *	installed		true if player is installed

 *				(undefined if undetectable)

 *

 *	implementation		the form the player takes in this

 *				browser: "ActiveX control" or "Plug-in"

 *

 *	autoInstallable		true if the player can be automatically

 *				installed/updated on this browser/platform

 *

 *	version			player version if installed

 *

 *	revision		revision if implementation is "Plug-in"

 *

 * Methods:

 *

 *	canPlay(contentVersion)	true if installed player is capable of

 *				playing content authored with the

 *				specified version of Flash software

 *

 * Description:

 *

 *	MM_FlashInfo() instantiates an object that contains as much

 *	information about Flash Player--whether it is installed, what

 *	version is installed, and so one--as is possible to collect.

 *

 *	Where Flash Player is implemented as a plug-in and the user's

 *	browser supports plug-in detection, all properties are defined;

 *	this includes Netscape on all platforms and Microsoft Internet

 *	Explorer 5 on the Macintosh.  Where Flash Player is implemented

 *	as an ActiveX control (MSIE on Windows), all properties except

 *	'revision' are defined.

 *

 *	Prior to version 5, Microsoft Internet Explorer on the Macintosh

 *	did not support plug-in detection.  In this case, no properties

 *	are defined, unless the cookie 'MM_FlashDetectedSelf' has been

 *	set, in which case all properties except 'version' and 'revision'

 *	are set.

 *

 *	This object is primarily meant for use by MM_FlashDispatch(), but

 *	may be of use in reporting the player version, etc. to the user.

 */



var MM_FlashControlInstalled;	// is the Flash ActiveX control installed?

var MM_FlashControlVersion;	// ActiveX control version if installed



function MM_FlashInfo()

{

    if (navigator.plugins && navigator.plugins.length > 0)

    {

	this.implementation = "Plug-in";

	this.autoInstallable = false;	// until Netscape SmartUpdate supported



	// Check whether the plug-in is installed:



	if (navigator.plugins["Shockwave Flash"])

	{

	    this.installed = true;



	    // Get the plug-in version and revision:



	    var words =

		navigator.plugins["Shockwave Flash"].description.split(" ");



	    for (var i = 0; i < words.length; ++i)

	    {

		if (isNaN(parseInt(words[i])))

		continue;



		this.version = words[i];

		



		this.revision = parseInt(words[i + 1].substring(1));

	    }

	}

	else

	{

	    this.installed = false;

	}

    }

    else if (MM_FlashControlInstalled != null)

    {

	this.implementation = "ActiveX control";

	this.installed = MM_FlashControlInstalled;

	this.version = MM_FlashControlVersion;

	this.autoInstallable = true;

    }

    else if (MM_FlashDetectedSelf())

    {

	this.installed = true;

	this.implementation = "Plug-in";

	this.autoInstallable = false;

    }



    this.canPlay = MM_FlashCanPlay;

}





/*

 * MM_FlashDispatch() -- get Flash Player status and redirect appropriately

 *

 * Synopsis:

 *

 *	MM_FlashDispatch(contentURL, contentVersion, requireLatestRevision,

 *			 upgradeURL, install, installURL, altURL,

 *			 overridePluginsPage)

 *

 *	Arguments:

 *

 *	    contentURL			URL of document containing Flash content

 *

 *	    contentVersion		version of Flash software used to

 *					author content

 *

 *	    requireLatestRevision	Boolean indicating whether to require

 *					latest revision of player (plug-in only)

 *

 *	    upgradeURL			document to load if player must be

 *					upgraded to play content and automated

 *					updating is not supported on the user's

 *					browser & platform

 *

 *	    install			Boolean indicating whether to install

 *					if player is not installed

 *

 *	    installURL			document to load if 'install' is true

 *					and automated installation is not

 *					supported on user's browser & platform

 *

 *	    altURL			document to load if 'install' is false

 *

 *	    overridePluginsPage		Boolean indicating whether to set the

 *					PLUGINSPAGE attribute for the embedded

 *					Flash Player sniffer to `installURL'

 *		disableAutoInstall		Boolean indicating that the auto-installation

 *					should not occur and that the user will go to the installURL

 * 					or to the upgradeURL as specified

					

 *

 *	Returns:

 *

 *	    Normally, never returns; changes window.location.

 *	    Returns with no value when called improperly.

 *

 * Description:

 *

 *	MM_FlashDispatch() detects whether the user's Web browser has the

 *	Flash plug-in or ActiveX control installed, and what version is

 *	installed if so. It then takes appropriate action based on whether

 *	Flash Player is installed and is compatible with 'contentVersion':

 *	load a document containing Flash content, load alternate content,

 *	or oversee the updating or installation of the player.

 *

 *	There are three possible outcomes of the detection process: 

 *

 *	    1. A version of Flash Player has been detected that is

 *	       suitable for playing the requested content version.

 *	       MM_FlashDispatch() will load 'contentURL'.

 *

 *	    2. An unsuitable version of Flash Player has been detected.

 *	       MM_FlashDispatch() will load 'contentURL' if automated

 *	       updating is supported on the user's browser & platform;

 *	       otherwise, it will load 'upgradeURL'.

 *

 *	    3. Flash Player is not installed.  If 'install' is set to

 *	       true, MM_FlashDispatch() will load 'contentURL' if the

 *	       user's browser supports automated installation; otherwise,

 *	       it will load 'installURL'.  If 'install' is false,

 *	       MM_FlashDispatch() will load 'altURL'.

 *

 *	When script-based detection of Flash Player is not possible,

 *	MM_FlashDispatch() attempts to load a Flash movie to carry out

 *	the detection. If Flash Player is not installed, there is presently

 *	no choice but to let the browser redirect the user via the

 *	PLUGINSPAGE attribute of the EMBED tag. In this case, 'install'

 *	is ignored, but setting 'overridePluginsPage' to true will

 *	set PLUGINSPAGE to 'installURL', overriding its default value

 *	(the URL for the Macromedia Flash download center). If this flag

 *	is set, 'installURL' must be absolute, not relative.

 */



var MM_FlashPluginsPage = "http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash";



function MM_FlashDispatch(contentURL, contentVersion, requireLatestRevision,

			  upgradeURL, install, installURL, altURL,

			  overridePluginsPage,disableAutoInstall)

{

    if (disableAutoInstall == null)

    {

	alert("ERROR: MM_FlashDispatch() called with too few arguments.");

	return;

    }





    if (overridePluginsPage && installURL.substring(0, 7) != "http://")

    {

	alert("ERROR: MM_FlashDispatch() called with relative URL" +

	    " for PLUGINSPAGE (" + installURL + ")");



	return;

    }





    var player = new MM_FlashInfo();



    if (player.installed == null)

    {

	var sniffer =

	    "<EMBED HIDDEN=\"true\" TYPE=\"application/x-shockwave-flash\"" +

		  " WIDTH=\"18\" HEIGHT=\"18\"" +

		  " BGCOLOR=\"" + document.bgcolor + "\"" +

		  " SRC=\"" + MM_FlashSnifferURL +

			"?contentURL=" + contentURL + "?" +

			"&contentVersion=" + contentVersion +

			"&requireLatestRevision=" + requireLatestRevision +

			"&latestRevision=" +

			    MM_FlashLatestPluginRevision(contentVersion) +

			"&upgradeURL=" + upgradeURL +

			"\"" +

		  " LOOP=\"false\" MENU=\"false\"" +

		  " PLUGINSPAGE=\"" +

		    (overridePluginsPage ? installURL : MM_FlashPluginsPage) +

		    "\"" +

	    ">" +

	    "</EMBED>";



	document.open();

	document.write("<HTML><HEAD><TITLE>");

	document.write("Checking for the Flash Player");

	document.write("</TITLE></HEAD>");

	document.write("<BODY BGCOLOR=\"" + document.bgcolor + "\">");

	document.write(sniffer);

	document.write("</BODY>");

	document.write("</HTML>");

	document.close();

    }

    else if (player.installed)

    {

	if (player.canPlay(contentVersion, requireLatestRevision))

	{

	    location = contentURL;

	}

	else

	{

	if (disableAutoInstall)

	{

	location = upgradeURL;

	}else

	{

	    location = player.autoInstallable ? contentURL : upgradeURL;

	}

	}

    }

    else if (install)

    {

	if (disableAutoInstall){

	location = installURL;

	}

	else{

	location = player.autoInstallable ? contentURL : installURL;

	}

    }

    else

    {

	location = altURL;

    }

}





/*

 * MM_FlashRememberIfDetectedSelf() -- record that Flash Player detected itself

 *

 * Synopsis:

 *

 *	MM_FlashRememberIfDetectedSelf()

 *	MM_FlashRememberIfDetectedSelf(count)

 *	MM_FlashRememberIfDetectedSelf(count, units)

 *

 *	Arguments:

 *

 *	    count		length of time in units before re-checking

 *				whether content can be played (default: 60)

 *

 *	    units		unit(s) of time to count: "minute(s)," "hour(s)"

 * 				or "day(s)" (default: "days")

 *

 *

 * Description:

 *

 *	This function conditionally sets a cookie signifying that

 *	the current document was referred via the Dispatcher using

 *	Flash Player self-detection.  It is intended to spare the user

 *	whose browser does not support script-based detection from the

 *	process of Flash Player self-detection on each visit.

 *	

 *	The cookie persists for 60 days, or for the amount of time

 *	specified by the 'count' and 'units' parameters.

 *

 *	If cookies are not being accepted, this function is a no-op;

 *	the Dispatcher will simply attempt Flash Player self-detection

 *	on subsequent visits.

 *

 *	This function must be called from a script embedded in the

 *	document referenced by the 'contentURL' argument to

 *	MM_FlashDispatch().

 *

 */



function MM_FlashRememberIfDetectedSelf(count, units)

{

    // the sniffer appends an empty search string to the URL

    // to indicate that it is the referrer



    if (document.location.search.indexOf("?") != -1)

    {

	if (!count) count = 60;

	if (!units) units = "days";



	var msecs = new Object();



	msecs.minute = msecs.minutes = 60000;

	msecs.hour = msecs.hours = 60 * msecs.minute;

	msecs.day = msecs.days = 24 * msecs.hour;



	var expires = new Date();



	expires.setTime(expires.getTime() + count * msecs[units]);



	document.cookie =

	    'MM_FlashDetectedSelf=true ; expires=' + expires.toGMTString();

    }

}





/*

 * MM_FlashDemur() -- record user's decision not to install Flash Player

 *

 * Synopsis:

 *

 *	MM_FlashDemur()

 *	MM_FlashDemur(count)

 *	MM_FlashDemur(count, units)

 *

 *	Arguments:

 *

 *	    count	length of time in units to remember decision

 *			(default: 60)

 *

 *	    units	unit(s) of time to count: "minute(s)," "hour(s)"

 *			or "day(s)" (default: "days")

 *

 *	Returns:

 *

 *	    true if successful; false otherwise.

 *

 * Description:

 *

 *	MM_FlashDemur() sets a cookie signifying that the user requested

 *	that the decision not to install Flash be remembered.

 *

 *	The cookie persists for 60 days, or for the amount of time

 *	specified by the 'count' and 'units' parameters.

 *

 *	This function may be used as the handler for the 'onClick' event

 *	associated with the user's selecting a link to alternate content.

 *	If cookies are not being accepted, it will return false; this

 *	may be used to control whether the link is followed.

 */



function MM_FlashDemur(count, units)

{

    if (!count) count = 60;

    if (!units) units = "days";



    var msecs = new Object();



    msecs.minute = msecs.minutes = 60000;

    msecs.hour = msecs.hours = 60 * msecs.minute;

    msecs.day = msecs.days = 24 * msecs.hour;



    var expires = new Date();



    expires.setTime(expires.getTime() + count * msecs[units]);



    document.cookie =

	'MM_FlashUserDemurred=true ; expires=' + expires.toGMTString();





    if (!MM_FlashUserDemurred())

    {

	alert("Your browser must accept cookies in order to " +

	      "save this information.  Try changing your preferences.");



	return false;

    }

    else

	return true;

}





/*

 * MM_FlashUserDemurred() -- recall user's decision not to install Flash Player

 *

 * Synopsis:

 *

 *	MM_FlashUserDemurred()

 *

 *	Returns:

 *

 *	    true if a cookie signifying that the user declined to install

 *	    Flash Player is set; false otherwise.

 *

 * Description:

 *

 *	This function is useful in determining whether to set the 'install'

 *	flag when calling MM_FlashDispatch().  If true, it means that the

 *	user's previous decision not to install Flash Player should be

 *	honored, i.e., 'install' should be set to false.

 */



function MM_FlashUserDemurred()

{

    return (document.cookie.indexOf("MM_FlashUserDemurred") != -1);

}





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

 * THE FOLLOWING FUNCTIONS ARE NOT PUBLIC.  DO NOT CALL THEM DIRECTLY.

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



/*

 * MM_FlashLatestPluginRevision() -- look up latest Flash Player plug-in

 *				     revision for this platform

 *

 * Synopsis:

 *

 *	MM_FlashLatestPluginRevision(playerVersion)

 *

 *	Arguments:

 *

 *	    playerVersion	plug-in version to look up revision of

 *

 *	Returns:

 *

 *	    The latest available revision of the specified version of

 *	    the Flash Player plug-in on this platform, as an integer;

 *	    undefined for versions before 2.0.

 *

 * Description:

 *

 *	This look-up function is only intended to be called internally.

 */



function MM_FlashLatestPluginRevision(playerVersion)

{

    var latestRevision;

    var platform;



    if (navigator.appVersion.indexOf("Win") != -1)

	platform = "Windows";

    else if (navigator.appVersion.indexOf("Macintosh") != -1)

	platform = "Macintosh";

    else if (navigator.appVersion.indexOf("X11") != -1)

	platform = "Unix";



    latestRevision = MM_latestPluginRevision[playerVersion][platform];



    return latestRevision;

}





/*

 * MM_FlashCanPlay() -- check whether installed Flash Player can play content

 *

 * Synopsis:

 *

 *	MM_FlashCanPlay(contentVersion, requireLatestRevision)

 *

 *	Arguments:

 *

 *	    contentVersion		version of Flash software used to

 *					author content

 *

 *	    requireLatestRevision	Boolean indicating whether latest

 *					revision of plug-in should be required

 *

 *	Returns:

 *

 *	    true if the installed player can play the indicated content;

 *	    false otherwise.

 *

 * Description:

 *

 *	This function is not intended to be called directly, only

 *	as an instance method of MM_FlashInfo.

 */



function MM_FlashCanPlay(contentVersion, requireLatestRevision)

{

    var canPlay;



    if (this.version)

    {

	canPlay = (parseInt(contentVersion) <= this.version);



	if (requireLatestRevision)

	{

	    if (this.revision &&

		this.revision < MM_FlashLatestPluginRevision(this.version))

	    {

		canPlay = false;

	    }

	}

    }

    else

    {

	canPlay = MM_FlashDetectedSelf();

    }



    return canPlay;

}





/*

 * MM_FlashDetectedSelf() -- recall whether Flash Player has detected itself

 *

 * Synopsis:

 *

 *	MM_FlashDetectedSelf()

 *

 *	Returns:

 *

 *	    true if a cookie signifying that Flash Player has detected itself

 *	    is set; false otherwise.

 *

 * Description:

 *

 *	This function is only meant to be called internally.

 */



function MM_FlashDetectedSelf()

{

    return (document.cookie.indexOf("MM_FlashDetectedSelf") != -1);

}

