var getXMLHTTPRequest = (function()
{
  var factories = [function() { return new XMLHttpRequest(); },
                   function() { return new ActiveXObject("MSXML3.XMLHTTP"); },
                   function() { return new ActiveXObject("MSXML2.XMLHTTP"); },
                   function() { return new ActiveXObject("Microsoft.XMLHTTP"); }
                  ];
  var xmlhttp = null;
  for (var i=0, c=factories.length; i<c; ++i)
  {
    try { xmlhttp = factories[i](); }
    catch(e) { continue; }
    return factories[i];
  }
})();
xmlreq = getXMLHTTPRequest();
function process()
{
  var data = null;
  if (xmlreq.readyState==4)
  {
    if (xmlreq.status==200)
    {
      if (!xmlreq.responseText)
      {
        alert("XMLHTTP-соединение завершено, но данные не вернулись.");
        return;
      }
      else
      {
        try { data = eval('('+xmlreq.responseText+')'); }
        catch (e)
        {
alert(xmlreq.responseText);
          alert("Формат данных не соответствует необходимому.");
          return;
        }
        if (typeof data.error != 'undefined' && data.error==-1)
        {
          alert(data.errString);
          return;
        }
        else
        {
          try { data.func(); }
          catch (e)
          {
//alert(xmlreq.responseText);
            alert("Функция обработки полученных данных не найдена.");
            return;
          }
        }
      }
    }
    else if (xmlreq.status == 0)
    {
    }
    else
    {
      alert("XMLHTTP-соединение удачно завершено, но его статус не определен.");
    }
  }
  return false;
}