// Object used to perform platform related tests.
var GMI_PlatformTest = {
	agent : navigator.userAgent,
	width : screen.width,
	height : screen.height,
	availableWidth : screen.availWidth,
	availableHeight : screen.availHeight,
	colorDepth : screen.colorDepth,
	GetCPU : function()
	{
		if(navigator.cpuClass != undefined)
		{
			return navigator.cpuClass;
		}
		else
		{
			return "Unknown";
		}
	},
	IsWin : function()
	{
		var isWindows = /win/i;
		return isWindows.test(this.agent);
	},
	
	GetName : function()
	{
		var isWinXP = /windows nt 5.1/i;
		var isWin2k = /windows nt 5.0/i;
		var isWinNT = /winnt|win nt|windows nt/i;
		var isWin98 = /win98|win 98|windows 98/i;
		var isMac = /mac|macintosh/i;
		var isMacPC = /pc/i;
		var isSun = /sunos/i;
		var isIrix = /irix/i;
		var isHpUx = /hp-ux/i;
		var isAix = /aix/i;
		var isLinux = /linux/i;
		var isBsd = /freebsd/i;
		if (isWinXP.test(this.agent))
		{
			return "Windows XP";
		}
		else if(isWin2k.test(this.agent))
		{
			return "Windows 2000";
		}
		else if (isWinNT.test(this.agent))
		{
			return "Windows NT";
		}
		else if (isMac.test(this.agent))
		{
			if (isMacPC.test(this.agent))
			{
				return "Macintosh PPC";
			}
			else
			{
				return "Macintosh";
			}
		}
		else if (isSun.test(this.agent))
		{
			return "Unix Sun";
		}
		else if (isIrix.test(this.agent))
		{
			return "Unix SGI";
		}
		else if (isHpUx.test(this.agent))
		{
			return "Unix HP";
		}	
		else if (isAix.test(this.agent))
		{
			return "Unix IBM";
		}
		else if (isLinux.test(this.agent))
		{
			return "Linux";
		}
		else if (isBsd.test(this.agent))
		{
			return "FreeBSD";
		}
		else
		{
			return "Unknown";
		}
	},
	
	GetResolution : function()
	{
		return this.width + " x " + this.height 
	}
}

