		/** Odeslání XMLHttp požadavku
		* @param Function state_change funkce zajišťující obsluhu při změně stavu požadavku, dostane parametr s XMLHttp objektem
		* @param string method GET|POST|...
		* @param string url URL požadavku
		* @param string [content] tělo zprávy
		* @param object [headers] předané hlavičky ve tvaru { 'hlavička': 'obsah' }
		* @return boolean true v případě úspěchu, false jinak
		* @copyright Jakub Vrána, http://php.vrana.cz
		*/
		function send_xmlhttprequest(state_change, method, url, content, headers) {
		    var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
		    if (!xmlhttp) {
		        return false;
		    }
		    xmlhttp.open(method, url);
		    xmlhttp.onreadystatechange = function () {
		        state_change(xmlhttp);
		    };
		    headers = headers || {};
		    headers['X-Requested-With'] = headers['X-Requested-With'] || 'XMLHttpRequest';
		    for (var key in headers) {
		        xmlhttp.setRequestHeader(key, headers[key]);
		    }
		    xmlhttp.send(content);
		    return true;
		}
		
		/** Odeslání formuláře přes XMLHttp požadavek
		* @param function state_change funkce zajišťující obsluhu při změně stavu požadavku, dostane parametr s XMLHttp objektem
		* @param string url URL požadavku
		* @param object form formulář k odeslání
		* @param object [headers] předané hlavičky ve tvaru { 'hlavička': 'obsah' }
		* @return boolean true v případě úspěchu, false jinak
		* @copyright Jakub Vrána, http://php.vrana.cz
		*/
		function post_xmlhttprequest(state_change, url, form, headers) {
		    var elements = form.elements;
		    var content = [];
		    for (var i=0; i < elements.length; i++) {
		        if (elements[i].attributes.name && elements[i].attributes.name.specified && !elements[i].disabled) {
		            if (/^(select)$/i.test(elements[i].tagName)) {
		                var options = elements[i].options;
		                for (var j=0; j < options.length; j++) {
		                    if (options[j].selected) {
		                        var value = (options[j].attributes.value && options[j].attributes.value.specified ? options[j].value : options[j].text);
		                        content.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(value));
		                    }
		                }
		            } else if (!/^(submit|reset|button|file|image)$/i.test(elements[i].type) && (!/^(radio|checkbox)$/i.test(elements[i].type) || elements[i].checked)) {
		                content.push(encodeURIComponent(elements[i].name) + '=' + encodeURIComponent(elements[i].value));
		            }
		        }
		    }
		    if (!headers) {
		        headers = {};
		    }
		    headers['Content-Type'] = 'application/x-www-form-urlencoded';
		    return send_xmlhttprequest(state_change, 'POST', url, content.join('&'), headers);
		}
		
		function odeslat(form) {
		    document.getElementById('cena').innerHTML = '...';
		    document.getElementById('cena_dph').innerHTML = '...';
		    return post_xmlhttprequest(function (xmlhttp) {
		        if (xmlhttp.readyState == 4) {
		            document.getElementById('cena_dph').innerHTML = xmlhttp.responseText;
		            document.getElementById('cena').innerHTML = Math.round(Number(xmlhttp.responseText)*1.19);
		        }
		    }, ROOT_DIR + 'tools/nacenit.php', form);
		}