//
// PINT Plugin / Flash Version Detector
//
// Combines Plugin Detector from the Webmonkey Code Library with
// Chris Nott's Flash Version Detector to detect for flash and a
// specified version.
//
// For more information about components see:
//     Plugin Detector()
//         Source: Webmonkey Code Library
//         (http://www.hotwired.com/webmonkey/javascript/code_library/)
//         Author: Nadav Savio
//         Author Email: webmonkey@giantant.com
//
//     Flash Version Detector  v1.1.4
//         http://www.dithered.com/javascript/flash_detect/index.html
//         code by Chris Nott (chris@NOSPAMdithered.com - remove NOSPAM)
//         with VBScript code from Alastair Hamilton
//
// 09.11.02 - C. Ducker - added hasFlashVersion()
//

// =======================================================================
// BEGIN: Plugin Detector()
// =======================================================================
// this is where we write out the VBScript for MSIE Windows
var WM_startTagFix = '</';
var msie_windows = 0;
if ((navigator.userAgent.indexOf('MSIE') != -1) && (navigator.userAgent.indexOf('Win') != -1)){
  msie_windows = 1;
  document.writeln('<script language="VBscript">');
  document.writeln('\'This will scan for plugins for all versions of Internet Explorer that have a VBscript engine version 2 or greater.');
  document.writeln('\'This includes all versions of IE4 and beyond and some versions of IE 3.');
  document.writeln('Dim WM_detect_through_vb');
  document.writeln('WM_detect_through_vb = 0');
  document.writeln('If ScriptEngineMajorVersion >= 2 then');
  document.writeln('  WM_detect_through_vb = 1');
  document.writeln('End If');
  document.writeln('Function WM_activeXDetect(activeXname)');
  document.writeln('  on error resume next');
  document.writeln('  If ScriptEngineMajorVersion >= 2 then');
  document.writeln('     WM_activeXDetect = False');
  document.writeln('     WM_activeXDetect = IsObject(CreateObject(activeXname))');
  document.writeln('     If (err) then');
  document.writeln('        WM_activeXDetect = False');
  document.writeln('     End If');
  document.writeln('   Else');
  document.writeln('     WM_activeXDetect = False');
  document.writeln('   End If');
  document.writeln('End Function');
  document.writeln(WM_startTagFix+'script>');
}

function WM_pluginDetect(plugindescription, pluginxtension, pluginmime, activeXname){
  //This script block will test all user agents that have a real plug-in array
  //(i.e. Netscape) and set the variables, otherwise it directs the routine
  // to WM_activeXDetect to detect the activeX control.

  // First define some variables
  var i,plugin_undetectable=0,detected=0, daPlugin=new Object();

  // Then we check to see if it's an MSIE browser that you can actually
  // check for the plugin in question. 
  if (msie_windows && WM_detect_through_vb){
      plugin_undetectable = 0;
  } else {
      plugin_undetectable = 1;
  }

  // If it has a real plugins or mimetypes array, we look there for the plugin first
  if(navigator.plugins) {
      numPlugins = navigator.plugins.length;
      if (numPlugins > 1) {
	  if (navigator.mimeTypes && navigator.mimeTypes[pluginmime] && navigator.mimeTypes[pluginmime].enabledPlugin && (navigator.mimeTypes[pluginmime].suffixes.indexOf(pluginxtension) != -1)) { // seems like we have it, let's just make sure and check the version (if specified)
	      if ((navigator.appName == 'Netscape') && (navigator.appVersion.indexOf('4.0') != -1)) { // stupid, stupid Netscape can't handle the references to navigator.plugins by number, sooo...
		  for(i in navigator.plugins) {
		      if ((navigator.plugins[i].description.indexOf(plugindescription) != -1) || (i.indexOf(plugindescription) != -1)) { // some versions of quicktime have no description. feh!
			  detected=1;
			  break;
		      }
		  }
	      } else {
		  for (i = 0; i < numPlugins; i++) {
		      daPlugin = navigator.plugins[i];
		      if ((daPlugin.description.indexOf(plugindescription) != -1) || (daPlugin.name.indexOf(plugindescription) != -1)) {
			  detected=1;
			  break;
		      }
		  }
	      }

	      // Mac weirdness
      if (navigator.mimeTypes[pluginmime] == null) {
		  detected = 0;
	      }
	  }
	  return detected;
      } else if((msie_windows == 1) && !plugin_undetectable){
	  return WM_activeXDetect(activeXname);
      } else { 		
	  return 0;
      }
  } else {
      return 0;
  }
}

