var xmlReq = null;


/* ajaxRequest
**
** Descripcion: Realiza una petición asíncrona utilizando AJAX.
**
** @param url URL solicitada
** @param responseHandler Función javascript que va a procesar la respuesta
** @param responseType Tipo de datos solicitados IMPORTANTE: SOLO TOMA LOS VALORES 'xml' - 'text' (cadena de caracteres)
** @param asynchronous Indica si la llamada es asíncrona; true -> asíncrona; false -> síncrona
**
** @return N/A
*/
function ajaxRequest(url, responseHandler, responseType, asynchronous){
	try{
		if(xmlReq){
			if(xmlReq.readyState!=0) xmlReq.abort();	
		}
//alert("encima de new")
		xmlReq = newXMLHttpRequest();
//alert("debajo de new")
		xmlReq.onreadystatechange = getReadyStateHandler(xmlReq, responseHandler, responseType);
//alert("debajo de getready")
		xmlReq.open("GET", url, asynchronous);
//alert("debajo de open")
		xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		//xmlReq.send("");
		xmlReq.send(null)
	}
	catch(e){
		return -1;
	}	   		
}


/* GETREADYSTATEHANDLER
** Descripcion: Controla el cambio de estado del atributo readyState. Cuando su valor sea 4 ya se habr? recibido la 
** respuesta del servidor.
** Parametros de Entrada: req es el objeto XMLHttpRquest, responseXmlHandler es la funcion a la que se llamara cuando se haya
** recibido respuesta por parte del servidor
** responseType es el tipo de respuesta esperada IMPORTANTE TOMA LOS VALORES 'xml' - 'text' (cadena de caracteres)
** Parametros de Salida: n.a.*/
function getReadyStateHandler(req, responseHandler, responseType) {
	try{
		return function () {
			var statusOK
			if(responseType == 'text')
				//statusOK = 0;
				statusOK = 200
			if(responseType == 'xml')
				statusOK = 200;
			if (req.readyState == 4) {
				if (req.status == statusOK) {
					if(responseType == 'text')
						responseHandler(req.responseText);
					if(responseType == 'xml')
						responseHandler(req.responseXML);
				}
				else {
					return -1;
				}
			}
		}
	}
	catch(e){
	return -1;
	}	   
}

/* NEWXMLHTTPREQUEST
** Descripcion: Crea el objeto XMLHttpRequest compatible para cualquier navegador
** Parametros de Entrada: n.a.
** Parametros de Salida: n.a.*/
function newXMLHttpRequest(){
	try{
		var xmlreq = false;
		if(window.XMLHttpRequest){
			xmlreq = new XMLHttpRequest();
		}else if(window.ActiveXObject){
			try{
				xmlreq = new ActiveXObject("Msxml2.XMLHTTP");      
			}catch(e1){
				try{
					xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
				}catch(e2){
					xmlreq = false;
				}
			}
		}
		return xmlreq;
	}catch(e){
		return -1;
	}						
}
