// 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 : 'POST';
    this.params             = (metodo='POST') ? null : params;
    this.processaresultado     = processa;
    this.modo                = (modo) ? modo : 'T';
    
    
    /* T = Text , X = XML */
    if( this.modo != 'T' && this.modo != 'X' ){
        this.modo = 'T';
    }
    
    this.conectar();
}

AJAX.prototype = {
    
    /*
        Cria o método conecter()
        Responsavel pela criação do objeto Ajax ( httprequest )
    */
    conectar: function(){
        
			/* Verifica se URL é válda */
			if( this.url == undefined || this.url == ''){
				return;
			}
			
			/* Cria o objeto httpRequest */
			this.httprequest = null;
			
			/* Mozilla, Safari, FireFox ... */
			if( window.XMLHttpRequest ){
				this.httprequest = new XMLHttpRequest();
			} else if( window.ActiveXObject){
			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);
														}
				this.httprequest.open(this.metodo,this.url, true);
				this.httprequest.send(this.params);

			}
			
		}, // fim conectar

    /*
        Cria o método processaretorno()
        recebe a resposta do responseText ou responseXML
    */            
    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.processaresultado != null ){
					//alert(resp);
					this.processaresultado(resp);
				} else {
					alert("erro="+resp);
			}
			} else {
				this.processaerro();
			}
		}
	}, // fim processaretorno

    /*
        Cria o método processaerro()
        Retorna um alert de erro, caso houver
    */                    
    processaerro:     function(){
                        alert(this.httprequest.status + '-' + this.httprequest.statusText + ' :-> ' + this.url);
                    }            
}

/*
function AJAX(url,metodo,params,processa,modo) {
	this.url = url;
	this.metodo = (metodo) ? metodo : 'POST';
	this.params  = (metodo='POST') ? null : params;
	this.processaresultado = processa;
	this.Header = new Array();
	this.modo = (modo) ? modo : 'T';
	if(this.modo!='T'&&this.modo!='X') {
		this.modo = 'T';
	}
	this.conectar();
}
AJAX.prototype = {
	setHeader:	function() {
					this.httprequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
					//setRequestHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");
					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");
				},
	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) {
										//nao faz nada	
									}
								}
							}
							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);
								this.setHeader();
						        this.httprequest.send(this.params);
							}
						},
	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.processaresultado!=null) {
										this.processaresultado(resp);
									} else {
										document.write(resp);
									}
								} else { 
									this.processaerro();
								}
							}
						},
	processaerro:		function() {
							alert(this.httprequest.status + '-' + this.httprequest.statusText + ' :-> ' + this.url);
						}
}*/


