/**
 * Multithreading AJAX Library
 *
*/
var Requests = new Array();

function Request(req, ans) {
	this.req = req;
	this.answer = ans,
	this.state = 0;
}

function createXHR() {
	var req;
	try {
		req = new (window.XMLHttpRequest || ActiveXObject)('Msxml2.XMLHTTP');	
	} catch (e) {
		throw 'Не могу создать AJAX';
		req = false;
	}	
	return req;
}

function makeRequest(adress, answer) {
	var	req = createXHR();
	count = Requests.push(new Request(req, answer));
	req.open("GET", adress, true);
	req.onreadystatechange = ansRequest;
	req.send(null);
	Requests[count - 1].state = 1;
}

function ansRequest () {
	var count = Requests.length;
	for (var i = 0; i < count; i++) {
		if(Requests[i].state == 0) continue;
		req = Requests[i].req;
		answer = Requests[i].answer;
		if (req.readyState == 4) { 
			if (req.status == 200) { 
				ans = req.responseText;
				req.abort();
				Requests[i].state = 0;
				Requests[i].req = undefined; 
				answer(ans);
			}
		}
	}
}

function json_eval (text) {
	try {
		var object = eval ('(' + text + ')')
	} catch (error) {
		alert (error + ' in ' + text);
		return null;
	}
	return object;
}