	var bAdvanced, bIE4, bIE5, bNS4, bNS6, bNS;
	var bIsGecko, bIsMozilla, bIsNS, bIsIE, bIsSafari, bIsOpera;
	var bIsKonqueror, bIsIcab, bIsAol;
	var bIsIECompatible, bIsNSCompatible;
	var bIsDOM1, bIsDOM2Event;
	var bIsNS4x, bIsNS40x, bIsNS47x, bIsNS4up, bIsNS6x, bIsNS6up, bIsNS7x, bIsNS7up;
	var bIsIE4x, bIsIE4up, bIsIE5x, bIsIE5, bIsIE55, bIsIE5up, bIsIE6x, bIsIE6up;
	var bIsIE4xMac;
	var iVersionMinor, iVersionMajor, iGeckoVersion;
	var sBrowser, sUserAgent, sMode;
	bAdvanced = false;
	bIE = false;
	bNS = false;

	bIE4 = (document.all && !document.getElementById) ? true : false;
	bIE5 = (document.all && document.getElementById) ? true : false;
	bNS4 = (document.layers) ? true : false;
	bNS6 = (document.getElementById && !document.all) ? true : false;

	if (bIE4 || bIE5 || bNS6)
		bAdvanced = true;

	if (bIE4 || bIE5)
		bIE = true;

	if (bNS4 || bNS6)
		bNS = true;

	sBrowser = navigator.appName + ' ' + navigator.appVersion;

	sUserAgent = navigator.userAgent.toLowerCase();

	// browser name
	bIsGecko = (sUserAgent.indexOf('gecko') != -1 && sUserAgent.indexOf('safari') == -1);
	bIsMozilla = (bIsGecko && sUserAgent.indexOf('gecko/') + 14 == sUserAgent.length);
	bIsNS = ((bIsGecko) ? (sUserAgent.indexOf('netscape') != -1) : ( (sUserAgent.indexOf('mozilla') != -1) && (sUserAgent.indexOf('spoofer') == -1) && (sUserAgent.indexOf('compatible') == -1) && (sUserAgent.indexOf('opera') == -1) && (sUserAgent.indexOf('webtv') == -1) && (sUserAgent.indexOf('hotjava') == -1) ) );
	bIsIE = ((sUserAgent.indexOf('msie') != -1) && (sUserAgent.indexOf('opera') == -1) && (sUserAgent.indexOf('webtv') == -1) );
	bIsSafari = (sUserAgent.indexOf('safari') != - 1);
	bIsOpera = (sUserAgent.indexOf('opera') != -1); 

	bIsKonqueror = (sUserAgent.indexOf('konqueror') != -1 && !bIsSafari); 
	bIsIcab = (sUserAgent.indexOf('icab') != -1); 
	bIsAol = (sUserAgent.indexOf('aol') != -1); 

	// spoofing and compatible browsers
	bIsIECompatible = ((sUserAgent.indexOf('msie') != -1) && !bIsIE);
	bIsNSCompatible = ((sUserAgent.indexOf('mozilla') != -1) && !bIsNS && !bIsMozilla);

	// browser version
	iVersionMinor = parseFloat(navigator.appVersion);

	// correct version number
	if (bIsNS && bIsGecko)
	   iVersionMinor = parseFloat( sUserAgent.substring( sUserAgent.lastIndexOf('/') + 1 ) );
	else if (bIsIE && iVersionMinor >= 4)
	   iVersionMinor = parseFloat( sUserAgent.substring( sUserAgent.indexOf('msie ') + 5 ) );
	else if (bIsMozilla)
	   iVersionMinor = parseFloat( sUserAgent.substring( sUserAgent.indexOf('rv:') + 3 ) );
	else if (bIsSafari)
	   iVersionMinor = parseFloat( sUserAgent.substring( sUserAgent.lastIndexOf('/') + 1 ) );
	else if (bIsOpera)
	   if (sUserAgent.indexOf('opera/') != -1)
	      iVersionMinor = parseFloat( sUserAgent.substring( sUserAgent.indexOf('opera/') + 6 ) );
	   else
	      iVersionMinor = parseFloat( sUserAgent.substring( sUserAgent.indexOf('opera ') + 6 ) );
	else if (bIsKonqueror)
	   iVersionMinor = parseFloat( sUserAgent.substring( sUserAgent.indexOf('konqueror/') + 10 ) );
	else if (bIsIcab)
	   if (sUserAgent.indexOf('icab/') != -1)
	      iVersionMinor = parseFloat( sUserAgent.substring( sUserAgent.indexOf('icab/') + 6 ) );
	   else
	      iVersionMinor = parseFloat( sUserAgent.substring( sUserAgent.indexOf('icab ') + 6 ) );

	iVersionMajor = parseInt(iVersionMinor);
	iGeckoVersion = ((bIsGecko) ? sUserAgent.substring( (sUserAgent.lastIndexOf('gecko/') + 6), (sUserAgent.lastIndexOf('gecko/') + 14) ) : -1 );

	// dom support
	bIsDOM1 = (document.getElementById);
	bIsDOM2Event = (document.addEventListener && document.removeEventListener);

	// css compatibility mode
	sMode = document.compatMode ? document.compatMode : 'BackCompat';

	// specific browser shortcuts
	bIsNS4x = (bIsNS && iVersionMajor == 4);
	bIsNS40x = (bIsNS4x && iVersionMinor < 4.5);
	bIsNS47x = (bIsNS4x && iVersionMinor >= 4.7);
	bIsNS4up = (bIsNS && iVersionMinor >= 4);
	bIsNS6x = (bIsNS && iVersionMajor == 6);
	bIsNS6up = (bIsNS && iVersionMajor >= 6);
	bIsNS7x = (bIsNS && iVersionMajor == 7);
	bIsNS7up = (bIsNS && iVersionMajor >= 7);

	bIsIE4x = (bIsIE && iVersionMajor == 4);
	bIsIE4up = (bIsIE && iVersionMajor >= 4);
	bIsIE5x = (bIsIE && iVersionMajor == 5);
	bIsIE5 = (bIsIE && iVersionMinor == 5);
	bIsIE55 = (bIsIE && iVersionMinor == 5.5);
	bIsIE5up = (bIsIE && iVersionMajor >= 5);
	bIsIE6x = (bIsIE && iVersionMajor == 6);
	bIsIE6up = (bIsIE && iVersionMajor >= 6);

	bIsIE4xMac = (bIsIE4x && bIsMac);

	if (bIsNS6up || bIsNS7up || bIsIE4up || bIsIE5up || bIsIE6up) bAdvanced = true;
