var nvrml  = 0;
var vrmlok = 0;
var vrmlPlugin = '';
var vrml = new Array(20);
var nenabled = 0;

var vrmlMime = new Array(10);
vrmlMime[1] = 'model/vrml';
vrmlMime[2] = 'x-world/x-vrml';
var nvrmlMime = 2;

var nx3d  = 0;
var x3dok = 0;
var x3dPlugin = '';
var x3d = new Array(20);

var x3dMime = new Array(10);
x3dMime[1] = 'model/x3d';
x3dMime[2] = 'model/x3d+xml';
x3dMime[3] = 'model/x3d+vrml';
x3dMime[4] = 'model/x3d+binary';
var nx3dMime = 4;

var bold  = 0;

// detect plugins in Netscape, Mozilla, Opera, and other browser that use the navigator.plugins array

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 numTypes = plugin.length;

// look for VRML plugins by checking mimetype for 'vrml'
    for (j = 0; j < numTypes; j++) {
      mimetype = plugin[j];
      if (mimetype) {
        if (mimetype.type == vrmlMime[1] ||
            mimetype.type == vrmlMime[2] ||
            mimetype.suffixes == 'wrl' ||
            mimetype.suffixes == 'wrz' ||
            mimetype.suffixes == 'vrml') {
          enabledPlugin = mimetype.enabledPlugin;
          if (enabledPlugin && (enabledPlugin.name == plugin.name)) {
            if (plugin.name != vrmlPlugin) {
              var descr=plugin.description;
              var verInfoStartPos=descr.indexOf('(');
              var verInfoEndPos=-1;
              if (verInfoStartPos!=-1) {
                verInfoEndPos=descr.indexOf(')',verInfoStartPos);
                if (verInfoEndPos!=-1) {
                  var cortonaVersion=descr.substring(verInfoStartPos+1,verInfoEndPos).replace(/ /g,"");
                  //alert(cortonaVersion);
                  if (cortonaVersion!="4,2,0,93") cortonaVersion="wrong"; else cortonaVersion="correct";
                } else {
                  cortonaVersion="undefined";
                }
              } else {
                cortonaVersion="undefined";
              }
              //alert(cortonaVersion);
              vrmlPlugin = plugin.name;
              nenabled = nenabled + 1;
            }
            if (!vrmlok) {vrmlok = 1;}
          }
          ok = 1;
          for (k = 1; k <= nvrml; k++) {if (plugin.name == vrml[k]) {ok = 0;}}
          if (ok) {nvrml = nvrml + 1; vrml[nvrml] = plugin.name;}
          ok = 1;
          for (m = 1; m <= nvrmlMime; m++) {if (mimetype.type == vrmlMime[m]) {ok = 0;}}
          if (ok) {nvrmlMime = nvrmlMime + 1; vrmlMime[nvrmlMime] = mimetype.type;}
        }

// look for X3D plugins by checking mimetype for 'x3d'
        if (mimetype.type.indexOf('x3d') != -1 ||
            mimetype.type.indexOf('X3D') != -1 || 
            mimetype.suffixes.indexOf('x3d') != -1 || 
            mimetype.suffixes.indexOf('x3b') != -1 || 
            mimetype.suffixes.indexOf('b3d') != -1 || 
            mimetype.suffixes.indexOf('b3z') != -1 || 
            mimetype.suffixes.indexOf('X3D') != -1) {
          enabledPlugin = mimetype.enabledPlugin;
          if (enabledPlugin && (enabledPlugin.name == plugin.name)) {
            x3dPlugin = plugin.name;
            if (!x3dok) {x3dok = 1;}
          }
          ok = 1;
          for (k = 1; k <= nx3d; k++) {if (plugin.name == x3d[k]) {ok = 0;}}
          if (ok) {nx3d = nx3d + 1; x3d[nx3d] = plugin.name;}
          ok = 1;
          for (m = 1; m <= nx3dMime; m++) {if (mimetype.type == x3dMime[m]) {ok = 0;}}
          if (ok) {nx3dMime = nx3dMime + 1; x3dMime[nx3dMime] = mimetype.type;}
        }
      }
    }
  }
  
  if (nenabled > 1) {
    vrmlPlugin = 'undefined';
    bold = 1;
  }