//Object used to perform browser releated tests.
var GMI_BrowserTest = 
{
	javaEnabled : navigator.javaEnabled(),
	CookiesEnabled : function()
	{
		if(navigator.cookieEnabled != undefined)
		{
			if(navigator.cookieEnabled)
			{
				return "Yes";
			}
			else
			{
				return "No";
			}
		}
		else
		{
			return "Unknown";
		}
	},
	GetName : function()
	{
		var browserName = this.BrowserDetect().appName;
		if (browserName == "ie")
		{
			return "Microsoft Internet Explorer";
		}
		else if (browserName == "firefox")
		{
			return "Mozilla Firefox";
		}
		else if (browserName == "opera")
		{
			return "Opera";
		}
		else if (browserName == "konqueror")
		{
			return "Konqueror";
		}
		else if (browserName == "safari")
		{
			return "Safari";	
		}
		else if (browserName == "netscape")
		{
			return "Netscape Navigator";
		}
		else
		{
			return browserName;
		}
	},
	GetVersion : function()
	{
		return this.BrowserDetect().version;
	},
	GetMinorVersion : function()
	{
		if(navigator.appMinorVersion != undefined)
		{
			return navigator.appMinorVersion;
		}
		else
		{
			return "Unknown";
		}
	},
	GetLanguage : function()
	{
		if(navigator.browserLanguage != undefined)
		{
			return navigator.browserLanguage;
		}
		else
		{
			return "Unknown";
		}
	},
	BrowserDetect : function()
	{
		var browser = new Object();
		var userAgent = navigator.userAgent;
		var IEName = /MSIE\s\S+\d/;
		var firefoxName = /Firefox\/\S+/;
		var operaName1 = /Opera\/\S+/;
		var operaName2 = /Opera\s\S+\s/;
		var safari = /Safari\/\S+/;
		var konqueror = /Konqueror\/\S+\d/;
		var netscape1 = /Netscape\/\S+/;
		var netscape2 = /NS8\/\S+/;
		var netscape3 = /Netscape6\/S+/;
		var mozilla = /Mozilla\/S+/;
		var chrome = /Chrome\/\S+/;;
		if (firefoxName.test(userAgent))
		{
			var regResult = firefoxName.exec(userAgent);
			var browserArray = regResult[0].split("/");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "firefox";
		}
		else if (IEName.test(userAgent))
		{
			var regResult = IEName.exec(userAgent);
			var browserArray = regResult[0].split(" ");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "ie";
		}
		else if (chrome.test(userAgent))
		{
			var regResult = chrome.exec(userAgent);
			var browserArray = regResult[0].split("/");		
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "chrome";
		}
		else if (operaName1.test(userAgent))
		{
			var regResult = operaName1.exec(userAgent);
			var browserArray = regResult[0].split("/");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "opera";
		}
		else if (operaName2.test(userAgent))
		{
			var regResult = operaName2.exec(userAgent);
			var browserArray = regResult[0].split(" ");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "opera";
		}
		else if (safari.test(userAgent))
		{
			var regResult = safari.exec(userAgent);
			var browserArray = regResult[0].split("/");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "safari";
		}
		else if (konqueror.test(userAgent))
		{
			var regResult = konqueror.exec(userAgent);
			var browserArray = regResult[0].split("/");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "konqueror";
		}
		else if (netscape1.test(userAgent))
		{
			var regResult = netscape1.exec(userAgent);
			var browserArray = regResult[0].split("/");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "netscape";
		}
		else if (netscape2.test(userAgent))
		{
			var regResult = netscape2.exec(userAgent);
			var browserArray = regResult[0].split("/");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "netscape";
		}
		else if (netscape3.test(userAgent))
		{
			var regResult = netscape3.exec(userAgent);
			var browserArray = regResult[0].split("/");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "netscape";
		}
		else if (mozilla.test(userAgent))
		{
			var regResult = mozilla.exec(userAgent);
			var browserArray = regResult[0].split("/");
			browser.version = browserArray.length > 1?parseFloat(browserArray[1]):0;
			browser.appName = "netscape";
		}
		else
		{
			browser.version = 0;
			browser.appName = "unknown";
		}
		return browser;
	},
	IsIe : function()
	{
		var browser = this.BrowserDetect();
		return browser.appName == "ie"?true:false;
	},
	IEVersion : function(version)
	{
		var versionNum = parseFloat(version);
		var browser = this.BrowserDetect();
		if (browser.appName != "ie")
		{
			return undefined;
		}
		if (browser.version >= versionNum)
		{
			return true;
		}
		else
		{
			return false;
		}
	},
	FireFoxVersion : function(version)
	{
		var versionNum = parseFloat(version);
		var browser = this.BrowserDetect();
		if (browser.appName != "firefox")
		{
			return undefined;
		}
		if (browser.version >= versionNum)
		{
			return true;
		}
		else
		{
			return false;
		}
	},
	NetscapeVersion : function(version)
	{
		var versionNum = parseFloat(version);
		var browser = this.BrowserDetect();
		if (browser.appName != "netscape")
		{
			return undefined;
		}
		if (browser.version >= versionNum)
		{
			return true;
		}
		else
		{
			return false;
		}
	},
	OperaVersion : function(version)
	{
		var versionNum = parseFloat(version);
		var browser = this.BrowserDetect();
		if (browser.appName != "opera")
		{
			return undefined;
		}
		if (browser.version >= versionNum)
		{
			return true;
		}
		else
		{
			return false;
		}
	},
	SafariVersion : function(version)
	{
		var versionNum = parseFloat(version);
		var browser = this.BrowserDetect();
		if (browser.appName != "safari")
		{
			return undefined;
		}
		if (browser.version >= versionNum)
		{
			return true;
		}
		else
		{
			return false;
		}
	},
	ChromeVersion : function(version)
	{   
		var versionNum = parseFloat(version);
		var browser = this.BrowserDetect();
		if (browser.appName != "chrome")
		{
			return undefined;
		}
		if (browser.version >= versionNum)
		{
			return true;
		}
		else
		{
			return false;
		}
	}
}

//Object used to perform plugin related tests
var GMI_PluginTest =
{
	DetectPlugins : function(classID, pluginName, mimeType)
	{
		var detected = false;
		var pluginRegEx = eval("/" + pluginName + "/i");
		//var mimeTypeRegEx = eval("/" + mimeType + "/i");
		if (window.ActiveXObject)
		{
			try{
				var swPlayer = new ActiveXObject(classID);
				{
					detected = true;
				}
			}
			catch (e)
			{
				detected = false;
			}
		}
		else
		{
			if (navigator.plugins)
			{
				for (i=0;i < navigator.plugins.length; i++)
				{
					if (pluginRegEx.test(navigator.plugins[i].name))
					{
						detected = true;			
					}
				}
			}
			else if (navigator.mimeTypes)
			{
				for (i=0; i < navigator.mimeTypes.length; i++)
				{
					if (mimeType == navigator.mimeTypes[i].type.toLowerCase() && navigator.mimeTypes[i].enabledPlugin != null)
					{
						detected = true;
					}
				} 
			}
		}
		return detected;
	},
	DetectQuickTime : function()
	{
		return this.DetectPlugins("QuickTimeCheckObject.QuickTimeCheck.1", "quicktime", "video/quicktime");
	},
	DetectRealPlayer : function()
	{
		return this.DetectPlugins("rmocx.RealPlayer G2 Control.1", "realplayer", "audio/x-pn-realaudio-plugin");
	},
	DetectWinMedia : function()
	{
		return this.DetectPlugins("MediaPlayer.MediaPlayer.1", "windows media player", "application/x-mplayer2");
	}
}

