var flashInstalled = 0;
var flashVersion = "";
var shockwaveApp = "SHOCKWAVE";
var flashApp = "FLASH";
var movieDetectionReq = false;
var hasMovieLoaded = false;
var minVersion = "7.0.0";
var hasRequiredApp = false;
var minimumFlashToCheckVersion = "5.0.0";

function setFlashVersion(versionString) {
   versionString = khubVersion(versionString);
   flashVersion = versionString;
   flashInstalled = 2;
   hasMovieLoaded = true;
   if (document.images) {
     if (document.images['FlashImage']) {
       document.images['FlashImage'].src = virtualRoot + "/utilities/flashVersion.aspx?version=" + flashVersion;
     }
   }
}

function getFlashVersion() {
   if ( !hasMovieLoaded ) {
      setTimeout( "getFlashVersion()", 500);
   } else {
      hasRequiredApp = isInstalledVersionAboveMin(minVersion , flashVersion);
   }
}

function khubVersion(versionString) {
   var parts = versionString.split(",");
   if (parts.length >= 1) flashMajorVersion = parts[0];
   if (parts.length >= 2) flashMinorVersion = parts[1];
   if (parts.length >= 3) flashRVersion = parts[2];
   return flashMajorVersion + '.' + flashMinorVersion + '.' + flashRVersion 
}

function setNavigatorFlashValues() {
   if (navigator.plugins && navigator.plugins.length) {
      x = navigator.plugins["Shockwave Flash"];
      if (x) {
         flashInstalled = 2;
         if (x.description) {
            var chars = x.description.split("");
            var currentString = "";
            var level = 0;
            var versions = new Array();
            for (i=0; i<chars.length; i++) {
               if (chars[i] >= '0' && chars[i] <= '9') {
                  currentString = "" + currentString + chars[i];
               }
               else if (currentString.length > 0) {
                  versions[level++] = currentString;
                  currentString = "";
               }
            }
            if (currentString.length > 0) {
               versions[level++] = currentString;
            }
            flashVersion = versions[0] + "." + versions[1] + "." + versions[2];
         }
      } else {
         flashInstalled = 1;
      }
   }
}

function detectFlashAppIE(minimumVersion) {
   var majorVersion = parseInt(minimumVersion.substring(0,1));
   if (majorVersion <= flashVersion) {
      if (majorVersion == flashVersion) {
         movieDetectionReq = true;
      } 
      return true;
   } else {
      return false;
   }
}  // detectFlashAppIE

function detectFlashAppNavigator(minimumVersion) {
   setNavigatorFlashValues();
   // check if installed.
   if (flashInstalled != 2) return false;
   // check if version higher than min
   return isInstalledVersionAboveMin(minimumVersion, flashVersion);   
}  // detectFlashAppNavigator

function isInstalledVersionAboveMin(minimumVersion, installedVer) {   
   // parse and compare Major num
   dotIndex = minimumVersion.indexOf('.');
   majorNum = parseInt(minimumVersion.substring(0, dotIndex + 1));
   minimumVersion = minimumVersion.substring(dotIndex + 1,  minimumVersion.length);
   // 10 is an int, not a string, so you can't do an index of, so force it to be a string
   //LMNK-SD-035842 PTM
   installedVer= installedVer+""; 
   if( installedVer.indexOf('.') >= 0 ){
      dotIndex = installedVer.indexOf('.');
      installedMajorNum = parseInt(installedVer.substring(0, dotIndex + 1));
      installedVer =installedVer.substring(dotIndex + 1,installedVer.length);
   }
   else{
      installedMajorNum = installedVer;
   }
   if (installedMajorNum < majorNum) return false;
   if (installedMajorNum > majorNum) return true;
   
   // parse and compare Minor
   dotIndex = minimumVersion.indexOf('.');
   minorNum = parseInt(minimumVersion.substring(0, dotIndex + 1));
   if( installedVer.indexOf('.') >= 0 ){
      installedMinorNum = parseInt(installedVer.substring(0, installedVer.indexOf('.') + 1));
   }
   else{
      installedMinorNum=0;
   }
   if (installedMinorNum < minorNum) return false;
   if (installedMinorNum > minorNum) return true;
   
   // parse and compare Release
   relNum  = parseInt(minimumVersion.substring(dotIndex + 1,  minimumVersion.length));
   if( installedVer.indexOf('.') >= 0 ){
   installedRelNum = parseInt(installedVer.substring(installedVer.indexOf('.') + 1, 
                                                     installedVer.length));
   }else{
      installedRelNum=0;
   }
   if (installedRelNum < relNum) return false;
   if (installedRelNum >= relNum) return true;
   
}  // isInstalledVersionAboveMin

