
function getRequester()
{
  try
    {
      if(window.XMLHttpRequest) 
        {
          return new XMLHttpRequest();
        } 
      else if(window.ActiveXObject)
        {
          return new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
  catch (e) 
    {
      alert("browser non compatibile.");
    }
};

function Ajax(cb)
{
  var me = this;
  this.requester = getRequester();
  
  if(cb)
    this.callback = cb;
  else
    this.callback = function(req)
    {
      return eval(req.responseText);
    };

  this.requester.onreadystatechange = function(){
    switch(me.requester.readyState)
    {
      case 1:
      case 2:
      case 3:
        break;
      case 4:
        var response = me.callback(me.requester);
        break;
      default:
        alert("Error");
        break;
    }
  };

  this.state = function()
  {
    return me.requester.readyState;
  };

  this.process = function(url, parameters){
    me.requester.open("POST", url, true);
    me.requester.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    me.requester.setRequestHeader("Content-length", parameters.length);
    //me.requester.setRequestHeader("Connection", "close");
    me.requester.send(parameters);
  };
};

