
/*********************************************************************
*
* 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["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"] = 47;
MM_latestPluginRevision["6.0"]["Macintosh"] = 47;

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)
*
*    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 -1;
        }
        if (overridePluginsPage && installURL.substring(0, 7) != "http://"){
            alert("ERROR: MM_FlashDispatch() called with relative URL" + " for PLUGINSPAGE (" + installURL + ")");
            return -1;
        }

    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();
*/
        return true;
    }else if (player.installed){
        if( player.canPlay(contentVersion, requireLatestRevision ) ) {
            return true;
        }else{
            if (disableAutoInstall){
                return false;
            }else{
                return  ( player.autoInstallable ) ? true : false;
            }
        }
    }else if (install){
        if (disableAutoInstall){
            return false;
        }else{
                return  ( player.autoInstallable ) ? true : false;
        }

    }else{
          return false;
    }
return -1;
}


/*
* 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);
}

