// Esta funcion se escribe solo para crear una instancia del elemento XMLHttpRequest()
// Sirve para Ajax o AHAH
function createREQ() {
try {
     req = new XMLHttpRequest(); /* p.e. Firefox */
     } catch(err1) {
       try {
       req = new ActiveXObject('Msxml2.XMLHTTP'); /* algunas versiones IE */
       } catch (err2) {
         try {
         req = new ActiveXObject("Microsoft.XMLHTTP"); /* algunas versiones IE */
         } catch (err3) {
          req = false;
         }
       }
     }
     return req;
}

// Para las peticionmes Get
function requestGET(url, query, req, sincronicidad) {
myRand=parseInt(Math.random()*99999999);
req.open("GET",url+'?'+query+'&rand='+myRand, sincronicidad);
req.send(null);
}

// Para las peticiones POST
function requestPOST(url, query, req, sincronicidad) {
req.open("POST", url, sincronicidad);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); // Debe ir si es POST
req.send(query);
}

// Es la que realiza la llaada a al funcion una vez que se recupero
// los datos
function doCallback(callback,item) {
eval(callback + '(item)');
}

// Es la funcion principal. El gestor de eventos debe llamar a doAjax
// url es la pagina php a la que llamamos para que nos de datos
// query son los parametros de la peticion. De4be estar codificada
// callback es la funcion que queremos que se ejecute a la vuelta. Esta en la pagina principal
//               y es la encargada de hacer algo con los datos recibidos
// reqtype indica si es una peticion GET o POST
// getxml debe ser 'xml' o 'text'. 'xml' indica que es XML, y es texto si ponemos 'text'.
// sincronico es el tipo de llamado: true es asincronico, false es sincronico
function doAjax(url,query,callback,reqtype,getxml,sincronicidad) {
// crea la instancia del objeto XMLHTTPRequest 
var myreq = createREQ();

myreq.onreadystatechange = function() {
if(myreq.readyState == 4) {
   if(myreq.status == 200) {
      var item = myreq.responseText; // Si es 'text' usa la parte de texto
      if(getxml.toUpperCase()=='XML') {
         item = myreq.responseXML; // Si es unop usa la parte de XML
      }
      doCallback(callback, item);
    }
  }
}

if(reqtype.toUpperCase()=='POST') {
requestPOST(url,query,myreq, sincronicidad);
} else {
requestGET(url,query,myreq, sincronicidad);
}
}

