/**
 * Plugin detection for web statistics
 * the following plugins can be detected:
 *	- flash
 *	- pdf
 *	- director
 *	- java
 *	- real player (version can not be checked)
 *	- quicktime
 *	- window media player (version can not be checked)
 *
 * Please keep in mind: detection functions in tracker.js!
 * 
 * @author Norman Beck <beck@mellowmessage.de>
 * @copyright Copyright (c) 2005 
 * @access public
 **/


var t = new Date().getTime();

 
javascriptVersion1_1 = true;

var detectableWithVB = false;
var pluginFound = false;


// browser lets check the plugins
function canDetectPlugins()
{
   if(detectableWithVB || (navigator.plugins && navigator.plugins.length > 0)) return true;
   else return false;
}

// pdf detection
function detectPDF()
{	
	var pdfVersion=0;

	// check non-ie 
  	if (navigator.plugins != null && navigator.plugins.length > 0)
   	{
		for (i=0; i < navigator.plugins.length; i++ )
      		{
       			var plugin = navigator.plugins[i];
         		if (plugin.name.indexOf("Adobe Acrobat") > -1) pdfVersion = parseFloat(plugin.description.substring(30));
         	}
      	}   
      	// cehck ie on win
   	else if(detectableWithVB)
   	{
		for(i=0;i<11;i++) if(detectActiveXControl('PDF.PdfCtrl.'+i)) pdfVersion= i;
  	}

   	return pdfVersion;

}

// detect java version
function detectJava()
{
	javaVersion=0;

	if (navigator.mimeTypes && navigator.mimeTypes.length)
	{
		if(navigator.mimeTypes['application/x-java-jnlp-file']) javaVersion='1.5';
      	}    
	else if(detectableWithVB)
	{
		if(detectActiveXControl('JavaWebStart.isInstalled')) javaVersion='1.1';
		if(detectActiveXControl('JavaWebStart.isInstalled.2')) javaVersion='1.2';
		if(detectActiveXControl('JavaWebStart.isInstalled.1.4.2.0')) javaVersion='1.4';
	}

    	return javaVersion;
}


// detect flash version

var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function detectFlash()
{
	versionStr = GetSwfVer();
	
	if (versionStr == -1 ) {
		return 0;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = parseInt(versionArray[0]);

		return versionMajor;
	}
}


function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
			
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}



// detect director version
function detectDirector()
{
	directorVersion=0;

	for(i=0;i<11;i++)
	{
    		if(detectPlugin('SWCtl.SWCtl.'+i)) directorVersion= i;
    		if(!pluginFound && detectableWithVB)
    		{
			if(detectActiveXControl('SWCtl.SWCtl.'+i)) directorVersion= i;
    		}
    	}
	return directorVersion;
}

// detect quicktime version
function detectQuickTime()
{
	quicktimeVersion = 0;

   	if (navigator.plugins != null && navigator.plugins.length > 0)
   	{
   		for (i=0; i < navigator.plugins.length; i++ )
   		{
         		var plugin =navigator.plugins[i];
         		if (plugin.name.indexOf("QuickTime") > -1) quicktimeVersion = parseFloat(plugin.name.substring(18));
      		}
   	}

   	else if (detectableWithVB)
   	{
		document.write('<scr' + 'ipt language="VBScript"\> \n');
     		document.write('on error resume next \n');
      		document.write('dim obQuicktime \n');
      		document.write('set obQuicktime = CreateObject("QuickTimeCheckObject.QuickTimeCheck.1") \n');
      		document.write('if IsObject(obQuicktime) then \n');
      		document.write('   if obQuicktime.IsQuickTimeAvailable(0) then \n');
      		document.write('      quicktimeVersion = CInt(Hex(obQuicktime.QuickTimeVersion) / 1000000) \n');
      		document.write('   end if \n');
      		document.write('end if \n');
      		document.write('</scr' + 'ipt\> \n');
  	}

	return quicktimeVersion;

}

