//
//					AJAX-обработчик
//

	var ajax_requests_list 		= new Array;
	var ajax_requests_history 	= new Array;
	var ajax_request_in_proccess = false;

	var current_ajax_request;
	
	function addAjaxRequest(URL, query, request_function){
		var new_ajax_request = new Object;
		new_ajax_request['URL'] 			= URL;
		new_ajax_request['query']			= query;
		new_ajax_request['request_function'] 	= request_function;
		
		ajax_requests_list.push(new_ajax_request);
	}

	function removeAjaxRequest(request_id){
		ajax_requests_list.splice(request_id, 1);
	}

	function passAjaxRequest(request_id){
		ajax_requests_history.push(ajax_requests_list[request_id]);
		removeAjaxRequest(request_id);
		ajax_request_in_proccess = false;
	}

	function runAjaxRequests(){
		if(ajax_requests_list.length > 0 && !ajax_request_in_proccess){
			current_ajax_request = ajax_requests_list[0];
			ajax_request_in_proccess = true;
			send_ajax_request(current_ajax_request['URL'], current_ajax_request['query'], current_ajax_request['request_function']);
		}
	}


	function newXMLHttpRequest() {
		var xmlreq = false;
		if (window.XMLHttpRequest) {
			xmlreq = new XMLHttpRequest();
		} else if (window.ActiveXObject) {
			try {
				xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e1) {
				try {
					xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e2) {
				}
			}
		}
		return xmlreq;
	}

	function readAjaxRequest(request_data){
		current_ajax_request['request_function'](request_data);
		passAjaxRequest(0);
		runAjaxRequests();
	}

	function send_ajax_request() {

		var URL 	= current_ajax_request['URL'];
		var query 	= current_ajax_request['query'];

		var req = newXMLHttpRequest();
		var handlerFunction = getReadyStateHandler(req, readAjaxRequest);
		req.onreadystatechange = handlerFunction;
		req.open("POST", URL, true);
		req.setRequestHeader("Content-Type", 
				         "application/x-www-form-urlencoded; charset=windows-1251");


		req.send(query);
	}

	function ajax_request(URL, query, request_function){
		addAjaxRequest(URL, query, request_function);
		runAjaxRequests();		
	}


	function getReadyStateHandler(req, responseXmlHandler) {
		return function () {
			if (req.readyState == 4) {
				if (req.status == 200) {
					responseXmlHandler(req.responseText);
				}
			}
		}
	}


