//----------------------------------------------------
// OBJEKTY A FUNKCE NA DETEKCI PROHLIZECE							
// * s podporou HTTP_REFERER													
//----------------------------------------------------
/*
		--- MANUAL ---
		
	author:				Tomas Poles ml.
	version:			1.0.1
	create date:	unknown
	last update:	2003-09-08
	
	*** Version 1.0.1 ***
	
	2003-10-02
	+ pridana podpora rozliseni WebDownu
	
	2003-09-08
	* dokoncena podpora objektu Browser (vc. parsovani referera) v JavaScriptu

	2003-09-02
	* uprava funkci z ver.1.0.0 pro kompatibilitu s verzi 1.0.1
	
	2003-08-28
	+ pridani definice a detekce operacniho systemu
	+ pridani definice a detekce prohlizece a jeho verze
	+ pridani parsovani HTTP_REFERER
	
*/

//DEFINICE OBJEKTU - OPERACNI SYSTEM
function TtpBrowserOs()
{
	this.category = null;
	this.type = null;
	this.name = null;
}

//DEFINICE OBJEKTU - REFERER
function TtpBrowserReferer()
{
	this.protocol = null;
	this.host = null;
	this.port = null;
	this.username = null;
	this.password = null;
	this.path = null;
	this.document = null;
	this.query = null;
	this.fragment = null;
}

