// start other plugin detection for non-Win IE, can be run standalone

// Author: Robert Lipman, robert.lipman@nist.gov, http://cic.nist.gov/vrml/vbdetect.html
// Disclaimer: http://www.nist.gov/public_affairs/disclaimer.cfm

// This software was developed at the National Institute of Standards and Technology by employees of the
// Federal Government in the course of their official duties. Pursuant to Title 17 Section 105 of the United
// States Code this software is not subject to copyright protection and is in the public domain.  This software
// is an experimental system.  NIST assumes no responsibility whatsoever for its use by other parties, and makes 
// no guarantees, expressed or implied, about its quality, reliability, or any other characteristic.  We would 
// appreciate acknowledgement if the software is used.

// This software can be redistributed and/or modified freely provided that any derivative works bear some notice 
// that they are derived from it, and any modified versions bear some notice that they have been modified. 

var ok    = 1;
var nplug = 0;
var plug  = new Array(200);
var dp    = new Array(10);
var arnum = 0;

// detect plugins where the navigator.plugins array is supported (Firefox, Opera, Netscape, Safari, SeaMonkey, Mozilla, Konqueror)

if (navigator.plugins && navigator.plugins.length > 0) {
  var numPlugins = navigator.plugins.length;

// loop over all plugins
  for (i = 0; i < numPlugins; i++) {
    var plugin = navigator.plugins[i];
    var plugnam = plugin.name;

// rename some of the plugins
    if (plugnam == 'Adobe Acrobat')             {plugnam = 'Adobe Reader';}
    if (plugnam == 'Shockwave Flash')           {plugnam = 'Flash Player';}
    if (plugnam == 'Shockwave for Director')    {plugnam = 'Shockwave Player';}
    if (plugnam == 'MetaStream 3 Plugin')       {plugnam = 'Viewpoint Media Player';}

    if (plugnam.indexOf('RealPlayer') != -1)               {plugnam = 'RealPlayer';}
    if (plugnam.indexOf('RealOne') != -1)                  {plugnam = 'RealPlayer';}
    if (plugnam.indexOf('Adobe SVG Viewer') == 0)          {plugnam = 'Adobe SVG Viewer';}
    if (plugnam.indexOf('Windows Media Player') == 0)      {plugnam = 'Windows Media Player';}
    if (plugnam.indexOf('Windows Genuine Advantage') == 0) {plugnam = 'Windows Genuine Advantage';}
    if (plugnam.indexOf('Mozilla ActiveX control') == 0)   {plugnam = 'Mozilla ActiveX Plugin';}
    if (plugnam.indexOf('Helix DNA Plugin') == 0)          {plugnam = 'Helix DNA Plugin';}
    if (plugnam.indexOf('Java(TM) Plug-in') == 0)          {plugnam = 'Java(TM) Plugin';}
    if (plugnam.indexOf('Cosmo Player 2.1.1') == 0)        {plugnam = 'Cosmo Player 2.1.1';}
    if (plugnam.indexOf('Cortona VRML Client') == 0)       {plugnam = 'Cortona3D Viewer';}
    if (plugnam.indexOf('DivX') == 0)                      {plugnam = 'DivX Web Player';}
    if (plugnam.indexOf('Google Update') == 0)             {plugnam = 'Google Updater';}
    if (plugnam.indexOf('O3D Plugin') == 0)                {plugnam = 'Google O3D Plugin';}
    if (plugnam.indexOf('Cooliris') == 0)                  {plugnam = 'Cooliris';}
    if (plugnam.indexOf('Silverlight') != -1)              {plugnam = 'Silverlight';}
    if (plugnam.indexOf('npirplayer plugin') != -1)        {plugnam = 'InstantPlayer';}
    if (plugnam.indexOf('LabVIEW') != -1)                  {plugnam = 'National Instruments LabVIEW';}
    if (plugnam.indexOf('NVIDIA 3D VISION') == 0)          {plugnam = 'NVIDIA 3D Vision';}

// determine the plugin version (plugver) from a possible number in the plugin description
    var plugver = '';
				var pf = 1000;
				desc = plugin.description;
				dp[0] = desc.indexOf('0');
				dp[1] = desc.indexOf('1');
				dp[2] = desc.indexOf('2');
				dp[3] = desc.indexOf('3');
				dp[4] = desc.indexOf('4');
				dp[5] = desc.indexOf('5');
				dp[6] = desc.indexOf('6');
				dp[7] = desc.indexOf('7');
				dp[8] = desc.indexOf('8');
				dp[9] = desc.indexOf('9');
				for (l = 0; l < 10; l++) {if (dp[l] != -1 && dp[l] < pf) {pf = dp[l];}}

				if (pf < 1000) {
						var s1 = desc.substring(pf,desc.length);
						if (plugnam.indexOf('Cortona') != -1) {
								s1 = s1.replace(/[,]/g, ".");
								s1 = s1.replace(/[ ]/g, "");
								s1 = s1.replace(/[)]/g, "");
						}
						if (plugnam.indexOf('Adobe Reader') != -1) {
								s1 = s1.replace(/[/"]/g, "");
						}
						var p2 = s1.indexOf(' ');
						var p3 = desc.indexOf('<');
						if (p3 == -1) {
								if (p2 == -1) {
										p2 = 20;
								} else if ((s1.length - p2) < 7) {
										p2 = s1.length;
								}
								num = s1.substring(0,p2);
						} else {
								num = parseFloat(desc.substring(pf));
						}
						if (plugin.name.indexOf(num) == -1) {plugver = ' ' + num;}
				}
				if (plugver.indexOf('.') != -1 && plugnam.indexOf('Java') == -1 && plugnam.indexOf('Google Gadget') == -1 && 
				    plugnam.indexOf('Windows Genuine Advantage') == -1 && plugnam.indexOf('RealPlayer') == -1 && plugnam.indexOf('DivX') == -1 &&
				    plugnam.indexOf('LabVIEW') == -1) {
				  plugnam = plugnam + plugver;
				}

// look for other plugins by checking name
				ok = 1;
				for (k = 0; k < nplug; k++) {if (plugnam == plug[k]) {ok = 0;}}

// do not count the following as different plugins
    if (plugnam.indexOf('Java Deployment') != -1)              {ok = 0;}
    if (plugnam.indexOf('RealJukebox') != -1)                  {ok = 0;}
				if (plugnam.indexOf('RealPlayer Version Plugin') != -1)    {ok = 0;}
				if (plugnam.indexOf('RealNetworks Rhapsody') != -1)        {ok = 0;}
				if (plugnam.indexOf('RealNetworks(tm) Chrome') != -1)      {ok = 0;}
				if (plugnam.indexOf('BS Version') != -1)                   {ok = 0;}

				if (plugnam.indexOf('Adobe Reader') == 0) {
						if (plugnam.length > 12) {
								arnum = 1;
						} else {
								if (arnum == 1) {ok = 0;}
						}
				}

				if (ok) {
						plug[nplug] = plugnam;
						nplug = nplug + 1;
				}
  }
}

var aflash  = 0;
var areader = 0;
var java    = 0;

plug = plug.sort();

if (navigator.plugins && navigator.plugins.length > 0) {
  document.write('<FONT SIZE=-1 FACE="Arial,Helvetica">');
		document.write('<P>More plugins:');
		if (nplug > 0) {
				for (k = 0; k < nplug; k++) {
						url1 = "";
						url2 = "</A>";

// associate URL with plugin
						if (plug[k].indexOf('3DMLW')       != -1) {url1 = '<A HREF="http://www.3dmlw.com/">';}
						if (plug[k].indexOf('3DVIA')        == 0) {url1 = '<A HREF="http://www.3dvia.com/">';}
						if (plug[k].indexOf('Blender')     != -1) {url1 = '<A HREF="http://www.blender.org/">';}
						if (plug[k].indexOf('Deep View')   != -1) {url1 = '<A HREF="http://www.righthemisphere.com/products/client-products/deep-view">';}
  				if (plug[k].indexOf('DepthCharge')  == 0) {url1 = '<A HREF="http://www.vrex.com/">';}
						if (plug[k].indexOf('DevalVR')      == 0) {url1 = '<A HREF="http://www.devalvr.com/">';}
						if (plug[k].indexOf('ExitReality') != -1) {url1 = '<A HREF="http://www.exitreality.com/">';}
						if (plug[k].indexOf('Foxit')        == 0) {url1 = '<A HREF="http://www.foxitsoftware.com/">';}
						if (plug[k].indexOf('Haptek')       == 0) {url1 = '<A HREF="http://www.haptek.com/">';}
						if (plug[k].indexOf('HD View')      == 0) {url1 = '<A HREF="http://research.microsoft.com/en-us/um/redmond/groups/ivm/HDView/">';}
						if (plug[k].indexOf('IE Tab Plug-in') != -1) {url1 = '<A HREF="http://www.ietab.net/">';}
						if (plug[k].indexOf('Chrome IE ')  != -1) {url1 = '<A HREF="http://www.ietab.net/">';}
						if (plug[k].indexOf('iPIX')        != -1) {url1 = '<A HREF="http://www.ipix.com/">';}
						if (plug[k].indexOf('Mozilla ActiveX') == 0) {url1 = '<A HREF="http://www.iol.ie/~locka/mozilla/plugin.htm">';}
						if (plug[k].indexOf('MYRIAD')       == 0) {url1 = '<A HREF="http://www.myriadviewer.com/myriadreader.htm">';}
						if (plug[k].indexOf('O3D Plugin')  != -1) {url1 = '<A HREF="http://code.google.com/apis/o3d/">';}
						if (plug[k].indexOf('SpinFire')    != -1) {url1 = '<A HREF="http://www.actify.com/">';}
						if (plug[k].indexOf('SwirlX3D')    != -1) {url1 = '<A HREF="http://www.pinecoast.com/">';}
						if (plug[k].indexOf('Tcl Plugin')   == 0) {url1 = '<A HREF="http://www.tcl.tk/software/plugin/">';}
						if (plug[k].indexOf('TurnTool')     == 0) {url1 = '<A HREF="http://www.turntool.com/">';}
						if (plug[k].indexOf('Unity Player') == 0) {url1 = '<A HREF="http://unity3d.com/webplayer/">';}
						if (plug[k].indexOf('Virtools')     == 0) {url1 = '<A HREF="http://a2.media.3ds.com/products/3dvia/3dvia-virtools/">';}
						if (plug[k].indexOf('VLC')          == 0) {url1 = '<A HREF="http://www.videolan.org/">';}
						if (plug[k].indexOf('XVL')          == 0) {url1 = '<A HREF="http://www.lattice3d.com/">';}

						if (plug[k].indexOf('Chrome NaCl') == 0) {url1 = '<A HREF="http://code.google.com/chrome/nativeclient/">';}
						if (plug[k].indexOf('Native Client') == 0) {url1 = '<A HREF="http://code.google.com/chrome/nativeclient/">';}
						if (plug[k].indexOf('Chrome PDF Viewer') == 0) {url1 = '<A HREF="http://www.google.com/support/chrome/bin/answer.py?hl=en&answer=1060734">';}
						if (plug[k].indexOf('Google Earth')   != -1) {url1 = '<A HREF="http://code.google.com/apis/earth/">';}
						if (plug[k].indexOf('Google Gadget')  != -1) {url1 = '<A HREF="http://desktop.google.com/plugins/">';}
						if (plug[k].indexOf('Google Gears')   != -1) {url1 = '<A HREF="http://en.wikipedia.org/wiki/Gears_%28software%29">';}
						if (plug[k].indexOf('Google Updater') != -1) {url1 = '<A HREF="http://www.google.com/support/installer/bin/answer.py?answer=98805">';}

						if (plug[k].indexOf('Cooliris')     == 0) {url1 = '<A HREF="http://www.cooliris.com/">';}
						if (plug[k].indexOf('DivX')        != -1) {url1 = '<A HREF="http://www.divx.com/">';}
						if (plug[k].indexOf('Helix DNA')   != -1) {url1 = '<A HREF="https://helixcommunity.org/">';}
						if (plug[k].indexOf('iTunes')      != -1) {url1 = '<A HREF="http://www.apple.com/itunes/">';}
						if (plug[k].indexOf('Java')         == 0) {url1 = '<A HREF="http://www.java.com/">'}
						if (plug[k].indexOf('LabVIEW')     != -1) {url1 = '<A HREF="http://www.ni.com/labview/">';}
						if (plug[k].indexOf('McAfee')      != -1) {url1 = '<A HREF="http://www.mcafee.com/">';}
						if (plug[k].indexOf('MetaStream')   == 0) {url1 = '<A HREF="http://www.viewpoint.com/technologies/viewpoint-media-player.shtml">';}
						if (plug[k].indexOf('Move Media')     != -1) {url1 = '<A HREF="http://www.movenetworks.com/">';}
						if (plug[k].indexOf('Move Streaming') != -1) {url1 = '<A HREF="http://www.movenetworks.com/">';}
						if (plug[k].indexOf('MoveNetwork')    != -1) {url1 = '<A HREF="http://www.movenetworks.com/">';}
						if (plug[k].indexOf('NVIDIA 3D Vision')      == 0) {url1 = '<A HREF="http://www.nvidia.com/object/3d-vision-main.html">';}
						if (plug[k].indexOf('Office Live') != -1) {url1 = '<A HREF="http://www.officelive.com/">';}
						if (plug[k].indexOf('Oracle')       == 0) {url1 = '<A HREF="http://www.oracle.com/">';}
						if (plug[k].indexOf('Photosynth')  != -1) {url1 = '<A HREF="http://photosynth.net/">';}
						if (plug[k].indexOf('Picasa')       == 0) {url1 = '<A HREF="http://picasa.google.com/">';}
						if (plug[k].indexOf('Plugger')     != -1) {url1 = '<A HREF="http://mozplugger.mozdev.org/">';}
						if (plug[k].indexOf('QuickTime')    == 0) {url1 = '<A HREF="http://www.apple.com/quicktime/">';}
						if (plug[k].indexOf('RealOne')      == 0) {url1 = '<A HREF="http://www.real.com/">';}
						if (plug[k].indexOf('RealPlayer')   == 0) {url1 = '<A HREF="http://www.real.com/">';}
						if (plug[k].indexOf('Silverlight') != -1) {url1 = '<A HREF="http://www.microsoft.com/silverlight/">';}
						if (plug[k].indexOf('Viewpoint')    == 0) {url1 = '<A HREF="http://www.viewpoint.com/technologies/viewpoint-media-player.shtml">';}
						if (plug[k].indexOf('Winamp')      != -1) {url1 = '<A HREF="http://www.winamp.com/">';}
						if (plug[k].indexOf('Windows Live') == 0) {url1 = '<A HREF="http://explore.live.com/windows-live-essentials">';}
						if (plug[k].indexOf('Windows Media Player Firefox Plugin') != -1) {url1 = '<A HREF="http://port25.technet.com/archive/2007/04/16/windows-media-player-plug-in-for-firefox.aspx">';}
						if (plug[k].indexOf('Windows Media Player') == 0) {url1 = '<A HREF="http://www.microsoft.com/windows/windowsmedia/">';}
						if (plug[k].indexOf('windows media') == 0) {url1 = '<A HREF="http://www.microsoft.com/windows/windowsmedia/">';}
						if (plug[k].indexOf('Windows Presentation Foundation') == 0) {url1 = '<A HREF="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation">';}
						if (plug[k].indexOf('YouTube')      == 0) {url1 = '<A HREF="http://www.youtube.com/">';}

						if (plug[k].indexOf('Adobe') != -1 && plug[k].indexOf('getPlus') == -1) {url1 = '<A HREF="http://www.adobe.com/">';}
						if (plug[k].indexOf('Shockwave')  != -1)             {url1 = '<A HREF="http://www.adobe.com/">';}
						if (plug[k].indexOf('Macromedia') != -1)             {url1 = '<A HREF="http://www.adobe.com/">';}
						if (plug[k].indexOf('Authorware') != -1)             {url1 = '<A HREF="http://www.adobe.com/">';}
						if (plug[k].indexOf('Adobe Acrobat')          != -1) {url1 = '<A HREF="http://www.adobe.com/products/reader.html">'}
						if (plug[k].indexOf('Adobe Reader')           != -1) {url1 = '<A HREF="http://www.adobe.com/products/reader.html">'}
						if (plug[k].indexOf('Shockwave Flash')        != -1) {url1 = '<A HREF="http://www.adobe.com/products/flashplayer.html">'}
						if (plug[k].indexOf('Flash Player')           != -1) {url1 = '<A HREF="http://www.adobe.com/products/flashplayer.html">'}
						if (plug[k].indexOf('Shockwave for Director') != -1) {url1 = '<A HREF="http://www.adobe.com/products/shockwaveplayer/">';}
						if (plug[k].indexOf('Shockwave Player')       != -1) {url1 = '<A HREF="http://www.adobe.com/products/shockwaveplayer/">';}
						if (plug[k].indexOf('Adobe SVG')              != -1) {url1 = '<A HREF="http://www.adobe.com/svg/">';}
						if (plug[k].indexOf('getPlus') != -1) {url1 = ''; url2 = '';}

						document.write(' &nbsp;[' + url1 + plug[k] + url2 + ']');
				}

		} else {
				document.write(': &nbsp;none');
		}
		document.write('</FONT>');
}

document.write('<FONT SIZE=-1 FACE="Arial,Helvetica"><P>Resources: ');
if (navigator.appName == "Microsoft Internet Explorer") {
		document.write ('<A HREF="http://www.ieaddons.com/addons">Add-ons</A>, <A HREF="https://www.mozilla.com/plugincheck/">Plugin Check</A>,  Tools > Manage Add-ons');
} else if (navigator.userAgent.indexOf('Firefox') != -1) {
		document.write ('<A HREF="https://addons.mozilla.org/">Add-ons</A>, <A HREF="https://www.mozilla.com/plugincheck/">Plugin Check</A>,  Firefox > Add-ons  OR  Tools > Add-ons > Plugins');
} else if (navigator.userAgent.indexOf('Chrome') != -1) {
		document.write ('<A HREF="http://www.google.com/support/chrome/bin/answer.py?answer=142064">Plug-ins</A>, <A HREF="https://chrome.google.com/webstore/category/extensions">Extensions</A>, <A HREF="https://www.mozilla.com/plugincheck/">Plugin Check</A>, Options > Under the Hood > Content Settings > Disable individual plug-ins...');
} else if (navigator.userAgent.indexOf('Safari') != -1) {
		document.write ('<A HREF="http://www.apple.com/safari/download/plugins.html">Plug-ins</A>, <A HREF="https://extensions.apple.com/">Extensions</A>, <A HREF="https://www.mozilla.com/plugincheck/">Plugin Check</A>');
} else if (navigator.userAgent.indexOf('Opera') != -1) {
		document.write ('<A HREF="http://www.opera.com/docs/plugins/">Plug-ins</A>, <A HREF="opera:plugins">opera:plugins</A>, <A HREF="https://www.mozilla.com/plugincheck/">Plugin Check</A>');
}
if (document.URL.indexOf('nist.gov') == -1 && document.URL.indexOf('lipman') == -1) {
  document.write('<P>The VRML Plugin and Browser Detector was copied from<BR><A HREF="http://cic.nist.gov/vrml/vbdetect.html">http://cic.nist.gov/vrml/vbdetect.html</A>'); 
}
document.write('</FONT>');

