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
** @param method Es el tipo de m?todo HTTP que se har?, puede tomar los valores GET o POST
** @param params Son los par?metros que se pasan en la peticion mediante ajax si se utiliza el m?todo POST
**
** @return N/A
*/
function ajaxRequest(url, responseHandler, responseType, asynchronous, method, params){
	try{
		xmlReq = newXMLHttpRequest();
		xmlReq.onreadystatechange = getReadyStateHandler(xmlReq, responseHandler, responseType);
		xmlReq.open(method, url, asynchronous);		
		xmlReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlReq.send(params)
	}
	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 = 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;
	}						
}

