

/***************************
*    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)
{
    this.url                = url;
    this.metodo             = (metodo) ? metodo : 'GET';
    this.params             = (metodo='GET') ? 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();

                /* 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;
                    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);
                    }
}