HTTPRequest = function(){};
with({$: HTTPRequest.prototype}){
  $.isSupported = function(){
    return !!this.getConnection();
  };
  $.events = ["start", "open", "send", "load", "end"];
  $.filter = encodeURIComponent;
  $.div=null;
  $.ev=false;
  $.getConnection = function(){
    var i, o = [function(){return new ActiveXObject("Msxml2.XMLHTTP");},
    function(){return new ActiveXObject("Microsoft.XMLHTTP");},
    function(){return new XMLHttpRequest;}];
    for(i = o.length; i--;) try{return o[i]();} catch(e){}
    return null;
  };
  $.formatParams = function(params){
    var i, r = [];
    for(i in params) r[r.length] = i + "=" + (this.filter ? this.filter(params[i]) : params[i]);
    return r.join("&");
  };
  $.updater = function(div, url, param, handler){
    var as=true;     
    $.div=div;
    if(param['asynchronous']==false){
      as=false;
    }
    if(param['evalScripts']){
      $.ev=true;
    }
    if(handler==undefined){
      handler=this.defHandler;
    }
    if(param['method']=="post"){
      return this.post(url, param['parameters'], handler, as);
    }
    else{
      return this.get(url, param['parameters'], handler, as);
    }
  }
  $.get = function(url, params, handler, waitResponse){
    return this.request("GET", url + (url.indexOf("?") + 1 ? "&" : "?") + this.formatParams(params), null, handler, null, waitResponse);
  };
  $.post = function(url, params, handler, waitResponse){
    return this.request("POST", url, params = this.formatParams(params), handler, {
      "Connection": "close",
      "Content-Length": params.length,
      "Method": "POST " + url + " HTTP/1.1",
      "Content-Type": "application/x-www-form-urlencoded; charset=iso-8859-1"
    }, waitResponse);
  };
  $.request = function(method, url, params, handler, headers, waitResponse){
    var i, o = this.getConnection(), f = handler instanceof Function;
    try{
      o.open(method, url, !waitResponse);
      waitResponse || (o.onreadystatechange = function(){
        var s = $.events[o.readyState];
        f ? handler(o) : s in handler && handler[s](o);
      });
      o.setRequestHeader("HTTP_USER_AGENT", "XMLHttpRequest");
      for(i in headers)
        o.setRequestHeader(i, headers[i]);
      o.send(params);
      waitResponse && (f ? handler(o) : handler["end"] && handler["end"](o));
      return true;
    }
    catch(e){
      return false;
    }
  };
  $.defHandler = function(o){
    if(o.readyState == 4){
      if($.div!=null){
        document.getElementById($.div).innerHTML = o.responseText;
      }
    }
  }
}

function serialize(f){
  var fs=Array();
  for(var x=0; x<f.length; x++){
    fs[f[x].name]=f[x].value;
  }
  return fs;
}

var Ajax = new HTTPRequest;
function myHandler(o){
  if(o.readyState == 4){
    alert(o.responseText);
  }
}