﻿//globalni promenne

var faqlen=0;
var faq=new Array();
faq.init=0;
var intentPRINT=false; //defaultne zalozi promennou. Pokud se tato pozdeji nastavi na true, stranky se prekonfiguruji pro tisk.
var printURL=""; //pro tisk dokumentu, tento content otevrit do noveho okna

var menu_cnt=0;	//globalni pocitadlo IDs v Lmenu - celkovy pocet polozek menu
var idRefsArr=new Array(); //prirazeni cnt hodnota > prvek v nejakem poli pro zpetne referencovani onclick do struktur..
var idRefsIdx=new Array(); //v idRefsArr je reference na pole, v idRefsIdx je cislo polozky
var menu_html="";	//obsah menu - innerhtml string
var menu_presel=-1; //preselektovana polozka - jeji menu_cnt
var menu_doPreselect=true; //pokud true, zustane preselektovana polozka zvyraznena v rozbalenem menu



//podpora tisku --------------
/*
var lct= document.location.href;
var prn_b= lct.search("intentPrint=");
if (prn_b>0) 
{
	var c=parseInt (a.substr (prn_b+12,2));
	if (c==1) intentPRINT=true;
}
*/
function printDoc()
{
	if (printURL=="")
	{
		alert ("Bohuzel, tento dokument nema definovanu verzi pro tisk. Omlouvame se.");
		return;
	}
	window.open("printDoc.php?content="+printURL,"tisk");
}
function printDocEng()
{
	if (printURL=="")
	{
		alert ("Sorry, this page has not printer friendly version defined.");
		return;
	}
	window.open("printDocEng.php?content="+printURL,"tisk");
}
//PRAVE MENU -------------
//po kliku na banner se vyvola odlinkovani na danou stranku..
//jen nahrada psani celeho URL stringu
function goBanner (content,browse)
{
	document.location.href="index.php?content="+content+"&browse="+browse;
}
function goBannerEng (content,browse)
{
	document.location.href="english.php?content="+content+"&browse="+browse;
}

//nahledove popup okno..
function printDocWindow(docurl,w,h)
{
	var a="directories=no, location=no, menubar=no, status=no, toolbar=no, resizable = yes, scrollbars=yes";
	if (w>0) a=a+" ,width="+w;
	if (h>0) a=a+" ,height="+h;
	window.open(docurl,"nahled",a,true);
}
//LEVE MENU --------------
//konstruktor polozky definice menu
function Litem (uid,nameString, childRef, urlLink)
{
	this.name=nameString;
	this.uid=uid;
	this.childArray=childRef;
	this.url=urlLink
}

function buildLeftMenu(preselect)
{
	menu_html="";
	menu_cnt=0;
	var i;
	for (i=0;i<Lmenu.length;i++)
	{
		menu_cnt++;id="id"+menu_cnt;Lmenu[i].cnt=menu_cnt;
		idRefsArr[menu_cnt]=Lmenu;idRefsIdx[menu_cnt]=i;
		menu_html=menu_html+"<div id='"+id+"' UNSELECTABLE='on' class='LmenuHead' onMouseOver=\"LM_Head('"+id+"',true)\" onMouseOut=\"LM_Head('"+id+"',false)\" onClick=\"LM_click("+menu_cnt+")\"><div class='LmenuHeadText' UNSELECTABLE='on'>"+Lmenu[i].name+"</div></div>";
		Lmenu[i].id=id;
		if (Lmenu[i].childArray!=null)
		{
			menu_cnt++;id="id"+menu_cnt;
			Lmenu[i].childRef=menu_cnt;
			Lmenu[i].childVis=false;
			//udelat subpanel
			menu_html+="<div class='LmenuPanel' style='display:none;' id='"+id+"'>";
			Lmenu[i].childArray.parentArr=Lmenu; //udelat zpetnou referenci
			Lmenu[i].childArray.parentIdx=i;
			LM_submenu (0,Lmenu[i].childArray)
			menu_html+="</div>";
		}
		//oddelovac hlavicek malou mezirkou
		if (i<Lmenu.length-1)
			menu_html+="<div style='width:170px; height:2px; overflow:hidden;'> </div>";
	}
	var mnu=document.getElementById("LeftMenu");
	mnu.innerHTML=menu_html;
	LM_Preselect (preselect);
}