// *****************************************************************************
// detect VRML and X3D plugins in Microsoft Internet Explorer, only with Windows

} else if (navigator.appName == "Microsoft Internet Explorer") {
  if (navigator.appVersion.indexOf('Win') != -1 && parseFloat(navigator.appVersion) >= 4) {
    
// IEDetectObject is used to detect Cortona ActiveX Controls
    document.writeln('<script language="VBScript">');
    document.writeln('function CortonaIEDetectObject(activeXControlName)');
    document.writeln('  On Error Resume Next');
    document.writeln('  Set obj=CreateObject(activeXControlName)');
    document.writeln('  if IsObject(obj) then');
    document.writeln('    ver=obj.Version');
    document.writeln('    if ver="" or left(ver,1)="4" then');
    document.writeln('      CortonaIEDetectObject="correct"');
    document.writeln('    else');
    document.writeln('      CortonaIEDetectObject="wrong"');
    document.writeln('    end if');
    document.writeln('  else');    
    document.writeln('    CortonaIEDetectObject="uninstalled"');
    document.writeln('  end if');
    document.writeln('End function');
    document.writeln('function IEDetectObject(activeXControlName)');
    document.writeln('  On Error Resume Next');
    document.writeln('  Set obj=CreateObject(activeXControlName)');
    document.writeln('  IEDetectObject = IsObject(obj)');
    document.writeln('End function');
    document.writeln('</script>');

// IEDetectObject is used to detect others ActiveX Controls
    //document.writeln('<SCRIPT LANGUAGE="VBScript">');
    //document.writeln('</SCR' + 'IPT>');

// detect VRML and X3D ActiveX controls
    if (IEDetectObject('SGI.CosmoPlayer.2')) {
      nvrml = nvrml + 1; vrml[nvrml] = "Cosmo&nbsp;Player";
    } else if (IEDetectObject('SGI.CosmoPlayer.1')) {
      nvrml = nvrml + 1; vrml[nvrml] = "Cosmo&nbsp;Player";
    }
    
    var checkCortona=CortonaIEDetectObject('Cortona.Control.1');
    if (checkCortona!="uninstalled") {
      nvrml = nvrml + 1; 
      vrml[nvrml] = "Cortona";
      cortonaVersion=checkCortona;
    } else {
      //Corona non è installato
    }
    if (IEDetectObject('OCTAGAX.OctagaXCtrl.1')) {
      nvrml = nvrml + 1; vrml[nvrml] = "Octaga";
      nx3d  = nx3d  + 1; x3d[nx3d]   = "Octaga";
    }
    if (IEDetectObject('bsContact.bsContact.1')) {
      nvrml = nvrml + 1; vrml[nvrml] = "BS&nbsp;Contact";
      nx3d  = nx3d  + 1; x3d[nx3d]   = "BS&nbsp;Contact";
    }
    if (IEDetectObject('VenuesCtrl.VenuesCtrl.1')) {
      nvrml = nvrml + 1; vrml[nvrml] = "Venues";
      nx3d  = nx3d  + 1; x3d[nx3d]   = "Venues";
    }
    if (IEDetectObject('blaxxunCC3D.blaxxunCC3D.1'))   {
      nvrml = nvrml + 1; vrml[nvrml] = "blaxxun&nbsp;Contact";
    }

// detecting Flux might cause an error in IE
    if (IEDetectObject('ANIMA.AnimaCtrl.1')) {
//      nvrml = nvrml + 1; vrml[nvrml] = "Flux";
      nx3d  = nx3d  + 1; x3d[nx3d]   = "Flux";
    }

    if (nvrml > 0) {
      vrmlok = 1;
      if (nvrml == 1) {
        vrmlPlugin = vrml[1];
      } else {
        vrmlPlugin = 'undefined';
      }
    }
    if (nx3d > 0) {
      x3dok = 1;
      if (nx3d == 1) {
        x3dPlugin = x3d[1];
      } else {
        x3dPlugin = 'undefined';
      }
    }
  }
  bold = 1;
}

// ----------------------------------------------------------------------------
// The rest of the code below is optional.  It reports which VRML and X3D plugins
// were found and makes some recommendations if none was found.  The variables
// 'nvrml' and 'nx3d' indicate how many plugins were found.  The arrays 'vrml'
// and 'x3d' contain the names of the plugins that were found.

