	/**
	 * Funkce pro ošetření AJAX požadavku
	 *
	 * @param string req_url - URL skriptu, který připravuje data
	 * @param string req_func - název funkce, která zpracuje data vrácená z volaného URL
	 * @param req_content - data, která se předávají skriptu - platí pro POST metodu, v případě GET se data předávají přímo v URL
	 * @param req_method string - POST nebo GET
	 */
	function xmlRequest(req_url, req_func, req_content, req_method) {

		if (window.XMLHttpRequest) {
			xmlReq = new XMLHttpRequest();
		} else if (window.ActiveXObject) {
		  try {
		    xmlReq = new ActiveXObject("Msxml2.XMLHTTP");
		  } catch (eror) {
		    xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
		  }
		}

		xmlReq.onreadystatechange = function() {
			if (xmlReq.readyState == 4) {
				if (xmlReq.status == 200) {
	        req_func(xmlReq);
				} else {
					alert("Bad response:" + xmlReq.status);
				}
			}
    }
    
    if (!req_method)  req_method  = 'GET';
    if (!req_content) req_content = '';
    
    xmlReq.open(req_method,req_url,true);
    
    if (req_method == 'POST') {
			xmlReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		}

    xmlReq.send(req_content);

    return true;
  }
  
  

	/**
	 * Funkce pro zpracování výstupu XML requestu
	 *
	 */
	function xmlRequestJson(xmlReq) {
		var jsonData = new Function("return " + xmlReq.responseText)();
		return jsonData;
  }



	/**
	 * Funkce provede změnu spřažených selectů
	 * na základě dat získaných z dataového skriptu
	 */
	function changeSelects(xmlReq) {
		// data XML requestu se převedou pomocí JSON na asociativní pole
		var selectsData = xmlRequestJson(xmlReq);
		
		for (var i in selectsData) {
			currentSelect = document.getElementById(i);

			// odstranění všech existujícího položek selectu s výjimkou první
			while (currentSelect.options.length > 1) {
        currentSelect.options[currentSelect.options.length-1] = null;
			}
			
			// naplnění selectu novými položkoami
			for (j in selectsData[i]) {
				currentSelect.options[currentSelect.options.length] = new Option(selectsData[i][j], j, false, true);
			}
			
			// nastavení selectu na první položku
			currentSelect.selectedIndex = 0;
		}
	}
	


	/**
	 * Funkce, která inicalizuje změnu spřažených selectů
	 * po změně některého z nich
	 *
	 */
	function updateSelect(xmlRequestUrl) {
		var currentSelect;
		var requestQuery = [];

		// filtrační formulář
		var filterForm = document.getElementById('filterForm');
		
		// všechny selecty ve formuláři
		var filterSelects = filterForm.getElementsByTagName('select');

		// procházíme a zjišťujeme jejich hodnotu
		for (var i=0; i<filterSelects.length; i++) {
			currentSelect = filterSelects[i];
			if (currentSelect.options[currentSelect.selectedIndex].value != "") {
				requestQuery[requestQuery.length] = currentSelect.name + "=" + encodeURI(currentSelect.value);
			}
		}

		// sestavíme konečnou podobu URL pro AJAX požadavek
		xmlRequestUrl += "?" + requestQuery.join("&");
		
		// zavoláme funkci pro zpracování AJAX požadavku
		xmlRequest(xmlRequestUrl,changeSelects);
	}