function LM_submenu (level,defArray)
{
	defArray.level=level;
	var i;
	for (i=0;i<defArray.length;i++)
	{
		menu_cnt++;id="id"+menu_cnt;defArray[i].cnt=menu_cnt;
		idRefsArr[menu_cnt]=defArray;idRefsIdx[menu_cnt]=i;
		var clsBack,clsTxt;
		switch (level)
		{
			case 0: 
				if (defArray[i].childArray!=null)
					clsBack="LmenuItem0Closed";
				else
					clsBack="LmenuItem0Item";
				clsTxt="LmenuItem0Text";
				break;
			case 1: 
				if (defArray[i].childArray!=null)
					clsBack="LmenuItem1Closed";
				else
					clsBack="LmenuItem1Item";
				clsTxt="LmenuItem1Text";
				break;
			case 2: 
				if (defArray[i].childArray!=null)
					clsBack="LmenuItem2Closed";
				else
					clsBack="LmenuItem2Item";
				clsTxt="LmenuItem2Text";
				break;
			case 3: 
				clsBack="LmenuItem3Item";
				clsTxt="LmenuItem3Text";
				break;
		}
		var st="";
		if (defArray[i].childArray!=null)
			st+="font-weight: bold;";
		menu_html=menu_html+"<div id='"+id+"' UNSELECTABLE='on' style='"+st+"'class='"+clsBack+"' onMouseOver=\"LM_Item('"+menu_cnt+"',true)\" onMouseOut=\"LM_Item('"+menu_cnt+"',false)\" onClick=\"LM_click("+menu_cnt+")\"><div class='"+clsTxt+"' UNSELECTABLE='on'>"+defArray[i].name+"</div></div>";
		defArray[i].id=menu_cnt;
		if (defArray[i].childArray!=null)
		{
			menu_cnt++;id="id"+menu_cnt;
			defArray[i].childRef=menu_cnt;
			defArray[i].childVis=false;
			//udelat subpanel
			menu_html+="<div style='display:none;' id='"+id+"'>";
			defArray[i].childArray.parentArr=defArray; //udelat zpetnou referenci
			defArray[i].childArray.parentIdx=i;
			LM_submenu (level+1,defArray[i].childArray)
			menu_html+="</div>";
		}
	}
}



//vrati classname pro pozadi polozky submenu:
//selected - bool vybrany/pasivni
//level 0-3
//parentSub - toto je otec podmenu; showSub - podmenu je/neni zobrazeno
function LM_getBckClass (selected,level,parentSub,showSub)
{
	var clsBack;
	if (parentSub)
	{
		if (!showSub)
			switch (level)
			{
				case 0: 
					if (selected)
						clsBack="LmenuItem0ClosedS";
					else
						clsBack="LmenuItem0Closed";
					break;
				case 1: 
					if (selected)
						clsBack="LmenuItem1ClosedS";
					else
						clsBack="LmenuItem1Closed";
					break;
				case 2: 
					if (selected)
						clsBack="LmenuItem2ClosedS";
					else
						clsBack="LmenuItem2Closed";
					break;
				case 3: 
					if (selected)
						clsBack="LmenuItem3ClosedS";
					else
						clsBack="LmenuItem3Closed";
					break;
			}
		else
			switch (level)
			{
				case 0: 
					if (selected)
						clsBack="LmenuItem0OpenS";
					else
						clsBack="LmenuItem0Open";
					break;
				case 1: 
					if (selected)
						clsBack="LmenuItem1OpenS";
					else
						clsBack="LmenuItem1Open";
					break;
				case 2: 
					if (selected)
						clsBack="LmenuItem2OpenS";
					else
						clsBack="LmenuItem2Open";
					break;
				case 3: 
					if (selected)
						clsBack="LmenuItem3OpenS";
					else
						clsBack="LmenuItem3Open";
					break;
			}		
	}
	else
	{
		switch (level)
		{
			case 0: 
				if (selected)
					clsBack="LmenuItem0ItemS";
				else
					clsBack="LmenuItem0Item";
				break;
			case 1: 
				if (selected)
					clsBack="LmenuItem1ItemS";
				else
					clsBack="LmenuItem1Item";
				break;
			case 2: 
				if (selected)
					clsBack="LmenuItem2ItemS";
				else
					clsBack="LmenuItem2Item";
				break;
			case 3: 
				if (selected)
					clsBack="LmenuItem3ItemS";
				else
					clsBack="LmenuItem3Item";
				break;
		}
	}
	return clsBack;
}