// OS

var win   = 0;
var wince = 0;
var mac   = 0;
var irix  = 0;
var unix  = 0;
var linux = 0;
if (navigator.appVersion.indexOf('Win')  != -1) {win   = 1;}
if (navigator.appVersion.indexOf('Mac')  != -1) {mac   = 1;}
if (navigator.appVersion.indexOf('X11')  != -1) {unix  = 1;}
if (navigator.userAgent.indexOf('Linux') != -1) {unix  = 1; linux = 1;}
if (navigator.userAgent.indexOf('IRIX')  != -1) {unix  = 1; irix  = 1;}
if (navigator.userAgent.indexOf('Windows CE') != -1) {wince = 1;}

var opera = 0;
if (navigator.appName == 'Opera' || navigator.userAgent.indexOf('Opera') != -1) {opera = 1;}
 
// VRML plugin URLs, update as necessary

var httpBlaxxun = '<A HREF="http://www.blaxxun.com/home/index.php?option=com_content&task=view&id=42&Itemid=85">';
var httpContact = '<A HREF="http://www.bitmanagement.com/products/bs_contact_vrml.en.html">';
var httpCortona = '<A HREF="http://www.parallelgraphics.com/products/cortona/">';
var httpCosmo   = '<A HREF="http://cic.nist.gov/vrml/cosmoplayer.html">';
var httpFlux    = '<A HREF="http://www.mediamachines.com/">';
var httpFreeWRL = '<A HREF="http://freewrl.sourceforge.net/">';
var httpOpnVRML = '<A HREF="http://www.openvrml.org/">';
var httpOctaga  = '<A HREF="http://www.octaga.com/">';
var httpVenues  = '<A HREF="http://www.vcom3d.com/Viewer.htm">';
var httpXj3D    = '<A HREF="http://www.xj3d.org/">';
var httpLive3D  = '<A HREF="http://wp.netscape.com/eng/live3d/live3d_overview.html">';

if (mac) {
  httpCortona = '<A HREF="http://www.parallelgraphics.com/products/cortonamac/">';
  httpCosmo   = '<A HREF="http://ovrt.nist.gov/cosmo/">';
} else if (irix) {
  httpCosmo   = '<A HREF="http://www.sgi.com/software/cosmo/irix_player.html">';
} else if (wince) {
  httpCortona = '<A HREF="http://www.parallelgraphics.com/products/cortonace/">';
}

var urlBlaxxun = httpBlaxxun + 'blaxxun&nbsp;Contact</A>';
var urlContact = httpContact + 'BS&nbsp;Contact</A><A HREF="http://www.bitmanagement.com/products/licensing.en.html">*</A>';
var urlCortona = httpCortona + 'Cortona</A>';
var urlCosmo   = httpCosmo   + 'Cosmo&nbsp;Player</A>';
var urlFlux    = httpFlux    + 'Flux</A>';
var urlFreeWRL = httpFreeWRL + 'FreeWRL</A>';
var urlOpnVRML = httpOpnVRML + 'OpenVRML</A>';
var urlOctaga  = httpOctaga  + 'Octaga</A><A HREF="http://www.octaga.com/purchase.html">*</A>';
var urlVenues  = httpVenues  + 'Venues</A>';
var urlXj3D    = httpXj3D    + 'Xj3D</A>';
var urlLive3D  = httpLive3D  + 'Live3D</A>';
if (wince) {urlCortona = httpCortona + 'Pocket Cortona</A>';}

var aov = "<BR>Download ";
var aox = "<BR>Download ";
if (nvrml > 0) {aov = "<BR>Altri ";}
if (nx3d  > 0) {aox = "<BR>Altri ";}

// report VRML plugins -----------------------------------------------------------------------
// Variables are set that indicate which type of VRML plugin is installed based on the 'vrml' array 

var blaxxun = 0;
var contact = 0;
var cortona = 0;
var cosmo   = 0;
var flux    = 0;
var freewrl = 0;
var opnvrml = 0;
var octaga  = 0;
var venues  = 0;
var live3d  = 0;
var xj3d    = 0;