//DEFINICE OBJEKTU - BROWSER
function TtpBrowser(AUserAgent, AReferer)
{
	//vlastnosti
	this.userAgent = null;
	this.httpReferer = null;
	this.operatingSystem = null;
	this.referer = null;
	this.category = null;
	this.type = null;
	this.version = null;
	this.name = null;

	//constructor
	this.init = function()
	{
		this.userAgent = (AUserAgent == null) ? navigator.userAgent : AUserAgent;
		this.httpReferer = (AReferer == null) ? document.referrer : AReferer;
		this.detectOs();
		this.detectBrowser();
		this.parseReferer();
	}
	
	//detekce operacniho systemu
	this.detectOs = function()
	{
		this.operatingSystem = new TtpBrowserOs();
		var tmp1 = new String("" + this.userAgent).toLowerCase();
		for (var i = 0; i < DEF_BROWSER_OS.length; i ++) {
			var tmp2 = DEF_BROWSER_OS[i];
			var res = eval("tmp1.match(" + tmp2[2] + ")");
			if (res) {
				this.operatingSystem.category = tmp2[0];
				this.operatingSystem.type = tmp2[1];
				this.operatingSystem.name = DEF_BROWSER_OS_NAMES[tmp2[1]];
				break;
			}
		}
		//alert("OS -> category: " + DEF_BROWSER_OS_CATEGORIES[this.operatingSystem.category] + ", type: " + this.operatingSystem.type + ", name: " + this.operatingSystem.name);
	}
	
	//detekce prohlizece
	this.detectBrowser = function()
	{
		var tmp1 = new String("" + this.userAgent).toLowerCase();
		//... regular expressions
		var res_ie = eval("tmp1.match(/msie([+_ ]|)([\\d\\.]*)/i)");
		var res_webtv = eval("tmp1.match(/webtv/i)");
		var res_omni = eval("tmp1.match(/omniweb/i)");
		var res_opera = eval("tmp1.match(/opera/i)");
		var res_ns = eval("tmp1.match(/netscape.?\\/([\\d\\.]*)/i)");
		var res_mozilla = eval("tmp1.match(/mozilla(\\/|)([\\d\\.]*)/i)");
		var res_comp = eval("tmp1.match(/compatible/i)");
		var res_galeon = eval("tmp1.match(/galeon/i)");
		var res_safari = eval("tmp1.match(/safari/i)");
		//... ie
		if (res_ie && !res_webtv && !res_omni && !res_opera)
		{
			this.category = 0;
			this.type = "msie";
			this.version = res_ie[2];
			this.name = "Internet Explorer";
		}
		//... netscape
		else if (res_ns)
		{
			this.category = 0;
			this.type = "netscape";
			this.version = res_ns[1];
			this.name = "Netscape";
		}
		//... mozilla
		else if (res_mozilla && !res_comp && !res_opera && !res_galeon && !res_safari)
		{
			var res_ver = eval("tmp1.match(/rv(\\:|)([\\d\\.]*)/i)");
			this.category = 0;
			this.type = "mozilla";
			this.version = (res_ver[2] != null && res_ver[2] != "") ? res_ver[2] : res_mozilla[2];
			this.name = "Mozilla";
		}
		//... others
		else {
			for (var i = 0; i < DEF_BROWSER.length; i ++) {
				var tmp2 = DEF_BROWSER[i];
				var res = eval("tmp1.match(" + tmp2[2] + ")");
				if (res) {
					this.category = tmp2[0];
					this.type = tmp2[1];
					this.name = tmp2[3];
					//... zjisteni verze
					//... ... opera
					if (this.type == "opera") {
						var res_ver = eval("tmp1.match(/opera([\\ \\/]|)([\\d\\.]*)/i)");
						this.version = res_ver[2];
					}
					break;
				}
			}
		}
		//alert("BROWSER -> category: " + DEF_BROWSER_CATEGORIES[this.category] + ", type: " + this.type + ", name: " + this.name + ", version: " + this.version);
	}
	
	//analyza referera
	this.parseReferer = function()
	{
		/*
		//var buf = "file:///c:/docs/dokument1.xls";
		//var buf = "http://www.seznam.cz";
		//var buf = "http://www.seznam.cz:8080";
		//var buf = "http://www.seznam.cz#kotva";
		//var buf = "http://www.seznam.cz:8080/#kotva";
		//var buf = "http://www.seznam.cz/adresar/subdir/#kotva";
		//var buf = "http://www.seznam.cz/adresar/subdir/";
		var buf = "http://www.seznam.cz/adresar/subdir/nekdo.asp#kotva";
		//var buf = "http://www.seznam.cz/adresar/subdir/nekdo.asp";
		//var buf = "http://www.seznam.cz/adresar/subdir/?param1=xxx&param2=yyy";
		//var buf = "http://www.seznam.cz/nekdo.asp?param1=xxx&param2=yyy#ko21tva";
		//var buf = "http://www.seznam.cz/nekdo.asp?param1=xxx&param2=yyy";

		//var buf = "http://www.seznam.cz:8080/adresar/subdir/nekdo.asp?param1=xxx&param2=yyy#ko21tva";
		//var buf = "http://www.seznam.cz/adresar/subdir/nekdo.asp?param1=xxx&param2=yyy#ko21tva";
		var buf = "http://www.seznam.cz/adresar/subdir/nekdo.asp?param1=xxx&param2=yyy";
		//alert(eval("buf.match(/([a-z]*)[:]\\/\\//i)"));
		//alert(eval("buf.match(/(^[a-z]*)|([#]$[a-z]*)/i)"));
		//var res = eval("buf.match(/[\\w\\W]*\\/([\\w\\W]*$)/i)");
		//var res = eval("buf.match(/([a-z]*):\\/\\/(#([a-z|0-9]*$))/i)");
		//var res = eval("buf.match(/(\\w*):\\/\\/([\\w\\.]*):(\\d*)\\/([\\w\\W]*)/i)"); //ok
		//var res = eval("buf.match(/(\\w*):\\/\\/([\\w\\.]*):(\\d*)\\/([\\w\\W]*)\\/([\\w\\W]*)\\?/i)"); //ok
		//var res = eval("buf.match(/(\\w*):\\/\\/([\\w\\.]*):(\\d*)\\/([\\w\\W]*)\\/([\\w\\W]*)\\?([\\w\\W]*)\\#([\\w\\W]*)/i)"); //ok complete
		//var res = eval("buf.match(/(\\w+):\\/\\/([\\w\\.\\-]*)(:(\\d*))?(\\/([\\w\\W]*))?\\/([\\w\\-\\.]*)(\\?((([\\w\\W]*)\\#([\\w\\W]*))|([\\w\\W]*)))?/i)"); //ok, podpora chybejicich casti
		var res = eval("buf.match(/(\\w+):\\/\\/([\\w\\.\\-]*)(:(\\d*))?(\\/([\\w\\W]*))?\\/([\\w\\-\\.]*)?(\\?((([\\w\\W]*)\\#([\\w\\W]*))|([\\w\\W]*)))?(\\#([\\w\\W]*))?/i)");
		if (!res) res = eval("buf.match(/(\\w+):\\/\\/([\\w\\.\\-]*)(:(\\d*))?()()()()()()()()()(\\#([\\w\\W]*))?/i)");
		if (res) {
			var str = "MATCHING FIELDS\r\n";
			for (var i = 0; i < res.length; i ++) str += "Index " + i + ".: " + res[i] + "\r\n";
			str += "\r\nRESULT\r\n";
			str += "protocol: " + res[1] + "\r\n";
			str += "host: " + res[2] + "\r\n";
			str += "port: " + res[4] + "\r\n";
			str += "path: " + res[6] + "\r\n";
			str += "document: " + res[7] + "\r\n";
			str += "query: " + ((res[11] != null && res[11] != "") ? res[11] : res[9]) + "\r\n";
			str += "fragment: " + ((res[15] != null && res[15] != "") ? res[15] : res[12]) + "\r\n";
			alert(str);
		} else {
			alert("NO MATCH");
		}
		*/
		if (this.httpReferer != null && this.httpReferer != "") {
			var buf = new String("" + this.httpReferer);
			var res = eval("buf.match(/(\\w+):\\/\\/([\\w\\.\\-]*)(:(\\d*))?(\\/([\\w\\W]*))?\\/([\\w\\-\\.]*)?(\\?((([\\w\\W]*)\\#([\\w\\W]*))|([\\w\\W]*)))?(\\#([\\w\\W]*))?/i)");
			if (!res) res = eval("buf.match(/(\\w+):\\/\\/([\\w\\.\\-]*)(:(\\d*))?()()()()()()()()()(\\#([\\w\\W]*))?/i)");
			if (res) {
				this.referer = new TtpBrowserReferer();
				this.referer.protocol = res[1];
				this.referer.host = res[2];
				this.referer.port = ((res[4] != null && res[4] != "") ? res[4] : null);
				this.referer.username = null;
				this.referer.password = null;
				this.referer.path = ((res[6] != null && res[6] != "") ? res[6] : null);
				this.referer.query = ((res[11] != null && res[11] != "") ? res[11] : ((res[9] != null && res[9] != "") ? res[9] : null));
				this.referer.fragment = ((res[15] != null && res[15] != "") ? res[15] : ((res[12] != null && res[12] != "") ? res[12] : null));
			}
			/*
			var str = "\r\nREFERER\r\n";
			str += "protocol: " + this.referer.protocol + "\r\n";
			str += "host: " + this.referer.host + "\r\n";
			str += "port: " + this.referer.port + "\r\n";
			str += "path: " + this.referer.path + "\r\n";
			str += "document: " + this.referer.document + "\r\n";
			str += "query: " + this.referer.query + "\r\n";
			str += "fragment: " + this.referer.fragment + "\r\n";
			alert(str);
			*/
		}
	}
	
	//inicializace
	this.init();
}

