function lastSentParam(method, url, obsluha, loadInto, data) {
	this.parMethod = method;
	this.parUrl = url;
	this.parObsluha = obsluha;
	this.parLoadInto = loadInto;
	this.parData = data;
}

var usedParams = null;

/** odeslání XMLHttp požadavku 
	@param function obsluha 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 array [headers] pole předaných hlaviček ve tvaru { 'hlavička': 'obsah' } 
	@return bool true v případě úspěchu, false jinak 
*/ 
function ajax(obsluha, method, url) {
	var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
	if (!xmlhttp) { 
		return false; 
	} 
	
	document.body.style.cursor = 'wait';

	xmlhttp.open(method, url); 
	xmlhttp.onreadystatechange = function() { 
		obsluha(xmlhttp); 
	}; 

	xmlhttp.send(''); 
	return true; 
}

function ajaxLoadInto(obsluha, method, url, loadInto) {
	var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
	if (!xmlhttp) { 
		return false; 
	} 

	document.body.style.cursor = 'wait';

	xmlhttp.open(method, url);
	
	var lastParams = new lastSentParam(method, url, obsluha, loadInto, '');

	xmlhttp.onreadystatechange = function() {
		obsluha(xmlhttp, loadInto, lastParams);
	}; 

	xmlhttp.send(''); 
	return true; 
}

function ajaxOnBackground(method, url) {
	var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
	if (!xmlhttp) { 
		return false; 
	} 

	xmlhttp.open(method, url);
	
	xmlhttp.onreadystatechange = function() {}; 

	xmlhttp.send(''); 
	return true; 
}


function ajaxLoadIntoNewWin(obsluha, method, docUrl, docTitle) {
	var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
	if (!xmlhttp) { 
		return false; 
	} 
	
	document.body.style.cursor = 'wait';

	xmlhttp.open(method, docUrl); 
	xmlhttp.onreadystatechange = function() {
		obsluha(xmlhttp, docTitle);
	}; 

	xmlhttp.send(''); 
	return true; 
}

function sendAjaxForm(form) {
	var xmlhttp = (window.XMLHttpRequest ? new XMLHttpRequest : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : false));
	if (!xmlhttp) { 
		return false; 
	} 
	
	if (self.showPreloader)	{
		showPreloader();
	}

	if (self.showFrontendPreloader)	{
		showFrontendPreloader();
	}

	document.body.style.cursor = 'wait';

	// otestovani 2.parametru jestli jdeme na zadanou adresu
	if (arguments[1] != undefined) {
		var formScriptUrl = arguments[1];
	} else {
		var formScriptUrl = 'clean.php';
	}
		

	var loadInto = form.loadInto.value; 

	var data = ''; 
	var fInputs = form.getElementsByTagName('input'); 
	for(var i=0;i<fInputs.length;i++) {
		if (fInputs[i].type == "checkbox" || fInputs[i].type == "radio") {
			if (fInputs[i].checked) {
				data += fInputs[i].name + '=' + encodeURIComponent(fInputs[i].value) + '&';
			}		
		} else {  
			data += fInputs[i].name + '=' + encodeURIComponent(fInputs[i].value) + '&';
		} 
	}
	
	var fTxt = form.getElementsByTagName('textarea'); 
	for(var i=0;i<fTxt.length;i++) {
		data += fTxt[i].name + '=' + encodeURIComponent(fTxt[i].value) + '&';
	}
	
	var fSbs = form.getElementsByTagName('select'); 
	for(var i=0;i<fSbs.length;i++) {
		if (fSbs[i].multiple == true) {
			for (var j=0;j<fSbs[i].options.length;j++) {
				if (fSbs[i].options[j].selected) {
					data += fSbs[i].name + '=' + encodeURIComponent(fSbs[i].options[j].value) + '&';
				}
			}
		} else {
			data += fSbs[i].name + '=' + encodeURIComponent(fSbs[i].value) + '&';
		}
	}
	
	xmlhttp.open("POST", formScriptUrl, true); 
	xmlhttp.onreadystatechange = function() {
		setMainContent(xmlhttp, loadInto);
	}; 
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 

	if (self.showPreloader)	{
		var lastParams = new lastSentParam("POST", 'clean.php', setMainContent, loadInto, data);
	}
	xmlhttp.send(data);	
	
	return true;
}

/**
*	Obecna funkce nahrazujici normalni odkazy
*/
function goGetURL(url, loadInto) {
	// otestovani 3.parametru jestli se mame ptat na potvrzeni
	if (arguments[2] != undefined) {
		var res = confirm(arguments[2]);
		if (!res) {
 			return false;
		}
	}
	
 	// vytvoreni spravne URL
	var replacements = url.match(/\[([^\]]+)\]/gim);
	if (replacements != null) {
		for (var i=0; i<replacements.length; i++) {
			var urlParam = replacements[i].slice(1, -1);
			var param = document.getElementById(urlParam);
			if (param != null) {
				url = url.replace('\['+urlParam+'\]', param.value);
			}
		}
	}
	
	showPreloader();
	
	// testovaci vypis
