function detectPlugin(substrs) {
 if (navigator.plugins) {
   for (var i = 0; i < navigator.plugins.length; i++) {
     var plugin = navigator.plugins[i];
     var haystack = plugin.name + plugin.description;
     var found = 0;
     for (var j = 0; j < substrs.length; j++) if (haystack.indexOf(substrs[j]) != -1) found++;
     if (found == substrs.length) return true;
   }
 }
 return false;
}
function detectObject(progIds, fns) {
 for (var i = 0; i < progIds.length; i++) {
  try {
    var obj = new ActiveXObject(progIds[i]);
    if (obj) return fns && fns[i] ? fns[i].call(obj) : true;
  } catch (e) { } // Ignore
 }
 return false;
}
var plugins = {
 java:     { substrs: [ "Java" ], progIds: [ "JavaWebStart.isInstalled" ] },
 acrobat:  { substrs: [ "Adobe", "Acrobat" ], progIds: [ "AcroPDF.PDF", "PDF.PDFCtrl.5" ] },
 flash:    { substrs: [ "Shockwave", "Flash" ], progIds: [ "ShockwaveFlash.ShockwaveFlash" ] },
 director: { substrs: [ "Shockwave", "Director" ], progIds: [ "SWCtl.SWCtl" ] },
 quicktime:{ substrs: [ "QuickTime" ], progIds: [ "QuickTimeCheckObject.QuickTimeCheck" ], fns: [ function () { return this.IsQuickTimeAvailable(0); } ] },
 real:     { substrs: [ "RealPlayer" ], progIds: [ "rmocx.RealPlayer G2 Control","RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)","RealVideo.RealVideo(tm) ActiveX Control (32-bit)"] },
 mediaplayer:{ substrs: [ "Windows Media" ],progIds: [ "MediaPlayer.MediaPlayer" ] },
 silverlight:{ substrs: [ "Silverlight" ],  progIds: [ "AgControl.AgControl" ] }
};