// this next function just makes it easy to detect the common plugins
function WM_easyDetect(whichPlugin) {
    // this function just makes it easy to do basic plug-in detection without
    // knowing all the mimetypes and activeX names and such
    var isItThere = 0;
    if( (whichPlugin == 'flash') || (whichPlugin == 'Flash') ) {
	isItThere = WM_pluginDetect('Flash', 'swf', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash');
    } else if( (whichPlugin == 'director') || (whichPlugin == 'Director') ) {
	isItThere = WM_pluginDetect('Shockwave', 'dcr', 'application/x-director', 'SWCtl.SWCtl.1');
    } else if( (whichPlugin == 'quicktime') || (whichPlugin == 'Quicktime') || (whichPlugin == 'QuickTime') ) {
	isItThere = WM_pluginDetect('QuickTime', 'mov', 'video/quicktime', '');
    } else if( (whichPlugin == 'realaudio') || (whichPlugin == 'Realaudio') || (whichPlugin == 'RealAudio') ) {
	isItThere = (WM_pluginDetect('RealPlayer', 'rpm', 'audio/x-pn-realaudio-plugin', 'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)')) || (WM_pluginDetect('RealPlayer', 'rpm', 'audio/x-pn-realaudio-plugin','rmocx.RealPlayer G2 Control')) || (WM_pluginDetect('RealPlayer', 'rpm', 'audio/x-pn-realaudio-plugin','RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)')) || (WM_pluginDetect('RealPlayer', 'rpm', 'audio/x-pn-realaudio-plugin','RealVideo.RealVideo(tm) ActiveX Control (32-bit)'))
    } else {

	alert('You need to tell me which plug-in to look for, like so:\n\n' + '          WM_easyDetect(\'flash\')\n\n' + '          WM_easyDetect(\'director\')\n\n' + '          WM_easyDetect(\'quicktime\')\n\n' + '          WM_easyDetect(\'realaudio\')');
    }
    return isItThere;
}
// =======================================================================
// END: Plugin Detector()
// =======================================================================

// =======================================================================
// BEGIN: Flash Version Detector
// =======================================================================
var flashVersion = 0;
function getFlashVersion() {
	var agent = navigator.userAgent.toLowerCase(); 
	
	// NS3+, Opera3+, IE5+ Mac (support plugin array):  check for Flash plugin in plugin array
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		var flashPlugin = navigator.plugins['Shockwave Flash'];
		if (typeof flashPlugin == 'object') { 
			if (flashPlugin.description.indexOf('10.') != -1) flashVersion = 10;
			else if (flashPlugin.description.indexOf('9.') != -1) flashVersion = 9;
			else if (flashPlugin.description.indexOf('8.') != -1) flashVersion = 8;
			else if (flashPlugin.description.indexOf('7.') != -1) flashVersion = 7;
			else if (flashPlugin.description.indexOf('6.') != -1) flashVersion = 6;
			else if (flashPlugin.description.indexOf('5.') != -1) flashVersion = 5;
			else if (flashPlugin.description.indexOf('4.') != -1) flashVersion = 4;
			else if (flashPlugin.description.indexOf('3.') != -1) flashVersion = 3;
		}
	}

	// IE4+ Win32:  attempt to create an ActiveX object using VBScript
	else if (agent.indexOf("msie") != -1 && parseInt(navigator.appVersion) >= 4 && agent.indexOf("win")!=-1 && agent.indexOf("16bit")==-1) {
	  document.write('<scr' + 'ipt language="VBScript"\> \n');
		document.write('on error resume next \n');
		document.write('dim obFlash \n');
		document.write('set obFlash = CreateObject("ShockwaveFlash.ShockwaveFlash.7") \n');
		document.write('if IsObject(obFlash) then \n');
		document.write('flashVersion = 7 \n');
		document.write('else set obFlash = CreateObject("ShockwaveFlash.ShockwaveFlash.6") end if \n');
		document.write('if flashVersion < 7 and IsObject(obFlash) then \n');
		document.write('flashVersion = 6 \n');
		document.write('else set obFlash = CreateObject("ShockwaveFlash.ShockwaveFlash.5") end if \n');
		document.write('if flashVersion < 6 and IsObject(obFlash) then \n');
		document.write('flashVersion = 5 \n');
		document.write('else set obFlash = CreateObject("ShockwaveFlash.ShockwaveFlash.4") end if \n');
		document.write('if flashVersion < 5 and IsObject(obFlash) then \n');
		document.write('flashVersion = 4 \n');
		document.write('else set obFlash = CreateObject("ShockwaveFlash.ShockwaveFlash.3") end if \n');
		document.write('if flashVersion < 4 and IsObject(obFlash) then \n');
		document.write('flashVersion = 3 \n');
		document.write('end if');
		document.write('</scr' + 'ipt\> \n');
  }
		
	// WebTV 2.5 supports flash 3
	else if (agent.indexOf("webtv/2.5") != -1) flashVersion = 3;

	// older WebTV supports flash 2
	else if (agent.indexOf("webtv") != -1) flashVersion = 2;

	// Can't detect in all other cases
	else {
		flashVersion = flashVersion_DONTKNOW;
	}

	return flashVersion;
}

