/*
 * ajax.js es un javascript que contiene funciones de utilidad generales
 * para manejar las peticiones realizadas mediante ajax
 */


 /*
 * Función que se encarga de devolver el objeto XMLHTTPRequest independientemente
 * de estar en navegadores basados en Mozilla o Internet Explorer
 */
function newXMLHttpRequest() {

  var xmlreq = false;

  // Crea objeto XMLHttpRequest en navegadores que no son de Microsoft 
  if (window.XMLHttpRequest) {
    xmlreq = new XMLHttpRequest();

  } else if (window.ActiveXObject) {

    try {
      // Intenta crear XMLHttpRequest en las últimas versiones de
      // Internet Explorer

      xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
      
    } catch (e1) {

      // Fallo al crear el objeto requerido ActiveXObject
      
      try {
        // Intenta otra versión soportado por antiguas versiones
		// de Internet Explorer.
      
        xmlreq = new ActiveXObject("Microsoft.XMLHTTP");

      } catch (e2) {

        // Imposible crear el objeto XMLHttpRequest de ningún modo
        xmlreq = false;
      }
    }
  }

return xmlreq;
}

 /* Devuelve otra función que espera que el estado de la petición representada
  * por el objeto XMLHttpRequest especificado haya terminado su ejecución (ESTADO = 200). 
  * En ese momento pasa la respuesta XML a la función
  * encargada de manejarla
  * req - El objeto XMLHttpRequest cuyo estado está cambiando
  * responseXmlHandler - Función encargada de manejar la respuesta XML que viene en el objeto XMLHttpRequest
  */
 function getReadyStateHandler(req, responseXmlHandler) {

   // Devuelve una función anónima que escucha a la instancia XMLHttpRequest
   return function () {

     // Si el estado de la petición es COMPLETO
     if (req.readyState == 4) {
       
       // Comprobamos que hemos recibido una respuesta con éxito del servidor
       if (req.status == 200) {

         // Enviamos la respuesta XML de la respuesta a la función manejadora.
         responseXmlHandler(req.responseXML);

       } else {

         // En el caso de no ser un código 200, ha ocurrido algún error y devolvemos
		 // el código HTTP error correspondiente mediante un ALERT
         alert("HTTP error "+req.status+": "+req.statusText);
       }
     }
   }
 }
