var esIE=document.all;
var serverData;
function AJAX(){
	this.responseText = null;
	this.responseXML = null;
	this.status = null;
	
	this.getXmlHttp= function(){
		var xmlhttp = null;
		try{
			xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			}catch (E) {}
		}
	
		if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
			xmlhttp = new XMLHttpRequest();
		}
		return xmlhttp;
	} // this.getXmlHttp
	
	this.dispose = function(){
		this.XMLHTTP = null;
	}  // dispose
	
	this.download = function(url, params, method){
		if(arguments.length==2){
			method = "GET"
		}
	
		this.XMLHTTP = this.getXmlHttp();
		if(this.XMLHTTP){
			xmlhttp = this.XMLHTTP;
			xmlhttp.open(method,url,false); //Async = false
			var params = this.getParamsString(params)
			if (params!=null){
				xmlhttp.setRequestHeader("Content-Length",params.length);
				xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
			}
			xmlhttp.send(params);
			if(esIE){
				var xmldoc = new ActiveXObject("Microsoft.XmlDom");
				xmldoc.async = false;
				xmldoc.loadXML(xmlhttp.responseText);
				if(xmldoc.parseError.errorCode != 0){
					return null;
				}else{
					return xmldoc;
				}
			}else{
				return xmlhttp.responseXML;
			}
		}
	}  // this.download
	
	this.startDownload = function(url, params, method){
		/*if(params!=null){
		debug.writeLine(url + "&" + this.getParamsString(params))
		}*/
		if(arguments.length==2){
			method = "GET"
		}
	
		this.XMLHTTP = this.getXmlHttp();
		if(this.XMLHTTP){
			xmlhttp = this.XMLHTTP;
			xmlhttp.open(method,url,true); //Async = true
			var miObj = this;
			xmlhttp.onreadystatechange = function(){
				if(xmlhttp.readyState==4){//readystatechange: 0=sin inicializar | 1=cargando | 2=cargado | 3=interactivo | 4=completado
					miObj.status = xmlhttp.status;
					//miObj.responseText = xmlhttp.responseText;
					if(esIE){
						//Bug del explorer
						var xmldoc = new ActiveXObject("Microsoft.XmlDom");
						xmldoc.async = false;
						xmldoc.loadXML(xmlhttp.responseText);
						if(xmldoc.parseError.errorCode != 0){
							miObj.responseXML = null;
						}else{
							miObj.responseXML = xmldoc;
						}
					}else{
						miObj.responseXML = xmlhttp.responseXML;
					}
					miObj.onDownloadComplete();
				}
			}  // onreadystatechange
	
			var params = this.getParamsString(params)
			if (params!=null){
				xmlhttp.setRequestHeader("Content-Length",params.length);
				xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
			}
	
			xmlhttp.send(params);
		}
	}  // this.startDownload
	
	this.getParamsString = function(params){
		if(!params) return null;
		var strParams = "";
		for(var i=0;i<params.length;i++){
			var keyValueObj = params[i];
			if(i>0) strParams += "&";
			strParams += keyValueObj.key + "=" + escape(keyValueObj.value);
		}
		if(strParams=="") strParams = null;
		return strParams;       
	} // this.getParamsString 
	
	this.onDownloadComplete=function(){};

} // AJAX

function KeyValue(key,value){
	this.key = key;
	this.value = value;
}
