
var A = {
	rExp: new RegExp("^function\\s+(\\w+)\s*\\(.*", 'im'),
	chyba: function(oPozadavek) {
		var sChyba = '';
		if (oPozadavek.rpc.status == 600)
			sChyba = 'Spatne volani';
		else if (oPozadavek.rpc.status == 601)
			sChyba = 'Spatne vstupni udaje';
		else if (oPozadavek.rpc.status == 602)
			sChyba = 'Musite byt prihlasen';
		else
			sChyba = oPozadavek.rpc.statusText;
		alert('Chyba' + ':\n' + oPozadavek.rpc.status + '\n (' + sChyba + ')');
	},
	vytvorInfo: function() {
		var aPoz = velikostScroll();
		var oDiv = document.createElement('div');
		oDiv.className = 'ajax';
		oDiv.innerHTML = 'Nahravam data ...';

		oDiv.style.left = aPoz[0] + 'px';
		oDiv.style.top = aPoz[1] + 'px';

		window.document.body.appendChild(oDiv);
		return oDiv;
	},
	_rpc: function() {
		try {
			return new XMLHttpRequest();
		} catch (error) {}
		try {
			return new ActiveXObject('Msxml2.XMLHTTP');
		} catch (error) {}
		try {
			return new ActiveXObject('Microsoft.XMLHTTP');
		} catch (error) {}
		return null;
	},
	rpc: function(oFce, sURL, sParam, sMetoda, aSpec, sync) {
		var aReg = null;

		if (oFce == null || ((aReg = this.rExp.exec(oFce.toString())) == null)) {
			alert('Chyba' + ': ' + 'Neexistujici funkce');
			return false;
		}
		var oPozadavek = {};

		if ((oPozadavek.rpc = this._rpc()) == null) {
			alert('Chyba' + ': ' + 'Chyba xlmrpc');
			return false;
		}

		var bSync = typeof sync == 'boolean' && sync == false ? false : true;

		oPozadavek.param = sParam;
		oPozadavek.spec = aSpec;
		oPozadavek.fce = oFce;
		oPozadavek.url = sURL;
		oPozadavek.info = this.vytvorInfo();

		oPozadavek.rpc.onreadystatechange = function() {
			A.rpcOdpoved(oPozadavek);
		};

		if (oPozadavek.rpc.overrideMimeType)
			oPozadavek.rpc.overrideMimeType('text/xml');

		sParam = 'rRPC=' + aReg[1] + (sParam ? '&' + sParam : '');
		if (sMetoda && sMetoda.toLowerCase() == 'post') {
    	oPozadavek.rpc.open('POST', sURL, bSync);
			oPozadavek.rpc.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			oPozadavek.rpc.setRequestHeader('Content-length', sParam.length);
			oPozadavek.rpc.setRequestHeader('Connection', 'close');
			oPozadavek.rpc.send(sParam);
		} else {
    	oPozadavek.rpc.open('GET', sURL + '?' + sParam, bSync);
    	oPozadavek.rpc.send(null);
    }
    return false;
	},
	rpcOdpoved: function(oPozadavek) {
		if (oPozadavek.rpc.readyState == 4) {
			if (oPozadavek.rpc.status == 200) {
				var xmlDoc = null;
				var oXML = {vysledek: null, chyba: null, prikaz: null};
				if (window.ActiveXObject) {
					try {
						xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
						xmlDoc.loadXML(oPozadavek.rpc.responseText);
					} catch (error) {
						alert('Chyba' + ': ' + 'Chyba pri parsovani');
						xmlDoc = null;
					}
				} else
					xmlDoc = oPozadavek.rpc.responseXML.documentElement;

				if (xmlDoc) {
					oXML.vysledek = (xmlDoc.getElementsByTagName('vysledek') && xmlDoc.getElementsByTagName('vysledek')[0] && xmlDoc.getElementsByTagName('vysledek')[0].childNodes[0]) ? xmlDoc.getElementsByTagName('vysledek')[0].childNodes[0].nodeValue : null;
					oXML.chyba = (xmlDoc.getElementsByTagName('chyba') && xmlDoc.getElementsByTagName('chyba')[0] && xmlDoc.getElementsByTagName('chyba')[0].childNodes[0]) ? xmlDoc.getElementsByTagName('chyba')[0].childNodes[0].nodeValue : null;
					oXML.prikaz = (xmlDoc.getElementsByTagName('prikaz') && xmlDoc.getElementsByTagName('prikaz')[0] && xmlDoc.getElementsByTagName('prikaz')[0].childNodes[0]) ? xmlDoc.getElementsByTagName('prikaz')[0].childNodes[0].nodeValue : null;
				}
				oPozadavek.xml = oXML;

				oPozadavek.fce(oPozadavek);
			} else
				this.chyba(oPozadavek);

			window.document.body.removeChild(oPozadavek.info);

			oPozadavek.rpc.onreadystatechange = function() {}; // memory leak IE
		}
	}
};


function velikostScroll() {
	if (typeof(window.pageXOffset) == 'number')
		return [window.pageXOffset, window.pageYOffset];

	var el = (document.compatMode && document.compatMode != 'BackCompat') ? document.documentElement : document.body;

	if (typeof(el.scrollLeft) == 'number')
		return [el.scrollLeft, el.scrollTop];

	return [0, 0];
}

function fPos(obj) {
	if(obj==null)return [-1,-1];
	var curleft =0;
	var curTop=0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curtop += obj.offsetTop-(obj.scrollTop?obj.scrollTop:0);
			curleft += obj.offsetLeft-(obj.scrollLeft?obj.scrollLeft:0);
		}
	}
	return [curleft,curtop];
}
