/*
  xhr, another "AJAX" library in 1 KB less

  Copyrights (C) 2009 David Esperalta (dec)

  <david.esperalta@gmail.com>

  <http://www.davidesperalta.com>

  Version: 1.0 (3/6/2009)

  Contiene modificaciones realizadas por Guillermo Martínez.

  xhr is under the GNU LGPL License

*/
function xhr(){

  this.NuevoXMLHttpRequest = function ()
  {
    if (window.XMLHttpRequest) {
      return new XMLHttpRequest ();
    }
  // Asume Microsoft Internet Explorer.
    else if (window.ActiveXObject) {
      var Resultado = new ActiveXObject ("Microsoft.XMLHTTP");
      if (!Resultado)
	Resultado = new ActiveXObject ("Msxml2.XMLHTTP");
      if (Resultado) return Resultado;
    }
    throw "No pudo crearse el objeto XMLHttpRequest";
  }

  this.ex = function(s){

    var
      id = s.id,
      url = s.url,
      user = s.user,
      pass = s.pass,
      query = s.query || '',
      async = s.async && true,
      method = s.method || 'get',

      ref, state, self = this,
      isPost = (method == 'post'),
      xhrobj = this.NuevoXMLHttpRequest (),
      xhruid = 'xhr=' + new Date().getTime();

    url = !isPost ? url += '?' + query : url;
    url += url.indexOf('?') != -1 ? '&' : '?';

    xhrobj.onreadystatechange = function(){
      ref = this;
      state = ref.readyState;
      if(state == 1){
        if(self.pr){
          self.pr(ref);
        }
      }else if(state == 4){
        if(ref.status == 200){
          if(id){
            document.getElementById(id)
             .innerHTML = ref.responseText;
          }
          if(self.ok){
            self.ok(ref);
          }
        }else{
          if(self.er){
            self.er(ref);
          }
        }
      }
    }

    xhrobj.open(method,url+xhruid,async,user,pass);
    xhrobj.setRequestHeader('X-Requested-With',
     'XMLHttpRequest');

    if(isPost){
      xhrobj.setRequestHeader('Content-Type',
       'application/x-www-form-urlencoded'); 
    }

    xhrobj.send(query);
    if (!async)
      self.responseText = xhrobj.responseText;
  }
}
