//
// After changes are made to this file, minimize it:
//   java -jar tools/yuicompressor.jar -o public/javascript/Statistics.min.js public/javascript/Statistics.js
//

function detectFlash() {
	if (FlashDetect.installed)
		return FlashDetect.major + "." + FlashDetect.minor + "." + FlashDetect.revision;
	else
		return "0";
}

function trim(string) {
	return string.replace(/^\s+|\s+$/g, '');
}

var nonIEPlugins = {}

function addNonIEPlugin(pluginName, version) {
	if (trim(pluginName).length == 0)
		return;
	if ((typeof nonIEPlugins[pluginName] == "undefined")
	    || (version > nonIEPlugins[pluginName])) {
		if (!version)
			version = "";
		nonIEPlugins[pluginName] = version;
	}
}

function detectNonIEPlugins() {
	if (!window.ActiveXObject) {
		for (var i in navigator.plugins) {
			if (typeof navigator.plugins[i].name == "undefined")
				continue;
			var name = navigator.plugins[i].name.toLowerCase();
			if ((name.indexOf("adobe acrobat") != -1)
			    || ((name.indexOf("adobe pdf plug-in") != -1))) {
				//alert(name + ":" + navigator.plugins[i].description);
				// adobe acrobat
				// 
				var regexp = new RegExp(/([\d\.]+)/);
				var version = regexp.exec(name);
				if (version != null)
					version = version[1];
				addNonIEPlugin("Adobe Reader", version);
			}
			else if (name.indexOf("quicktime plug-in") != -1) {
				//alert(name + ":" + navigator.plugins[i].description);
				// quicktime plug-in 7.2.0
				// quicktime plug-in 7.4.5
				var regexp = new RegExp(/([\d\.]+)/);
				var version = regexp.exec(name);
				if (version != null)
					version = version[1];
				addNonIEPlugin("QuickTime", version);
			}
			else if (name.indexOf("realplayer") != -1) {
				//alert(name + ":" + navigator.plugins[i].description);
				// realplayer 9
				var regexp = new RegExp(/([\d\.]+)/);
				var version = regexp.exec(name);
				if (version != null)
					version = version[1];
				addNonIEPlugin("RealPlayer", version);
			}
			else if (name.indexOf("shockwave for director") != -1) {
				//alert(name + ":" + navigator.plugins[i].description);
				// 
				var regexp = new RegExp(/([\d\.]+)/);
				var version = regexp.exec(name);
				if (version == null)
					version = regexp.exec(navigator.plugins[i].description);
				if (version != null)
					version = version[1];
				addNonIEPlugin("Shockwave Player", version);
			}
			else if (name.indexOf("windows media") != -1) {
				//alert(name + ":" + navigator.plugins[i].description);
				// windows media player plug-in 10 (compatible; totem)
				// windows media player plug-in
				var regexp = new RegExp(/([\d\.]+)/);
				var version = regexp.exec(name);
				if (version != null)
					version = version[1];
				addNonIEPlugin("Windows Media Player", version);
			}
			else {
				//alert(name + ":" + navigator.plugins[i].description);
				addNonIEPlugin(name, "");
			}
		}
	}
}

function detectAdobeReader() {
	var isInstalled = false;
	var version = null;
	if (window.ActiveXObject) {
		var control = null;
		try {
			// AcroPDF.PDF is used by version 7 and later
			control = new ActiveXObject('AcroPDF.PDF');
		} catch (e) {
			// Do nothing
		}
		if (!control) {
			try {
				// PDF.PdfCtrl is used by version 6 and earlier
				control = new ActiveXObject('PDF.PdfCtrl');
			} catch (e) {
				return false;
			}
		}
		if (control) {
			isInstalled = true;
			version = control.GetVersions().split(',');
			version = version[0].split('=');
			version = parseFloat(version[1]);
		}
	} else {
		// Check navigator.plugins for "Adobe Acrobat" or "Adobe PDF Plug-in"*
		if (typeof (version = nonIEPlugins['Adobe Reader']) != "undefined")
			isInstalled = true;
	}

	if (isInstalled)
		return trim("Adobe Reader " + version);
	else
		return false;
}

function detectQuickTime() {
	var isInstalled = false;  
	var version = "";
	if (window.ActiveXObject) {  
		var control = null;  
		try {  
			control = new ActiveXObject('QuickTime.QuickTime');  
		} catch (e) {  
			// Do nothing  
		}  
		if (control) {  
			// In case QuickTimeCheckObject.QuickTimeCheck does not exist  
			isInstalled = true;  
		}  

		// this code shows a popup dialog on IE7 and IE8; we can't have that
		/*
		try {  
			// This generates a user prompt in Internet Explorer 7  
			control = new ActiveXObject('QuickTimeCheckObject.QuickTimeCheck');  
		} catch (e) {  
			return false;
		}  
		if (control) {  
			// In case QuickTime.QuickTime does not exist  
			isInstalled = true;  

			// Get version  
			version = control.QuickTimeVersion.toString(16); // Convert to hex  
			version = version.substring(0, 1) + '.' + version.substring(1, 3);  
			version = parseFloat(version);  
		}
		*/ 
	} else {  
		// Check navigator.plugins for "QuickTime Plug-in"
		if (typeof (version = nonIEPlugins['QuickTime']) != "undefined")
			isInstalled = true;
	}

	if (isInstalled)
		return trim("QuickTime " + version);
	else
		return false;
}