//DEFINICE KATEGORII OPERACNICH SYSTEMU
var DEF_BROWSER_OS_CATEGORIES = [
	"windows",
	"macintosh",
	"unix",
	"others",
	"miscellanous"
];

//DEFINICE SEZNAMU OPERACNICH SYSTEMU
var DEF_BROWSER_OS = [
	//... windows
	new Array(0, "winxp", "/windows[_+ ]xp/"),
	new Array(0, "winxp", "/windows[_+ ]nt[_+ ]5\\.1/"),
	new Array(0, "winme", "/windows[_+ ]me/"),
	new Array(0, "winme", "/win[_+ ]9x/"),
	new Array(0, "win2000", "/windows[_+ ]?2000/"),
	new Array(0, "win2000", "/windows[_+ ]nt[_+ ]5/"),
	new Array(0, "winnt", "/winnt/"),
	new Array(0, "winnt", "/windows[_+ \\-]?nt/"),
	new Array(0, "winnt", "/win32/"),
	new Array(0, "win98", "/win(.*)98/"),
	new Array(0, "win95", "/win(.*)95/"),
	new Array(0, "win16", "/win(.*)16/"),
	new Array(0, "win16", "/windows[_+ ]3/"),
	new Array(0, "wince", "/win(.*)ce/"),
	//... macintosh
	new Array(1, "macosx", "/mac os x/"),
	new Array(1, "macintosh", "/mac[_+ ]?p/"),
	new Array(1, "macintosh", "/mac[_+ ]68/"),
	new Array(1, "macintosh", "/macweb/"),
	new Array(1, "macintosh", "/macintosh/"),
	//... unix
	new Array(2, "linux", "/linux/"),
	new Array(2, "aix", "/aix/"),
	new Array(2, "sunos", "/sunos/"),
	new Array(2, "irix", "/irix/"),
	new Array(2, "osf", "/osf/"),
	new Array(2, "hp-ux", "/hp-ux/"),
	new Array(2, "netbsd", "/netbsd/"),
	new Array(2, "bsdi", "/bsdi/"),
	new Array(2, "freebsd", "/freebsd/"),
	new Array(2, "openbsd", "/openbsd/"),
	new Array(2, "gnu", "/gnu/"),
	new Array(2, "unix", "/unix/"),
	new Array(2, "unix", "/x11/"),
	//... others
	new Array(3, "beos", "/beos/"),
	new Array(3, "os/2", "/os\\/2/"),
	new Array(3, "amigaos", "/amiga/"),
	new Array(3, "atari", "/atari/"),
	new Array(3, "vms", "/vms/"),
	//... miscellanous
	new Array(4, "cp/m", "/cp\\/m/"),
	new Array(4, "crayos", "/crayos/"),
	new Array(4, "dreamcast", "/dreamcast/"),
	new Array(4, "riscos", "/risc[_+ ]?os/"),
	new Array(4, "webtv", "/webtv/")
];

