//<![CDATA[
/*
		SYSTÉMOVÉ FUNKCE
		
		- autor				: Tomáš Poles
		- created			: unknown
		- last update	: 2004-10-15
		- version			: 1.0.0
		- platform		: ASP on server, client browser
*/

function IsClientSide() {
	var ret = false;
	try {
		if (top != null && self != null) ret = true;
	} catch(e) {
		ret = false;
	}
	return ret;
}

function IsServerSide() {
	return !IsClientSide();
}

String.prototype.trim = function() {
	return this.replace(/(^\s*)|(\s*$)/g, "");
} 

//-----------------------------------------------------------------------------------
// 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 ... Obecné
//-----------------------------------------------------------------------------------

function ImportScript(AScriptSrc) {
	var tag = '<script language="JavaScript" src="' + AScriptSrc + '" ">';
  var script = document.createElement(tag);
	document.appendChild(script);
	return script;
}

//funkce na vytvoření 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;
}

//nastavení přední barvy (barvy textu) řádku tabulky
function SetTableRowColor(ARow, AColor) {
	for (var i = 0; i < ARow.cells.length; i ++) {
		ARow.cells[i].style.color = AColor;
	}
}

//nastavení barvy pozadí řádku tabulky
function SetTableRowBgColor(ARow, AColor) {
	for (var i = 0; i < ARow.cells.length; i ++) {
		ARow.cells[i].style.backgroundColor = AColor;
	}
}

//funkce na vyhledání tagu dle jména
function GetTag(AName)
{
	if (document.getElementById(AName) != null) return document.getElementById(AName);
	var temp = document.getElementsByName(AName);
	if (temp.length > 0) return temp[0];
	else return null;
}

//funkce na zjištění zda element je uvnitř jiného 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 dynamický zápis HTML do určitého místa stránky
//pozn.: použití zejména pro vlastní tagy (nejsou součástí HTML)
function InsertHTML(element, html)
{
		if (IS_IE) {
			element.outerHTML = html;
		} else {
			element.innerHTML = html;
		}
}

//funkce na dynamický připojení HTML k určitému místu stránky
//pozn.: použití zejména pro vlastní tagy (nejsou součástí HTML)
function AppendHTML(element, html)
{
		if (IS_IE) {
			element.outerHTML += html;
		} else {
			element.innerHTML += html;
		}
}