//Object used to perform flash player related tests
var GMI_FlashTest = 
{
	GetSwfVer : function(i)
	{
		var swVersion = -1;
		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;
		if (window.ActiveXObject)
		{
			try
			{
				var fPlayer = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + i);
				swVersion = fPlayer.GetVariable("$version");
			}
			catch(e)
			{
				swVersion = -1;	
			}
		}
		else
		{
			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 fDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
					var descArray = fDescription.split(" ");
					var tempArrayMajor = descArray[2].split(".");
					var verMajor = tempArrayMajor[0];
					var verMinor = tempArrayMajor[1];
					if (descArray[3] != "")
					{
						tempArrayMinor = descArray[3].split("r");
					}
					else
					{
						tempArrayMinor = descArray[4].split("r");
					}
					var rev = tempArrayMinor[1] > 0 ? tempArrayMinor[1] :0;
					swVersion = verMajor + "." + verMinor + "." + rev;
				}
			}
		}
		return swVersion;
	},
	DetectFlash : function(reqMajor, reqMinor, reqRev)
	{
		var reqVer = parseFloat(reqMajor + "." + reqMinor);
		var minRev = parseInt(reqRev);
		for (flash_verCount = 25; flash_verCount > 0; flash_verCount--)	
		{
			if (this.GetSwfVer(flash_verCount) != -1)
			{
				var tempVerStr = this.GetSwfVer(flash_verCount);
				if (window.ActiveXObject)
				{
					var temp = tempVerStr.split(" ");
					var tempString = temp[1];
					var versionArray = tempString.split(",");
				}
				else
				{
					var versionArray = tempVerStr.split(".");
				}
				var verMajor = versionArray[0];
				var verMinor = versionArray[1];
				var verRev = parseInt(versionArray[2]);
				var verNum = parseFloat(verMajor + "." + verMinor);
				
				return ((verNum > reqVer) ||(verNum == reqVer && verRev >= minRev))? 1 : 0;	
			}
		}
		return -1;
	},
	DetectFlashPlayer : function(flashVer)
	{
		var verArray = flashVer.split(".");
		var minMaj = parseInt(verArray[0]);
		var minMin = verArray.length > 1?parseInt(verArray[1]):0;
		var minRev = verArray.length > 2?parseInt(verArray[2]):0;
		return this.DetectFlash(minMaj, minMin, minRev) == 1?true:false;
	}
}

//Object used to perform acrobat related tests
var GMI_AcrobatTest = 
{
	Detect : function(minVer)
	{
		var acrobat=new Object(); 
		
		// Set some base values 
		acrobat.installed=false; 
		acrobat.version='0.0'; 
		
		if (navigator.plugins && navigator.plugins.length) 
		{ 
		    for (acrobat_pluginCount=0; acrobat_pluginCount<navigator.plugins.length; acrobat_pluginCount++) 
		    { 
		        if (navigator.plugins[acrobat_pluginCount].description.indexOf('Adobe Acrobat') != -1) 
		        { 
		            acrobat.version=parseFloat(navigator.plugins[acrobat_pluginCount].description.split('Version ')[1]); 
		
		            if (acrobat.version.toString().length == 1) acrobat.version+='.0'; 
		
		            acrobat.installed=true; 
		            break; 
		        } 
			else if (navigator.plugins[acrobat_pluginCount].description.indexOf('Adobe PDF') != -1)
			{
				acrobat.version = "8.0";
				acrobat.installed = true;
			}
		    } 
		} 
		else if (window.ActiveXObject) 
		{ 
		    try
		    {
		    	oAcro = new ActiveXObject('AcroPDF.PDF.1');
			acrobat.installed = true;
			acrobat.version = oAcro.GetVersions().split(',');
			acrobat.version = acrobat.version[0].split('=')[1];
		    }

		    catch(e)
		    {}


		    if (acrobat.installed == false)
		    {
			    for (acrobat_verCount=2; acrobat_verCount<10; acrobat_verCount++) 
			    { 
				try 
				{ 
				    oAcro=eval("new ActiveXObject('PDF.PdfCtrl."+acrobat_verCount+"');"); 
				    if (oAcro) 
				    { 
					acrobat.installed=true; 
					acrobat.version=acrobat_verCount+'.0'; 
				    } 
				} 
				catch(e) {} 
			    } 
			
			    try 
			    { 
				oAcro4=new ActiveXObject('PDF.PdfCtrl.1'); 
				if (oAcro4) 
				{ 
				    acrobat.installed=true; 
				    acrobat.version='4.0'; 
				} 
			    } 
			    catch(e) {} 
		    }

		} 
		if (acrobat.installed == true && parseFloat(acrobat.version) >= parseFloat(minVer))
		{
			return true;
		}
		else
		{
			return false;
		}
	}
}