//DEFINICE NAZVU OPERACNICH SYSTEMU
var DEF_BROWSER_OS_NAMES = new Array();
//... windows
DEF_BROWSER_OS_NAMES["winxp"] = "Windows XP";
DEF_BROWSER_OS_NAMES["winme"] = "Windows Me";
DEF_BROWSER_OS_NAMES["win2000"] = "Windows 2000";
DEF_BROWSER_OS_NAMES["winnt"] = "Windows NT";
DEF_BROWSER_OS_NAMES["win98"] = "Windows 98";
DEF_BROWSER_OS_NAMES["win95"] = "Windows 95";
DEF_BROWSER_OS_NAMES["win16"] = "Windows 3.xx";
DEF_BROWSER_OS_NAMES["wince"] = "Windows CE";
//... macintosh
DEF_BROWSER_OS_NAMES["macosx"] = "Mac OS X";
DEF_BROWSER_OS_NAMES["macintosh"] = "Mac OS";
//... unix
DEF_BROWSER_OS_NAMES["linux"] = "Linux";
DEF_BROWSER_OS_NAMES["aix"] = "Aix";
DEF_BROWSER_OS_NAMES["sunos"] = "Sun Solaris";
DEF_BROWSER_OS_NAMES["irix"] = "Irix";
DEF_BROWSER_OS_NAMES["osf"] = "OSF Unix";
DEF_BROWSER_OS_NAMES["hp-ux"] = "HP Unix";
DEF_BROWSER_OS_NAMES["netbsd"] = "NetBSD";
DEF_BROWSER_OS_NAMES["bsdi"] = "BSDi";
DEF_BROWSER_OS_NAMES["freebsd"] = "FreeBSD";
DEF_BROWSER_OS_NAMES["openbsd"] = "OpenBSD";
DEF_BROWSER_OS_NAMES["gnu"] = "GNU";
DEF_BROWSER_OS_NAMES["unix"] = "Unknown Unix system";
//... others
DEF_BROWSER_OS_NAMES["beos"] = "BeOS";
DEF_BROWSER_OS_NAMES["os/2"] = "OS/2";
DEF_BROWSER_OS_NAMES["amigaos"] = "AmigaOS";
DEF_BROWSER_OS_NAMES["atari"] = "Atari";
DEF_BROWSER_OS_NAMES["vms"] = "VMS";
//... miscellanous
DEF_BROWSER_OS_NAMES["cp/m"] = "CPM";
DEF_BROWSER_OS_NAMES["crayos"] = "CrayOS";
DEF_BROWSER_OS_NAMES["dreamcast"] = "Dreamcast";
DEF_BROWSER_OS_NAMES["riscos"] = "RISC OS";
DEF_BROWSER_OS_NAMES["webtv"] = "WebTV";

//DEFINICE KATEGORII PROHLIZECU
var DEF_BROWSER_CATEGORIES = [
	"common browsers",
	"site grabbers",
	"music only browsers",
	"PDA/Phonecell browsers",
	"TV browsers",
	"others"
];

