/**
 * Classe Ajax, responsável por criar o objeto XMLHttpRequest
 * url --> página a ser enviada a requisição
 * metodo -> GET/POST
 * params -> Se metodo fo POST, passara os parâmetros
 * processa -> função que processará o resultado da ação
 * modo -> Tipo de resposta (Texto ou XML)
*/

var isIE=false;
function Ajax(){
	if (this.modo!='T'&&this.modo!='X'){
		this.modo='T';
	}
	this.assync = true;
	this.conectar();
}

Ajax.prototype = {
	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) {}
				}
				isIE = true;
			}
			if (this.httpRequest!=null && this.httpRequest!= undefined){
				var obj = this;
				this.httpRequest.onreadystatechange =
					function(){
						obj.processaRetorno.call(obj);
					};
				this.httpRequest.open(this.metodo, this.url, this.assync);
				if (this.metodo=="POST"){
					// Setando Content-type e o encode - UTF-8 para POST
					this.httpRequest.setRequestHeader("content-type", "application/x-www-form-urlencoded");
					// Comprimento do conteúdo=comprimento dos dados a enviar
					this.httpRequest.setRequestHeader("Content-length", this.params.length);
				}else{
					// Setando Content-type e o encode - ISO-8859-1 para GET
					this.httpRequest.setRequestHeader("Content-Type", "text/html");
				}
				this.httpRequest.send(this.params);
			}
		},
	processaRetorno:
		function(){
			if (this.assync==true){
				if (this.httpRequest.readyState==4){
					if (this.httpRequest.status==200){
						var resp = (this.modo=='T') ? this.httpRequest.responseText : this.httpRequest.responseXML;
						if (this.processaResultado!=null){
							this.processaResultado(resp);
						}else{
							document.write(resp);
						}
					}else{
						this.processaErro();
					}
				}
			}else{
				var resp = (this.modo=='T') ? this.httpRequest.responseText : this.httpRequest.responseXML;
				if (this.processaResultado!=null){
					this.processaResultado(resp);
				}else{
					document.write(resp);
				}
			}
		},
	processaErro:
		function(){
			alert(this.httpRequest.status+' - '+this.httpRequest.statusText+' :-> '+this.url);
		}
};

function getElementTextNS(prefix, local, parentElem, index) {
	var result = "";
	if (prefix && isIE) {        
		result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
	} else {        
		result = parentElem.getElementsByTagName(local)[index];
	}
	if (result) {
		if (result.childNodes.length > 1) {
			return result.childNodes[1].nodeValue;
		} else {
			return result.firstChild.nodeValue;    		
		}
	} else {
		return "n/a";
	}
}

function getElementByName(prefix, local, parentElem, index) {
	var result = "";
	if (prefix && isIE) {        
		result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
	} else {        
		result = parentElem.getElementsByTagName(local)[index];
	}
	if (result) {
		return result;    		
	} else {
		return false;
	}
}