function IsClientSide() {
	var ret = false;
	try {
		if (top != null && self != null) ret = true;
	} catch(e) {
		ret = false;
	}
	return ret;
}

function IsServerSide() {
	return !IsClientSide();
}

//-----------------------------------------------------------------------------------
// CLIENT ... DEBUG
//-----------------------------------------------------------------------------------

function Debug(AMsg) {
	var win = window.open("", "DebugWindow", "width=800,height=400,scrollbars=yes,resizable=yes");
	var doc = win.document;
	doc.write(DateToHTML(new Date()) + " - " + AMsg + "<br>");
}

//-----------------------------------------------------------------------------------
// CLIENT ... Obecne
//-----------------------------------------------------------------------------------

function ImportScript(AScriptSrc) {
	var tag = '<script language="JavaScript" src="' + AScriptSrc + '" ">';
  var script = document.createElement(tag);
	document.appendChild(script);
	return script;
}

//funkce na vytvoreni tagu INPUT
function CreateInput(type, name, value) {
	var input = document.createElement("INPUT");
	input.type = type;
	input.name = name;
	input.value = (value != null) ? value : "";
	return input;
}

//nastaveni predni barvy (barvy textu) radku tabulky
function SetTableRowColor(ARow, AColor) {
	for (var i = 0; i < ARow.cells.length; i ++) {
		ARow.cells[i].style.color = AColor;
	}
}

//nastaveni barvy pozadi radku tabulky
function SetTableRowBgColor(ARow, AColor) {
	for (var i = 0; i < ARow.cells.length; i ++) {
		ARow.cells[i].style.backgroundColor = AColor;
	}
}

//funkce na vyhledani tagu dle jmena
function GetTag(AName)
{
	try {
		var temp = null;
		if (document.getElementById) {
			temp = document.getElementById(AName);
			if (temp != null) return temp;
		}
		if (document.getElementsByName) {
			temp = document.getElementsByName(AName);
			if (temp.length > 0) return temp[0];
		}
		if (document.all) return document.all[AName];
		return null;
	} catch(e) {
		return null;
	}
}

//funkce na zjisteni zda element je uvnitr jineho elementu
function ExistInElement(ASource, AFind)
{
	var ret = false;
	for (var j = 0; j < ASource.children.length; j ++) {
		if (ASource.children[j] == AFind) {
			ret = true;
			break;
		}
	}
	return ret;
}

//funkce na dynamicky zapis HTML do urciteho mista stranky
//pozn.: pouziti zejmena pro vlastni tagy (nejsou soucasti HTML)
function InsertHTML(element, html)
{
		if (IS_IE) {
			element.outerHTML = html;
		} else {
			element.innerHTML = html;
		}
}

//funkce na dynamicky pripojeni HTML k urcitemu mistu stranky
//pozn.: pouziti zejmena pro vlastni tagy (nejsou soucasti HTML)
function AppendHTML(element, html)
{
		if (IS_IE) {
			element.outerHTML += html;
		} else {
			element.innerHTML += html;
		}
}

//funkce na zjisteni obsahu daneho tagu (i uzivatelskeho)
function GetContent(element) {
	var nodes = new Array();
	//pro IE
	if (IS_IE) {
		var start = false;
		for (var x = 0; x < document.all.length; x ++) {
			var obj = document.all[x];
			if (!start) {
				if (obj.tagName == element.tagName && obj.name == element.name) {
					start = true;
				}
			} else {
				if (obj.tagName == ("/" + element.tagName)) {
					start = false;
					break;
				} else {
					nodes[nodes.length] = obj;
				}
			}
		}
		if (start) nodes = new Array();
	//pro ostatni (NS, Mozilla)
	} else {
		for (var x = 0; x < element.childNodes.length; x ++) {
			if (element.childNodes[x].tagName != null) {
				nodes[nodes.length] = element.childNodes[x];
			}
		}
	}
	return nodes;
}

//funkce na zjisteni obsahu daneho tagu (i uzivatelskeho)
function GetDocContent(element, skip_tags) {
	var skip = !isNaN(parseInt(skip_tags)) ? parseInt(skip_tags) : 0;
	var skiped = 0;
	var nodes = new Array();
	var start = false;
	for (var x = 0; x < element.document.all.length; x ++) {
		var obj = element.document.all[x];
		if (!start) {
			if (obj.tagName == element.tagName && obj.name == element.name) {
				if (skiped >= skip) {
					start = true;
				} else {
					skiped ++;
				}
			}
		} else {
			if (obj.tagName == ("/" + element.tagName)) {
				start = false;
				break;
			} else {
				nodes[nodes.length] = obj;
			}
		}
	}
	if (start) nodes = new Array();
	return nodes;
}

