// Convert all characters to lowercase to simplify testing.
var agt = navigator.userAgent.toLowerCase();
var appVer = navigator.appVersion.toLowerCase();

// Browser Version
var is_minor = parseFloat(appVer);
var is_major = parseInt(is_minor);

var is_opera = (agt.indexOf("opera") != -1);
var is_opera2 = (agt.indexOf("opera 2") != -1 || agt.indexOf("opera/2") != -1);
var is_opera3 = (agt.indexOf("opera 3") != -1 || agt.indexOf("opera/3") != -1);
var is_opera4 = (agt.indexOf("opera 4") != -1 || agt.indexOf("opera/4") != -1);
var is_opera5 = (agt.indexOf("opera 5") != -1 || agt.indexOf("opera/5") != -1);
var is_opera6 = (agt.indexOf("opera 6") != -1 || agt.indexOf("opera/6") != -1);
var is_opera7 = (agt.indexOf("opera 7") != -1 || agt.indexOf("opera/7") != -1);
var is_opera5up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4);
var is_opera6up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4 && !is_opera5);
var is_opera7up = (is_opera && !is_opera2 && !is_opera3 && !is_opera4 && !is_opera5 && !is_opera6);

// Note: On IE, start of appVersion return 3 or 4
// which supposedly is the version of Netscape it is compatible with.
// So we look for the real version further on in the string.
var iePos = appVer.indexOf('msie');
if (iePos !=-1)
{
	is_minor = parseFloat(appVer.substring(iePos+5,appVer.indexOf(';', iePos)))
	is_major = parseInt(is_minor);
}                             

var is_firefox = false;
var firefoxPos = agt.indexOf('firefox');
if (firefoxPos != -1)
{
	is_firefox = true;
	is_minor = parseFloat(agt.substring(firefoxPos+9));
	is_major = parseInt(is_minor)
}

var is_konq = false;
var kqPos = agt.indexOf('konqueror');
if (kqPos !=-1)
{                 
	is_konq  = true;
	is_minor = parseFloat(agt.substring(kqPos+10,agt.indexOf(';',kqPos)));
	is_major = parseInt(is_minor);
}                                 

var is_getElementById   = (document.getElementById) ? "true" : "false"; // 001121-abk
var is_getElementsByTagName = (document.getElementsByTagName) ? "true" : "false"; // 001127-abk
var is_documentElement = (document.documentElement) ? "true" : "false"; // 001121-abk

var is_safari = ((agt.indexOf('safari')!=-1)&&(agt.indexOf('mac')!=-1))?true:false;
var is_khtml  = (is_safari || is_konq);
	
var is_gecko = ((!is_khtml)&&(navigator.product)&&(navigator.product.toLowerCase()=="gecko"))?true:false;
var is_gver  = 0;
if (is_gecko)
	is_gver = navigator.productSub;

var is_moz = ((agt.indexOf('mozilla/5')!=-1) && (agt.indexOf('spoofer')==-1) &&
				(agt.indexOf('compatible')==-1) && (agt.indexOf('opera')==-1)  &&
				(agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)     &&
				(is_gecko) && 
				((navigator.vendor=="")||(navigator.vendor=="Mozilla")));
if (is_moz)
{
	var is_moz_ver = (navigator.vendorSub)?navigator.vendorSub:0;
	if(!(is_moz_ver))
	{
		is_moz_ver = agt.indexOf('rv:');
		is_moz_ver = agt.substring(is_moz_ver+3);
		is_paren   = is_moz_ver.indexOf(')');
		is_moz_ver = is_moz_ver.substring(0,is_paren);
	}
	is_minor = is_moz_ver;
	is_major = parseInt(is_moz_ver);
}

var is_nav = ((agt.indexOf('mozilla')!=-1) && (agt.indexOf('spoofer')==-1)
			&& (agt.indexOf('compatible') == -1) && (agt.indexOf('opera')==-1)
			&& (agt.indexOf('webtv')==-1) && (agt.indexOf('hotjava')==-1)
			&& (!is_khtml) && (!(is_moz)));

// Netscape6 is mozilla/5 + Netscape6/6.0!!!
// Mozilla/5.0 (Windows; U; Win98; en-US; m18) Gecko/20001108 Netscape6/6.0
if ((navigator.vendor)&&
	((navigator.vendor=="Netscape6") || (navigator.vendor=="Netscape")) &&
	(is_nav))
{
	is_major = parseInt(navigator.vendorSub);
	// Here we need is_minor as a valid float for testing. We'll
	// revert to the actual content before printing the result. 
	is_minor = parseFloat(navigator.vendorSub);
}

var is_nav2 = (is_nav && (is_major == 2));
var is_nav3 = (is_nav && (is_major == 3));
var is_nav4 = (is_nav && (is_major == 4));
var is_nav4up = (is_nav && is_minor >= 4);
var is_navonly = (is_nav && ((agt.indexOf(";nav") != -1) || (agt.indexOf("; nav") != -1)) );

