function Request(module, method, params, callback) {

	new Ajax.Request('/!/'+module+'/'+method, {
		method:'post',
		postBody:'json='+encodeURIComponent(Object.toJSON(params)),
		onSuccess: function(transport) {
		
			try {
				var json = transport.responseText.evalJSON();
			}
			catch (e) {
				if ((i = transport.responseText.indexOf("ctok = '")) >= 0) {
					alert(transport.responseText);
					eval(transport.responseText.substr(i, 17));
					return Request(module, method, params, callback);
				}
				if (transport.responseText && transport.responseText.length)
					return alert("Ошибка.\n"+transport.responseText);
			}
			
			json.json = transport.responseText;
			
			if (json.alert)
				alert(json.alert);
				
			if (json.error)
				alert(json.error);
			else
				callback(json);
				
		}
	});

}

function GetRealX(el) {
	c = 0;
	while (el.offsetParent && (el != document.body) && (el != document.documentElement)) {
		c += el.offsetLeft - el.offsetParent.scrollLeft;
		el = el.offsetParent;
	}
	return c;
}

function GetRealY(el) {
	c = 0;
	while (el.offsetParent && (el != document.body) && (el != document.documentElement)) {
		c += el.offsetTop - el.offsetParent.scrollTop;
		el = el.offsetParent;
	}
	return c;
}

function HSC(str) {
	return str.replace('&', '&amp;').replace('<', '&lt;').replace('>', '&gt;');
}
