navigator.current = { 
	os : {
		name				: null,
		version				: null
	},
	
	browser : {
		name				: null,
		version				: null,
		minor		: null
	}
};
navigator.detectEnvironment = function navigator_detectEnvironment() {
	var browser = {
		firefox		:	["firefox"],
		konqueror	:	["konqueror"],
		opera		:	["opera"],
		safari		:	["safari"],
		netscape	:	["netscape6","netscape","mozilla"],
		msie		:	["msie"],
		mozilla		:	["rv"]
	};
	var os = {
		win:{
			vista	:	["windows nt 6.0"],
			win2k3	:	["windows nt 5.2"],
			winxp	:	["windows nt 5.1","windows xp"],
			win2k	:	["windows nt 5.0","windows 2000"],
			winnt	:	["winnt","windows nt"],
			winme	:	["win 9x 4.90"],
			win98	:	["win98","windows 98"],
			win95	:	["win95","windows 95"],
			win31	:	["windows 3.1","win16","windows 16-bit"],
			win		:	["windows","win"]
		},
		os2:{
			os2		:	["os/2","ibm-webexplorer"]
		},
	
		mac:{
			osx		:	["mac os x"],
			mac9	:	["mac 9."],
			mac		:	["mac"]
		},
		unix:{
			linux	:	["inux"],
			unix	:	["sunos","irix","hp-ux","aix","unix_system_v","bsd","x11"]
		}
	};	
	var userAgent = navigator.userAgent.toLowerCase();
	var appminor;
	var i, j, k;
	
	if (navigator.appminor) {
		appminor = navigator.appminor.toLowerCase();
	} else {
		appminor = '';
	}
	/* detect browser */
	for (i in browser) {
		if (userAgent.indexOf(i) != -1) {
			navigator.current.browser.name = i;
			break;
		}
	}
	/* detect browser major / minor version */
   	var pos = false;
	for (i in browser[navigator.current.browser.name]) {
		needle = browser[navigator.current.browser.name][i];
		pos = userAgent.indexOf(needle);
		if (pos != -1) {
			break;
		}
	}
	/* handle mozilla specific:  if rv cannot be found, try again assuming it's netscape instead */
	if (navigator.current.browser.name == "mozilla" && pos == -1) {
		navigator.current.browser.name = "netscape";
		for (i in browser[navigator.current.browser.name]) {
    		needle = browser[navigator.current.browser.name][i];
    		pos = userAgent.indexOf(needle);
    		if (pos != -1) {
    			break;
    		}
		}
	}
	/* extract version from browser user agent string */
	new RegExp("([-.0-9a-z]+)").exec(String(userAgent.substr(pos + needle.length+1)));
	var version = RegExp.$1;
	/* safari specific get browser version */
	if (navigator.current.browser.name == "safari") {
		navigator.current.browser.version = parseInt(version / 100);
		if (navigator.current.browser.version) {
			navigator.current.browser.minor = version.substr(String(navigator.current.browser.version).length, 10);
		}
		else {
			navigator.current.browser.minor = parseInt(version - (100 * navigator.current.browser.version));
		}
	}
	/* get all other browser major / minor version except 'other' */
	else if (navigator.current.browser.name != "other") {
		pos = version.indexOf('.');
    	if (pos != -1) {
    		navigator.current.browser.minor = version.substr(pos + 1, 10);
    	}
    	else {
    		navigator.current.browser.minor = 0;
    	}
    	navigator.current.browser.version = parseInt(version);
	}
	/* make sure browser version is a valid number */
	if (isNaN(navigator.current.browser.version) || navigator.current.browser.version < 0) {
		navigator.current.browser.version = 0;
	}
	if (!navigator.current.browser.minor) {
		navigator.current.browser.minor = 0;
	}
	/* detect OS name / version */
	for (i in os) {
		for (j in os[i]) {
			for (k = 0; k < os[i][j].length; k++) {
				if (userAgent.indexOf(os[i][j][k]) != -1) {
					navigator.current.os.name = i;
					navigator.current.os.version = j;
					break;
				}
			}
			
			if (navigator.current.os.name) {
				break;
			}
		}
		
		if (navigator.current.os.name) {
			break;
		}
	}
}
navigator.detectEnvironment();