var is_nav6   = (is_nav && is_major==6);
var is_nav6up = (is_nav && is_minor >= 6);

var is_nav5   = (is_nav && is_major == 5 && !is_nav6);
var is_nav5up = (is_nav && is_minor >= 5);

var is_nav7   = (is_nav && is_major == 7);
var is_nav7up = (is_nav && is_minor >= 7);

var is_ie   = ((iePos!=-1) && (!is_opera) && (!is_khtml));
var is_ie3  = (is_ie && (is_major < 4));

var is_ie4   = (is_ie && is_major == 4);
var is_ie4up = (is_ie && is_minor >= 4);
var is_ie5   = (is_ie && is_major == 5);
var is_ie5up = (is_ie && is_minor >= 5);

var is_ie5_5  = (is_ie && (agt.indexOf("msie 5.5") !=-1));
var is_ie5_5up =(is_ie && is_minor >= 5.5);

var is_ie6   = (is_ie && is_major == 6);
var is_ie6up = (is_ie && is_minor >= 6);

if (is_nav6up)
	is_minor = navigator.vendorSub;

// Platform
var is_win = ( (agt.indexOf("win")!=-1) || (agt.indexOf("16bit")!=-1) );
var is_win95 = ((agt.indexOf("win95")!=-1) || (agt.indexOf("windows 95")!=-1));
var is_win16 = ((agt.indexOf("win16")!=-1) ||
				(agt.indexOf("16bit")!=-1) || (agt.indexOf("windows 3.1")!=-1) ||
				(agt.indexOf("windows 16-bit")!=-1) );

var is_win31 = ((agt.indexOf("windows 3.1")!=-1) || (agt.indexOf("win16")!=-1) ||
				(agt.indexOf("windows 16-bit")!=-1));

var is_winme = ((agt.indexOf("win 9x 4.90")!=-1));
var is_win2k = ((agt.indexOf("windows nt 5.0")!=-1) || (agt.indexOf("windows 2000")!=-1));
var is_winxp = ((agt.indexOf("windows nt 5.1")!=-1) || (agt.indexOf("windows xp")!=-1));

// NOTE: Reliable detection of Win98 may not be possible. It appears that:
//       - On Nav 4.x and before you'll get plain "Windows" in userAgent.
//       - On Mercury client, the 32-bit version will return "Win98", but
//         the 16-bit version running on Win98 will still return "Win95".
var is_win98 = ((agt.indexOf("win98")!=-1) || (agt.indexOf("windows 98")!=-1));
var is_winnt = ((agt.indexOf("winnt")!=-1) || (agt.indexOf("windows nt")!=-1));
var is_win32 = (is_win95 || is_winnt || is_win98 ||
				((is_major >= 4) && (navigator.platform == "Win32")) ||
				(agt.indexOf("win32")!=-1) || (agt.indexOf("32bit")!=-1));

var is_mac = (agt.indexOf("mac")!=-1);
if (is_mac)
	is_win = !is_mac;
var is_mac68k = (is_mac && ((agt.indexOf("68k")!=-1) ||
							(agt.indexOf("68000")!=-1)));
var is_macppc = (is_mac && ((agt.indexOf("ppc")!=-1) ||
							(agt.indexOf("powerpc")!=-1)));

// Cookies
document.cookie = "cookies=true";
var is_cookie = (document.cookie) ? "true" : "false";
var is_images = (document.images) ? "true":"false";
var is_layers = (document.layers) ? "true":"false";

// -----------------------------------------------------------------------------

function get_cookie_data(key)
{
	var key_length = key.length;
	var cookie_length = document.cookie.length;
	var i = 0;
	var cookie_end;
	
	while (i < cookie_length)
	{
		var j = i + key_length;
		if (document.cookie.substring(i, j) == key)
		{
			cookie_end = document.cookie.indexOf(";", j);
			if (cookie_end == -1)
				cookie_end = document.cookie.length;
			return unescape(document.cookie.substring(j, cookie_end));
		}
		i++;
	}
	
	return "";
}

// -----------------------------------------------------------------------------

function check_minimum_browser(url)
{
	var redirect = false;

	if (is_ie)
	{
		if (!is_ie5up)
			redirect = true;
	}
	else if (is_firefox)
	{
		redirect = false;
	}
	else if (is_nav)
	{
		if (!is_nav6up)
			redirect = true;
	}
	else if (is_moz)
	{
		if (is_major < 1)
			redirect = true;
	}
	else if (is_opera)
	{
		if (!is_opera6up)
			redirect = true;
	}
	
	if (redirect)
	{
		if (is_cookie)
		{	
			if (get_cookie_data("skip_min_check=") != "1")
			{
				document.cookie = "skip_min_check=1";
				location.href = url;
			}
		}
	}
}