flashVersion_DONTKNOW = -1;
// =======================================================================
// BEGIN: Flash Version Detector
// =======================================================================

// =======================================================================
// BEGIN: PINT Flash Detection/Output Methods
// =======================================================================

/**
 * has_flash()
 * Determines if client has flash
 *
 * @return  true or false
 *
 * @author  C. Ducker
 * @version 09.11.02 - v.1
 */
function has_flash()
	{
	return WM_easyDetect( "Flash" );
	}

/**
 * has_flash_version()
 * Determines if client has appropriate version of flash
 *
 * @param   version - the desire version of flash
 * @return  true or false
 *
 * @author  C. Ducker
 * @version 09.11.02 - v.1
 */
function has_flash_version( version )
	{
	return ( WM_easyDetect( "Flash" ) && getFlashVersion() >= version ) ? true : false;
	}

/**
 * display_flash()
 * Output specified flash file to client browser
 *
 * @param   file_name - name of flash file
 * @param   width - width of flash file
 * @param   height - height of flash file
 * @param   base - name of file flash is to be display within
 *
 * @author  C. Ducker
 * @version 09.11.02 - v.1
 */	
function display_flash( file_name, width, height, base )
	{
	document.writeln( "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\\\" width=\""+width+"\" height=\""+height+"\" codebase=\"http://active.macromedia.com/flash2/cabs/swflash.cab#version=2,0,0,0\">" );
	document.writeln( "<param name=\"MOVIE\" value=\""+file_name+"\">" );
	document.writeln( "<param name=\"BASE\" value=\""+base+"\">" );
	document.writeln( "<param name=\"MENU\" value=\"false\">" );
	document.writeln( "<param name=\"PLAY\" value=\"true\"><param name=\"LOOP\" value=\"true\">" );
	document.writeln( "<embed src=\""+file_name+"\" width=\""+width+"\" height=\""+height+"\" align=\"top\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash2\" base=\""+base+"\">" );
	document.writeln( "</embed>" );
	document.writeln( "</object>" );
	}

/**
 * display_image()
 * Output specified image file to client browser
 *
 * @param   file_name - name of image file
 * @param   width - width of image file
 * @param   height - height of image file
 *
 * @author  C. Ducker
 * @version 09.11.02 - v.1
 */		
function display_image( file_name, width, height, linkto )
	{		
	if (linkto == "")
		{
		document.write ( "<img src=\""+file_name+"\" width=\""+width+"\" height=\""+height+"\" border=\"0\" alt=\"\"/>" );
		}
	else
		{
		document.write ( "<a href=\""+linkto+"\"><img src=\""+file_name+"\" width=\""+width+"\" height=\""+height+"\" border=\"0\" alt=\"\"/></a>" );
		}
	}	
	
// =======================================================================
// BEGIN: PINT Flash Output Methods
// =======================================================================
