document.xmlhttp_js = true;

function XmlHttp(){

	var xmlhttp = false;
	var busy = false;

/*@cc_on @*/
/*@if (@_jscript_version >= 5)
// Usamos compilaci?n condicional para evitar errores en
// versiones de Internet Explorer antiguas.
var ids = ["Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0",
  "Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP",
  "Microsoft.XMLHTTP"];
for(var i=0; !xmlhttp && i<ids.length; i++) {
	try{ xmlhttp = new ActiveXObject(ids[i]); }
	catch(ex) { xmlhttp = false; }
}
@end @*/

	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	}


	/**
	 *
	 * Realiza una peticion por HTTP(por GET o POST) a la URL especificada y con los parametros especificados y devuelve el resultado en
	 * un elemento  HTML o bien evalua el resultado obtenido como c?digo JavaScript.
	 *
	 * @param string	sURL:  url donde se realiza la peticion
	 * @param string	sQueryString:  parametros a pasar por get o post
	 * @param string	sMethod:  GET o POST
	 * @param string	element:  id o elemento donde se va a cargar el texto obtenido (salvo que se quiera evaluar dicho texto como c?digo javascript)
	 * @param bool	bAsync: si se realiza una llamada asincrona o no (sincrona)
	 * @param string	sHTTPUser: login del usuario HTTP para poder acceder a la URL solicitada
	 * @param string	sHTTPPassword: password del usuario HTTP para poder acceder a la URL solicitada
	 * @param string sTextoCargando Texto que se muestra mientras se carga el resultado. Si es null no se mostrara ningun texto
	 *
	 * @return bool	si se ha lanzado la peticion o no
	 * @access public
	 */
	this.requestXML =
	function (sURL, sQueryString, sMethod, element, bAsync, sHTTPUser, sHTTPPassword, sTextoCargando) {
		var elem;
		if (typeof(element)=="string")
			elem = document.getElementById(element);
		else
			elem = element;

		var bEvaluar = (elem==null);

		if (busy) return false;

		//para evitar que cachee estas paginas el IExplorer enviamos siempre
		//un parametro con el timestamp actual
		sQueryString = (new Date().getTime())+"&"+sQueryString;

		if (elem && (sTextoCargando!==null)){
			if (sTextoCargando==undefined)
				elem.innerHTML = 'Cargando ...';
			else
				elem.innerHTML = sTextoCargando;
		}

		if ((sMethod==undefined) || (sMethod.toLowerCase()!="get")){
			sMethod = "POST";
		}else{
			sMethod = "GET";
			sURL+=("?"+sQueryString);
		}
//prompt('',sURL);
		busy = true;
		//try{
			xmlhttp.open(sMethod, sURL, bAsync, sHTTPUser, sHTTPPassword);

		//}catch(ex){}
		xmlhttp.onreadystatechange =
			function(){
				if (xmlhttp.readyState == 4){
					if(xmlhttp.status == 200) {
						if (bEvaluar){
							// si NO usamos el DOM
							//try{
								eval(xmlhttp.responseText); //se evalua el texto devuelto como javascript
							//}catch(ex){}
						}else{
							// si usamos el DOM
							try{
								if (elem){
									//alert(xmlhttp.responseText);
									elem.innerHTML = xmlhttp.responseText; //se incluye el texto devuelto como
								}
							}catch(ex){};
						}
					}else{
						throw new Error('Error en la solicitud XMLHttp');
					}
					busy = false;
				}//if
			}//function

		//try{
			if (sMethod=="POST"){
				xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlhttp.send(sQueryString);
			}else{
				xmlhttp.send(null);
			}
		//}catch(ex){}
		return true;
	}

	/**
	 *  Realiza una peticion HTTP a la url especificada y carga el resultado
	 * devuelto por la misma en el elemento HTMl con el id especificado
	 * @param String sURL URL a la que se va a llamar para conseguir el resultado XML
	 * @param String sQueryString Parametros que se van a pasar a la url
	 * @param String sIdElement ID del elemento donde se va a cargar el resultado devuelto por la respuesta
	*/
	this.cargarResultado =
	function(sURL, sQueryString, sIdElement, sTextoCargando){
		this.requestXML(sURL, sQueryString, "get", sIdElement, true, null, null, sTextoCargando);
	}

	/**
	 * Realiza una peticion HTTP a la url especificada y evalua el resultado
	 * devuelto por la misma como si de c?digo javasctript se tratase
	 *	@param String sURL: url a la que se va a llamar para conseguir el resultado XML
	 *	@param String sQueryString: parametros que se van a pasar a la url
 	 */
	this.evaluarResultado =
	function(sURL, sQueryString){
		this.requestXML(sURL, sQueryString, "get", null, true);
	}
}

XmlHttp.prototype.toString =
function(){
	return "[object XmlHttp]";
}
