
/***[AJAX]***/
var _HTTPFactories = [
  function () { return new XMLHttpRequest(); },
  function () { return new ActiveXObject("Msxml.XMLHTTP"); },
  function () { return new ActiveXObject("Microsoft.XMLHTTP"); }
];

var _HTTPFactory = null;

function HTTPRequest() {
  if(_HTTPFactory) return _HTTPFactory();
  for(var i=0; i < _HTTPFactories.length; i++) {
    try {
      var factory = _HTTPFactories[i];
      var request = factory();
      if(request != null) {
        _HTTPFactory = factory;
        return request;
      }
    }
    catch(e) { continue; }
  }
  alert("NoHttpRequest");
}

//On pourrait dire que si il y a un callback... quoi ?!
//FIXME: rename as get and post
//cbk(status, content)
function get(path, cmd, cbk) {
  var req = HTTPRequest();
  cbk = cbk || function(status, text) { alert("Unhandled response(" + status + "): " + text); };

  var opt = new Array(); /* FIXME: obj to URL: {prop:{sub_prop:value}} => prop.sub_prop=value */
  if(cmd)
    for(key in cmd)
      opt.push(encodeURIComponent(key) + "=" + encodeURIComponent(cmd[key]));

  req.onreadystatechange = function() {
    if(req.readyState == 4)
      cbk(req.status, req.responseText);
    //else alert(req.readyState);
  };

  req.open("GET", path + (opt.length ? "?" + opt.join("&") : ""), true);
  req.send(null);
  return false;
}

//On pourrait dire que si il y a un callback... quoi ?!
//FIXME: rename as get and post
function post(path, cmd, cbk) {
  var req = HTTPRequest();
  cbk = cbk || function(status, text) { alert("Unhandled response(" + status + "): " + text); };
  var opt = new Array(); /* FIXME: obj to URL: {prop:{sub_prop:value}} => prop.sub_prop=value */
  if(cmd) for(key in cmd) { opt.push(encodeURIComponent(key) + "=" + encodeURIComponent(cmd[key])); }
  req.onreadystatechange = function() {
    if(req.readyState == 4) { cbk(req.status, req.responseText); }
    //else alert(req.readyState);
  };
  req.open("POST", path, true);
  req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  req.setRequestHeader("Content-length", opt.join("&").length);
  //req.setRequestHeader("Connection", "close");
  req.setRequestHeader("Referer", "google.com");
  req.send(opt.join("&"));
  return false;
}