var ip = vrmlPlugin.indexOf(' 2.1');
if (ip != -1) {vrmlPlugin = vrmlPlugin.substring(0,ip);}
ip = vrmlPlugin.indexOf(' Plugin per Mozilla');
if (ip != -1) {vrmlPlugin = vrmlPlugin.substring(0,ip);}
ip = vrmlPlugin.indexOf(' VRML Version');
if (ip != -1) {vrmlPlugin = vrmlPlugin.substring(0,ip);}
ip = vrmlPlugin.indexOf(' VRML Client');
if (ip != -1) {vrmlPlugin = vrmlPlugin.substring(0,ip);}
ip = vrmlPlugin.indexOf(' Netscape - Mozilla Plugin');
if (ip != -1) {vrmlPlugin = vrmlPlugin.substring(0,ip);}
ip = vrmlPlugin.indexOf(' X3D/VRML');
if (ip != -1) {vrmlPlugin = vrmlPlugin.substring(0,ip);}
ip = vrmlPlugin.indexOf(' VRML/X3D');
if (ip != -1) {vrmlPlugin = vrmlPlugin.substring(0,ip);}
var urlHelp = "";


document.write('<p name="testo" id="t11" class="txt11Cont">');
if (nvrml > 0) {
  if (nvrml==1 && vrml[1].indexOf('Cortona') != -1) {
    cortona=1;
  } else {
  document.write('Plugin VRML installati');
  //if (nvrml > 1) {document.write('s');}
  document.write(': &nbsp;');
  
  for (k = 1; k <= nvrml; k++) {
    ip = vrml[k].indexOf(' 2.1');
    if (ip != -1) {vrml[k] = vrml[k].substring(0,ip);}
    ip = vrml[k].indexOf(' Plugin per Mozilla');
    if (ip != -1) {vrml[k] = vrml[k].substring(0,ip);}
    ip = vrml[k].indexOf(' VRML Version');
    if (ip != -1) {vrml[k] = vrml[k].substring(0,ip);}
    ip = vrml[k].indexOf(' VRML Client');
    if (ip != -1) {vrml[k] = vrml[k].substring(0,ip);}
    ip = vrml[k].indexOf(' Netscape - Mozilla Plugin');
    if (ip != -1) {vrml[k] = vrml[k].substring(0,ip);}
    ip = vrml[k].indexOf(' X3D/VRML');
    if (ip != -1) {vrml[k] = vrml[k].substring(0,ip);}
    ip = vrml[k].indexOf(' VRML/X3D');
    if (ip != -1) {vrml[k] = vrml[k].substring(0,ip);}
    
    if (nvrml > 1) {document.write('[');}    
    if (bold || vrmlPlugin.indexOf(vrml[k]) != -1) {document.write('<B>');}
    
    urlHelp = "";
    if (vrml[k].indexOf('Cosmo') != -1) {
      document.write(httpCosmo + vrml[k] + '</A>');
      cosmo = 1;
      urlHelp = '<A HREF="http://cic.nist.gov/vrml/cosmo/Doc/frames-help.html">';

    } else if (vrml[k].indexOf('Cortona') != -1) {
      document.write(httpCortona + vrml[k] + '</A>');
      cortona = 1;
      urlHelp = '<A HREF="http://www.parallelgraphics.com/developer/products/cortona/help/">';

    } else if (vrml[k].indexOf('Octag') != -1) {
      document.write(httpOctaga + vrml[k] + '</A><A HREF="http://www.octaga.com/purchase.html">*</A>');
      octaga = 1;
      urlHelp = '<A HREF="http://www.octaga.com/freedownloads/Octaga/User%20Manual.rtf">';

    } else if (vrml[k].indexOf('BS') != -1 && vrml[k].indexOf('Contact') != -1) {
      document.write(httpContact + vrml[k] + '</A><A HREF="http://www.bitmanagement.com/products/licensing.en.html">*</A>');
      contact = 1;
      urlHelp = '<A HREF="http://www.bitmanagement.com/developer/index.html">'; 

    } else if (vrml[k].indexOf('Flux') != -1) {
      document.write(httpFlux + vrml[k] + '</A>');
      flux = 1;
      urlHelp = '<A HREF="http://www.mediamachines.com/userguide.html">'; 

    } else if (vrml[k].indexOf('Vcom') != -1 || vrml[k].indexOf('Venues') != -1) {
      document.write(httpVenues + vrml[k] + '</A>');
      venues = 1;
      urlHelp = '<A HREF="http://www.vcom3d.com/viewer/X3D_Browser_and_Simulation_EngineB2.pdf">'; 

    } else if (vrml[k].indexOf('blaxxun') != -1) {
      document.write(httpBlaxxun + vrml[k] + '</A>');
      blaxxun = 1;

    } else if (vrml[k].indexOf('FreeWRL') != -1) {
      document.write(httpFreeWRL + vrml[k] + '</A>');
      freewrl = 1;
      urlHelp = '<A HREF="http://freewrl.sourceforge.net/freewrl.html">'; 

    } else if (vrml[k].indexOf('OpenVRML') != -1) {
      document.write(httpOpnVRML + vrml[k] + '</A>');
      opnvrml = 1;

    } else if (vrml[k].indexOf('Xj3D') != -1) {
      document.write(httpXj3D + vrml[k] + '</A>');
      xj3d = 1;

    } else if (vrml[k].indexOf('Live3D') != -1) {
      document.write(httpLive3D + vrml[k] + '</A>');
      live3d = 1;

    } else {
      document.write(vrml[k]);
    }

    if (bold || vrmlPlugin.indexOf(vrml[k]) != -1) {document.write('</B>');}

    //if (urlHelp != "") {document.write('&nbsp;(' + urlHelp + 'Help</A>)');}

    if (nvrml > 1) {
      document.write(']');}
      if (k < nvrml) {document.write('&nbsp; ');
    }
  }


// no VRML plugins

}
} else {
  document.write('Nessun Plugin VRML installato.');
}

