var brDetect_WIN_nicknames = new Array("win","windows");
var brDetect_MAC_nicknames = new Array("mac","ppc","macintosh");
var brDetect_IE_nicknames = new Array("msie","ie","explorer");
var brDetect_NS_nicknames = new Array("netscape","ns","navigator","nn");
var brDetect_Cared = new Array("mozilla","opera","konqueror","omniweb","webtv","icab");
var brDetect_Version_End = new Array(" ",";","[","/");

function brDetect(name,version,os,compatible)
{
	var match = true;
	if(name != null && typeof name == "string" && version != null && (typeof version == "string" || typeof version == "number"))
	{
		var ua = navigator.userAgent.toLowerCase();

		if(os != "null" && typeof os == "string" && os != "")
		{
			var targetted_os = searchInNickNames(os.toLowerCase(),brDetect_WIN_nicknames,brDetect_MAC_nicknames);
			if(targetted_os == null) match = false;
			else match *= (ua.indexOf(targetted_os) >= 0);
		}

		var targetted_name = searchInNickNames(name.toLowerCase(),brDetect_IE_nicknames,brDetect_NS_nicknames,brDetect_Cared);
		var ua_name = getBrName(ua);

		var targetted_version = parseInt(delDot(version))+"";
		var ua_version = parseInt(delDot(getBrVersion(ua,ua_name)))+"";

		match *= matchBr(ua,targetted_name,ua_name,targetted_version,ua_version,compatible);
	}
	else match = false;

	return (match)? true:false;
}
function matchBr(ua,targetted_name,ua_name,targetted_version,ua_version,compatible)
{
	var match = false;
	if(ua_name == "mozilla" && (ua.indexOf("netscape") >= 0 || ua.indexOf("rv:") < 0)) ua_name = "netscape";

	if(targetted_version.length <= ua_version.length) ua_version = ua_version.substring(0,targetted_version.length);
	else if(targetted_version.charAt(0) != ua_version.charAt(0)) targetted_version = targetted_version.substring(0,ua_version.length);

	if(compatible == null || compatible == "" || typeof compatible != "string") match = (targetted_name == ua_name && targetted_version == ua_version);
	else if(compatible == "upper") match = (targetted_name == ua_name && targetted_version <= ua_version);
	else if(compatible == "lower") match = (targetted_name == ua_name && targetted_version >= ua_version);
	return match;
}
function searchInNickNames(name)
{
	var arg = (typeof arguments != "object")? searchInNickNames.arguments:arguments;
	var targetted = null;
	for(var j=1; j<arg.length; j++)
	{
		for(var i in arg[j])
		{
			if(name == arg[j][i])
			{
				if(arg[j][0] == "msie" || arg[j][0] == "netscape") targetted = arg[j][0];
				else targetted = arg[j][i];
			}
		}
	}
	return targetted;
}
function getBrName(ua)
{
	var ua_name = null;
	for(var i in brDetect_Cared)
	{
		if(ua.indexOf(brDetect_Cared[i]) >= 0) ua_name = brDetect_Cared[i];
	}
	if(ua_name == null || ua_name == "mozilla")
	{
		if(ua.indexOf("msie") >= 0) ua_name = "msie";
		else if(ua.indexOf("netscape") >= 0) ua_name = "netscape";
		else if(ua.indexOf("mozilla") >= 0 && ua.indexOf("compatible") < 0) ua_name = "mozilla";
	}
	return ua_name;
}
function getBrVersion(ua,ua_name)
{
	var name_index = ua.indexOf(ua_name);
	var end_index = null;
	var end_index_rc = null;
	for(var i in brDetect_Version_End)
	{
		end_index_rc = ua.indexOf(brDetect_Version_End[i],name_index+ua_name.length+1);
		if(end_index_rc >= 0)
		{
			if(end_index == null || end_index > end_index_rc) end_index = end_index_rc;
		}
	}
	if(end_index == null) end_index = ua.length;
	var ua_version = ua.substring(name_index+ua_name.length+1,end_index);

	if(ua_name == "netscape")
	{
		ua_version = ua.substring(ua.lastIndexOf("/")+1,ua.length);
	}
	else if(ua_name == "mozilla" && parseInt(ua_version) >= 5)
	{
		ua_version = ua.substring(ua.indexOf("rv:")+3,ua.indexOf(")",ua.indexOf("rv:")));
	}
	return ua_version;
}
function delDot(str)
{
	while(str.indexOf(".",0) >= 0)
	{
		str = str.substring(0,str.indexOf(".",0)) + str.substring(str.indexOf(".",0)+1,str.length);
	}
	return str;
}