//funkce na zjištění obsahu daného tagu (i uživatelského)
function GetContent(element, skip_tags)
{
	var nodes = new Array();
	//pro IE
	if (IS_IE) {
		var skip = !isNaN(parseInt(skip_tags)) ? parseInt(skip_tags) : 0;
		var skiped = 0;
		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();
	//pro ostatní (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;
}

//nalezení elementů dle jména tagu
function GetElements(AName, ARel, ARecursion)
{
	var nodes = new Array();
	var t1 = (AName + "").toUpperCase();
	//... pro danou větev
	if (ARel != null) {
		for (var i = 0; i < ARel.childNodes.length; i ++) {
			var n = ARel.childNodes[i];
			var t2 = n.tagName;
			if (t2 != null && (t2 + "").toUpperCase() == t1) {
				nodes[nodes.length] = n;
			}
			if (ARecursion) {
				nodes = JoinTwoArray(nodes, GetElements(AName, n, true));
			}
		}
	//... všude
	} else {
		nodes = GetElements(AName, document.body, true);
	}
	return nodes;
}

//-----------------------------------------------------------------------------------
// CLIENT ... Práce s okny
//-----------------------------------------------------------------------------------

function OpenWindow(AUrl, AWidth, AHeight, AMenu, AScroll, AStatus, AName, ALeft, ATop, AsModal)
{
	var menu = (AMenu != null && AMenu != "") ? AMenu : "no";
	var scroll = (AScroll != null && AScroll != "") ? AScroll : "no";
	var status = (AStatus != null && AStatus != "") ? AStatus : "no";
	var name = (AName != null && AName != "") ? AName : "_blank";
	var left = (ALeft != null && ALeft != "") ? ",left=" + ALeft : "";
	var top = (ATop != null && ATop != "") ? ",top=" + ATop : "";
	if ((AsModal == 1 || AsModal == true || AsModal == "yes") && IS_IE_5_5) {
		return window.showModalDialog(AUrl, window, "dialogHeight: " + AHeight + "px; dialogWidth: " + AWidth + "px; edge: Raised; center: Yes; help: No; resizable: yes; status: " + status + "; scroll: " + scroll + ";");
	} else {
		return window.open(AUrl, name, "width=" + AWidth + ",height=" + AHeight + ",directories=no,location=no,menubar=" + menu + ",personalbar=no,resizable=yes,scrollbars=" + scroll + ",status=" + status + ",toolbar=no" + left + top);
	}
}

function ExistsOpener()
{
	var ret = (window.opener != null && window.opener != window);
	if (ret) {
		try {
			var tmp = window.opener.document;
		} catch(e) {
			ret = false;
		}
	}
	return ret;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Práce s obecnými hodnotami
//-----------------------------------------------------------------------------------

function IsNull(ATest, AValue)
{
	var undefined = (!ATest && (ATest + "").toLowerCase() == "undefined");
	return (ATest == null || undefined || (ATest + "") == "") ? AValue : ATest;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Práce s webovou stránkou
//-----------------------------------------------------------------------------------

//objekt parsovaného URL
function TUrl()
{
	this.protocol = null;
	this.server = null;
	this.port = null;
	this.path = null;
	this.document = null;
	this.query = new Array();
}

//funkce na rozparsování URL
function ParseUrl(AUrl)
{
	var ret = new TUrl();
	if (AUrl != null && AUrl != "") {
		var buf = AUrl;
		//zjištění indexů
		var i1 = buf.indexOf("//");
		var i2 = buf.indexOf("?", i1);
		var i3 = (i2 > 0) ? i2 - 1 : buf.length - 1;
		//rozkouskování
		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 zjištění URL (vč. 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 zjištění webové cesty stránky
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 přidání hodnoty do query stringu v zadaném URL        
function AddToUrl(url, property, value)
{
	var new_url = ""
	var s = new String("" + url)
	var i1 = s.indexOf("?")
	//url neobsahuje žádný 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();
			//porovnání 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 odstranění parametru z query stringu v zadaném 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();
			//porovnání property
			if (property != vl) {
				if (qs != "") qs += "&"; else qs += "?";
				qs += s.valueOf();
			}
		}
		new_url += qs;
	} else {
		new_url = url;
	}
	return new_url;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Práce 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 ++) {
		//vše musí být obsaženo
		if (AAll == null || AAll == 1 || AAll == true) {
			if (IsValueInArray(AValues[i], AArray)) ret = true;
			else return false;
		//alespoň 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(AFirst, ASecond)
{
	var ret = new Array();
	for (var i = 0; i < AFirst.length; i ++) ret[ret.length] = AFirst[i];
	for (var i = 0; i < ASecond.length; i ++) ret[ret.length] = ASecond[i];
	return ret;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Práce s řetězci
//-----------------------------------------------------------------------------------

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 náhrady znaků v resultu SQL
	var SQL_REPLACE = new Array();
	SQL_REPLACE[0] = "<|//sql0;";
	SQL_REPLACE[1] = ">|//sql1;";
	SQL_REPLACE[2] = String.fromCharCode(34) + "|//sql2;";
	//převod
	return ReplaceStrByTable(ABuf, SQL_REPLACE, AReverse);
}

function ReplaceHTML(ABuf, AReverse) {
	//Definice náhrady znaků v HTML
	var HTML_REPLACE = new Array();
	HTML_REPLACE[0] = "<|&lt;";
	HTML_REPLACE[1] = ">|&gt;";
	HTML_REPLACE[2] = String.fromCharCode(34) + "|&quot;";
	//převod
	return ReplaceStrByTable(ABuf, HTML_REPLACE, AReverse);
}

//testuje řetězec zda je číslo  
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);
}

//funkce na odřádkování souvislého 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;
}

//funkce pro vytvoření řetězce o počtu zadaných znaků příp. řetězců
function Replicate(AStr, APocet)
{
	var buf = "";
	for (var i = 0; i < APocet; i ++) buf += AStr;
	return buf;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Práce s cenami
//-----------------------------------------------------------------------------------

//Zformátuje peníze dle standardu
//AStr   ... vstup
//AFloat ... vložit desetinná místa
function Money(AStr, AFloat)
{
	var buf = "";
	var tmp = FloatToSQL(AStr) + "";
	var flt = "";
	var minus = (tmp.length > 0) ? (tmp.charAt(0) == "-") : false;
	var float_idx = tmp.lastIndexOf(".");
	if (minus) tmp = tmp.substring(1);
	if (float_idx >= 0) {
		flt = tmp.substring(float_idx + 1);
		if (float_idx == 0) tmp = ""; else tmp = tmp.substring(0, float_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 (minus) buf = "-" + buf;
	if (AFloat == 1 || AFloat == true || AFloat == null) {
		if (flt == "") buf += ",00";
		else if (flt.length == 1) buf += "," + flt + "0";
		else if (flt.length > 2) buf += "," + flt.substr(0, 2);
		else buf += "," + flt;
	}
	return buf;
}

//spočtení dorovnání konečné ceny dle nového zákona o DPH
//při zrušení 10 a 20 haléřových mincí
//AManipulate ... manipulační poplatek dle sazebníku
//ADiscount		... celková sleva na dokument
//APriceHigh	... celková cena bez DPH pro 19%
//APriceLow		... celková cena s DPH pro 5%
//APrice0			... celková cena s DPH pro 0%
function RoundPrice(APriceHigh, APriceLow, APrice0, AManipulate, ADiscount)
{
	//Response.Write("<hr>");
	//Response.Write("RoundPrice(" + APriceHigh + ", " + APriceLow + ", " + APrice0 + ", " + AManipulate + ", " + ADiscount + ")<br>");
	//Response.Write("<hr>");
	var j = -1;
	var AVAT = 0;
	var sign = (AManipulate == 0 ? 1 : -1);
	while (j != 0) {
		//... přepočet ceny bez DPH pro 19% na celkovou slevu
		var h = Math.ceil(((APriceHigh + (AVAT * sign)) - ((APriceHigh + (AVAT * sign)) * ADiscount)) * 10) / 10;
	  //... výpočet koncové ceny dokumentu
		var i = (Math.ceil(h * 11.9) / 10) + APriceLow + APrice0;
		//... je prepoctena koncova cena delitelna 50-ti?
		j = Math.floor((i - Math.floor(i)) * 100) % 50; 
		//... pokud ne tak přičtu desetník a zkouším to znova
     if (j != 0) AVAT = Math.round((AVAT + 0.1) * 10) / 10;
	}
   return (AManipulate == 0 ? AVAT : (AManipulate - AVAT));
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Práce s GUIDem
//-----------------------------------------------------------------------------------

//Funkce pro získání nového jedinečného označení  
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;
	}
}

//Ořeže z guidu závorky { 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 osekání guidu od závorek a pomlček (a zpět)
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 ... Práce s datem a časem
//-----------------------------------------------------------------------------------

//vrací 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 "";
	}
}

//vrací jen čas 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 ... Matematické funkce
//-----------------------------------------------------------------------------------

//funkce na výpočet 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 zjištění zda je číslo sudé
function IsEvenNumber(ANum) {
	var zbytek = parseInt(ANum) % 2;
	if (zbytek == 0) return true;
	else return false;
}

//funkce na zjištění zda je číslo liché
function IsOddNumber(ANum) {
	return !IsEvenNumber(ANum);
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Převodní funkce
//-----------------------------------------------------------------------------------

//funkce na převod jakéhokoliv řetězce na formát pro SQL server
function StringToSQL(str)
{
	if (str == null || str == "") return str;
	//nadefinování proměnných
	var sada = "'%";
	var ret = str;
	var buf = new String("" + str);
	var tmp = "";
	try {
		//převod řetězce
		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;
	}
	//vrácení stavu
	return ret;
}

//funkce na převod desetinného čísla na formát pro SQL server
function FloatToSQL(flt)
{
	if (flt == null || flt == "") return flt;
	//nadefinování proměnných
	var sada = "0123456789.,-";
	var ret = flt;
	var buf = new String("" + flt);
	var tmp = "";
	try {
		//převod čísla
		for (var a = 0; a < buf.length; a ++) {
			var znak = buf.charAt(a);
			if (sada.indexOf(znak) >= 0) {
				if (znak == ",") znak = ".";
				tmp += znak;
			}
		}
		//dodatečná kontrola znaků
		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;
	}
	//vrácení stavu
	return ret;
}

//Převádí řetěz nebo číslo na formát JavaScriptu (nejen Float, ale i Int)
function FloatToJS(value) {
  var s = new String("" + value + "");
	var s2 = "";
	for (var a = 0; a < s.length; a ++) {
		if (s.charAt(a) == ",") s2 += ".";
		else s2 += s.charAt(a);
	}
	return s2
}

//nahrazuje apostrofy bezpecnymi znaky
//AStr ... řetězec
//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;
}

//nahrazeni uvozovek za "entity"
function HandleXml(AString)
{
	var AString = new String("" + AString);
	var RString = ReplaceString(AString, "\"", "&quot;");
	RString = ReplaceString(AString, "<", "&lt;");
	RString = ReplaceString(AString, ">", "&gt;");
	return RString;
}

//funkce na převod datumu z řetězce do SQL
function ReadDate(xs, l, smallSQL, only)
{
	try {
  	//l = language (1 = ceske prostredi, 2 = angl.prostredi)
		//only = pouze (0 = rok, 1 = mesic, 2 = den)
  	if (xs == "") 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 == ":" || 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)) return "NULL";
		if (s2 < 1 || s2 > 12) return "NULL"; //nesmyslný měsíc
		if (s1 < 1 || s1 > 31) return "NULL"; //nesmyslný den
		if (s4 < 0 || s4 > 23) return "NULL"; //hodiny
		if (s5 < 0 || s5 > 59) return "NULL"; //minuty
		if (s6 < 0 || s6 > 59) return "NULL"; //sekundy
		//rok nebyl vyplnen, doplneni aktualniho
		if (parseInt(s3) == 0 || isNaN(s3)) {
			s3 = new Date().getFullYear();
		}
		//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;
	  }
		var dat = new Date(parseInt(s3), s2 - 1, s1) //kontrola na existující datum
		if (dat.getMonth() != (s2 - 1)) return "NULL"; //den přeskočil do dalšího měsíce
		s1 = LeftFillString(s1, "0", 2);
		s2 = LeftFillString(s2,"0",2);
	  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 (only == null) {
		  if (smallSQL == null) return "{ts '" + d + " " + t + "'}";
		  else if (smallSQL) return s3 + s2 + s1;
		  else return s1 + "." + s2 + "." + s3;
		} else {
			if (parseInt(only) == 0) return Number(s3);
			else if (parseInt(only) == 1) return Number(s2);
			else if (parseInt(only) == 2) return Number(s1);
		}
	} catch(e) {
		return "NULL";
	}
}

