getXmlHttp = function()
{
  var xmlhttp;

  try
  {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e)
  {
    try
    {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (E)
    {
      xmlhttp = false;
    }
  }

  if (!xmlhttp && typeof XMLHttpRequest != "undefined")
  {
    xmlhttp = new XMLHttpRequest();
  }

  return xmlhttp;
}



ajax_request = function(url, no_reload_flag)
{
  if (typeof(no_reload_flag) == "undefined")
  {
    var no_reload_flag = false;
  }

  var req = getXmlHttp();

  req.open("GET", url, true);  

  var tmp_function = function()
  {
    if (req.readyState == 4)
    { 
      if (req.status == 200)
      {
        if (req.responseText.length)
        {
          alert(req.responseText);
        }

        if (!arguments.callee.no_reload_flag)
        {
          location_reload();
        }
      }
      else
      {
        alert("Некорректный ответ сервера.\r\nКод статуса: " + req.status + ".\r\nОтвет сервера:\r\n" + req.responseText);
      }
    }
  }

  tmp_function.no_reload_flag = no_reload_flag;
  req.onreadystatechange = tmp_function;

  req.send(null);
}



ajax_request_post = function(url_str, params_str)
{
  var req = getXmlHttp();

  req.open("POST", url_str, true);

  req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  req.setRequestHeader("Content-Length", params_str.length);

  req.onreadystatechange = function()
  {
    if (req.readyState == 4)
    { 
      if (req.status == 200)
      {
        if (req.responseText.length)
        {
          alert(req.responseText);
        }

        location_reload();
      }
      else
      {
        alert("Некорректный ответ сервера.\r\nКод статуса: " + req.status + ".\r\nОтвет сервера:\r\n" + req.responseText);
      }
    }
  }

  req.send(params_str);
}



windows_opener = function(url, width_tmp, height_tmp)
{
  var left_tmp = (screen.availWidth - width_tmp) / 2;
  var top_tmp = (screen.availHeight - height_tmp) / 2 - document.body.clientTop;
  window.open(url, "", "left=" + left_tmp + ", top=" + top_tmp + ", width=" + width_tmp + ", height=" + height_tmp + ", scrollbars=yes, resizable=yes");
}



location_reload = function()
{
  if (window.navigator.appName == "Microsoft Internet Explorer")
  {
    window.history.go();
  }
  else
  {
    location.reload();
  }
}



hookEvent = function(element, eventName, callback)
{
  if(typeof(element) == "string")
  {
    element = document.getElementById(element);
  }



  if(element == null)
  {
    return;
  }



  if(element.addEventListener)
  {
    if(eventName == "mousewheel")
    {
      element.addEventListener("DOMMouseScroll", callback, false);
    }



    element.addEventListener(eventName, callback, false);
  }
  else if(element.attachEvent)
  {
    element.attachEvent("on" + eventName, callback);
  }
}



unhookEvent = function(element, eventName, callback)
{
  if(typeof(element) == "string")
  {
    element = document.getElementById(element);
  }



  if(element == null)
  {
    return;
  }



  if(element.removeEventListener)
  {
    if(eventName == "mousewheel")
    {
      element.removeEventListener("DOMMouseScroll", callback, false);
    }

    element.removeEventListener(eventName, callback, false);
  }
  else if(element.detachEvent)
  {
    element.detachEvent("on" + eventName, callback);
  }
}



cancelEvent = function(e)
{
  e = e ? e : window.event;



  if (e.stopPropagation)
  {
    e.stopPropagation();
  }



  if (e.preventDefault)
  {
    e.preventDefault();
  }



  e.cancelBubble = true;
  e.cancel = true;
  e.returnValue = false;



  return false;
}



GetPageSizes = function()
{
  var aWindowSizes = GetWindowSizes();
  var aPageSizes   = {};



  if (window.navigator.appName == "Microsoft Internet Explorer" && aWindowSizes.iWidth == Math.max(document.documentElement.clientWidth,  document.body.scrollWidth))
  {
    aPageSizes.iWidth = aWindowSizes.iWidth;
  }
  else
  {
    aPageSizes.iWidth = Math.max(document.documentElement.clientWidth,  document.body.scrollWidth,  document.documentElement.scrollWidth,  document.body.offsetWidth,  document.documentElement.offsetWidth);
  }
  


  if (aWindowSizes.iHeight > document.body.scrollHeight)
  {
    aPageSizes.iHeight = aWindowSizes.iHeight;
  }
  else
  {
    aPageSizes.iHeight = Math.max(document.documentElement.clientHeight, document.body.scrollHeight, document.documentElement.scrollHeight, document.body.offsetHeight, document.documentElement.offsetHeight);
  }



  return aPageSizes;
}



GetWindowSizes = function()
{
  var body    = window.document.body;
  var iWidth  = window.document.documentElement.clientWidth;
  var iHeight = window.document.documentElement.clientHeight;

  return {
    iWidth:  window.document.compatMode === "CSS1Compat" && iWidth  || body && body.clientWidth  || iWidth,
    iHeight: window.document.compatMode === "CSS1Compat" && iHeight || body && body.clientHeight || iHeight
  };
}



GetBodyScrollTop = function()
{
  return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

GetBodyScrollLeft = function()
{
  return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}



htmlentities = function(s)
{
  var div = document.createElement("div");
  var text = document.createTextNode(s);
  div.appendChild(text);
  return div.innerHTML;
}

