/**
 * 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) {
	if (window.jQuery == undefined) {
		include('/js/jquery.js');
	}	
	if (false) {
		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;
	} else {
		$.get(adress, answer);
	}
}

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;
}


function include( filename ) {	// The include() statement includes and evaluates the specified file.
	//
	// +   original by: mdsjack (http://www.mdsjack.bo.it)
	// +   improved by: Legaev Andrey
	// +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
	// +   improved by: Michael White (http://crestidg.com)
	// %		note 1: Force Javascript execution to pause until the file is loaded. Usually causes failure if the file never loads. ( Use sparingly! )

	var js = document.createElement('script');
	js.setAttribute('type', 'text/javascript');
	js.setAttribute('src', filename);
	js.setAttribute('defer', 'defer');
	document.getElementsByTagName('HEAD')[0].appendChild(js);

	// save include state for reference by include_once
	var cur_file = {};
	cur_file[window.location.href] = 1;

	if (!window.php_js) window.php_js = {};
	if (!window.php_js.includes) window.php_js.includes = cur_file;
	if (!window.php_js.includes[filename]) {
		window.php_js.includes[filename] = 1;
	} else {
		window.php_js.includes[filename]++;
	}

	return window.php_js.includes[filename];
}

function waiter(waitmode) {
	var width = document.documentElement.clientWidth;
        var height = document.documentElement.clientHeight;
	var element = document.getElementById('loading');
	if (waitmode == true) {
		element.style.display = 'block';
		element.style.left = parseInt(document.documentElement.clientWidth) / 2 - parseInt(element.offsetWidth) / 2 + "px";
		element.style.top = parseInt(document.documentElement.clientHeight) / 2 - parseInt(element.offsetHeight) / 2 + document.documentElement.scrollTop + "px";
	} else {
		element.style.display = 'none';
	}
}
