var XmlHttp;
/*
унифицированная функция для вызова метода
параметры:
serverURL - адрес серверного скрипта, который выполняет работу с базой
requestParams - строка запроса (или массив - для post-данных)
containerID - куда потом девать полученные результаты
*/
function getDataHTTP(method,url,params,containerID) 
{
  method = method.toUpperCase(method);
  if (method!='GET' && method!='POST') method='GET';
  
  function parseRequest() // Функция парсит возвращаемый текст
  {
    if (XmlHttp.readyState == 4) 
    {
       if (XmlHttp.status == 200) 
       {
          /* Пришёл ответ, обрабатываем либо через XmlHttp.responseText,
             либо через XmlHttp.responseXML.documentElement */
          resultDIV.innerHTML = XmlHttp.responseText;
       } 
       else 
       {
          // Обрабатываем ошибки: XmlHttp.status, XmlHttp.statusText
          resultDIV.innerHTML = "<b>XmlHttp.status: </b>"+XmlHttp.status+"<br>"+
          "<b>XmlHttp.statusText: </b>"+XmlHttp.statusText;
       }
    }
  }

  method = method.toUpperCase(method);
  if (method!='GET' && method!='POST') method='GET';
  //var request = [ ["q", "1"], ["a", "2"] ];

   
   //Use the native object available in all browsers (IE >= 7)
   if (window.XMLHttpRequest) // Mozilla или IE>=7
   {
      try { XmlHttp = new XMLHttpRequest(); } 
      catch (e) { XmlHttp = false; } // если ошибка
      var is_activex = false;
   }
   else if (window.ActiveXObject) //Use the ActiveX version for IE < 7
   {
      try { XmlHttp = new ActiveXObject("Msxml2.XMLHTTP.6.0"); } 
      catch (e) 
      {
            try { XmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } 
            catch (e) 
            {
                  try { XmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } 
                  catch (e) { XmlHttp = false; } // не смогли создать объект
            }
      }
      var is_activex = true;
   }
   
   if (!XmlHttp)
   {
      return false;
   }

   function buildParams(aParams, aData) 
   {
      var query = "";
      for (var i = 0; i < aParams.length; i++) 
      {    // собираем параметры
          query += aParams[i][0]+"="+encodeURIComponent(aParams[i][1])+"&";
//          query += aParams[i][0]+"="+(aParams[i][1])+"&";
      }
      query = query.substr(0, query.length-1);    // обрезаем последний амперсанд
      if (aData) 
      {    // если нужно передать данные
          for (var i = 0; i < aData.length; i++) {
              query += "data[]="+encodeURIComponent(aData[i])+"&";
//              query += "data[]="+(aData[i])+"&";
          }
          query = query.substr(0, query.length-1);
      }
      return query;
  }

   if (typeof(params)=='object')
   {  params = buildParams(params);
      //alert (params);
      var req = params;
      for (var i = 0; i < req.length; i++) 
      {
          if (req.charAt(i) == "&") 
          {
   //          req = req.substr(0, i)+"&amp;"+req.substr(i+1);
             req = req.substr(0, i)+"&"+req.substr(i+1);
          }
      }
      //  alert(req);
      params=req;
   } 

   
   
   XmlHttp.onreadystatechange = parseRequest;
   if (method == 'POST')
   {
      XmlHttp.open(method, url, true);
      XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=windows-1251');
      XmlHttp.send(params);
   }
   else
   {
      XmlHttp.open(method, url + params, true);
      XmlHttp.setRequestHeader('Content-Type', 'text/html; charset=windows-1251');
     // XmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=' + ajax_page_charset);
      if (is_activex)
      {  // This seems to be an issue in the ActiveX-Object: no parameter needed
    	 XmlHttp.send();
      }
      else
      {
         // The native versions take null as a parameter
         XmlHttp.send(null);
      }
   }
   resultDIV = document.getElementById(containerID);
   return true;
}

