/**
 * httprequest object
 */
function httprequest(url)
{
  this.url = url;
  
  /* Some default values */
  this.method = "GET";
  this.synch = true;
  this.complete = false;
  
  /* Class methods */
  this.send = httprequest_send;
  this.callback = function (object, response) { };
  this.referingobject = this;
  this.setsynch = httprequest_setsynch;
  this.setcallback = httprequest_setcallback;
  this.iscomplete = httprequest_iscomplete;
}

/**
 * Send a sync- or async-request (default is sync)
 */
function httprequest_setsynch(synch)
{
  this.synch = synch;
}

/**
 * Standard callback for getting request result data
 */
function httprequest_setcallback(afunction, areferingobject)
{
  this.callback = afunction;
  this.referingobject = areferingobject;
}

/**
 * Request completed and data received?
 */
function httprequest_iscomplete()
{
  return this.complete;
}

/**
 * Send the request
 */
function httprequest_send()
{
  var request = null;

  /* Init request object*/
  if(window.ActiveXObject && navigator.userAgent.match(/Win/))
  {
    request = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else if (document.implementation && document.implementation.createDocument)
  {
    request = new XMLHttpRequest();
  }
  
  if (!request) return null;

  if (this.synch)
  {
    var callback = this.callback;
    var refobject = this.referingobject;
    
    request.onreadystatechange=function()
    {
      if (request.readyState==4)
      {
        if (callback)
          callback(refobject, request.responseXML);
          
        request = null;
      }
    }
  }
  request.open(this.method, this.url, this.synch);
  request.send(null);
}


/**
 * Send an asynch request to the given url
 */
function sendrequesta(url)
{
  var _req = new httprequest(url);
  
  _req.setsynch(false);
  _req.send();
}

/**
 * Send synch request and fetch data, return the result data
 */
function sendrequest(url, callbackfnc, referingobject)
{
  var _req = new httprequest(url);
  
  if (callbackfnc) 
    _req.setcallback(callbackfnc, referingobject);
    
  _req.send();
}