function hasApp(appName, minimumVersion, browserIE) {
   if (appName == shockwaveApp) {
      if (browserIE == true) {
         return shockwaveDetectAxVer(minimumVersion);
      } else {
         return shockwaveDetectNsVer(minimumVersion);
      }
   } else if (appName == flashApp) {
      if ((flashVersion + "").length > 1) { 
         // flash app has already been detected.  Compare values.
         return isInstalledVersionAboveMin(minimumVersion, flashVersion);
      } else if (browserIE == true) { 
         return detectFlashAppIE(minimumVersion);
      } else {
         return detectFlashAppNavigator(minimumVersion);
      }
   }
}  // hasApp

//***************************
// For detecting the shockwave plugin for Netscape.
// This function can return a boolean or a floating point value.
// If you supply a reqVer value (number) it will return true or false
// depending on if that version or higher was found.
// If you don't supply a parameter it will return the found version number.

function shockwaveDetectNsVer(reqVer) {
  // This function returns a floating point value which should be the version of the Shockwave plugin or 0.0
  // This function only returns useful information if called from Netscape or IE Mac 5.0+
  if (!ns) return false;
  if (!navigator.plugins) return (reqVer ? false : 0.0); // IE Mac 4.5 and lower don't have a plugins array.

  // Set these local variables to avoid the Netscape 4 crashing .
  var thearray;
  var arraylen;
  var theplugin;
  var thename;
  var thedesc;
  var pos;
  var searchString;
  var versionString;
  var versionMinor;
  var versionMajor;
  var i;

  thearray = navigator.plugins
  arraylen = thearray.length

  // Step through each plugin in the array.
  for (i=0; i < arraylen; i++) {
    // Set these local variables to avoid the Netscape 4 crashing .
    theplugin = thearray[i]
    thename   = theplugin.name
    thedesc   = theplugin.description

    // If the plugin is Shockwave...
    if (thename.indexOf("Shockwave") != -1 && thename.indexOf("Director") != -1) {
      // ...extract the version information
      searchString = "version ";
      pos = thedesc.indexOf(searchString);
      pos = pos + searchString.length;
      versionString = thedesc.substring(pos);
      if (versionString.indexOf(".") > 0) {
        versionMajor = versionString.substring(0,versionString.indexOf("."));
        versionMinor = versionString.substring(versionString.indexOf(".") + 1);
        if (versionMinor.indexOf(".") > 0)
          versionMinor = versionMinor.substring(0,versionString.indexOf("."))
                         + versionMinor.substring(versionMinor.indexOf(".") + 1);   
        versionString = parseInt(versionMajor) + "." + versionMinor;
      }
      return (reqVer ? (parseFloat(versionString) >= reqVer) : parseFloat(versionString));
    } 
  }
  return (reqVer ? false : 0.0);
}

function runMovieDetection() {
   if ( hasApp( "FLASH", minimumFlashToCheckVersion, navigator.appName.indexOf("Microsoft") != -1 ) ) {
      document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="18" height="18">');
      document.write('   <param name="movie" VALUE="/includes/FlashSniffer.swf">');
      document.write('   <param name="quality" value="low">');
      document.write('   <param name="wmode" value="transparent">');
      document.write('   <embed src="/includes/FlashSniffer.swf" quality="low" bgcolor="#FFFFFF"');
      document.write('          width="18" height="18" type="application/x-shockwave-flash">');
      document.write('   </embed>');
      document.write('</object>');

      // Assume that the user has flash until the movie has time to load.
      // After the movie loads, we will be able to check the version of
      // flash from the movie.
      hasRequiredApp = true;
      getFlashVersion();
   } else {

      hasRequiredApp = false;
   }
}