//mouseOver polozky menuHeader
function LM_Head(id,state)
{
	
	if (state)
		setStyle(id,"LmenuHeadAct");
	else
		setStyle(id,"LmenuHead");
}
//mouseOver polozky submenu
function LM_Item(idx,state)
{
	if ((menu_doPreselect)&&(idx==menu_presel)) return; //na polozku preselektovanou nesahat
	var x=idRefsArr[idx];
	x=x[idRefsIdx[idx]];
	var level=idRefsArr[idx].level;
	var parentSub;
	if (x.childArray!=null) parentSub=true; else parentSub=false;
	clsBack=LM_getBckClass (state,level,parentSub,x.childVis)
	var a="id"+idx;
	setStyle(a,clsBack);
}
//mouseClick na nejakou polozku menu
function LM_click (idx)
{
	var x=idRefsArr[idx];
	var y;
	x=x[idRefsIdx[idx]];
	if (x.url!="")
	{
		 this.location.href=x.url;	//odnavigovat na dane url
		 return;	//pokud tady neni return, zahaji se nacitani stranky, ale pokud ta je parentem, dojde i k rozbaleni childu
	}
	if (idRefsArr[idx]==Lmenu)	//klik na root header, nutno zavrit ostatni panely
		if (!x.childVis)		//tento panel neni otevren, tedy vse zavrit..
		{
			var i;
			for (i=0;i<Lmenu.length;i++)
			{
				if (Lmenu[i].childRef)
				{
					y=document.getElementById("id"+Lmenu[i].childRef);
					Lmenu[i].childVis=false;
					y.style.display="none";
				}
			}
		}
	if (x.childRef)	//pokud root submenu, menu upravit..
	{	
		var y=document.getElementById("id"+x.childRef);
		if (!x.childVis)
		{
			x.childVis=true;
			y.style.display="block";
			if (idRefsArr[idx]!=Lmenu)
			{
				var a=LM_getBckClass (true,idRefsArr[idx].level,true,true);
				setStyle("id"+x.id,a);
			}
		}
		else
		{
			x.childVis=false;
			y.style.display="none";
			if (idRefsArr[idx]!=Lmenu)
			{
				var a=LM_getBckClass (true,idRefsArr[idx].level,true,false);
				setStyle("id"+x.id,a);
			}
		}
		return;
	}
}

function LM_Preselect (preselect)
{
	var retData=new Array;
	var r=LM_PreselSearch(preselect,Lmenu,retData);
	if (!r) return;	//nenalezeno v menu..
	if (retData.arr==Lmenu) return;	//protoze to je polozka rootu, tu nezvyraznujeme a nerozbalujeme
	
	LM_Item(retData.arr[retData.idx].cnt,true);
	menu_presel=retData.arr[retData.idx].cnt;
	do
	{
		var j=retData.arr.parentArr;
		var k=retData.arr.parentIdx;
		if (j!=Lmenu)
			retData.arr=retData.arr.parentArr;//pro dalsi rekurzi..
		var x=j[k];//konkretni prvek - otec
		x.childVis=true;
		var y=document.getElementById("id"+x.childRef);
		y.style.display="block";
		if (j!=Lmenu)
		{
			var a=LM_getBckClass (false,j.level,true,true);
			setStyle("id"+x.id,a);
		}
	} while (j!=Lmenu)
	
}

//najde dle uid polozku v poli - vrativ retdata 
function LM_PreselSearch(presel,arr,retData)
{
	var i;
	for (i=0;i<arr.length;i++)
	{
		if (arr[i].uid==presel)
		{
			retData.arr=arr;
			retData.idx=i;
			return true;
		}
		if (arr[i].childArray!=null)
		var j=LM_PreselSearch(presel,arr[i].childArray,retData);
		if (j) return true;
	}
	return false;
}

