//
// Client compatibility detector object
//
function Detector(checkAxHelper, minFlashVersion, onlyIeAllowed) {
	this.checkAxHelper = false;
	if(checkAxHelper != null)
		this.checkAxHelper = checkAxHelper;
	this.supportedOS = new Array("Windows");
	this.supportedOSVersion = new Array(2000, 2003, "NT", "NT 4", "NT 5", "XP", "Vista", "ME", 95, 98);
	this.supportedBrowser = new Array("Microsoft IE");
	this.supportedBrowserMinVersions = new Array();
	this.supportedBrowserMinVersions[0] = 4; // min IE version
	if(false == onlyIeAllowed) {
		this.supportedBrowser = new Array("Microsoft IE", "Firefox", "Netscape");
		this.supportedBrowserMinVersions = new Array(4, 2, 9);
	}
	this.minScreenWidth = 800;
	this.minScreenHeight = 600;
	this.minScreenDepth = 15;
	this.minAXHelperVersion = 2;
	this.minFlashPlayerVersion = 6;
	if(minFlashVersion > this.minFlashPlayerVersion)
		this.minFlashPlayerVersion = minFlashVersion;

	this.checkScreenWidth = function() { return window.screen.width }
	this.checkScreenHeight = function() { return window.screen.height }
	this.checkScreenDepth = function() {
		var tempDepth = window.screen.colorDepth;
		var screenDepth;
		if (tempDepth > 32) { screenDepth = Math.log(tempDepth)/Math.log(2); }
		else { screenDepth = tempDepth; }
		return screenDepth;
	}
	this.checkOs = function() {
		var os = null;
		var osVersion = null;
		if (navigator.userAgent.indexOf("Windows") != -1){
			os = "Windows";
			var splitAgent = navigator.userAgent.split(";");
			for (i=0; i < splitAgent.length; i++){
				if (splitAgent[i].indexOf("Windows") != -1){
					if (splitAgent[i].indexOf("NT") != -1){
						osVersion = "NT"; // NT can be without version
						var splitVersion = splitAgent[i].split(" ");
						for (j=0; j < splitVersion.length; j++){
							if (!isNaN(parseFloat(splitVersion[j]))) {
								if (parseFloat(splitVersion[j]) >= 6.0) {
									osVersion = "Vista";
								}
								else if (parseFloat(splitVersion[j]) >= 5.2) {
									osVersion = 2003;
								}
								else if (parseFloat(splitVersion[j]) >= 5.1) {
									osVersion = "XP";
								}
								else if (parseInt(splitVersion[j]) >= 5) {
									osVersion = 2000;
								}
								else {
									osVersion = "NT " + parseFloat(splitVersion[j]);
								}
							}
						}
					}
					else if (splitAgent[i].indexOf("XP") != -1){
						osVersion = "XP";
					}
					else if (splitAgent[i].indexOf("Millenium") != -1){
						osVersion = "ME";
					}
					else {
						var splitVersion = splitAgent[i].split(" ");
						for (j=0; j < splitVersion.length; j++){
							if (!isNaN(parseFloat(splitVersion[j]))) {
								osVersion = parseFloat(splitVersion[j]);
							}
						}
					}
				}
			}
		}
		else if (navigator.userAgent.indexOf("Mac") != -1){
			os = "MacOS";
		}
		else {
			os = "Unsupported";
		}
		if(osVersion == null)
			osVersion = "Unknown";

		return new Array(os, osVersion);
	}
	this.checkBrowserMake = function() {
		var browserMake = null;
		var browserVersion = null;
		if (navigator.appName.indexOf("Microsoft") != -1){
			var splitAgent = navigator.userAgent.split(";");
			browserMake = "Microsoft";
			for (i=0; i < splitAgent.length; i++){
				if (splitAgent[i].indexOf("MSIE") != -1){
					if(browserMake.indexOf(" IE") == -1)
						browserMake += " IE";
					var splitVersion = splitAgent[i].split(" ");
					for (j=0; j < splitVersion.length; j++){
						if (!isNaN(parseFloat(splitVersion[j]))) {
							browserVersion = parseFloat(splitVersion[j]);
						}
					}
				}
				if(null != browserVersion)
					break;
			}
		}
		else if (navigator.appName.indexOf("Netscape") != -1){
			// netscape
			browserMake = "Netscape";
			// check for Firefox
			if(navigator.userAgent.indexOf("Firefox") > -1 && navigator.userAgent.indexOf("Navigator") == -1) {
				browserMake = "Firefox";
			}
			
			var splitAgent = navigator.userAgent.split("/");
			for (i=0; i < splitAgent.length; i++){
				if (!isNaN(parseFloat(splitAgent[i]))) {
					var tempVersion = parseFloat(splitAgent[i]);
				}
				if (tempVersion < 5) {
					browserVersion = tempVersion;
				}
				else {
					if ((splitAgent[i].indexOf("Windows") == -1) && (splitAgent[i].indexOf("Netscape") == -1)) {
						if (!isNaN(parseFloat(splitAgent[i]))) {
							browserVersion = parseFloat(parseFloat(splitAgent[i]));
						}
					}
				}
			}
		}
		return new Array(browserMake, browserVersion);
	}
	this.checkFlashPlayer = function() {
		var flash = null;
		var flashVersion = null;
		if (this.activeX == true) {
			if (AXFlashExists() == true) {
				flash = true;
      				// loop backwards through the versions until we find the newest version
				for (i=25;i>0;i--) {
					versionStr = AXFlashTryGetVersion(i);
					if(versionStr != 0) {
						// version returns as OS Version,Major,Minor
						// for example WIN 7,0,19
						tempArray = versionStr.split(" ");
						if(tempArray.length > 1) {
							versionArray = tempArray[1].split(",");
							if(versionArray.length > 0 && !isNaN(parseFloat(versionArray[0])))
								flashVersion = parseFloat(versionArray[0]); //obtain version
						}
						break;
					}
				}
			}
			else {
				flash = false;
			}
		} else if (this.browserMake[0].indexOf("Netscape") != -1 || this.browserMake[0].indexOf("Firefox") != -1 || this.os[0].indexOf("Mac") != -1) {
			for (i = 0 ; i < (navigator.plugins.length) ; i++) {
				if (navigator.plugins[i].name.indexOf("Shockwave Flash") != -1) {
					for (j=0; j< navigator.plugins[i].length; j++) {
						if (navigator.plugins[i][j].type.indexOf("application/x-shockwave-flash") != -1) {
							flash = true;
							var splitFlash = navigator.plugins[i].description.split(" ")
							for (k=0; k < splitFlash.length; k++){
								if (!isNaN(parseFloat(splitFlash[k]))) {
									flashVersion = parseFloat(splitFlash[k]);
								}
							}
						}
					}
				}
			}
		}
		return new Array(flash, flashVersion);
	}
	this.checkAXHelper = function() {
		var ax = null;
		var axVersion = null;
		if (this.activeX == true) {
			if (AXHelperExists() == true) {
				ax = true
				axVersion = 1;
      				// loop backwards through the versions until we find the newest version
				for (i=25;i>0;i--) {      
					versionStr = AXFlashHelperTryGetVersion(i);
					if(versionStr != 0) {
						// version returns as Version.Major.Minor.Build
						// for example 2.0.0.1
       						versionArray = versionStr.split(".");
		       				if(versionArray.length > 0 && !isNaN(parseFloat(versionArray[0])))
       							axVersion = parseFloat(versionArray[0]); //obtain version
						break;
					}
				}
			}
			else {
				ax = false;
			}
		}
		return new Array(ax, axVersion);
	}

	this.IsOsOK = function() {
		var ret = false;
	       	for (all in this.supportedOS) {
       			if (this.supportedOS[all] == this.os[0]) {
       				for (each in this.supportedOSVersion) {
	       				if (this.supportedOSVersion[each] == this.os[1]) {
       						ret = true;
       					}
       				}
       			}
	       	}
		return ret;
	}
	this.IsBrowserOK = function() {
		var ret = false;
		for (all in this.supportedBrowser) {
			if (this.browserMake[0] == this.supportedBrowser[all]) { 
				if (this.browserMake[1] >= this.supportedBrowserMinVersions[all]) {
					ret = true;
					break;
				}
			}
		}
		return ret;
	}
	this.IsScreenSizeOK = function() {
		return (this.screenWidth >= this.minScreenWidth && this.screenHeight >= this.minScreenHeight);
	}
	this.IsScreenDepthOK = function() {
		return (this.screenDepth >= this.minScreenDepth);
	}
	this.IsFlashPlayerOK = function() {
		return (this.flash[0] != false && this.flash[1] >= this.minFlashPlayerVersion);
	}
	this.IsAxHelperOK = function() {
		return (this.axhelper[0] != false && this.axhelper[1] >= this.minAXHelperVersion);
	}

	// detect capabilities
	this.javascript = true;
	this.screenWidth = this.checkScreenWidth();
	this.screenHeight = this.checkScreenHeight();
	this.screenDepth = this.checkScreenDepth();
	this.os = this.checkOs();
	this.browserMake = this.checkBrowserMake();
	if (navigator.appName.indexOf("Microsoft") != -1){
		this.activeX = AXEnabled();
	}
	else {
		this.activeX = false;
	}
	this.flash = this.checkFlashPlayer();
	// determine whether capabilities are OK
	this.isOsOk = this.IsOsOK();
	this.isBrowserOk = this.IsBrowserOK();
	this.isScreenSizeOk = this.IsScreenSizeOK();
	this.isScreenDepthOk = this.IsScreenDepthOK();
	this.isFlashPlayerOk = this.IsFlashPlayerOK();
	if(this.checkAxHelper) {
		this.axhelper = this.checkAXHelper();
		this.isAxHelperOk = this.IsAxHelperOK();
	}

}

