Browser detection

Testing my Browser object

by SmokeyPHP

JavaScript

BrowserFuncs = {
	get: function(withVer) {
		if(typeof withVer !== 'boolean') withVer = false;
		var agent = this.agentStr();
		var name = this.appName();
		if(name === 'Netscape')
		{
			var agentName = agent.match(/( Chrome| Safari| Firefox)\//)[1];
			name = agentName;
		}
		name = name.replace(/^\s*(.+)\s*$/,'$1');
		var verMatchRgx = new RegExp(name+'( |/)([0-9\.]+)');
		var version1 = agent.match(verMatchRgx);
		var version2 = agent.match(/Version\/([0-9\.]+)/);
		version2 = version2===null || typeof version2[1] !== 'string' ? false : version2[1];
		var version = false;
		if(version2 === false && (version1 === null || typeof version1[2] !== 'string'))
		{
			version = agent.match(/MSIE ([0-9]+)/);
			if(version === null || typeof version[1] !== 'string') version = false;
			else version = version[1];
		}
		else
		{
			version = version2!==false ? version2 : version1[2];
		}
		return name + (withVer ? ' '+version : '');
	}
	,getVer: function() {
		var browser = this.get(true);
		browser = browser.split(' ');
		return browser.slice(-1)[0];
	}
	,agentStr: function() {
		return navigator.userAgent;
	}
	,appName: function() {
		return navigator.appName;
	}
	,isModern: function() {
		var agent = this.agentStr();
		return agent.match(/^(Mozilla\/[5-9]|Opera)/)!==null;
	}
	,getWidth: function() {
		return document.documentElement.clientWidth;
	}
	,getHeight: function() {
		return document.documentElement.clientHeight;
	}
	,getRes: function() {
		return this.getWidth()+' x '+this.getHeight();
	}
	,getScrollPos: function() {
		var doc = document.documentElement;
		var body = document.body;
		return {left:(doc && doc.scrollLeft || body && body.scrollLeft || 0),top:(doc && doc.scrollTop  || body && body.scrollTop  || 0)};
	}
	,getScrollTop: function() {
		return BrowserFuncs.getScrollPos().top;
	}
	,getScrollLeft: function() {
		return BrowserFuncs.getScrollPos().left;
	}
};
Browser = {
	isIE: BrowserFuncs.get() === 'Microsoft Internet Explorer'
	,name:...