var req = null;
var requestCallback;

// отправка запроса
function sendRequest(url, params, httpMethod, callback) {
	var i = null;
	var postArray = new Array();
	var postData = '';
	
	for (i in params) {
		postArray.push(i + '=' + escape(params[i]));
	}
	postData = postArray.join('&');
	
	if (!httpMethod) {
		httpMethod = "GET";
	}
	req = initXMLHTTPRequest(); // получаем объект запроса
	if (req) {
		requestCallback = callback; // функция обратного вызова
		req.onreadystatechange = onReadyState; // привязываем функцию обрабоки состояния запроса
		req.open(httpMethod, url, true); // соединение...
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); // заголовок...
		req.send(postData);
	}
}

// инициализация объекта запроса
 function initXMLHTTPRequest() {
 	var xRequest = null; // наша переменная для запроса
 	if (window.XMLHttpRequest) {
		xRequest = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return xRequest;
 }
 
 // обработчик состояния объекта запроса
 function onReadyState() {
 	var xml, root, node, i, j, item;

	var response = new Array();
	var items = new Array();

	if (req.readyState == 4) {
		//ajax_in_progress = 0;
		
		if (req.status == 200) {
			xml = req.responseXML;
			
			if (!xml) {
				alert('неверный формат данных: ' + "\n" + req.responseText);
				//ajax_callback(null, null);
				return;
			}
			
			
			root = xml.getElementsByTagName('response').item(0);
			
			if (!root) {
				alert('неверный формат данных: ' + "\n" + req.responseText);
				//ajax_callback(null, null);
				return;
			}
			
			for (i = 0; i < root.attributes.length; i++) {
				response[root.attributes[i].nodeName] = root.attributes[i].nodeValue;
			}
			
			for (i = 0; i < root.childNodes.length; i++) {
				node = root.childNodes[i];
				if (node.nodeName == 'item') {
					item = new Array();
					
					for (j = 0; j < node.attributes.length; j++) {
						item[node.attributes[j].nodeName] = node.attributes[j].nodeValue;
					}
					
					items.push(item);
				}
			}
			requestCallback(items);
		}
	}
}