// VRML plugin recommendations ----------------------------------------------------------------
// This section can be modified to take different actions depending on the VRML plugin


// win   = 0;
// unix  = 1;
// linux = 1;
// irix  = 1;
// mac   = 1;

//cortona=0;
if (nvrml>0) {
if (!cortona || nvrml>1) document.write("<br/>Sono stati individuati altri plugins VRML diversi da 'Cortona', non completamente testati per Mol@ on Line.");  
if (cortona && nvrml>1) 
  document.write("<br/>Si consiglia di disinstallare o disabilitare gli altri plugins e utilizzare esclusivamente Cortona.");
}
if (!cortona) {
  document.write('<br/>Per una fruizione ottimale dei contenuti di Mol@ on line è consigliato il Plugin VRML Cortona (versione 4.2) per computer dotati di sistema operativo Microsoft Windows.');
if (win && !wince) {
		//document.write('&nbsp; ' + urlCortona);
} else if (unix) {
		document.write('<br/>Su questo computer è installato un sistema operativo tipo unix, per cui si consiglia di installare il seguente plugin VRML:');  
    if (linux || navigator.userAgent.indexOf('SunOS') != -1) {
		  if (!freewrl) {document.write('&nbsp; ' + urlFreeWRL);}
		}
		if (linux) {
		  if (!opnvrml) {document.write('&nbsp; ' + urlOpnVRML);}
		  document.write('&nbsp; ' + urlOctaga);
		}
		if (irix && !cosmo) {document.write('&nbsp; ' + urlCosmo);}
		document.write('&nbsp; <A HREF="http://www.orbisnap.com/">Orbisnap</A>');
		document.write('&nbsp; <A HREF="http://www.netcae.com/tv/">TogetherView</A>');
		if (!xj3d) {document.write('&nbsp; ' + urlXj3D);}
		if (linux || irix)  {document.write('&nbsp; <A HREF="http://www.sim.no/products/SIM_VRMLview/">VRMLView</A>');}

} else if (mac) {
		//if (!cortona) {document.write('&nbsp; ' + urlCortona);}
		if (navigator.userAgent.indexOf('OS X') == -1) {
		} else {
				//if (!freewrl) {document.write('&nbsp; ' + urlFreeWRL);}
				//if (!opnvrml) {document.write('&nbsp; ' + urlOpnVRML);}
		  //document.write('&nbsp; <A HREF="http://www.orbisnap.com/">Orbisnap</A>');
				//document.write('&nbsp; <A HREF="http://www.netcae.com/tv/">TogetherView</A>');
				//if (!xj3d)    {document.write('&nbsp; ' + urlXj3D);}
		}

} else if (wince && !cortona) {
  //document.write(urlCortona);
}
}

document.write('</p>');