//DEFINICE SEZNAMU PROHLIZECU
//* mimo IE, NS, Mozilla
var DEF_BROWSER = [
	//... common browsers
	new Array(0, "icab", "/icab/", "iCab"),
	new Array(0, "gozilla", "/go!zilla/", "Go!Zilla"),
	new Array(0, "konqueror", "/konqueror/", "Konqueror"),
	new Array(0, "links", "/links/", "Links"),
	new Array(0, "lynx", "/lynx/", "Lynx"),
	new Array(0, "omniweb", "/omniweb/", "OmniWeb"),
	new Array(0, "opera", "/opera/", "Opera"),
	new Array(0, "wget", "/wget/", "Wget"),
	new Array(0, "22acidownload", "/22acidownload/", "22AciDownload"),
	new Array(0, "aoliweng", "/aol\\\\-iweng/", "AOL-Iweng"),
	new Array(0, "amaya", "/amaya/", "Amaya"),
	new Array(0, "amigavoyager", "/amigavoyager/", "AmigaVoyager"),
	new Array(0, "aweb", "/aweb/", "AWeb"),
	new Array(0, "bpftp", "/bpftp/", "BPFTP"),
	new Array(0, "chimera", "/chimera/", "Chimera"),
	new Array(0, "cyberdog", "/cyberdog/", "Cyberdog"),
	new Array(0, "dillo", "/dillo/", "Dillo"),
	new Array(0, "dreamcast", "/dreamcast/", "Dreamcast"),
	new Array(0, "downloadagent", "/downloadagent/", "DownloadAgent"),
	new Array(0, "ecatch", "/ecatch/", "eCatch"),
	new Array(0, "emailsiphon", "/emailsiphon/", "EmailSiphon"),
	new Array(0, "encompass", "/encompass/", "Encompass"),
	new Array(0, "friendlyspider", "/friendlyspider/", "FriendlySpider"),
	new Array(0, "fresco", "/fresco/", "ANT Fresco"),
	new Array(0, "galeon", "/galeon/", "Galeon"),
	new Array(0, "getright", "/getright/", "GetRight"),
	new Array(0, "headdump", "/headdump/", "HeadDump"),
	new Array(0, "hotjava", "/hotjava/", "Sun HotJava"),
	new Array(0, "ibrowse", "/ibrowse/", "IBrowse"),
	new Array(0, "intergo", "/intergo/", "InterGO"),
	new Array(0, "kmeleon", "/k-meleon/", "K-Meleon"),
	new Array(0, "linemodebrowser", "/linemodebrowser/", "W3C Line Mode Browser"),
	new Array(0, "lotusnotes", "/lotus-notes/", "Lotus Notes web client"),
	new Array(0, "macweb", "/macweb/", "MacWeb"),
	new Array(0, "multizilla", "/multizilla/", "MultiZilla"),
	new Array(0, "ncsamosaic", "/ncsa_mosaic/", "NCSA Mosaic"),
	new Array(0, "netpositive", "/netpositive/", "NetPositive"),
	new Array(0, "nutscrape", "/nutscrape/", "Nutscrape"),
	new Array(0, "msfrontpageexpress", "/msfrontpageexpress/", "MS FrontPage Express"),
	new Array(0, "phoenix", "/phoenix/", "Phoenix"),
	new Array(0, "safari", "/safari/", "Safari"),
	new Array(0, "tzgeturl", "/tzgeturl/", "TzGetURL"),
	new Array(0, "viking", "/viking/", "Viking"),
	new Array(0, "webfetcher", "/webfetcher/", "WebFetcher"),
	new Array(0, "webexplorer", "/webexplorer/", "IBM-WebExplorer"),
	new Array(0, "webmirror", "/webmirror/", "WebMirror"),
	new Array(0, "webvcr", "/webvcr/", "WebVCR"),
	//... site grabbers
	new Array(1, "teleport", "/teleport/", "TelePort Pro"),
	new Array(1, "webcapture", "/webcapture/", "Acrobat"),
	new Array(1, "webcopier", "/webcopier/", "WebCopier"),
	new Array(1, "webdown", "/httpclient/", "WebDown"),
	//... music only browsers
	new Array(2, "real", "/real/", "RealAudio or compatible"),
	new Array(2, "winamp", "/winamp/", "WinAmp"),
	new Array(2, "winmp", "/windows-media-player/", "Windows Media Player"),
	new Array(2, "audion", "/audion/", "Audion"),
	new Array(2, "freeamp", "/freeamp/", "FreeAmp"),
	new Array(2, "itunes", "/itunes/", "Apple iTunes"),
	new Array(2, "jetaudio", "/jetaudio/", "JetAudio"),
	new Array(2, "mintaudio", "/mint_audio/", "Mint Audio"),
	new Array(2, "mpg123", "/mpg123/", "mpg123"),
	new Array(2, "nsplayer", "/nsplayer/", "NetShow Player"),
	new Array(2, "sonique", "/sonique/", "Sonique"),
	new Array(2, "uplayer", "/uplayer/", "Ultra Player"),
	new Array(2, "xmms", "/xmms/", "XMMS"),
	new Array(2, "xaudio", "/xaudio/", "Some XAudio Engine based MPEG player"),
	//... PDA/Phonecell browsers
	new Array(3, "alcatel", "/alcatel/", "Alcatel Browser"),
	new Array(3, "docomo", "/docomo/", "IMode phone"),
	new Array(3, "mmef", "/mmef/", "Microsoft Mobile Explorer"),
	new Array(3, "mota", "/mot-a/", "Motorola Browser"),
	new Array(3, "mspie", "/mspie/", "MS Pocket Internet Explorer"),
	new Array(3, "nokia", "/nokia/", "Nokia Browser"),
	new Array(3, "sonyericsson", "/sonyericsson/", "Sony/Ericsson Browser"),
	new Array(3, "up", "/up\\./", "UP.Browser"),
	new Array(3, "wapalizer", "/wapalizer/", "WAPalizer"),
	new Array(3, "wapsilon", "/wapsilon/", "WAPsilon"),
	new Array(3, "webcollage", "/webcollage/", "WebCollage"),
	//... TV browsers
	new Array(4, "webtv", "/webtv/", "WebTV browser"),
	//... others
	new Array(5, "csscheck", "/csscheck/", "WDG CSS Validator"),
	new Array(5, "w3m", "/w3m/", "w3m"),
	new Array(5, "w3ccssvalidator", "/w3c_css_validator/", "W3C CSS Validator"),
	new Array(5, "w3cvalidator", "/w3c_validator/", "W3C HTML Validator"),
	new Array(5, "wdgvalidator", "/wdg_validator/", "WDG HTML Validator"),
	new Array(5, "webzip", "/webzip/", "WebZIP"),
	new Array(5, "staroffice", "/staroffice/", "StarOffice"),
	new Array(5, "libwww", "/libwww/", "LibWWW")
];

