var browser = {

	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "Unknown";
		this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || 0;
		this.os = this.searchString(this.dataOS) || "Unknown";
	},

	searchString: function(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; }
		}
	},

	searchVersion: function(dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index + this.versionSearchString.length));
	},

	dataBrowser: new Array(
		{
			string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},{
			string: navigator.userAgent,
			subString: "Navigator",
			versionSearch: "Navigator/",
			identity: "Navigator"
		},{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},{
			prop: window.opera,
			identity: "Opera"
		},{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},{
			string: navigator.userAgent,
			subString: "Firefox",
			versionSearch: "Firefox/",
			identity: "Firefox"
		},{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},{
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},{
			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"
		}
	),

	dataOS: new Array(
		{
			string: navigator.userAgent,
			subString: "NT 6",
			identity: "Windows Vista"
		},{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	),

	isFirefox: function(ver, strict) {
		if (this.browser != "Firefox") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isMozilla: function(ver, strict) {
		if (this.browser != "Mozilla") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isOpera: function(ver, strict) {
		if (this.browser != "Opera") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isExplorer: function(ver, strict) {
		if (this.browser != "Explorer") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isNetscape: function(ver, strict) {
		if (this.browser != "Netscape" && this.browser != "Navigator") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isSafari: function(ver, strict) {
		if (this.browser != "Safari") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isKonqueror: function(ver, strict) {
		if (this.browser != "Konqueror") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isOmniWeb: function(ver, strict) {
		if (this.browser != "OmniWeb") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isCamino: function(ver, strict) {
		if (this.browser != "Camino") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isICab: function(ver, strict) {
		if (this.browser != "iCab") { return false; }
		if (ver != null) {
			if (strict != null && strict) { return (parseInt(this.version) == parseInt(ver)); }
			else { return (this.version >= ver); }
		}
		return true;
	},
	isWindows: function() {
		return (this.os == "Windows");
	},
	isWindowsVista: function() {
		return (this.os == "Windows Vista");
	},
	isMac: function() {
		return (this.os == "Mac");
	},
	isLinux: function() {
		return (this.os == "Linux");
	}
};
browser.init();