//nastavi URL obrazku s danym ID - pro rollover
function setImg(id,imgSrc) 
{
	//var a=document.getElementById(id);
	document[id].src = imgSrc;
}

function setStyle(id,style)
{
	var a=document.getElementById(id);
	if (a)
		a.className=style;
}

//FAQ support --------------------

//prida polozku do seznamu dotazu
function addFAQ (Head,Content)
{
	faq[faqlen]=new Array();
	faq[faqlen].hd=Head;
	faq[faqlen].cnt=Content;
	faqlen++;
}
//interni - volano po kliku na polozku
function faqClick(faqopen)
{
	if (!faq.init) return;
	if (intentPRINT) return; //v print preview zakazat nahodne zavreni textu..
	var t=document.getElementById("fb"+faqopen);
		q=t.style.display;
	if (t.style.display!="none")
		t.style.display="none";
	else
		t.style.display="block";
}
//volat pro otevreni vseho (a=1) nebo zavreni vseho (a=0)
function faqAll(a)
{
	var q;
	if (a) q="block"; else q="none";
	var i;
	for (i=0;i<faqlen;i++)
	{
		var t=document.getElementById("fb"+i);
		t.style.display=q;
	}
}
//volat v miste stranky, kde je treba dotazy zapsat.
//pravda je, ze vkladane HTML se deklaruje az zde ve funkci, ale zase je to jeden retezec pro cely web..
function writeFAQ()
{
	var i;
	faq.init=1;	//vse vypsano
	for (i=0;i<faqlen; i++)
		document.write ("<div class='INp' style='margin-bottom:4px;'><div class='INboldRed' id='fa"+i+"' style='cursor:pointer' onclick='faqClick("+i+")'  UNSELECTABLE='on'>"+faq[i].hd+" &raquo;</div><div style='display:none; margin-left:10px;' id='fb"+i+"' UNSELECTABLE='on'>"+faq[i].cnt+"</div></div>");
}

//WIZARD support ---------------------------
var WIZ_CHECKBOX=0;
var WIZ_RADIO=1;
var WIZ_TEXT=2;
var WIZ_POPUP=3;


function setWIZARD(paridHeader, paridTable, paridForm, paridBack, paridAhead, parhtmlBack, parhtmlAhead, partableHTML, parformHTML, parfilterprefix,parnumsteps)
{
	this.IDs=new Array();
	this.IDs.header=paridHeader;
	this.IDs.table=paridTable;
	this.IDs.form=paridForm;
	this.IDs.goback=paridBack;
	this.IDs.goahead=paridAhead;
	this.HTMLback=parhtmlBack;
	this.HTMLahead=parhtmlAhead;
	this.tableHTML=partableHTML;
	this.formHTML=parformHTML;
	this.activeStep=0;
	this.numSteps=parnumsteps;//pocet kroku ve wizardu. Bohuzel se neda snadno zjistit pres lenght :(
	this.filterprefix=parfilterprefix;//toto se vlozi pred zvolene filtry vzdy. Napr pokud je wizard v sekci kopirky, potom se sem da, ze fce kopirovani je nutna a v parametrech se delaji nasledne filtrace kvalit kopirky.
}

function setWIZARD_STEP(parheader,parcomment,parLoadevaluateFunc,parFWDevaluateFunc,parBCKevaluateFunc)
{
	this.header=parheader;
	this.comment=parcomment;
	this.objects=new Array();
	this.evaluateFuncFWD=parFWDevaluateFunc;	//string pro evaluate() - pokud vrati false, nejde se dale (alert, co opravit, musi hodit sama fce!) - MUSI byt urceno, pokud lze jit vpred!
	this.evaluateFuncBCK=parBCKevaluateFunc;	//dtto pro kliknuti na BACK button
	this.evaluateFuncLoad=parLoadevaluateFunc;	//onload fce - po zkonstruovani dialogu se vola toto
}