//funkce na zobrazení data v HTML
function DateToHTML(dat, only_date)
{
	//nadefinování proměnných
	var ret = ""
	//vytvoření řetězce 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);
		}
	}
	//vrácení výsledku
	if (ret == "") ret = "&nbsp;";
	return ret;
}

function DateToGMT(ADate)
{
	var ret = ADate.toGMTString();
	return ReplaceString(ret, "UTC", "GMT");
}

//funkce na převod 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 převod 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 převod znaku na hex
function CharHex(ch, unicode)
{
	if (ch != null && (new String("" + ch + "").length == 1)) {
		var buf = new String("" + ch + "");
		var code = parseInt(buf.charCodeAt(0));
		if (unicode == false || unicode == 0) {
			return ByteHex(code);
		} else {
			return WordHex(code);
		}
	} else {
		return "";
	}
}

//funkce na převod 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 převod 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 převod 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 převod řetězce na hexa
function StrHex(str, unicode)
{
	var v = "";
	if (str != null && str != "") {
		var buf = new String("" + str + "");
		for (var i = 0; i < buf.length; i ++) {
			v += CharHex(buf.charAt(i), unicode);
		}
	}
	return v;
}

//funkce na převod hexa na řetězec
function HexStr(str, unicode)
{
	var v = "";
	if (str != null && str != "") {
		var part = (unicode == false || unicode == 0) ? 2 : 4
		var buf = new String("" + str + "");
		var dl = parseInt((buf.length / part));
		for (var i = 0; i < dl; i ++) {
			v += HexChar(buf.substr((i * part), part));
		}
	}
	return v;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Kontrolní funkce
//-----------------------------------------------------------------------------------

//funkce na kontrolu data (jeho rozmezí)
//typ ... 0 - dlouhý (1900 - 9999) - výchozí, 1 - small (1970 - 2079)
//ret ... 0 - OK
//        1 - Nekorektní formát
//        2 - Rok není zadán v rozmezí 1900 - 9999
//        3 - Rok není zadán v rozmezí 1970 - 2079
function CheckDate(dat, typ)
{
	var ret = 0;
	//nadefinování proměnných
	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;
		}
	//nekorektní formát
	} else {
		ret = 1;
	}
	//vrácení stavu
	return ret;
}