//INICIALIZACE
var Browser = new TtpBrowser();

//----------------------------------------------------
// FUNKCE A KONSTANTY PRO KOMPATIBILITU S VERZI 1.0.0 
//----------------------------------------------------

//nastaveni promennych pro IE
var IS_IE = IsIE();
var IS_IE_4 = IsIE("4.0");
var IS_IE_5 = IsIE("5.0");
var IS_IE_5_5 = IsIE("5.5");
var IS_IE_6 = IsIE("6.0");

//nastaveni promennych pro Netscape
var IS_NS = IsNS();
var IS_NS_6 = IsNS("6");
var IS_NS_6_2 = IsNS("6.2");
var IS_NS_7 = IsNS("7");

//nastaveni promennych pro Mozilla
var IS_MOZILLA = IsMozilla();
var IS_MOZILLA_0_9 = IsMozilla("0.9");
var IS_MOZILLA_0_9_1 = IsMozilla("0.9.9");
var IS_MOZILLA_0_9_2 = IsMozilla("0.9.9");
var IS_MOZILLA_0_9_3 = IsMozilla("0.9.9");
var IS_MOZILLA_0_9_4 = IsMozilla("0.9.9");
var IS_MOZILLA_0_9_5 = IsMozilla("0.9.9");
var IS_MOZILLA_0_9_6 = IsMozilla("0.9.9");
var IS_MOZILLA_0_9_7 = IsMozilla("0.9.9");
var IS_MOZILLA_0_9_8 = IsMozilla("0.9.9");
var IS_MOZILLA_0_9_9 = IsMozilla("0.9.9");
var IS_MOZILLA_1 = IsMozilla("1.0");
var IS_MOZILLA_1_3 = IsMozilla("1.3");

