var timeoutId, request;

//Típica llamada a la función: httpRequest("GET",url,true)

/* Función envoltura para construir un objeto Request.
 Parametros:
  reqType: El método de pedido de HTTP: tal como GET o POST.
  url: El URL del archivo(programa) que se llama en el servidor.
  asynch: Si el pedido es asíncrono o no: true o false. */

function httpRequest(reqType,url,asynch){
    //Navegadores tipo Mozilla
    if(window.XMLHttpRequest){
        request = new XMLHttpRequest();
        initReq(reqType,url,asynch);
    } else if (window.ActiveXObject){
        request=new ActiveXObject("Msxml2.XMLHTTP");
        if (! request){
            request=new ActiveXObject("Microsoft.XMLHTTP");
        }
        if(request){
            initReq(reqType,url,asynch);
        }
    } else {
        alert("El navegador no permite el uso del método XMLhttp!");}
}

//Manejador de eventos del XMLHttpRequest
function handleCheck(){
  if(request.readyState == 4){
    clearTimeout(timeoutId);
    if(request.status == 200){
      //A continuación la respuesta se está implementando como texto; hay también otras formas
     //xmlReturnVal = request.responseText;
      //alert(xmlReturnVal);
        document.getElementById(ajaxdiv).innerHTML = request.responseText;
     } else {
      alert("Ha surgido un problema de comunicacion entre el objeto XMLHttpRequest y el programa en el servidor.");
    }
  }
 }
 
 function warn(){
   request.abort();
   alert("La comunicacion con el servidor esta tomando mucho tiempo. Asegurese que hay conexion a Internet y trate de nuevo en un momento.");
 }
 
 
 /* Función de inicialización si objeto ya está construído */
function initReq(reqType,url,bool){
   /* Especifica la función que manejará la respuesta HTTP del servidor */
   request.onreadystatechange=handleCheck; 
   request.open(reqType,url,bool);
   timeoutId = setTimeout(warn,50000);
   request.send(null);
}