//funkce na kontrolu dvou datumu
//dat_min ... minimální datum
//dat_check ... kontrolované datum
function CheckTwoDate(dat_min, dat_check)
{
	//nadefinování proměnných
	var ret = false;
	var d1 = ReadDate(dat_min, 1);
	var d2 = ReadDate(dat_check, 1);
	//kontrola datumů
	if (d1 != "NULL" && d2 != "NULL") {
		//zjištění stringu datumu a času
		d1 = d1.substr(d1.indexOf("{") + 5, d1.indexOf("}") - d1.indexOf("{") - 6);
		d2 = d2.substr(d2.indexOf("{") + 5, d2.indexOf("}") - d2.indexOf("{") - 6);
		//rozdělení zvlášť na datum a čas
		var d1_date = d1.split(" ")[0]; var d1_time = d1.split(" ")[1];
		var d2_date = d2.split(" ")[0]; var d2_time = d2.split(" ")[1];
		//zjištění údajů jako (rok, měsíc, den, hodin, minut, sekund)
		var d1da = d1_date.split("-"); var d1ta = d1_time.split(":");
		var d2da = d2_date.split("-"); var d2ta = d2_time.split(":");
		//vytvoření objektů "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;
	}
	//vrácení výsledku
	return ret;
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... FUNKCE NA KONVERZI DO FORMÁTU CSV
//-----------------------------------------------------------------------------------

//funkce na převod datumu do CSV
function DateToCSV(dat, only_date)
{
	//nadefinování proměnných
	var ret = ""
	//vytvoření řetězce 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);
		}
	}
	//vrácení výsledku
	return ret;
}

//funkce na převod libovolného řetězce do CSV
function StrToCSV(str)
{
	//nadefinování proměnných
	var ret = ""
	//kontrola přípustných znaků
	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;
	}
	ret = ReplaceString(ret, "\r\n", " ");
	//vrácení výsledku
	return ret;
}

//-----------------------------------------------------------------------------------
// CLIENT ... FUNKCE NA ZAŠKRTNUTÍ / VYŠKRTNUTÍ SEZNAMU CHECKŮ
//-----------------------------------------------------------------------------------
function CheckStateAll(AForm, AState, AName)
{
	var i = 1;
	var elm = null;
	var tmp = (AName != null && AName != "") ? AName : "check";
	while ((elm = eval("AForm." + tmp + i)) != null) {
		elm.checked = AState;
		i ++;
	}
}

//-----------------------------------------------------------------------------------
// CLIENT / SERVER ... Práce s objekty
//-----------------------------------------------------------------------------------

//vyčištění vlastností objektu
function ClearObject(AObject)
{
	for (var key in AObject) {
		eval("AObject." + key + " = null");
	}
}

//]]>