/*********************************************************************
 *
 * 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 = "detectFlash.swf";


/*
 * Latest available revisions of the Plug-in.
 */

var MM_latestPluginRevision = new Object();
MM_latestPluginRevision["8.0"] = new Object();
MM_latestPluginRevision["7.0"] = 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"] = 40;
MM_latestPluginRevision["6.0"]["Macintosh"] = 40;

MM_latestPluginRevision["5.0"]["Windows"] = 42;
MM_latestPluginRevision["5.0"]["Macintosh"] = 41;

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)//rjw - false by default
 *
 *  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()
{
    this.installed = false;

    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);
}