function detectRealPlayer() {
	var isInstalled = false;  
	var version = null;  
	if (window.ActiveXObject) {  
		var definedControls = [  
		    'rmocx.RealPlayer G2 Control',  
		    'rmocx.RealPlayer G2 Control.1',  
		    'RealPlayer.RealPlayer(tm) ActiveX Control (32-bit)',  
		    'RealVideo.RealVideo(tm) ActiveX Control (32-bit)',  
		    'RealPlayer'  
		];  

		var control = null;  
		for (var i = 0; i < definedControls.length; i++) {  
			try {  
				control = new ActiveXObject(definedControls[i]);  
			} catch (e) {  
				continue;  
			}  
			if (control) {  
				break;  
			}  
		}  
		if (control) {  
			isInstalled = true;  
			version = control.GetVersionInfo();  
			version = parseFloat(version);  
		}  
	} else {  
		// Check navigator.plugins for "RealPlayer" and "RealPlayer Version"  
		if (typeof (version = nonIEPlugins['RealPlayer']) != "undefined")
			isInstalled = true;
	}

	if (isInstalled)
		return trim("RealPlayer " + version);
	else
		return false;
}

function detectShockwavePlayer() {
	var isInstalled = false;  
	var version = null;  
	if (window.ActiveXObject) {  
		var control = null;  
		try {  
			control = new ActiveXObject('SWCtl.SWCtl');  
		} catch (e) {  
			return false;
		}  
		if (control) {  
			isInstalled = true;  
			version = control.ShockwaveVersion('').split('r');  
			version = parseFloat(version[0]);  
		}
	} else {  
		// Check navigator.plugins for "Shockwave for Director"  
		if (typeof (version = nonIEPlugins['Shockwave Player']) != "undefined")
			isInstalled = true;
	}

	if (isInstalled)
		return trim("Shockwave Player " + version);
	else
		return false;
}

function detectWindowsMediaPlayer() {
	var isInstalled = false;  
	var version = null;  
	if (window.ActiveXObject) {  
		var control = null;  
		try {  
			control = new ActiveXObject('WMPlayer.OCX');  
		} catch (e) {  
			return false;
		}  
		if (control) {  
			isInstalled = true;  
			version = parseFloat(control.versionInfo);  
		}  
	} else {  
		// Check navigator.plugins for "Windows Media"--this also detects the Flip4Mac plugin  
		if (typeof (version = nonIEPlugins['Windows Media Player']) != "undefined")
			isInstalled = true;
	}

	if (isInstalled)
		return trim("Windows Media Player " + version);
	else
		return false;
}

function getPlugins() {
	var pluginsList = [];
	var plugin;
	detectNonIEPlugins()
	if ((plugin = detectAdobeReader()))
		pluginsList.push(plugin);
	if ((plugin = detectQuickTime()))
		pluginsList.push(plugin);
	if ((plugin = detectRealPlayer()))
		pluginsList.push(plugin);
	if ((plugin = detectShockwavePlayer()))
		pluginsList.push(plugin);
	if ((plugin = detectWindowsMediaPlayer()))
		pluginsList.push(plugin);

	var plugins = "";
	for (var i in pluginsList) {
		if (plugins.length > 0)
			plugins += "#=#";
		plugins += pluginsList[i];
	}

	return plugins;
}

var screenSize = screen.width + "x" + screen.height;
var screenColors = screen.colorDepth;
var plugins = getPlugins();
var flash = detectFlash();
if (flash != "0") {
	if (plugins.length > 0)
		plugins += "#=#";
	plugins += "Shockwave Flash " + flash;
}
//alert(plugins);
var cookiesEnabled = navigator.cookieEnabled;
// if not IE4+ nor NS6+
if ((typeof navigator.cookieEnabled == "undefined") && (!cookiesEnabled)) { 
	document.cookie = "testcookie"
	cookiesEnabled = (document.cookie.indexOf("testcookie") != -1);
}
cookiesEnabled = cookiesEnabled ? "Y" : "N";
var vendor = navigator.vendor;
if (typeof vendor == "undefined")
	vendor = "";
var vendorSub = navigator.vendorSub;
if (typeof vendorSub == "undefined")
	vendorSub = "";
var geolocation = !!navigator.geolocation ? "Y" : "N";

var args = {func: "ajaxStatistics",
            sessionId: sessionId, rowid: visitorClientId,
            screenSize: screenSize, screenColors: screenColors, flash: flash,
            plugins: plugins, cookiesEnabled: cookiesEnabled,
            vendor: vendor, vendorSub: vendorSub, geolocation: geolocation};
$.post(ajaxServerUrl, args, function(data) { /*alert("Finished: "+data);*/ }, "html");
