//systeminfo.js - gather basic system information
//Usage : var mySysInfo = new systemInfo();
//      : alert (mySysInfo);
//      : OR
//      : var mySysInfo = new systemInfo();
//      : myString = mySysInfo.toString();

//Global vars
var OS, browser, browsername = '', detect, version, thestring, place, platform;
var infoGathered;
var datasize=31468; // in Bytes
var startTime=0;
var endTime=0;
var date=0;
//Main constructor
function systemInfo(phone) {
	gatherSystemInfo();
	this.browser = browsername;
	this.OS = OS;
	this.platform = platform;
	this.tzMsg = "";
}
systemInfo.prototype.toString = function (){
	var x = '';
	x += 'Operating System: ' + this.OS + '\n';
	x += 'Browser: ' + this.browser + '\n';
	return x;
}

//Helper functions
function checkIt(s) {
	place = detect.indexOf(s) + 1;
	thestring = s;
	return place;
}
function wrapIt(s) {
	re=/;/g
	return s.replace(re, "; ")
}
function gatherSystemInfo() {
	if (infoGathered) {return;}
	else {infoGathered = true;}
	
	detect = navigator.userAgent.toLowerCase();
    
	//browser
	if (checkIt('konqueror')) {
		browser = "Konqueror";
		OS = "Linux";
	}
	else if (checkIt('safari')) browser = "Safari";
	else if (checkIt('omniweb')) browser = "OmniWeb";
	else if (checkIt('k-meleon')) {
		browser = "K-Meleon";
		var rv = detect.match(/k-meleon ([\w.]+)/);
		if (rv) {
			rv = rv[0];
			version = rv.substr(3);
		}
	}
	else if (checkIt('opera')) browser = "Opera";
	else if (checkIt('webtv')) browser = "WebTV";
	else if (checkIt('icab')) browser = "iCab";
	//added by Jason Scherbel - MSIE appears in AOL and new NETSCAPE so adding these checks first
    else if (checkIt('netscape')) browser = "Netscape";
    else if (checkIt('aol')) browser = "AOL";
	else if (checkIt('msie')) browser = "Internet Explorer";
	else if (!checkIt('compatible')) {
		browser = "Netscape Navigator"
		version = detect.charAt(8);
		if (typeof(navigator.product) != "undefined") {
			browser = "Mozilla";
			rv = navigator.userAgent.match(/([Mozilla ]?Fire\w+)\/([\w|\+.]+)/);
			if (rv) {
				browser = rv[1];
				version = rv[2];
			} else {
				rv = navigator.userAgent.match(/rv:([\w|\+.]+)/);
				if (rv) {
					rv = rv[0];
					version = rv.substr(3);
				}
			}
		}
	}
	else browser = "Unknown browser";
	
	if (!version)
		version = detect.charAt(place + thestring.length);
		
	if (browser)
		browsername += browser;
		
	if (version)
		browsername += " " + version;

	if (!browsername) browsername = "Unknown";
	
    //OS
	var i_win;
	var v_win;
	var agt=navigator.userAgent.toLowerCase();
	if (agt.indexOf("win")!=-1 || agt.indexOf("16bit")!=-1)
		i_win = true;
		
	if (i_win) {
		if (agt.indexOf("win95")!=-1 || agt.indexOf("windows 95")!=-1)
			v_win = "Windows 95";
		if (agt.indexOf("win98")!=-1 || agt.indexOf("windows 98")!=-1)
			v_win = "Windows 98";
		if (agt.indexOf("win 9x 4.90")!=-1)
			v_win = "Windows ME";
		if (agt.indexOf("winnt")!=-1 || agt.indexOf("windows nt")!=-1)
			v_win = "Windows NT";
		if (agt.indexOf("windows nt 5.0")!=-1)
			v_win = "Windows 2000";
		if (agt.indexOf("windows nt 5.1")!=-1)
			v_win = "Windows XP";
		if (!v_win)
			v_win = "Unknown Windows";
	}
	if (!OS) {
		if (checkIt('linux')) OS = "Linux";
		else if (checkIt('x11')) OS = "Unix";
		else if (checkIt('mac')) OS = "Mac"
		else if (checkIt('win')) OS = "Windows"
		else OS = "Unknown";
	}
	if (typeof(navigator.oscpu) != "undefined" && navigator.oscpu != "") OS = navigator.oscpu;

	if (i_win) OS = v_win;
	
	//platform
	if (typeof(navigator.platform) != "undefined") {
		platform = navigator.platform;
		switch (navigator.platform) {
			case "Win32" : platform = "Windows 32-bit"; break;
			case "Windows" : platform = "Windows 32-bit"; break;
			case "Win16" : platform = "Windows 16-bit"; break;
			case "WinCE" : platform = "Windows CE"; break;
			// default : platform += " - Other platform"; break;
		}
	} else
	platform = "Unknown";
	
	//CPU
	if (typeof(navigator.cpuClass) != "undefined") {
		CPU = navigator.cpuClass;
		switch (navigator.cpuClass) {
			case "x86" : CPU = "x86 Compatible"; break;
			case "68K" : CPU += " - Motorola"; break;
			case "Alpha" : CPU += " - Digital"; break;
			case "PPC" : CPU += " - Motorola"; break;
			// case "Other" : CPU += " - Other CPU classes, including Sun SPARC"; break;
		}
	} else
		CPU = "Unknown";
}