var msg = msg1 ='';
var plugin = new Object(), undefined;
//plugin.name = new Plugin(required ver, activeX reference, netscape reference);
//plugin.pdf = new Plugin(6, 'Pdf.PdfCtrl', 'Adobe Acrobat';

	function Plugin(required, activeX, plugin){
var p = this; p.installed=false, p.hasRequired, p.version = 0, p.activeX = activeX, p.plugin = plugin, p.required = parseInt(required);
var cks = p.required+12;
	if (navigator.plugins && navigator.plugins.length) {
var plug = navigator.plugins; pluglen = plug.length;
 for (var x=0; x < pluglen; x++) {
var plugt = plug[x];
msg1 += '<div style="border:1px solid purple;width:300px;height:auto;float:left;margin:5px;padding:5px;overflow:hidden;">'+navigator.plugins[x].name+'<br>'+plugt.description+'</div>';
if (plugt.name.indexOf(p.plugin) != -1) {
p.version = plugt.description.match(/\d.*$/);
if(p.version == undefined) { p.version = plugt.name.match(/\d.*$/); }
p.version = parseInt(p.version);
if(isNaN(p.version)) p.version = 0;
p.installed = true; break;
}
 }	} else if (window.ActiveXObject) {
 for (var x = 0; x <= cks; x++) {
msg1 += '<div style="border:1px solid green;width:300px;height:auto;float:left;margin:5px;padding:5px;overflow:hidden;">trying '+p.plugin +x+'</div>';
try {
oPlugin = eval("new ActiveXObject('"+p.activeX+"." + x + "');");
msg += '<br>'+p.activeX+' gives: '+eval(oPlugin)+x+', ';
if(oPlugin) { p.installed = true; p.version = x + '.0'; }
} catch(e) {}
 }	}
p.ver = Array(); // sniffing variables following style: p.ver[x]
for(var i = 0; i <= cks; i++) { eval("p.ver[" + i + "] = (p.installed && parseFloat(p.version) >= " + i + ") ? true : false;"); }
p.hasRequired =  p.ver[parseInt(p.required)];
	}

// this only checks major versions (as in version 1 or 2 or 3, etc)
plugin.flash = new Plugin(6, 'ShockwaveFlash.ShockwaveFlash', 'Shockwave Flash');
plugin.real = new Plugin(1, 'RealPlayer.RM', 'RealPlayer');
plugin.pdf = new Plugin(5, 'Pdf.PdfCtrl', 'Adobe Acrobat');
plugin.shockwave = new Plugin(1, 's', 'Shockwave for Director');
plugin.qt = new Plugin(1, 'QuickTimeCheckObject.QuickTimeCheck', 'QuickTime Plug-in');
plugin.java = new Plugin(1.4, 'Java.Java', 'Java Plug-in');
plugin.winmp = new Plugin(0, 'WMPlayer.OCX', 'Windows Media Player');

var tab = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
var n = '<br>';
var strd = '<br clear="all"><b>+++ ', strde = '</b>';
msg += strd+'custom plugin'+strde;
//for(var prop in plugin){ msg+=n+n+tab+'<i>plugin</i>'+n+prop+' = '+plugin[prop]; for(p in plugin[prop]) msg+=n+'- '+p +' = '+plugin[prop][p];}
for(var prop in plugin){ msg+='<div style="border:1px solid red;width:300px;height:auto;float:left;margin:5px;padding:5px;overflow:hidden;">'+prop+' = '+plugin[prop]; for(p in plugin[prop]) msg+=n+'- '+p +' = '+plugin[prop][p]; msg+='</div>';}

msg += strd+'navigator.mimeTypes'+strde;

for(var prop in navigator.mimeTypes){ msg+= '<div style="border:1px solid blue;width:300px;height:auto;float:left;margin:5px;padding:5px;overflow:hidden;">'+prop+' = '+navigator.mimeTypes[prop]; for(p in navigator.mimeTypes[prop]) {
	msg+=n+'- '+p +' = '+navigator.mimeTypes[prop][p]; if(p == 'enabledPlugin') { for(pe in navigator.mimeTypes[prop][p]) msg+=n+'-- '+pe+' = '+navigator.mimeTypes[prop][p][pe]; }
	} msg+='</div>'; }

msg += strd+'window.ActiveXObject'+strde;
msg += msg1;
msg += strd+'the end'+strde;
