/* 
	Flash Version Detection  
*/
var agent = navigator.userAgent.toLowerCase(); 	
function isAtleastIE4() {
	return (agent.indexOf("msie") != -1 && parseInt(navigator.appVersion) >= 4 && agent.indexOf("win")!=-1 && agent.indexOf("16bit")==-1);
}
function hasPlugins() {
	return (navigator.plugins != null && navigator.plugins.length > 0);
}
function getFlashVersion() {
	var MAX_FLASH_VER = 10;  //  
	var flashVer = 0; // Nothing
    // NS3 needs flashVersion to be a local variable
    if (agent.indexOf("mozilla/3") != -1 && agent.indexOf("msie") == -1) {
        return 0;
    }
	// NS3+, Opera3+, IE5+ Mac (support plugin array):  check for Flash plugin in plugin array
	if (hasPlugins()) {
		var flashPlugin = navigator.plugins['Shockwave Flash'];
		if (typeof flashPlugin == 'object') { 
			for (var i = MAX_FLASH_VER; i >= 0; i--) {
				if (flashPlugin.description.indexOf(i+'.') != -1) {
					flashVer = i; break;
				}
			}
		}
	} 
	// IE4+ Win32:  Using ActiveXObject()
	else if (isAtleastIE4()) 
	{
		var actXObj = null;
		var sClassName = "";
		for (var i=MAX_FLASH_VER; i >= 0; i--)
		{
			sClassName = "ShockwaveFlash.ShockwaveFlash";
			if (i > 0) sClassName += "." + i.toString();
			try {
				actXObj = new ActiveXObject(sClassName);
				flashVer = i; break;
			}
			catch(e) {
			}
		}
		actXObj = null; // get rid to this temporary object
	}  
 	// WebTV 2.5 supports flash 3
	else if (agent.indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports flash 2
	else if (agent.indexOf("webtv") != -1) flashVer = 2;
	else 
		flashVer = -1; 
		
	return parseFloat(flashVer.toString() + ".0");  
	
}
/* 
	QuickTime Version Detection  
*/
function getQuicktimeVersion() {
	// NS3+, Opera3+, IE5+ Mac (support plugin array):  check for Quicktime plugin in plugin array
	if (hasPlugins()) {
      for (var i=0; i < navigator.plugins.length; i++ ) {
         var plugin =navigator.plugins[i];
         if (plugin.name.indexOf("QuickTime") > -1) {
             return parseFloat(adjustMultipleDot(plugin.name.substring(18)));
         }
      }
	}
	// IE4+ Win32:  attempt to create an ActiveX object using VBScript
	else if (isAtleastIE4()) {
		try {
				actXObj = new ActiveXObject("QuickTimeCheckObject.QuickTimeCheck.1");
				if (actXObj.IsQuickTimeAvailable(0)) {
					// actXObj.QuickTimeVersion is an Integer, need to covert to HEX, ie 0x 06128000 or version 4
					return actXObj.QuickTimeVersion.toString(16).substring(0,3) / 100; // return with a "."
				}
		}
		catch(e) {
		}
		actXObj = null; // get rid to this temporary object
    } 
	// Can't detect in all other cases
	return 0.0;
}
/* 
	Shockwave Version Detection  
	return value is a float
*/
function getShockwaveVersion() {
	// NS3+, Opera3+, IE5+ Mac (support plugin array):  check for Quicktime plugin in plugin array
	if (hasPlugins()) {
       for (var i=0; i < navigator.plugins.length; i++ ) {
		    var theName = navigator.plugins[i].name;
		    var theDesc = navigator.plugins[i].description;
    	    // If the plugin is Shockwave...
    	    if (theName.indexOf("Shockwave") != -1 && theName.indexOf("Director") != -1) {
		 	    var versionString = theDesc.substring(theDesc.indexOf("version ") + 8);
				versionString = adjustMultipleDot(versionString); // 3.2.4 => 3.24
      		    return parseFloat(versionString);
      	    }
	   }
   }
   // IE4+ Win32:  attempt to create an ActiveX object using VBScript
   else if (isAtleastIE4()) {
		var MAX_QT_VER = 12;  //  
		var actXObj = null;
		var sClassName = "";
		for (var i=MAX_QT_VER; i > 0; i--)
		{
			sClassName = "SWCtl.SWCtl." + i.toString();
			try {
				actXObj = new ActiveXObject(sClassName);
				var swVer = actXObj.ShockwaveVersion("");
				var p = swVer.indexOf(".");
				if (p > 0)
					swVer = swVer.substring(0, p + 2) // get one minor only => "8.5"
				actXObj = null;
				// SW 6 returns as 1.0, SW7 return as 7.xx,...	
				return (swVer == "1.0") ? 6.0 : parseFloat(swVer); 
			}
			catch(e) {
			} 
		}
		actXObj = null; // get rid to this temporary object 
    } 
	return 0.0;
}
// original value = "3.2.4" => return "3.24" to work with float number
function adjustMultipleDot(verStr) 
{
	if (verStr.indexOf(".") > 0) {
        var verMajor = verStr.substring(0, verStr.indexOf("."));
		var verMinor = verStr.substring(verStr.indexOf(".") + 1);
        if (verMinor.indexOf(".") > 0) // remove "."
          	verMinor = verMinor.substring(0,verStr.indexOf(".")) + verMinor.substring(verMinor.indexOf(".") + 1);   					  
        return parseInt(verMajor) + "." + verMinor;
   } else 
   		return verStr;
}