/***************************
*    Classe Ajax
*    - Cria o objeto ajax
*    - Faz a busca em uma página 
*    - Retorna o resultado
* 
* Parametros
* url      : url que o ajax ira executar
* metodo   : tipo de envio de dados, por padrão é GET
* params   : parametros com os dados de envio, somente se o metodo for POST , por padrão é null
* processa : resultado 
* modo     : Tipo de arquivo que o ajax ira retornar X para 'xml' e T para 'texto'
  *****************************/

function AJAX(url, metodo, params, processa, modo, retorno)
{
    this.url                 = url;
    this.metodo             = (metodo) ? metodo : 'GET';
    this.params             = (metodo='GET') ? null : params;
    this.processaresultado     = processa;
    this.modo                = (modo) ? modo : 'T';
	this.tiporetorno = 0;
	this.varretorno = null;
    this.retorno	= 	retorno;
	
    /* T = Text , X = XML */
    if( this.modo != 'T' && this.modo != 'X' ){
        this.modo = 'T';
    }
	
	this.processaresultado = processaresultado;
	this.funcao_aux = function(){ }
    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();
                    
                /* IE */
                } 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;
					 document.getElementById(this.retorno).innerHTML = "<span style='font-family: Arial, Helvetica, sans-serif;font-size: 14px;color: #cc0000;font-weight: bold;text-decoration: none;'><b>Aguarde, carregando informações...</b><img src='/img/indicator.gif'  /></span>";
                    this.httprequest.onreadystatechange = function(){
                                                                obj.processaretorno.call(obj);
                                                            }
                    this.httprequest.open(this.metodo,this.url, true);
					if(this.metodo == 'POST')
					{
						this.httprequest.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");
					}
                    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.metodo == 'POST')
								{
									 resp = resp.replace(/\+/g," ");
									 resp = unescape(resp);
								}
									 
                                if( this.processaresultado != null ){
                                    //alert(resp);
									if(this.tiporetorno == 0)
									{
                                    	this.processaresultado(resp,  this.retorno);
									}
									else
									{
										this.varretorno = resp;
									}
									this.funcao_aux();
									//Layer6.style.visibility= 'hidden';
                                } else {
									 this.processaresultado("erro="+resp,  this.retorno);
                            }
                            } else {
                                this.processaerro();
                            }
                        }
						/*else
						{
							Layer6.style.visibility= 'visible';
						}*/
                    }, // fim processaretorno

    /*
        Cria o método processaerro()
        Retorna um alert de erro, caso houver
    */                    
    processaerro:     function(){
						this.processaresultado(this.httprequest.status + '-' + this.httprequest.statusText + ' :-> ' + this.url,  this.retorno);
                    }            
}
function processaresultado(retorno,idDivSpan){

         // Coloca o resultado na div 'retorno'
    document.getElementById(idDivSpan).innerHTML= retorno;
	
	//retorna xml tem que implementar
                                                
}