/*==============================================================================================
--| Objeto AJAX para comunicação Assincrona com um servidor de aplicações WEB
==============================================================================================*/
function AJAX(url, metodo, params, processa, modo) {
	this.url = url;
	this.metodo = (metodo) ? metodo : 'GET';
	this.params  = (metodo='GET') ? "" : params;
	this.retorno = processa;
	this.modo = (modo) ? modo : 'T';
	if (this.modo != 'T' && this.modo != 'X') { this.modo = 'T'; }
	this.conectar();
}

AJAX.prototype = {
	
	// Instancia o objeto e faz a chamada a assincrona
	conectar: function() {
		if (this.url == undefined || this.url == '') {
			return; 
		}
		this.httprequest = null;
	   	if (window.XMLHttpRequest) { // Mozilla, Safari,...
	     	this.httprequest = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // IE
	     	try {
		     	 this.httprequest = new ActiveXObject("Msxml2.XMLHTTP");
	     	} catch (e) {
	       		try {
	           	 this.httprequest = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (e) {}
			}
		}
		if (this.httprequest != null && this.httprequest != undefined) {
			var obj = this;
			this.httprequest.onreadystatechange = function() {
				obj.processaRetorno.call(obj);
			}
			if (this.metodo == undefined || this.metodo == '') { this.metodo = 'POST';}
	    	this.httprequest.open(this.metodo, this.url, true);
			
			// Cabeçalho pra evitar CACHE
			this.httprequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
			this.httprequest.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
			this.httprequest.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
			this.httprequest.setRequestHeader("Pragma", "no-cache");
			
	        this.httprequest.send(this.params);
		}
	},
	
	// Processa o retorno
	processaRetorno: function() {
		if (this.httprequest.readyState == 4) {
			if (this.httprequest.status == 200) {
				var resp = (this.modo == 'T') ? this.httprequest.responseText : this.httprequest.responseXML;
				if (this.retorno != null) {					
					// Trata os caracteres acentuados no ASP
					if (this.modo == 'T') {
						resp = resp.replace(/\+/g," ");
						//resp = unescape(resp); 
					}					
					this.retorno(resp);
				} else {
					document.write(resp);
				}
			} else { 
				this.processaErro();
			}
		}
	},

	// Exibe um alert() com a descrição do ERRO
	processaErro: function() {
		alert(this.httprequest.status + '-' + this.httprequest.statusText + ' :-> ' + this.url);
	}
}

/*==============================================================================================
--| Inclui uma nova página em uma DIV específica
--| Params.: Página e DIV
==============================================================================================*/
function IncluiPagina(url, id) {

	var ajax = new AJAX();
	ajax.url = url;	
	ajax.metodo = "POST";
	ajax.retorno = function(texto) {
		document.getElementById(id).innerHTML = texto;
	}
	ajax.conectar();
}