//-----------------------------------------------------------------------------------
// CLIENT ... Prace s okny
//-----------------------------------------------------------------------------------

function OpenWindow(AUrl, AWidth, AHeight, AMenu, AScroll, AStatus, AResize, AName)
{
	var menu = (AMenu != null && AMenu != "") ? AMenu : "no";
	var scroll = (AScroll != null && AScroll != "") ? AScroll : "no";
	var status = (AStatus != null && AStatus != "") ? AStatus : "no";
	var resize = (AResize != null && AResize != "") ? AResize : "yes";
	var name = (AName != null && AName != "") ? AName : "_blank";
	return window.open(AUrl, name, "width=" + AWidth + ",height=" + AHeight + ",directories=no,location=no,menubar=" + menu + ",personalbar=no,resizable=" + resize + ",scrollbars=" + scroll + ",status=" + status + ",toolbar=no");
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Prace s obrcnymi hodnotami
//-----------------------------------------------------------------------------------

function IsNull(ATest, AValue)
{
	var test = (ATest == null || ATest == "" || typeof(ATest) == "undefined");
	return (test ? AValue : ATest);
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Prace s webovou strankou
//-----------------------------------------------------------------------------------

//objekt parsovaneho URL
function TUrl()
{
	this.protocol = null;
	this.server = null;
	this.port = null;
	this.path = null;
	this.document = null;
	this.query = new Array();
}

//funkce na rozparsovani URL
function ParseUrl(AUrl)
{
	var ret = new TUrl();
	if (AUrl != null && AUrl != "") {
		var buf = AUrl;
		//zjisteni indexu
		var i1 = buf.indexOf("//");
		var i2 = buf.indexOf("?", i1);
		var i3 = (i2 > 0) ? i2 - 1 : buf.length - 1;
		//rozkouskovani
		ret.protocol = buf.substring(0, i1 - 1).toUpperCase();
		var buf1 = (i2 > 0) ? buf.substring(i1 + 2, i2) : buf.substring(i1 + 2);
		var buf2 = (i2 > 0) ? buf.substring(i2 + 1) : "";
		//server, port, path, document
		var pole1 = buf1.split("/");
		buf1 = "";
		for (var i = 0; i < pole1.length; i ++) {
			//server, port
			if (i == 0) {
				var pole2 = (pole1[i].indexOf(":") >= 0) ? pole1[i].split(":") : [pole1[i]];
				for (var j = 0; j < pole2.length; j ++) {
					if (j == 0) ret.server = pole2[j];
					else if (j == 1) ret.port = parseInt(pole2[j]);
				}
				if (pole2.length < 2) {
					if (ret.protocol == "HTTP") ret.port = 80;
					else if (ret.protocol == "FTP") ret.port = 21;
				}
			//path
			} else if (i < (pole1.length - 1) || (i == (pole1.length - 1) && buf.charAt(i3) == "/")) {
				buf1 += pole1[i] + "/";
			//document
			} else {
				ret.document = pole1[i];
			}
		}
		if (buf1 != "") ret.path = buf1;
		//query string
		var pole1 = buf2.split("&");
		for (var i = 0; i < pole1.length; i ++) {
			var param = "";
			var value = "";
			var pole2 = pole1[i].split("=");
			for (var j = 0; j < pole2.length; j ++) {
				if (j == 0) param = pole2[j];
				else if (j == 1) value = pole2[j];
			}
			if (param != "") ret.query[param] = value;
		}		
	}
	return ret;
}

//funkce na zjisteni URL (vc. QUERY_STRINGU)
function GetPageUrl(AWithoutServer, AWithoutPath)
{
	var cesta = ""
	if (IsClientSide()) {
		cesta = new String("" + document.URL).toLowerCase();
	} else {
		if (AWithoutServer == 1 || AWithoutServer == true) {
			if (AWithoutPath == 1 || AWithoutPath == true) {
				var buf = sv("URL") + "";
				cesta += buf.substring(buf.lastIndexOf("/") + 1);
			} else {
				cesta += sv("URL");
			}
		} else {
			cesta += "http://" + sv("SERVER_NAME") + sv("URL");
		}
		cesta = cesta.toLowerCase();
		if (new String("" + rs).length > 0) {
			cesta += "?" + sv("QUERY_STRING");
		}
	}
	return cesta;
}

//funkce na zjisteni webove cesty stranky
function GetPagePath()
{
	var cesta = ""
	if (IsClientSide()) {
		cesta += GetPageUrl();
	} else {
		cesta += "http://" + sv("SERVER_NAME") + sv("URL");
		cesta = cesta.toLowerCase();
	}
	var idx = cesta.lastIndexOf("/");
	cesta = cesta.substr(0, idx + 1);
	return cesta;
}

//funkce na pridani hodnoty do query stringu v zadanem URL        
function AddToUrl(url, property, value)
{
	var new_url = ""
	var s = new String("" + url)
	var i1 = s.indexOf("?")
	//url neobsahuje zadny query_string
	if (i1 < 0) {
		new_url = url + "?" + property + "=" + value
	//url obsahuje query_string
	} else {
		new_url = s.substr(0, i1);
		s = s.substr(i1 + 1, s.length)
		var pole = s.split("&");
		var vl = "";
		var qs = "";
		for (var i = 0; i < pole.length; i ++) {
			s = new String("" + pole[i]);
			i1 = s.indexOf("=")
			if (i1 >= 0) vl = s.substr(0, i1); else vl = s.valueOf();
			//porovnani property
			if (property != vl) {
				if (qs != "") qs += "&"; else qs += "?";
				qs += s.valueOf();
			}
		}
		if (qs != "") qs += "&"; else qs += "?";
		qs += property + "=" + value;
		new_url += qs;
	}
	return new_url;
}

//funkce na odstraneni parametru z query stringu v zadanem URL    
function DelFromUrl(url, property)
{
	var new_url = ""
	var s = new String("" + url)
	var i1 = s.indexOf("?")
	//url obsahuje query_string
	if (i1 >= 0) {
		new_url = s.substr(0, i1);
		s = s.substr(i1 + 1, s.length)
		var pole = s.split("&");
		var vl = "";
		var qs = "";
		for (var i = 0; i < pole.length; i ++) {
			s = new String("" + pole[i]);
			i1 = s.indexOf("=")
			if (i1 >= 0) vl = s.substr(0, i1); else vl = s.valueOf();
			//porovnani property
			if (property != vl) {
				if (qs != "") qs += "&"; else qs += "?";
				qs += s.valueOf();
			}
		}
		new_url += qs;
	} else {
		new_url = url;
	}
	return new_url;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Prace s poli
//-----------------------------------------------------------------------------------

function RemoveFromArray(AArray, AIndex) {
	for (var i = AIndex; i < (AArray.length - 1); i ++) {
		AArray[i] = AArray[i + 1];
	}
	AArray.length --;
}

function InsertToArray(AArray, AIndex, AValue) {
	for (var i = (AArray.length - 1); i >= AIndex; i --) {
		AArray[i + 1] = AArray[i];
	}
	AArray[AIndex] = AValue;
}

function IndexValueInArray(AValue, AArray) {
	var ret = -1;
	for (var i = 0; i < AArray.length; i ++) {
		if (AValue == AArray[i]) {
			ret = i;
			break;
		}
	}
	return ret;
}

function IsValueInArray(AValue, AArray) {
	var ret = false;
	if (IndexValueInArray(AValue, AArray) >= 0) ret = true;
	return ret;
}

function IsValuesInArray(AValues, AArray, AAll) {
	var ret = false;
	for (var i = 0; i < AValues.length; i ++) {
		//vse musi byt obsazeno
		if (AAll == null || AAll == 1 || AAll == true) {
			if (IsValueInArray(AValues[i], AArray)) ret = true;
			else return false;
		//alespon jeden
		} else {
			if (IsValueInArray(AValues[i], AArray)) return true;
		}
	}
	return ret;
}

function CopyArray(ASource) {
	var ret = new Array();
	for (var i = 0; i < ASource.length; i ++) ret[i] = ASource[i];
	return ret;
}

function JoinTwoArray(AArray1, AArray2) {
	var ret = new Array();
	for (var i = 0; i < AArray1.length; i ++) ret[ret.length] = AArray1[i];
	for (var i = 0; i < AArray2.length; i ++) ret[ret.length] = AArray2[i];
	return ret;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Prace s retezci
//-----------------------------------------------------------------------------------

function RandomStrByTable(ATable, ALen)
{
  var ret = "";
  var len = ATable.length - 1;
  if (isNaN(parseInt(ALen)) || ALen <= 0) ALen = 20;
  for (var i = 0; i < ALen; i ++) {
		var j = Math.round(Math.random() * len);
		ret += ATable.charAt(j);
	}
  return ret;
}

function RandomString(ALen)
{
  var tab = new String("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
	return RandomStrByTable(tab, ALen);
}

function RandomHEX(ALen)
{
  var tab = new String("0123456789ABCDEF");
	return RandomStrByTable(tab, ALen);
}

function ReplaceString(ABuf, AOldStr, ANewStr) {
	var tmp = "";
	if (ABuf == null) return tmp;
	var last_index = -1;
	var idx = ABuf.indexOf(AOldStr);
	while(idx >= 0) {
		var start = (last_index >= 0) ? last_index + AOldStr.length  : 0;
		tmp += ABuf.substring(start, idx) + ANewStr;
		last_index = idx;
		idx = ABuf.indexOf(AOldStr, idx + 1);
	}
	if (last_index >= 0) tmp += ABuf.substring(last_index + AOldStr.length);
	else tmp += ABuf;
	return tmp;
}

function ReplaceStrByTable(ABuf, ATable, AReverse) {
	var rev = (AReverse != null && (AReverse == 1 || AReverse == true)) ? true : false;
	var ret = ABuf;
	if (ABuf != null) {
		ret += "";
		for (var i = 0; i < ATable.length; i ++) {
			if (rev) {
				var n = ATable[i].split("|")[0];
				var o = ATable[i].split("|")[1];
			} else {
				var o = ATable[i].split("|")[0];
				var n = ATable[i].split("|")[1];
			}
			ret = ReplaceString(ret, o, n);
		}
	}
	return ret;
}


function ReplaceSQL(ABuf, AReverse) {
	//Definice nahrady znaku v resultu SQL
	var SQL_REPLACE = new Array();
	SQL_REPLACE[0] = "<|//sql0;";
	SQL_REPLACE[1] = ">|//sql1;";
	SQL_REPLACE[2] = String.fromCharCode(34) + "|//sql2;";
	//prevod
	return ReplaceStrByTable(ABuf, SQL_REPLACE, AReverse);
}

function ReplaceHTML(ABuf, AReverse) {
	//Definice nahrady znaku v HTML
	var HTML_REPLACE = new Array();
	HTML_REPLACE[0] = "<|&lt;";
	HTML_REPLACE[1] = ">|&gt;";
	HTML_REPLACE[2] = String.fromCharCode(34) + "|&quot;";
	//prevod
	return ReplaceStrByTable(ABuf, HTML_REPLACE, AReverse);
}

//testuje retezec zda je cislo  
function IsNum(AStr)
{
	var cmp = "0123456789";
	var str = new String("" + Astr + "")
	if (str.length > 0) {
		for (var i = 0; i < str.length; i++) {
			var tst = str.charAt(i);
			if (cmp.indexOf(tst) < 0) return false;
		}
		return true;
	} else {
		return false;
	}
}

//funkce pro zarovnani retezce zleva danymi znaky na danou delku
function LeftFillString(str, fillchar, newlength) {
  if (str == null) str = "";
	var stopidx = newlength - new String(str).length;
	var lstr = ""
  for (var i = 0; i < stopidx; i ++) lstr += fillchar;
	return new String(lstr + str);
}

//Zformatuje penize dle standardu
function Money(str)
{
	var buf = "";
	var tmp = FloatToSQL(str) + "";
	var idx = tmp.indexOf(".");
	var fl = "";
	if (idx >= 0) {
		fl = tmp.substr(idx + 1, tmp.length - idx);
		tmp = tmp.substr(0, idx);
	}
	var counter = 0;
	for (var i = (tmp.length - 1); i >= 0; i --) {
		buf = tmp.charAt(i) + buf;
		counter ++;
		if (counter == 3 && i != 0) {
			counter = 0;
			buf = " " + buf;
		}
	}
	if (fl == "") fl = ",00";
	else if (fl.length == 1) fl = "," + fl + "0";
	else fl = "," + fl;
	buf += fl;
	return buf;
}

//funkce na odradkovani souvisleho textu
function EnterString(ABuf, ALen, AEnter)
{
	var tmp = "";
	var len = parseInt(ALen)	
	if (ABuf == null || isNaN(ALen)) return ABuf;
	var ent = (AEnter != null) ? AEnter : "<br>";
	var buf = ABuf;
	while (buf != "") {
		tmp += buf.substring(0, len) + ent;
		buf = buf.substring(len); 
	}
	return tmp;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Prace s GUIDem
//-----------------------------------------------------------------------------------

//Funkce pro ziskani noveho jedinecneho oznaceni  
function GetGuid()
{
	try {
		if (IsClientSide()) {
			var ret = RandomHEX(8) + '-' + RandomHEX(4) + '-' + RandomHEX(4) + '-' + RandomHEX(4) + '-' + RandomHEX(12);
			return '{' + ret + '}';
		} else {
			var GuidObj = Server.CreateObject("Scriptlet.Typelib");
			var s = new String(GuidObj.guid);
			return "{" + s.substr(1, s.length - 4) + "}";
		}
	} catch(e) {
		return null;
	}
}

//Oreze z guidu zavorky { a }
function StripGuid(AGuid)
{
	try {
		var buf = new String("" + AGuid + "");
		if (buf.charAt(0) == '{') buf = buf.substring(1);
		if (buf.charAt(buf.length - 1) == '}') buf = buf.substring(0, buf.length - 1);
		return buf;
	} catch(e) {
		return AGuid;
	}
}

//funkce pro osekani guidu od zavorek a pomlcek (a zpet)
function CompressGuid(AGuid, AReverse)
{
	var ret = "";
	var str = new String("" + StripGuid(AGuid) + "");
	var rev = (AReverse != null && (AReverse == 1 || AReverse == true)) ? true : false;
	//decompress
	if (rev) {
		ret += '{' + str.substr(0, 8) + '-';
		ret += str.substr(8, 4) + '-';
		ret += str.substr(12, 4) + '-';
		ret += str.substr(16, 4) + '-';
		ret += str.substr(20, 12) + '}';
	//compress
	} else {
		for (var i = 0; i < str.length; i ++) {
			if (str.charAt(i) != '-') ret += str.charAt(i);
		}
	}
	return ret;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Prace s datem a casem
//-----------------------------------------------------------------------------------

//vraci jen datum z objektu Date
function Datum(D)
{
	try {
		var m = new String((D.getMonth() + 1));
		var d = new String(D.getDate());
		if (m.length == 1) m = "0" + m;
		if (d.length == 1) d = "0" + d;
		return (d + "." + m + "." + D.getFullYear());
	} catch(e) {
		return "";
	}
}

//vraci jen cas z objektu Date
function Cas(D, secs)
{
	try {
		D = new Date(D.valueOf() + 1);
		var h = new String(D.getHours());
		var m = new String(D.getMinutes());
		var s = new String(D.getSeconds());
		if (h.length == 1) h = "0" + h;
		if (m.length == 1) m = "0" + m;
		if (s.length == 1) s = "0" + s;
		if (secs || secs == null) {
			return (h + ":" + m + ":" +s);
		} else {
			return (h + ":" + m);
		}
	} catch(e) {
		return "";
	}
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Matematicke funkce
//-----------------------------------------------------------------------------------

//funkce na vypocet procent
function Percent(celkem, cast, rounded)
{
	var v = 0;
	var p = Math.abs(celkem) / 100;
	if (p != 0) {
		v = Math.abs(cast) / p;
		if (rounded != null && (rounded == 1 || rounded == true)) {
			v = Math.round(v);
		}
	}
	return v;
}

//funkce na zjisteni zda je cislo sude
function IsEvenNumber(ANum) {
	var zbytek = parseInt(ANum) % 2;
	if (zbytek == 0) return true;
	else return false;
}

//funkce na zjisteni zda je cislo liche
function IsOddNumber(ANum) {
	return !IsEvenNumber(ANum);
}


//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Pāevodni funkce
//-----------------------------------------------------------------------------------

//funkce na prevod jakehokoliv retezce na format pro SQL server
function StringToSQL(str)
{
	if (str == null || str == "") return str;
	//nadefinovani promennych
	var sada = "'%";
	var ret = str;
	var buf = new String("" + str);
	var tmp = "";
	try {
		//prevod retezce
		for (var a = 0; a < buf.length; a ++) {
			var znak = buf.charAt(a);
			if (sada.indexOf(znak) >= 0) znak += znak;
			tmp += znak;
		}
		ret = tmp;
	//nastala chyba
	} catch(e) {
		ret = str;
	}
	//vraceni stavu
	return ret;
}

//funkce na prevod desetinneho cisla na format pro SQL server
function FloatToSQL(flt)
{
	if (flt == null || flt == "") return flt;
	//nadefinovani promennych
	var sada = "0123456789.,";
	var ret = flt;
	var buf = new String("" + flt);
	var tmp = "";
	try {
		//prevod cisla
		for (var a = 0; a < buf.length; a ++) {
			var znak = buf.charAt(a);
			if (sada.indexOf(znak) >= 0) {
				if (znak == ",") znak = ".";
				tmp += znak;
			}
		}
		//dodatecna kontrola znaku
		if (tmp.length > 0) {
			if (tmp.charAt(0) == ".") tmp = tmp.substr(1, tmp.length - 1);
			if (tmp.charAt(tmp.length - 1) == ".") tmp = tmp.substr(0, tmp.length - 1);
		}
		ret = tmp;
	//nastala chyba
	} catch(e) {
		ret = flt;
	}
	//vraceni stavu
	return ret;
}

//nahrazuje apostrofy bezpecnymi znaky
//AStr ... retezec
//ATyp ... 0 - normal, 1 - java, 2 - html
function HandleParam(AStr, ATyp)
{
	var ret = "";
	var str = new String("" + AStr);
	if (ATyp == 1) {
		ret = ReplaceString(str, "'", "\\'");
		ret = ReplaceString(ret, "\r\n", "\\r\\n");
	} else if (ATyp == 2) {
		ret = ReplaceString(str, "\"", "&quot;");
	} else {
		ret = ReplaceString(str, "'", "''");
	}
	return ret;
}

//funkce na zjisteni datumu (object Date) dle retezce
//AFormat - 0 ... rok-mesic-den hod:min:sec
function ReadDate(ABuf, AFormat)
{
	if (ABuf == null || ABuf == "") return null;
	var tmp = eval("ABuf.split(/[ :.\\/-]/);");
	for (var i = 0; i < tmp.length; i ++) {
		tmp[i] = eval("tmp[i].replace(/^0*/, '');");
	}
	if (AFormat == 0) {
		var year = parseInt(tmp[0]);
		if (year < 100) {
			year = (year > 50) ? (1900 + year) : (2000 + year);
		}
		var month = !isNaN(parseInt(tmp[1])) ? parseInt(tmp[1]) - 1 : 0;
		var day = !isNaN(parseInt(tmp[2])) ? parseInt(tmp[2]) : 1;
		var hour = !isNaN(parseInt(tmp[3])) ? parseInt(tmp[3]) : 1;
		var minute = !isNaN(parseInt(tmp[4])) ? parseInt(tmp[4]) : 1;
		var second = !isNaN(parseInt(tmp[5])) ? parseInt(tmp[5]) : 1;
		var date = new Date(year, month, day, hour, minute, second);
		return (!isNaN(date) ? date : null);
	} else return null;
}

//funkce na prevod datumu z retezce do SQL
//!!! OLD - SMAZAT !!!
function ReadDate2(xs, l, format)
{
	try {
  	//l = language (1 = ceske prostredi, 2 = angl.prostredi)
  	if (xs == "") {
			if (format == null || format == 1) return "NULL";
			else return null;
		}
  	var s = new String("" + xs + "");
  	var d, t = null;
  	var s1, s2, s3, s4, s5, s6 = "";
  	s4 = s5 = s6 = null;
  	var dels = 0;
  	var j = 0;
  	for (i = 0; i <= s.length; i ++) {
			var ch = s.charAt(i);
    	if (ch == "/" || ch == " " || ch == "." || ch == ":" || i == s.length)
			{
      	if (dels == 0) s1 = Number(s.substring(j, i));
      	if (dels == 1) s2 = Number(s.substring(j, i));
      	if (dels == 2) s3 = Number(s.substring(j, i));
      	if (dels == 3) s4 = Number(s.substring(j, i));
      	if (dels == 4) s5 = Number(s.substring(j, i));
      	if (dels == 5) s6 = Number(s.substring(j, i));
      	dels ++;
      	j = i + 1;
			}
		}
		if (isNaN(s1) || isNaN(s2) || isNaN(s3) || isNaN(s4) || isNaN(s5) || isNaN(s6)) {
			if (format == null || format == 1) return "NULL";
			else return null;
		}
		s1 = LeftFillString(s1, "0", 2);
		s2 = LeftFillString(s2,"0",2);
		//je-li Number() roku mensi nez 100, jde o zadani 2 mistneho roku
	  if (s3 < 100)
		{
	    var i = s3;
 			//v pripade zadani 0x se pri Number() odstrani pocatecni nula
 	    s3 = new String(s3);
 			//takze ji opet pridame
 	  	s3 = LeftFillString(s3, "0", 2);
	    if (i < 50) s3 = "20" + s3;
	    else s3 = "19" + s3;
	  }
	  if (l == 1) d = s3 + "-" + s2 + "-" + s1;
	  else if (l == 2) d = s3 + "-" + s1 + "-" + s2;
	 	s4 = LeftFillString(s4, "0", 2);
		s5 = LeftFillString(s5, "0", 2);
		s6 = LeftFillString(s6, "0", 2);
	  t = s4 + ":" + s5 + ":" + s6;
	  if (format == null) return "{ts '" + d + " " + t + "'}";
		else if (format == 1) return d + " " + t;
		else {
			if (l == 1) return new Date(parseInt(s3), parseInt(s2) - 1, parseInt(s1), parseInt(s4), parseInt(s5), parseInt(s6));
			else if (l == 2) return new Date(parseInt(s3), parseInt(s1) - 1, parseInt(s2), parseInt(s4), parseInt(s5), parseInt(s6));
		}
	} catch(e) {
		if (format == null || format == 1) return "NULL";
		else return null;
	}
}

//funkce na zobrazeni data v HTML
function DateToHTML(dat, only_date)
{
	//nadefinovani promennych
	var ret = ""
	//vytvoreni retezce datumu
	if (dat != null && dat != "") {
		var d = new Date(dat);
		if (only_date != null && (only_date == 1 || only_date == true)) {
			ret = Datum(d);
		} else {
			ret = Datum(d) + " " + Cas(d);
		}
	}
	//vraceni vysledku
	if (ret == "") ret = "&nbsp;";
	return ret;
}

//funkce na prevod bytu na hex
function ByteHex(bt)
{
	var hex_list = "0123456789ABCDEF";
	if (bt != null && !isNaN(parseInt(bt))) {
		var code = parseInt(bt);
		var low = code & 0xF0;
		low >>= 4;
		var high = code & 0x0F;
		return(hex_list.charAt(low) + hex_list.charAt(high));
	} else {
		return "";
	}
}

//funkce na prevod wordu na hex
function WordHex(w)
{
	if (w != null && !isNaN(parseInt(w))) {
		var code = parseInt(w);
		var low = code & 0xFF00;
		low >>= 8;
		var high = code & 0x00FF;
		return(ByteHex(low) + ByteHex(high));
	} else {
		return "";
	}
}

//funkce na prevod znaku na hex
function CharHex(ch)
{
	if (ch != null && (new String("" + ch + "").length == 1)) {
		var buf = new String("" + ch + "");
		var code = parseInt(buf.charCodeAt(0));
		return WordHex(code);
	} else {
		return "";
	}
}

//funkce na prevod hex na byte
function HexByte(hx)
{
	var hex_list = "0123456789ABCDEF";
	if (hx != null && (new String("" + hx + "").length == 2)) {
		var buf = new String("" + hx + "");
		var low = hex_list.indexOf(buf.charAt(0));
		var high = hex_list.indexOf(buf.charAt(1));
		low <<= 4;
		var code = (0 | low) | high;
		return code;
	} else {
		return 0;
	}
}

//funkce na prevod hex na word
function HexWord(hx)
{
	if (hx != null && (new String("" + hx + "").length == 4)) {
		var buf = new String("" + hx + "");
		var low = HexByte(buf.substr(0, 2));
		var high = HexByte(buf.substr(2, 2));
		low <<= 8;
		var code = (0 | low) | high;
		return code;
	} else {
		return 0;
	}
}

//funkce na prevod hex na znak
function HexChar(hx)
{
	var hex_list = "0123456789ABCDEF";
	if (hx != null && (new String("" + hx + "").length == 2 || new String("" + hx + "").length == 4)) {
		var buf = new String("" + hx + "");
		if (buf.length == 2) var code = HexByte(buf);
		else if (buf.length == 4) var code = HexWord(buf);
		return String.fromCharCode(code);
	} else {
		return "";
	}
}

//funkce na prevod retezce na hexa
function StrHex(str)
{
	var v = "";
	if (str != null && str != "") {
		var buf = new String("" + str + "");
		for (var i = 0; i < buf.length; i ++) {
			v += CharHex(buf.charAt(i));
		}
	}
	return v;
}

//funkce na prevod hexa na retezec
function HexStr(str)
{
	var v = "";
	if (str != null && str != "") {
		var buf = new String("" + str + "");
		var dl = parseInt((buf.length / 4));
		for (var i = 0; i < dl; i ++) {
			v += HexChar(buf.substr((i * 4), 4));
		}
	}
	return v;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Kontrolni funkce
//-----------------------------------------------------------------------------------

//funkce na kontrolu data (jeho rozmezi)
//typ ... 0 - dlouhy (1900 - 9999) - vychozi, 1 - small (1970 - 2079)
//ret ... 0 - OK
//        1 - Nekorektni format
//        2 - Rok neni zadan v rozmezi 1900 - 9999
//        3 - Rok neni zadan v rozmezi 1970 - 2079
function CheckDate(dat, typ)
{
	var ret = 0;
	//nadefinovani promennych
	var t = (typ != null && typ == 1) ? 1 : 0;
	var min = (t == 1) ? 1970 : 1900;
	var max = (t == 1) ? 2079 : 9999;
	var d = ReadDate(dat, 1);
	var rok = 0;
	//kontrola data
	if (d != "NULL" && d != "" && d != null) {
		var i1 = d.indexOf("'");
		var i2 = d.indexOf("-");
		rok = parseInt(d.substr(i1 + 1, i2 - i1 - 1));
		if (!isNaN(rok)) {
			if (t == 1) {
				if (rok < min || rok > max) ret = 3;
			} else {
				if (rok < min || rok > max) ret = 2;
			}
		} else {
			ret = 1;
		}
	//nekorektni format
	} else {
		ret = 1;
	}
	//vraceni stavu
	return ret;
}

//funkce na kontrolu dvou datumu
//dat_min ... minimalni datum
//dat_check ... kontrolovane datum
function CheckTwoDate(dat_min, dat_check)
{
	//nadefinovani promennych
	var ret = false;
	var d1 = ReadDate(dat_min, 1);
	var d2 = ReadDate(dat_check, 1);
	//kontrola datumu
	if (d1 != "NULL" && d2 != "NULL") {
		//zjisteni stringu datumu a casu
		d1 = d1.substr(d1.indexOf("{") + 5, d1.indexOf("}") - d1.indexOf("{") - 6);
		d2 = d2.substr(d2.indexOf("{") + 5, d2.indexOf("}") - d2.indexOf("{") - 6);
		//rozdeleni zvlast na datum a cas
		var d1_date = d1.split(" ")[0]; var d1_time = d1.split(" ")[1];
		var d2_date = d2.split(" ")[0]; var d2_time = d2.split(" ")[1];
		//zjisteni udaju jako (rok, mesic, den, hodin, minut, sekund)
		var d1da = d1_date.split("-"); var d1ta = d1_time.split(":");
		var d2da = d2_date.split("-"); var d2ta = d2_time.split(":");
		//vytvoreni objektu "Date"
		var d_min = new Date(d1da[0], d1da[1], d1da[2], d1ta[0], d1ta[1], d1ta[2]);
		var d_check = new Date(d2da[0], d2da[1], d2da[2], d2ta[0], d2ta[1], d2ta[2]);
		//kontrola
		if (d_min.valueOf() <= d_check.valueOf()) ret = true;
	}
	//vraceni vysledku
	return ret;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... FUNKCE NA KONVERZI DO FORMATU CSV
//-----------------------------------------------------------------------------------

//funkce na prevod datumu do CSV
function DateToCSV(dat, only_date)
{
	//nadefinovani promennych
	var ret = ""
	//vytvoreni retezce datumu
	if (dat != null && dat != "") {
		var d = new Date(dat);
		if (only_date != null && (only_date == 1 || only_date == true)) {
			ret = Datum(d);
		} else {
			ret = Datum(d) + " " + Cas(d);
		}
	}
	//vraceni vysledku
	return ret;
}

//funkce na prevod libovolneho retezce do CSV
function StrToCSV(str)
{
	//nadefinovani promennych
	var ret = ""
	//kontrola pripustnych znaku
	if (str != null) {
		var buf = "";
		var tmp = new String(str + "");
		for (var i = 0; i < tmp.length; i ++) {
			if (tmp.charCodeAt(i) == 59) {
				buf += ",";
			} else {
				buf += tmp.charAt(i);
			}
		}
		ret = buf;
	}
	//vraceni vysledku
	return ret;
}

//test korektniho formatu e-mailu
function TestEmail(email)
{
	var ret = true;
	try {
		var zavinac = email.indexOf("@");
		var tecka = email.lastIndexOf(".");
		if (email != "") {
			if (zavinac < 1 || tecka > (email.length - 3) || tecka < 0 || ((zavinac + 2) > tecka)) ret = false;
		} else {
			ret = false;
		}
	} catch(e) {
		ret = false;
	}
	return ret;
}