//	alert(url);
		
	// odeslání požadavku na aktualizaci dat 
	if (!ajaxLoadInto(setMainContent, 'GET', url, loadInto)) { 
		hidePreloader();		
		return false; 
	}
	
	// otestujeme zda je funkce volana z noveho okna
	var newWin = document.getElementById('newWindow');
	if (newWin != null) {
		if (newWin.className != "old") {
			closeWindow('newWindow'); 
		}
	}

	return false;
}


/**
*	Obecna funkce nahrazujici normalni odkazy
*/
function getWebURL(url, loadInto) {
	// otestovani 3.parametru jestli se mame ptat na potvrzeni
	if (arguments[2] != undefined) {
		var res = confirm(arguments[2]);
		if (!res) {
 			return false;
		}
	}

	if (self.showFrontendPreloader)	{
		showFrontendPreloader();
	}

	// odeslání požadavku na aktualizaci dat 
	if (!ajaxLoadInto(setWebContent, 'GET', url, loadInto)) { 
		hideFrontendPreloader();		
		return false; 
	}
	
	return false;
}

/**
*	Obecna funkce obsluhujici vetsinu navratu xmlHttpRequest pozadavku, ulozi responseText do pozadovaneho ID
*/
function setWebContent(xmlhttp, loadInto) {
	if (xmlhttp.readyState == 4) {			
		document.body.style.cursor = 'default';

		var txtContent = xmlhttp.responseText;
		var elemCont = document.getElementById(loadInto);
		if (elemCont != null)
		{
			elemCont.innerHTML = txtContent;
		}

		var matchScript = txtContent.match(/<script>([^<]*)/gim);
		if (matchScript != null) {
			for (var scrNum=0;scrNum<matchScript.length;scrNum++) {
				createScript(matchScript[scrNum].slice(8));
			}
		}

		if (self.hideFrontendPreloader)	{
			hideFrontendPreloader();		
		}
		
		if (loadInto == 'shopTree') {
			document.getElementById('selTree').className = "";
			document.getElementById('loadTree').className = "old";
		}
	}
}

/**
*	Obecna funkce obsluhujici vetsinu navratu xmlHttpRequest pozadavku, ulozi responseText do pozadovaneho ID
*/
function setMainContent(xmlhttp, loadInto) {
	if (xmlhttp.readyState == 4) {
		document.body.style.cursor = 'default';

		/* vylepseni kvuli refresh */
			// otestovani 3.parametru jestli prisel
			if (arguments[2] != undefined) {
				usedParams = arguments[2];
			}
			
		var txtContent = xmlhttp.responseText;
		var insertElem = document.getElementById(loadInto);
		if (insertElem != null) {
			if (!txtContent.match(/div id="obsah"><\/div>/m))	{
				insertElem.innerHTML = txtContent;
			}
		} else {
			//alert(loadInto);
		}
		
		if (self.hidePreloader)	{
			hidePreloader();		
		}
		
		if (self.hideFrontendPreloader)	{
			hideFrontendPreloader();		
		}
		
		var matchScript = txtContent.match(/<script src=\"([^\"]*)\"/gim);
		if (matchScript != null) {
			for (var scrNum=0;scrNum<matchScript.length;scrNum++) {
				loadScript(matchScript[scrNum].slice(13).slice(0,-1));
			}
		}
		
		var matchArray = txtContent.match(/div id="tmpMsg" class="old">(.*)<\/div>/m);
		var matchScript = txtContent.match(/<script>([^<]*)/gim);
		if (matchScript != null) {
			for (var scrNum=0;scrNum<matchScript.length;scrNum++) {
				createScript(matchScript[scrNum].slice(8));
			}
		}

//		alert(content);
//		alert(matchArray);
//		alert(loadInto);
		if (matchArray != null) {
			document.getElementById('importantList').innerHTML = matchArray[1];
			
			if (matchArray[1].length > 0) {
				if (self.showAlpha)	{
					showAlpha();
				}
				document.getElementById('important').className = null;
			}
		}		
	}
}

function createScript(scriptText) {
	var script = document.createElement('script');
	script.setAttribute('type','text/javascript');
	if (null == script.canHaveChildren || script.canHaveChildren) {
	  script.appendChild(document.createTextNode(scriptText));
	} else {
	  script.text = scriptText;
	} 
	var x = document.getElementsByTagName('head')[0];
	x.appendChild(script);	
}

function loadScript(scriptSrc) {
  var script = document.createElement('script');
  script.src = scriptSrc;

	// pridame ho do hlavicky
  var x = document.getElementsByTagName('head')[0];
  x.appendChild(script);
}