//'nastaveni promennych pro Opera
var IS_OPERA = IsOpera();
var IS_OPERA_5 = IsOpera("5");
var IS_OPERA_6 = IsOpera("6");
var IS_OPERA_7 = IsOpera("7");

//Funkce pro zjisteni Internet Exploreru
function IsIE(version) {
	var agent = new String("" + (IsClientSide() ? navigator.userAgent : Request.ServerVariables("HTTP_USER_AGENT")));
	var i1 = agent.indexOf("MSIE");
	var i2 = agent.indexOf("Opera");
	//IE compatible
	if (i1 >= 0 && i2 < 0) {
		if (version != null && version != "") {
			var ver = agent.substr(i1 + 5, 3);
			//verze je podporovana
			if (parseFloat(ver) >= parseFloat(version)) return true;
			//nepodporovano
			else return false;
		} else {
			return true;
		}
	//nepodporovano
	} else {
		return false;
	}
}

//Funkce pro zjisteni Mozilly
function IsMozilla(version) {
	var agent = new String("" + (IsClientSide() ? navigator.userAgent : Request.ServerVariables("HTTP_USER_AGENT")));
	var i1 = agent.indexOf("Gecko");
	var i2 = agent.indexOf("Netscape");
	//Mozilla compatible
	if (i1 >= 0 && i2 < 0) {
		if (version != null && version != "") {
			var i1 = agent.indexOf("rv:");
			var i2 = agent.indexOf(")", i1);
			var ver = agent.substr(i1 + 3, i2 - (i1 + 3));
			var ver_p1 = ver.split(".");
			var ver_p2 = new String("" + version).split(".");
			for (var i = 0; i < ver_p2.length; i ++) {
				var v1 = !isNaN(parseInt(ver_p1[i])) ? parseInt(ver_p1[i]) : 0;
				var v2 = !isNaN(parseInt(ver_p2[i])) ? parseInt(ver_p2[i]) : 0;
				if (v2 > v1) return false;
				else if (v1 > v2) return true;
			}
			return true;
		} else {
			return true;
		}
	//nepodporovano
	} else {
		return false;
	}
}

//Funkce pro zjisteni Netscape
function IsNS(version) {
	var agent = new String("" + (IsClientSide() ? navigator.userAgent : Request.ServerVariables("HTTP_USER_AGENT")));
	var i1 = agent.indexOf("Netscape");
	//Netscape compatible
	if (i1 >= 0) {
		if (version != null && version != "") {
			var i2 = agent.indexOf("/", i1);
			if (i2 >= 0) i1 = i2 + 1; else i1 = i1 + 8;
			var ver = agent.substr(i1, agent.length - i1 + 1);
			var ver_p1 = ver.split(".");
			var ver_p2 = new String("" + version).split(".");
			for (var i = 0; i < ver_p2.length; i ++) {
				var v1 = !isNaN(parseInt(ver_p1[i])) ? parseInt(ver_p1[i]) : 0;
				var v2 = !isNaN(parseInt(ver_p2[i])) ? parseInt(ver_p2[i]) : 0;
				if (v2 > v1) return false;
				else if (v1 > v2) return true;
			}
			return true;
		} else {
			return true;
		}
	//nepodporovano
	} else {
		return false;
	}
}

//Funkce pro zjisteni Opery
function IsOpera(version) {
	var agent = new String("" + (IsClientSide() ? navigator.userAgent : Request.ServerVariables("HTTP_USER_AGENT")));
	var i1 = agent.indexOf("Opera");
	//je to opera
	if (i1 >= 0) {
		if (version != null && version != "") {
			var i2 = agent.indexOf("(", i1);
			if (i2 < 0) i2 = agent.indexOf("[", i1);
			if (i2 < 0) i2 = agent.length;
			var ver = parseFloat(agent.substr(i1 + 6, i2 - (i1 + 6)));
			if (ver >= parseFloat(version)) {
				return true;
			} else {
				return false;
			}
		} else {
			return true;
		}
	//neni
	} else {
		return false;
	}
}

//funkce na zjisteni vysoke podobnosti s IE
function IsIECompatible() {
	if (IS_IE_5_5 || IS_NS_6_2 || IS_MOZILLA_0_9_9) {
		return true;
	} else {
		return false;
	}
}