function setWIZARD_STEP_ITEM(parname,parvalue, partype, parischecked, parcomment,parfilter)
{
	this.value=parvalue;
	this.type=partype;
	this.ischecked=parischecked;
	this.comment=parcomment;
	this.name=parname;
	if (partype==WIZ_POPUP)
		this.option=new Array();
	this.filter=parfilter;	
		//tohle je bud string - pokud je dana polozka check/radio zvolena, tak se tam vpastuje cely
		//                                            popup - potom parfilter ma byt pole stringu a vlozi se ten, ktery odpovida indexu vybraneho option
}

function setWIZARD_ITEM_OPTION(parvalue, parcontent)
{
	this.value=parvalue;
	this.content=parcontent;
}

var currWizard;	//reference na aktualne zobrazeny wizard kvuli wizardBack a Ahead..

//provede pruvodce - dta je reference na definicni strukturu
function wizardDo(dta, page)
{
	currWizard=dta;
	dta.activeStep=page;
	var a=eval(dta.IDs.header);a.innerHTML=dta[dta.activeStep].header;
	spc=eval(dta.IDs.table);
	spc.style.display="none";
	var q="";
	q=dta[dta.activeStep].comment+dta.formHTML+dta.tableHTML;
	var i;
	for (i=0;i<dta[dta.activeStep].objects.length;i++)
	{
		q+="<tr><td valign='top' align='right'>";
		switch (dta[dta.activeStep].objects[i].type)
		{
		case WIZ_RADIO:
			q+="<input name='"+dta[dta.activeStep].objects[i].name+"' id='+dta[dta.activeStep].objects[i].name+' type='radio' value='"+dta[dta.activeStep].objects[i].value+"'";
			if (dta[dta.activeStep].objects[i].ischecked) q+=" checked>"; else q+=">";
			break;
		case WIZ_CHECKBOX:
			q+="<input name='"+dta[dta.activeStep].objects[i].name+"' id='+dta[dta.activeStep].objects[i].name+' type='checkbox' value='"+dta[dta.activeStep].objects[i].value+"'";
			if (dta[dta.activeStep].objects[i].ischecked) q+=" checked>"; else q+=">";
			break;
		/*
		case WIZ_TEXT:
			q+="<input name='"+dta[dta.activeStep].objects[i].name+"' id='+dta[dta.activeStep].objects[i].name+' type='text' value='"+dta[dta.activeStep].objects[i].value+"'";
			if (dta[dta.activeStep].objects[i].ischecked) q+=" checked>"; else q+=">";
			break;
		*/
		case WIZ_POPUP:
			q+="<select name='"+dta[dta.activeStep].objects[i].name+"' id='+dta[dta.activeStep].objects[i].name+'>";
			var j;
			for (j=0;j<dta[dta.activeStep].objects[i].option.length;j++)
			{
				if (dta[dta.activeStep].objects[i].option[j].value==dta[dta.activeStep].objects[i].value)
					q+="<option selected value='"+dta[dta.activeStep].objects[i].option[j].value+"'>"+dta[dta.activeStep].objects[i].option[j].content+"</option>";				
				else
					q+="<option value='"+dta[dta.activeStep].objects[i].option[j].value+"'>"+dta[dta.activeStep].objects[i].option[j].content+"</option>";
			}
			q+="</select>";
			break;				
		}
		q+="</td><td align='left' valign='top'>"+dta[dta.activeStep].objects[i].comment;
		q+="</td></tr>";
	}
    q+="</table></form>";
	spc.innerHTML=q;
	spc.style.display="block";
	if (dta[dta.activeStep].evaluateFuncBCK!="") {var a=eval(dta.IDs.goback); a.innerHTML="<a href='javascript:wizardBack()'>"+dta.HTMLback+'</a>';} else {var a=eval(dta.IDs.goback); a.innerHTML="&nbsp;"}
	if (dta[dta.activeStep].evaluateFuncFWD!="") {var a=eval(dta.IDs.goahead); a.innerHTML="<a href='javascript:wizardAhead()'>"+dta.HTMLahead+'</a>';} else {var a=eval(dta.IDs.goahead); a.innerHTML="&nbsp;"}
	if (dta[dta.activeStep].evaluateFuncLoad!="") eval (dta[dta.activeStep].evaluateFuncLoad); //provest onload formu..
}

