var AJAX = {
            
    url: '',
    metodo: '',
    parametros: '',
    Header: new Array(),
    modo: '',
    processaResultado: '',
    httpRequest: null,

    construct: function(url, metodo, parametros, processaFunction, modo)
    {                
    	this.url = url;
    	this.metodo = (metodo) ? metodo : 'GET';
    	this.parametros = (metodo == 'GET') ? null : parametros;
    	this.processaResultado = processaFunction;
    	//this.Header = new Array();
    	this.modo = (modo) ? modo : 'T';
    	
    	if(this.modo != 'T' && this.modo != 'X')
    	{
    	   this.modo = 'T';
    	}
    	
    	if(this.metodo == 'POST')
        {
            AJAX.adicionarHeader('Content-Type', 'application/x-www-form-urlencoded; ISO-8859-1');
            AJAX.adicionarHeader('Cache-Control', 'no-store, no-cache, must-revalidate');
            AJAX.adicionarHeader('Cache-Control', 'post-check=0, pre-check=0');
            AJAX.adicionarHeader('encoding', 'UTF-8');
            AJAX.adicionarHeader('Pragma','no-cache'); 
        }
    	
    	this.conectar();
    },

    adicionarHeader: function(tipo, valor)
    {
	   this.Header[tipo] = valor;
	},
	
	deletaHeader: function(tipo)
	{
	   delete(this.Header[tipo]);
	},
	
	setHeader: function() 
	{
	   if(this.httpRequest == null) 
	   { 
	       return;
	   } 

	   for(tipos in this.Header) 
	   {
		  this.httpRequest.setRequestHeader(tipos, this.Header[tipos]);
	   }
	},

    conectar: function() 
    {            
	   if(this.url == undefined || this.url == '')
	   {
	       return; 
	   }

	   //this.httpRequest = null;
	   	   
	   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)
              {
                  alert('erro');
              }
           }
       }
       
       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 = 'GET';
           }
           
           this.httpRequest.open(this.metodo, this.url, true);
           this.setHeader();
           this.httpRequest.send(this.parametros);
       }
    },
    
    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);
    }
}