// detect real (version is not available on all browsers, so only installed or not installed will be returned)
function detectReal()
{
	if(detectPlugin('RealPlayer')) return 1;

	else if(detectableWithVB)
	{
		if(detectActiveXControl('rmocx.RealPlayer G2 Control') ||
		   detectActiveXControl('RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)') ||
		   detectActiveXControl('RealVideo.RealVideo(tm) ActiveX Control (32-bit)')
		)	return 1;
	}

    	return 0;
}

// windows media player (version is not available on all browsers, so only installed or not installed will be returned)
function detectWindowsMedia()
{
    	if(detectPlugin('Windows Media')) return 1;
    	else if(detectableWithVB)
    	{
    		if(detectActiveXControl('MediaPlayer.MediaPlayer.1')) return 1;
    	}
    	return 0;
}

// non ie/non win plugin detection
function detectPlugin()
{
	var daPlugins = detectPlugin.arguments;
    	if (navigator.plugins && navigator.plugins.length > 0)
    	{	
		var pluginsArrayLength = navigator.plugins.length;
		for (pluginsArrayCounter=0; pluginsArrayCounter < pluginsArrayLength; pluginsArrayCounter++ )
		{
	    		for(namesCounter=0; namesCounter < daPlugins.length; namesCounter++)
	    		{
				if( (navigator.plugins[pluginsArrayCounter].name.indexOf(daPlugins[namesCounter]) >= 0) || (navigator.plugins[pluginsArrayCounter].description.indexOf(daPlugins[namesCounter]) >= 0) ) return 1;
	    		}

		}
    	}
    	return 0;
}


// vbscript for accessing plugins with ie on win
if ((navigator.userAgent.indexOf('MSIE') != -1) && (navigator.userAgent.indexOf('Win') != -1)) 
{
	document.writeln('<script language="VBscript">');

   	document.writeln('detectableWithVB = False');
   	document.writeln('If ScriptEngineMajorVersion >= 2 then');
    	document.writeln('  detectableWithVB = True');
    	document.writeln('End If');

    	document.writeln('\'this next function will detect most plugins');
    	document.writeln('Function detectActiveXControl(activeXControlName)');
    	document.writeln('  on error resume next');
    	//document.writeln('  MsgBox activeXControlName');
    	//document.writeln('  MsgBox IsObject(CreateObject(activeXControlName))');
    	document.writeln('  detectActiveXControl = False');
    	document.writeln('  If detectableWithVB Then');
    	document.writeln('     detectActiveXControl = IsObject(CreateObject(activeXControlName))');
    	document.writeln('  End If');
    	document.writeln('End Function');

    	document.writeln('</scr' + 'ipt>');
}


// put all together and call logging script via image-src
function visit_log(base_url)
{
	var plugin_director 			= 0;
	var plugin_flash 			= 0;
	var plugin_quicktime 			= 0;
	var plugin_real				= 0;
	var plugin_java				= 0;
	var plugin_pdf		 		= 0;
	var plugin_windowsmedia 		= 0;
	var screen_width			= screen.width;
	var screen_height			= screen.height;
	var screen_depth			= screen.colorDepth;
	var tmpImg 				= new Image();

	if(canDetectPlugins())
	{
		//plugin_director 	= detectDirector();
		plugin_flash 		= detectFlash();
		plugin_quicktime 	= detectQuickTime();
		plugin_real		= detectReal();
		//plugin_java		= detectJava();
		plugin_pdf		= detectPDF();
		plugin_windowsmedia 	= detectWindowsMedia();
	}
	
	base_url+='&visit_screen_width='        + screen_width;
	base_url+='&visit_screen_height='       + screen_height;
	base_url+='&visit_screen_depth='        + screen_depth;
	base_url+='&visit_plugin_flash='        + plugin_flash;
	
	//base_url+='&visit_plugin_director='     + plugin_director;	
	//base_url+='&visit_plugin_java='         + plugin_java;
	
	base_url+='&visit_plugin_pdf='          + plugin_pdf;
	base_url+='&visit_plugin_real='         + plugin_real;
	base_url+='&visit_plugin_quicktime='    + plugin_quicktime;
	base_url+='&visit_plugin_windowsmedia=' + plugin_windowsmedia;
	base_url+='&cache_killer='+new Date().getTime();


	tmpImg.src  = base_url;
//alert(base_url)
}