function wizardReadForm() //pro zaneseni vysledku aktualne zobrazeneho formu do struktur
{
	var i;
	frm=currWizard.IDs.form;
	for (i=0;i<currWizard[currWizard.activeStep].objects.length;i++)
	{
		switch (currWizard[currWizard.activeStep].objects[i].type)
		{
		case WIZ_RADIO:
			var e=eval("document."+currWizard.IDs.form+"."+currWizard[currWizard.activeStep].objects[i].name);
			for (j=0;j<e.length;j++)
			{
				if (e[j].checked)
					if (currWizard[currWizard.activeStep].objects[i].value==e[j].value) currWizard[currWizard.activeStep].objects[i].ischecked=true; else currWizard[currWizard.activeStep].objects[i].ischecked=false;
			}
			break;
		case WIZ_CHECKBOX:
			var e=eval("document."+currWizard.IDs.form+"."+currWizard[currWizard.activeStep].objects[i].name);
			currWizard[currWizard.activeStep].objects[i].ischecked=e.checked;
			break;
		/*
		case WIZ_TEXT:
			var e=eval("document."+currWizard.IDs.form+"."+currWizard[currWizard.activeStep].objects[i].name);
			currWizard[currWizard.activeStep].objects[i].value=e.value;		
			break;
		*/
		case WIZ_POPUP:
			var e=eval("document."+currWizard.IDs.form+"."+currWizard[currWizard.activeStep].objects[i].name);
			currWizard[currWizard.activeStep].objects[i].value=e.value;		
			break;						
		}
	}
}

function wizardSubmit()	//provede seskladani noveho nastaveni filtru a posle je serveru..
{
	var flt=currWizard.filterprefix;
	var i,j;
	for (i=0;i<currWizard.numSteps;i++)
	{
			for (j=0;j<currWizard[i].objects.length;j++)
			{
				var a="";
				switch (currWizard[i].objects[j].type)
				{
				case WIZ_RADIO:
				case WIZ_CHECKBOX:
					if(currWizard[i].objects[j].ischecked) a=currWizard[i].objects[j].filter;
					break;
				case WIZ_POPUP:
					var w;
					for (w=0;w<currWizard[i].objects[j].option.length;w++)
					{
						if (currWizard[i].objects[j].option[w].value==currWizard[i].objects[j].value)
							a=currWizard[i].objects[j].filter[w];
					}
					break;						
				}
				if ((flt!="")&&(a!="")) flt=flt+",";
				flt+=a;
			}
	}
	//alert (flt);
	flt=enc64(flt);	//base64 enc..
	//alert (referringPage+"&setfilter="+flt)
	document.location.href=referringPage+"&setfilter="+flt;
}

function wizardBack() //pro async volani eval stringu tlacitka back
{
	eval (currWizard[currWizard.activeStep].evaluateFuncBCK);
}

function wizardAhead() //pro async volani eval stringu tlacitka ahead
{
	eval (currWizard[currWizard.activeStep].evaluateFuncFWD);
}

//QUICKSELECT SUPPORT-------------
function qsItem(Type,Id,Val,filterstring)
{
	this.type=Type;
	this.id=Id;
	this.val=Val;
	this.flt=filterstring;
	return this;
}

function qsSubmit()
{
	var i;
	var f=qselprefix;//sem se sklada string filtru
	if (f!="") f+=",";
	for (i=0;i<qsel.length;i++)
	{
		var e=eval("document.qsForm."+qsel[i].id);
		switch (qsel[i].type)
		{
			case WIZ_CHECKBOX:
				if (e.checked)
				{
					f=f+qsel[i].flt+",";
				}
				break;
			case WIZ_RADIO:
				var j;
				for (j=0;j<e.length;j++)
				{		
					if ((e[j].value==qsel[i].val)&&(e[j].checked))
					{
						f=f+qsel[i].flt+",";
					}
				}
				break;
			case WIZ_TEXT:
				if (e.value!="")
				{
					var w=e.value;
					re = new RegExp('"',"g");
					w=w.replace(re,"");
					re = new RegExp("'","g");
					w=w.replace(re,"");//vyhodit " a ' ze stringu nasilim, nema to tam co delat.
					f=f+qsel[i].flt+",\""+w+"\",";
				}
				break;
			case WIZ_POPUP:
				if (e.value==qsel[i].val)
				{
						f=f+qsel[i].flt+",";
				}
				break;
		}
	}
	if (f!="")
		f=f.substring(0,f.length-1); //zahodit posledni carku
	//alert (f);
	
	f=enc64(f);	//base64 enc..
	referringPage=document.location.href;
	//alert (referringPage+"&setfilter="+f)
	document.location.href=referringPage+"&setfilter="+f;
}

