// ************************************************************************************************
// *** Browser Detection Object
// ************************************************************************************************

function BrowserInfo()
{
	// **********************************************************************************************
	// *** Properties 
	// **********************************************************************************************
	
	//private properties
	this.versionSearchString;
	this.browserType = new BrowserType(); //browser type enumeration (from BrowserType.js)
	this.oSType = new OSType(); //OS type enumeration (from OS.js)
	
	//public properties
	this.browserName; //name of the browser
	this.browser; //browser type enumeration (from BrowserType.js)
	this.version; //browser version
	this.OSName; //name of Operating System
	this.OS; //OS type enumeration (from OS.js)
	
	// **********************************************************************************************
	// *** Methods 
	// **********************************************************************************************
	
	this.init = bd_variableInit;
	this.searchString = bd_searchString;
	this.searchVersion = bd_searchVersion;
	this.searchEnum = bd_searchEnum;
	
	function bd_variableInit()
	{	  
	  
		this.browserName = this.searchString(this.dataBrowser) || "Unknown browser";
		this.browser = this.searchEnum(this.dataBrowser) || this.browserType.Unknown;
		this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "Unknown Version";
		this.OSName = this.searchString(this.dataOS) || "Unknown OS";
		this.OS = this.searchEnum(this.dataOS) || this.oSType.Unknown;
		
	}
	
	// **********************************************************************************************
	// *** Variables - Arrays with info
	// **********************************************************************************************
	
	//browser info
	this.dataBrowser = [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identityName: "OmniWeb",
			identity: this.browserType.Unknown
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identityName: "Safari",
			identity: this.browserType.Safari
		},
		{
			prop: window.opera,
			identityName: "Opera",
			identity: this.browserType.Opera
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identityName: "iCab",
			identity: this.browserType.Unknown
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identityName: "Konqueror",
			identity: this.browserType.Unknown
			
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identityName: "Firefox",
			identity: this.browserType.Firefox,
			versionSearch: "Firefox/"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identityName: "Camino",
			identity: this.browserType.Unknown
		},
		{	// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identityName: "Netscape",
			identity: this.browserType.Netscape
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identityName: "Internet Explorer",
			identity: this.browserType.IE,
			versionSearch: "MSIE "
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identityName: "Mozilla",
			iidentity: this.browserType.Mozilla,
			versionSearch: "rv"
		},
		{ 	// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			iidentity: this.browserType.Netscape,
			versionSearch: "Mozilla"
		}
	];
	
	//OS info
	this.dataOS = [
		{
			string: navigator.platform,
			subString: "Win",
			identityName: "Windows",
			identity: this.oSType.Windows
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identityName: "Mac",
			identity: this.oSType.Mac
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identityName: "Linux",
			identity: this.oSType.Linux
		}
	]
	
	// **********************************************************************************************
	// *** Functions 
	// **********************************************************************************************
	
	//searches a string on array and returns the array's identityName
	function bd_searchString(data)
	{
		for (var i = 0; i < data.length; i++)
		{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			
			if (dataString) 
			{
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identityName;
			}
			else if (dataProp)
				return data[i].identityName;
		}
	}
	
	//searches a string on array and returns the array's identity
	function bd_searchEnum(data)
	{
		for (var i = 0; i < data.length; i++)
		{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			
			if (dataString) 
			{
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	}
	
	//searches a version on a given string
	function bd_searchVersion(dataString)
	{
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		
		index += this.versionSearchString.length;
		
		var version = "";
		
		for(var i = index; i < dataString.length; i++)
		{
			var c = dataString.charAt(i);
			
			if(isNaN(parseInt(c)) && c != '.')
				break;
			
			version += dataString.charAt(i);
		}
			
		return (version);
	}
		
	//initializes public properties
	this.init();	
}

