//========
// Classes
//========
/*
 * FlashSniffer
 * Author:	Doug Knight
 * Date:	6/26/2002
 * Purpose:	The FlashSniffer is the main class in the module and indicates whether or
 *			not the desired version of flash is installed
 */
function FlashSniffer(maxVersion) {
	var platform = window.navigator.platform;
			
	var isWin = (platform.indexOf("Win")!=-1);
	var isMac = (platform.indexOf("Mac")!=-1);

	this.version = new flashSniffer_Version(0, 0);
			
	if (isWin && document.all) {
		document.write(
			'<scr' + 'ipt language="javascript">' +
				'window.flashSniffer_getFlashVersion = function() {' +
				'	var version = new flashSniffer_Version(0, 0);' +
				'	try {' +
				'		var sf = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");' +
				'		var bin = sf.FlashVersion();' +
				'		bin = flashSniffer_toBinary(bin, 32);' +
				'		var maj = bin.substr(0, bin.length-16);' +
				'		maj = flashSniffer_toDecimal(maj);' +
				'		var min = bin.substr(17);' +
				'		min = flashSniffer_toDecimal(min);' +
				'		version.major = maj;' +
				'		version.minor = min;' +
				'	}' +
				'	catch (e) {;}' +
				'	return version;' +
				'};' +
			'</scr' + 'ipt>'
		);
	}
	else {
		window.flashSniffer_getFlashVersion = function() {
			var version = new flashSniffer_Version(0, 0);
			if (navigator.plugins) {
				var regExp = new RegExp("Shockwave Flash");
				for(var i=0; i<navigator.plugins.length; i++) {
					var p = navigator.plugins[i];
					if (regExp.test(p.name)) {
						break;
					}
				}
						
				if (p) {
					var ver = p.description.match(/\d+\.\d+/g);
					if (ver) {
						ver = ver[0].split(".");
						version.major = parseInt(ver[0]);
						version.minor = parseInt(ver[1]);
					}
				}
			}
			return version;
		};
	}
	if (flashSniffer_getFlashVersion) {
		this.version = flashSniffer_getFlashVersion();
	}			
}
		
function flashSniffer_Version(major, minor) {
	this.major = major;
	this.minor = minor;
	this.toString = function() {
		return this.major + "." + this.minor;
	};
	this.getValue = function() {
		return parseFloat(this.major + "." + this.minor);
	};
}
		
function flashSniffer_toBinary (num, placeCount) {
	var max = Math.floor(Math.log(num)/Math.log(2));
	if (max<placeCount) max = placeCount;
	var s = "";
	for (var i=max; i>=0; i--) {
		var val = Math.pow(2, i);
		if (num & val) {
			s += "1";
		}
		else {
			s += "0"
		}
	}
	return s;
}
function flashSniffer_toDecimal(num) {
	var value = 0;
	for (var i=1; i<=num.length; i++) {
		var index = num.length - i;
		if (num.substr(index, 1)=="1") {
			var exp = Math.pow(2, i-1);
			value += exp;
		}
	}
	return value;
}
