function BrowserUtilities () {
	var versionSearchString;
	var dataBrowser = [
		{ string: navigator.userAgent, subString: "Chrome", identity: "Chrome" },
		{ string: navigator.userAgent, subString: "OmniWeb", identity: "OmniWeb", versionSearch: "OmniWeb/" },
		{ string: navigator.vendor, subString: "Apple", identity: "Safari", versionSearch: "Version" },
		{ prop: window.opera, identity: "Opera" },
		{ string: navigator.vendor, subString: "iCab", identity: "iCab" },
		{ string: navigator.vendor, subString: "KDE", identity: "Konqueror" },
		{ string: navigator.userAgent, subString: "Firefox", identity: "Firefox" },
		{ string: navigator.vendor, subString: "Camino", identity: "Camino" },
		{ string: navigator.userAgent, subString: "Netscape", identity: "Netscape" }, // for newer Netscapes (6+)
		{ string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE" },
		{ string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv" },
		{ string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla" }
	];
	var dataOS = [
		{ string: navigator.platform, subString: "Win", identity: "Windows" },
		{ string: navigator.platform, subString: "Mac", identity: "Mac" },
		{ string: navigator.userAgent, subString: "iPhone", identity: "iPhone/iPod" },
		{ string: navigator.platform, subString: "Linux", identity: "Linux" }
	];
	
	function searchString (data) {
		for ( var i = 0; i < data.length; i++ ) {
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			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;
			}
		}
	}
	function searchVersion (dataString) {
		var index = dataString.indexOf(versionSearchString);
		if ( index == -1 ) return;
		return parseFloat(dataString.substring(index + versionSearchString.length + 1));
	}
	
	/* 
	* getBrowserName
	* description:		Use to retrieve browser name of end user
	* Return:			String "browser-version"
	*/
	this.getBrowserName = function () {
		var name = searchString(dataBrowser) || "An unknown browser";
		return name;
	}
	
	/* 
	* getBrowserVersion
	* description: 		Use to retrieve browser version of end user
	* Return:				String "browser-version"
	*/
	this.getBrowserVersion = function () {
		if ( ! versionSearchString ) {
			searchString(dataBrowser);
		}
		var version = searchVersion(navigator.userAgent) || searchVersion(navigator.appVersion) || "an unknown version";
		return version;
	}
	
	/* 
	* getOS
	* description:	Use to retrieve OS of end user
	* Return:		String "OS"
	*/
	this.getOS = function () {
		var OS = searchString(dataOS) || "an unknown OS";
		return OS;
	}
	
	/* 
	* getBrowser
	* description: Use to retrieve browser name, browser version, and OS of end user
	* Return: 		String "browser-name browser-version OS"
	*/
	this.getBrowser = function () {
		var browser = this.getBrowserName();
		var version = this.getBrowserVersion();
		var OS = this.getOS();
		return browser + ' ' + version + ' ' + OS;
	}
}

function SOWCUtilities () {
	this.getAuxiliaryStyleSheets = function () {
		var browserutilities = new BrowserUtilities;
		var OS = browserutilities.getOS();
		var browser = browserutilities.getBrowserName();
		
		if ( OS == 'Mac' && browser == 'Firefox' ) { 
			document.write("<link href='css/macfirefox.css' rel='stylesheet' type='text/css' />");
		}
	}
}

var SOWCUTILITIES = new SOWCUtilities;
SOWCUTILITIES.getAuxiliaryStyleSheets();

