var req = false;
try
	{
	req = new XMLHttpRequest();
	}
catch (trymicrosoft)
	{
	try
		{
		req = new ActiveXObject("Msxml2.XMLHTTP");
		}
	catch (othermicrosoft)
		{
		try
			{
			req = new ActiveXObject("Microsoft.XMLHTTP");
			}
		catch (failed)
			{
			req = false;
			}
		}
	}

if (!req) alert("Ошибка инициализации интерфейса! Обратитесь к администратору.");

var querypage;

var check_ready = 1;
var queue = 0;
var stek = new Array();

function urlEncodeData(data) {
    var query = [];
    if (data instanceof Object) {
        for (var k in data) {
            query.push(encodeURIComponent(k) + "=" +
            		encodeURIComponent(data[k]));
        }
        return query.join('&');

    } else {
        return data;
    }
}
function getEncodeData(data) {
    var query = [];
    if (data instanceof Object) {
        for (var k in data) {
            query.push(encodeURIComponent(data[k]));
        }
        return query.join('/');
    } else {
        return data;
    }
}
function ajaxform(page,form,div){
	var inputs = form.elements;
	var b=inputs.length;
	var query=[];
	var stringquery = '';
	for (var k=0; k<b; k++){query.push(encodeURIComponent(inputs[k].name) + "=" +encodeURIComponent(inputs[k].value));}
	stringquery = query.join('&');
	ajaxQueue(page,stringquery,div);
}

function ajaxQueue(page,param,divid){
	var bet = new Array();
	bet['page']=page;
	bet['param']=param;
	bet['divid']=divid;
	if (queue == 0)
		{ 
		stek.push(bet);
		}
	else if (queue == 1)
		{
		stek.unshift(bet);
		queue = 0;
		}

	if (check_ready == 1)
		{
			j=stek.shift();
		querypage = j['page'];
		queryparam = j['param'];
		queuedivid = j['divid']
		check_ready = 0;

		var url ='http://'+ location.host + "/ajax/" + querypage + "/";
		req.open("POST", url, true);
		req.onreadystatechange =  function(){updateDiv(req,queuedivid)};
		param = urlEncodeData(param);
		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		req.setRequestHeader("Content-length", param.length);
		req.setRequestHeader("Connection", "close");
		req.send(param);
		}
	return false;
	}

function updateDiv(req,divid){
//if (req.readyState < 4)	nodeById(divid).innerHTML = "(" + 25*req.readyState + "%)";
	if (req.readyState == 4){
		if (req.status == 200){
			document.getElementById(divid).innerHTML = req.responseText;
			check_ready = 1;
			if (stek.length != 0){
				queue = 1;
				j=stek.shift();
				ajaxQueue(j['page'],j['param'],j['divid']);
			}
		}else if (req.status == 404)
				alert("Запрашиваемая страница обработки не найдена! Обратитесь к администратору.");
		else if (req.status == 403)
				alert("Доступ к странице обработки запрещен! Обратитесь к администратору.");
		else
				alert("Ошибка: статус: " + req.status + ". Обратитесь к администратору.");
	}
}
function sgoto(linkk) { 
		history.pushState(null, null, linkk); 
}

function updateDivP(req,divid,newlink){
//if (req.readyState < 4)	nodeById(divid).innerHTML = "(" + 25*req.readyState + "%)";

if (req.readyState == 4){
	if (req.status == 200){
		document.getElementById(divid).innerHTML = req.responseText;
			window.setTimeout(function(){sgoto(newlink);},100);
			check_ready = 1;
			if (stek.length != 0){
				queue = 1;
				j=stek.shift();
				ajaxQueue(j['page'],j['param'],j['divid'],j['newlink']);
			}
		}else if (req.status == 404)
				alert("Запрашиваемая страница обработки не найдена! Обратитесь к администратору.");
		else if (req.status == 403)
				alert("Доступ к странице обработки запрещен! Обратитесь к администратору.");
		else
				alert("Ошибка: статус: " + req.status + ". Обратитесь к администратору.");
	}
}

function ajaxgetpage(page,param,divid,newlink ){
	var histAPI=!!(window.history && history.pushState);
	var url ='http://'+ location.host + "/ajax/" + page +'/'+ getEncodeData(param);
	if (histAPI){
		var bet = new Array();
		bet['page']=page;
		bet['param']=param;
		bet['divid']=divid;
		bet['newlink']=newlink;
		if (queue == 0)
			{ 
			stek.push(bet);
			}
		else if (queue == 1)
			{
			stek.unshift(bet);
			queue = 0;
			}
	
		if (check_ready == 1)
			{
				j=stek.shift();
			querypage = j['page'];
			queryparam = j['param'];		
			queuedivid = j['divid'];
			querylink = j['newlink'];
			check_ready = 0;
			var url ='http://'+ location.host + "/ajax/" + page +'/'+ getEncodeData(param);
			req.open("GET", url, true);
			req.onreadystatechange =  function(){updateDivP(req,queuedivid,querylink)};
	//		req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	//		req.setRequestHeader("Content-length", param.length);
	//		req.setRequestHeader("Connection", "close");
			req.send(null);
			}	
		return false;
	}else location.href=newlink;
}