//FILTRY--------------------------
//base64 encoding

var enc64strInput;
var enc64cntr;
var flagEOF = -1;
var enc64tbl = new Array(
'A','B','C','D','E','F','G','H',
'I','J','K','L','M','N','O','P',
'Q','R','S','T','U','V','W','X',
'Y','Z','a','b','c','d','e','f',
'g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v',
'w','x','y','z','0','1','2','3',
'4','5','6','7','8','9','+','/');

function expandUnicode(rohtext) {
     rohtext = rohtext.replace(/\r\n/g,"\n");
     var utftext = new Array();
     for(var n=0; n<rohtext.length; n++)
         {
         var c=rohtext.charCodeAt(n);
         if (c<128)
             utftext[utftext.length] = c;
         else if((c>127) && (c<2048)) 
             {
             utftext[utftext.length] = (c>>6)|192;
             utftext[utftext.length] = (c&63)|128;
             }
         else 
         	   {
             utftext[utftext.length] = (c>>12)|224;
             utftext[utftext.length] = ((c>>6)&63)|128;
             utftext[utftext.length] = (c&63)|128;
             }
         }
     return utftext;
 }

function readIn(){    
    if (!enc64strInput) return flagEOF;
    if (enc64cntr >= enc64strInput.length) return flagEOF;
    //var c = enc64strInput.charCodeAt(enc64cntr) & 0xff;
    var c=enc64strInput[enc64cntr];
    enc64cntr++;
    return c;
}

function enc64(dta){
    enc64strInput = dta;
    enc64strInput=expandUnicode(enc64strInput);
    enc64cntr = 0;
    var enc64strOuptput = '';
    var b = new Array(3);
    var lineCount = 0;
    var done = false;
    while (!done && (b[0] = readIn()) != flagEOF){
        b[1] = readIn();
        b[2] = readIn();
        enc64strOuptput += (enc64tbl[ b[0] >> 2 ]);
        if (b[1] != flagEOF){
            enc64strOuptput += (enc64tbl [(( b[0] << 4 ) & 0x30) | (b[1] >> 4) ]);
            if (b[2] != flagEOF){
                enc64strOuptput += (enc64tbl [((b[1] << 2) & 0x3c) | (b[2] >> 6) ]);
                enc64strOuptput += (enc64tbl [b[2] & 0x3F]);
            } else {
                enc64strOuptput += (enc64tbl [((b[1] << 2) & 0x3c)]);
                enc64strOuptput += ('=');
                done = true;
            }
        } else {
            enc64strOuptput += (enc64tbl [(( b[0] << 4 ) & 0x30)]);
            enc64strOuptput += ('=');
            enc64strOuptput += ('=');
            done = true;
        }
    }
    return enc64strOuptput;
}



//prelozit pid na indexy do pole
function translateFilterID(i)
{
	var j;var q;
	q=-1;	//pojistka proti chybnemu zadani filtru
	for (j=0;j<filterDefs[filterCategory].length;j++)
	{
		if (filterDefs[filterCategory][j].pid==activeFilters[i][0])
		{
			activeFilters[i][0]=j;q=j;
			break;
		}
	}
	if (q==-1) activeFilters[i][0]=0;
}

