	/* Ajax */
	function ajax_send_post(url, data, data_type)
	{
		if (location.href.match(new RegExp("[&?]nocache(#|&|=|$)")))
			url += "&nocache";

		if (typeof data_type == "undefined")
			data_type = "xml";

		var answer = $.ajax({'type': "POST", 'url': url, 'async': false, 'data': data, 'dataType': data_type});

		if (data_type != "xml")
			return answer.responseText;

		try
		{
			if (!answer.responseXML)
				throw "";

			var result = $(answer.responseXML).children("answer");
			if (!result.length)
				throw "";

			return result;
		}
		catch(e)
		{}

		try
		{
			var errors = "<errors><![CDATA[" + unescape(answer.responseText) + "]]></errors>";

			var xml;
			if (typeof DOMParser != "undefined")
			{
				var doc = new DOMParser();
				xml = doc.parseFromString(errors, "text/xml");
			}
			else
			{
				xml = new ActiveXObject("Microsoft.XMLDOM");
				xml.async = false;
				xml.loadXML(errors);
			}

			return $(xml);
		}
		catch (e)
		{
			alert(answer.responseText);
		}
		return false;
	}

	function ajax_check_error(xml)
	{
		xml = $(xml);

		var redirect = xml.find("redirect").text();
		if (redirect != "")
		{
			location.href = redirect;
			return false;
		}

		var errors = xml.find("errors").text();
		if (errors == "")
			return true;

		$("body").append(errors);
		return false;
	}

	function ajax_xml_load(element, url, data)
	{
		var xml = ajax_send_post(url, data);

		var options = xml.find("element");
		for (var i = 0; i < options.length; i++)
		{
			var option = options.eq(i);

			var name = option.attr("name");
			var value = option.attr("value");

			element.append("<option value='" + value + "'>" + name + "</option>");
		}

		if (options.length != 0)
			element.removeAttr("disabled");
	}
