var XLXO = (function() {
  var DataSending = false;

  function GetXMLObject()
  {
    var XO = false;
    if(window.XMLHttpRequest)
    {      XO = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
      XO = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {      alert('Your browser have not support XmlHttpRequest');    }
    return XO;
  }

  return {    IsDataSending: function ()
    {      return DataSending;    },    GetXMLDocument: function ()
    {      if(window.ActiveXObject)
      {        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        return xmlDoc;
      }
      else if(document.implementation && document.implementation.createDocument)
      {        xmlDoc = document.implementation.createDocument("", "dummy-root", null);
        xmlDoc.async = false;
        return xmlDoc;
      }
    },
    RequestServer: function (Method, Url, CallbackFunction, Parameter, Form)
    {      if(DataSending)
      {        return false;
      }
      else
      {
        DataSending = true;
      }
      var XO = GetXMLObject();
      var Query = null;
      if(XO)
      {
        if(!CallbackFunction)
        {
          DataSending = false;
          return true;
        }
        if(Method.toLowerCase() == 'post' && Form != null)
        {
          Query = [];
          for(i = 0; i < Form.length; i++)
          {
            if(Form[i].name != "")
            {
              switch(Form[i].type)
              {
                case "checkbox":
                  if(Form[i].checked)
                  {
                    Query.push(encodeURIComponent(Form[i].name) + "=" + encodeURIComponent('true'));
                  }
                  break;
                default:
                  Query.push(encodeURIComponent(Form[i].name) + "=" + encodeURIComponent(Form[i].value));
                  break;
              }
            }
          }
          Query = Query.join('&');
          XO.onreadystatechange = function()
          {
            if((XO.readyState == 4 || XO.readyState == "complete") && CallbackFunction)
            {
              DataSending = false;
              CallbackFunction(XO.responseText, Parameter);
            }
          }
          XO.open("POST", Url, true);
          XO.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
          XO.send(Query);
          return true;
        }
        else if(Method.toLowerCase() == 'get')
        {          XO.onreadystatechange = function()
          {
            if(XO.readyState == 4 || XO.readyState == "complete")
            {
              DataSending = false;
              if(CallbackFunction)
              {
                CallbackFunction(XO.responseText, Parameter);
              }
            }
          }
          XO.open("GET", Url, true);
          XO.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
          XO.send(Query);
          return true;
        }
        return false;
      }
      return false;
    }
  }
})();