function loadParams()
{
	var i;
	var typ;
	var j=0;
	var k,l=0;
	if (currentFilters=="") return -1;	//prazdno, zadny nastaveny
	if (filterDefs[filterCategory]==null) return -1;	//tohle je kategorie, ktera nema vubec definici pro filtry, proto nic nedelat..
	var curFilterSplit= currentFilters.split(",");	//verime vstupu a nekontrolujeme, co prislo..
	for (i=0;i<curFilterSplit.length/3;i++)
	{
		activeFilters[i]=new Array();
		activeFilters[i][0]=curFilterSplit[j];j++;
		translateFilterID(i);
		typ=filterDefs[filterCategory][activeFilters[i][0]].type;
		switch (typ)
		{
			case FILTER_VALUE:
				activeFilters[i][1]=curFilterSplit[j];j++;
				if (activeFilters[i][1]!=FILTER_OpInInterval)
				{
					activeFilters[i][2]=parseFloat(curFilterSplit[j].substring(1,100));
					if (isNaN(activeFilters[i][2])) activeFilters[i][2]="(chybná hodnota)";	//pojistka proti nesmyslnemu zadani
					j++;
				}
				else 
				{	//pokud je to interval, ceka se neco jako 100-200
					activeFilters[i][2]=curFilterSplit[j].substring(1,curFilterSplit[j].length-1);j++;
				}	
				break;
			case FILTER_STRING:
				activeFilters[i][1]=curFilterSplit[j];j++;
				activeFilters[i][2]=curFilterSplit[j].substring(1,curFilterSplit[j].length-1);j++; //uvozovky pryc
				if (activeFilters[i][2]=="") activeFilters[i][2]="(prázdný řetězec)";
				break;	
			case FILTER_BOOL:
				activeFilters[i][1]=0;j++;	//vzdy isEqual
				if (parseInt(curFilterSplit[j].substring(1,100))==0) activeFilters[i][2]=false; else activeFilters[i][2]=true;
				j++; 
				break;
			case FILTER_OPTION:	
				activeFilters[i][1]=curFilterSplit[j];j++; //operator
				if ((activeFilters[i][1]==FILTER_OpContain)||(activeFilters[i][1]==FILTER_OpNotContain))	//hledame substringy v polozce
				{
					var l=0;
					var srcStr=curFilterSplit[j].substring(1,curFilterSplit[j].length-1);	//retezec vytazeny z dodaneho stringu parametru
					for (k=0;k<filterDefs[filterCategory][activeFilters[i][0]].optionValue.length;k++)
					{
						var w = filterDefs[filterCategory][activeFilters[i][0]].optionOperator[k];
						if ((w!=FILTER_OpContain)&&(w!=FILTER_OpNotContain)) continue;	//porovnavat jen polozky listu, u kterych je uveden operator OBSAHUJE/NEOBSAHUJE
							//kombinace hodnota "" a operator FILTER_OpEq pouzivane pro hledani 'NE' se nesmi do prochazeni seznamu zahrnout, protoze "" je nalezeno vzdy jako match
						var fltStr=filterDefs[filterCategory][activeFilters[i][0]].optionValue[k]; //retezec vytazeny z deklarace daneho filtru - hledat ho v srcStr
						if (srcStr.indexOf(fltStr)!=-1) // && (activeFilters[i][1]==filterDefs[filterCategory][activeFilters[i][0]].optionOperator[k]))
						{
							activeFilters[i][2]=filterDefs[filterCategory][activeFilters[i][0]].option[k];
							activeFilters[i][3]=k;	//u OPTION je v [3] cislo volby (-1, pokud nema text v options zadny match), v [2] je textovy popis te volby
							l=1;
							break;
						}
					}			
					if (l==0)
					{ 
						activeFilters[i][2]=curFilterSplit[j].substring(1,curFilterSplit[j].length-1);	//problem, nenastal match stringu s nejakou z moznosti z pole. Dosadit primo retezec z filtru
						activeFilters[i][3]=-1;
					}
				}
				else	//tj asi rovna se, nerovna se..
				{
					activeFilters[i][2]=curFilterSplit[j].substring(1,curFilterSplit[j].length-1); //uvozovky pryc
					if (activeFilters[i][2]=="") activeFilters[i][2]="(prázdný řetězec)";
				}
				j++;
				
				break;
		}
	}

}

function mapFltCategory(cat)
{
	if (FilterSubst[cat]!=null)
		return FilterSubst[cat];
	else 
		return -1;	//timhle to natuty zablokujeme, neni premapovani mozne
}