Source: Flash.js

/** @namespace */
hui.ui.Flash = {

  fullVersion:undefined,

  /** Gets the major version of flash */
  getMajorVersion : function() {
    var full = this.getFullVersion();
    if (full===null || full===undefined) {
      return null;
    }
    var matched = (full+'').match(/[0-9]+/gi);
    return matched.length>0 ? parseInt(matched[0]) : null;
  },

  getFullVersion : function() {
    if (this.fullVersion!==undefined) {
      return this.fullVersion;
    }
    // NS/Opera version >= 3 check for Flash plugin in plugin array
    var flashVer = null;

    if (navigator.plugins && navigator.plugins.length > 0) {
      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"));
          }
        }
        flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
      }
    }
    // MSN/WebTV 2.6 supports Flash 4
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
    // WebTV 2.5 supports Flash 3
    else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
    // older WebTV supports Flash 2
    else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
    else if ( hui.browser.msie ) {
      flashVer = this.getActiveXVersion();
    }
    this.fullVersion = flashVer;
    return flashVer;
  },
  /** @private */
  getActiveXVersion : function() {
    var version;
    var axo;
    var e;

    // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

    try {
      // version will be set for 7.X or greater players
      axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
      version = axo.GetVariable("$version");
    } catch (ignore) {}

    if (!version)
    {
      try {
        // version will be set for 6.X players only
        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");

        // installed player is some revision of 6.0
        // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
        // so we have to be careful.

        // default to the first public version
        version = "WIN 6,0,21,0";

        // throws if AllowScripAccess does not exist (introduced in 6.0r47)
        axo.AllowScriptAccess = "always";

        // safe to call for 6.0r47 or greater
        version = axo.GetVariable("$version");

      } catch (ignore) {
      }
    }

    if (!version)
    {
      try {
        // version will be set for 4.X or 5.X player
        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
        version = axo.GetVariable("$version");
      } catch (ignore) {
      }
    }

    if (!version)
    {
      try {
        // version will be set for 3.X player
        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
        version = "WIN 3,0,18,0";
      } catch (ignore) {
      }
    }

    if (!version)
    {
      try {
        // version will be set for 2.X player
        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
        version = "WIN 2,0,0,11";
      } catch (ignore) {
        version = -1;
      }
    }

    return version;
  }
};