
var Request = null;
var AjaxQueue = new Array ();
var waiting = 0;

function CreateRequest()
{
//  if (Request) return Request;

  if (window.XMLHttpRequest) {
    Request = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    try {
      Request = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (CatchException) {
      Request = new ActiveXObject("Msxml2.XMLHTTP");
    }
  }

  if (!Request) {
//    alert("Невозможно создать XMLHttpRequest");
  }

}


function sendQRequest (path,param,result_func) {
  if (waiting == 0) {
    sendRequest (path,param,result_func);
  } else {
    AjaxQueue.push ({path: path,param: param,result_func: result_func});
  }
}

var loaded_xml = {};
var ajr_path,ajr_param,ajr_func;
function sendRequest (path,param,result_func,from_process) {
  if (waiting == 1 && !from_process) return;

  waiting = 1;
  CreateRequest ();
  ajr_path = path;
  ajr_param = param;
  ajr_func = result_func;

  Request.onreadystatechange = function() {
    if (Request.readyState == 4) {
      loaded_xml[ajr_path] = Request.responseText;
      if (ajr_func) { ajr_func (Request.responseText); }

      if (AjaxQueue.length) {
        var obj = AjaxQueue.shift ();
        sendRequest (obj.path,obj.param,obj.result_func,1);
      } else {
        waiting = 0;
      }
    }
  }

  Request.open('POST','/pages/' + path,true);

  var param_str = 'empty_param_for_request=junk&';
  for (nm in param) {
    param_str += nm + "=" + encodeURIComponent(param[nm]) + "&";
  }


  Request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  Request.setRequestHeader("Content-Length", param_str.length);

  Request.send(param_str);
}
