// Classe AJAX
// Por: Wanderson C. Bragança
// wanderson.uft@gmail.com
// Versão 2.0.1 (19/08/2006)
//----------------------------------------------------------------------------------------------
function wajax(url,id_resultado)
{
	
	this.url=url;
	this.termo_pesquisa=null;
	this.id_resultado=id_resultado;
	this.ajax=openAjax;
	this.parametros=null;
	this.erro=null;
	this.metodo="GET";
	this.executar=executar;
	this.avalia_argumento=avalia_argumento;
	this.add_parametros=add_parametros;
	this.httpStatus=httpStatus;
	this.add_funcao=null; //----------Recebe funções-------------------//
	this.carregando="<div id='carregando' ><img src='imagens/carregando.gif' alt='' /></div>";
	//this.carregando_mini="<div id='carregando'><img src='img/mini_carregando.gif' alt='' /></div>";
	this.add_atributo = add_atributo;

}
//----------------------------------------------------------------------------------------------
//-- CRIA OBJETO AJAX --\\	
function openAjax()
{
		if(typeof(XMLHttpRequest)!='undefined')
		{
			return new XMLHttpRequest();
		}
        	var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
        for(var i=0;i<axO.length;i++)
		{
			try{
				return new ActiveXObject(axO[i]);
			}catch(e){} 
		}
        return null;
}//--xxxxx FIM OBJ OJETO xxxxxx--\\	
//----------------------------------------------------------------------------------------------
function executar()
{	
	var ajax      = this.ajax();
	var funcao    = this.add_funcao;
	var resultado = document.getElementById(this.id_resultado);
	var carregando= this.carregando;
	var html      = this.add_html;
	if(this.erro) resultado.innerHTML=this.erro;
	else 
	{
		if(ajax)
		{
			if(this.parametros)
			{//------ Se tiver parametros acrescenta na URL-----\\
				this.url =this.url+"?"+this.parametros;
		    }
			this.url = limpa_cache(this.url); //função para limpar o cache   	
			if(this.metodo=="GET")
			{
				ajax.open(this.metodo, this.url, true); // Envia o termo da busca 	
				ajax.setRequestHeader('Cache-Control', 'no-cache');
		        ajax.setRequestHeader("Pragma", "no-cache");
			}
			else if(this.metodo=="POST")
			{
				ajax.open(this.metodo, this.url, true); // Envia o termo da busca  
				ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
				ajax.setRequestHeader('Cache-Control', 'no-store, no-cache, must-revalidate');
    		    ajax.setRequestHeader('Cache-Control', 'post-check=0, pre-check=0');
		        ajax.setRequestHeader("Pragma", "no-cache");
			}
			else
			{
				this.erro = 'M&eacute;todo de envio inv&aacute;lido.';
				return resultado.innerHTML=this.erro;
			}
			ajax.onreadystatechange = function()
			{
				if(ajax.readyState == 1)
				{ // Quando estiver carregando, exibe: carregando...
					if(carregando!=null && carregando!='undefined')
					resultado.innerHTML = carregando;
				}
				if(ajax.readyState == 4) 
				{ // Quando estiver tudo pronto.
					if(ajax.status == 200) 
					{

						var elemento_retorno = ajax.responseText; 
						// Coloca o resultado (da busca) retornado pelo Ajax          
			        	elemento_retorno = elemento_retorno.replace(/\+/g," "); 
						// Resolve o problema dos acentos 
						elemento_retorno = unescape(elemento_retorno);          
						// Resolve o problema dos acentos	*/	
					
						resultado.innerHTML = elemento_retorno;
						if(funcao)
						{
							funcao();	
						}						
					} 
					else 
					{
						resultado.innerHTML = "Falha no carregamento."+httpStatus(ajax.status);;

					}

				}
			}// fim ajax.onreadystatechange	
		}
		ajax.send(null);
	}
}
//----------------------------------------------------------------------------------------------
// ---- FUNÇÃO PARA ADICIONAR ATRIBUTOS -------
function add_atributo(nome,arg)
{ 
	if (this.avalia_argumento(arg))
	{
		try {
   		   	eval('this.' + nome + ' = \'' + arg + '\'');
      		return true;
   		} catch (e) {
      		this.erro = 'Erro ao tentar criar o atributo ' + nome + ' no objeto Ajax\n' + e;   
   		}
	}
}

//----------------------------------------------------------------------------------------------

//-- FUNÇÃO PARA VERIFICAR PARAMETROS RECEBIDOS --\\	
function avalia_argumento(arg)
{ 

		if (arg != null && arg != '' && arg != 'undefined') return true; 
        this.erro = 'N&atilde;o pode ser vazia'; 
   		return false; 
    
}//--xxxxx FIM FUNÇÃO PARA VERIFICAR PARAMETROS RECEBIDOS xxxxxx--\\	 
	
//----------------------------------------------------------------------------------------------
//--xxxxx FUNÇÃO PARA ADICIONAR PARAMETROS xxxxxx--\\		
function add_parametros(nome_var, arg)
{ 

		if (this.avalia_argumento(arg))
	  	{ 
      	 if (this.parametros != null) this.parametros += '&' + nome_var + '=' + arg; 
      	 else this.parametros = nome_var + '=' + arg; 
      	} 
      	else
		{
		 if (this.parametros != null) this.parametros += '&' + nome_var + '=' + ''; 
      	 else this.parametros = nome_var + '=' + '';
		 this.erro=null;
		}		
		
//this.erro="Erro ao Adicionar parametros\nVariavel&nbsp;&nbsp;"+nome_var + "&nbsp;&nbsp;"+this.erro; 			
}//--xxxxx FIM  FUNÇÃO PARA ADICIONAR PARAMETROS xxxxxx--\\	
//----------------------------------------------------------------------------------------------		
//-- Tratamento de ERROS 
function httpStatus(stat){ 
switch(stat){
            case 0: return "Erro desconhecido de javascript";
            case 400: return "400: Solicita&ccedil;&atilde;o incompreensível"; break;
            case 403: case 404: return "404: N&atilde;o foi encontrada a URL solicitada"; break;
            case 405: return "405: O servidor n&atilde;o suporta o m&eacute;todo solicitado"; break;
            case 500: return "500: Erro desconhecido de natureza do servidor"; break;
            case 503: return "503: Capacidade m&aacute;xima do servidor alcançada"; break;
            default: return "Erro " + stat + ". Mais informa&ccedil;&otilde;es em http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"; break;
        }
}
//----------------------------------------------------------------------------------------------		
//-- limpa Cache do navegador
function limpa_cache(aurl)
{
        var dt = new Date();
        if(aurl.indexOf("?")>=0)
		{// já tem parametros
            return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());
        }else
		{				
			return aurl + "?" + encodeURI(Math.random() + "_" + dt.getTime());			
		}
}
//----------------------------------------------------------------------------------------------		
// - Efeito aparecer ---------\\
function opacity(id, opacStart, opacEnd, millisec) {
    var speed = Math.round(millisec / 20);
    var timer = 0;
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("aparecer(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("aparecer(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }

	}

}

function aparecer(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "Alpha(opacity=" + opacity + ")";
}
//----------------------------------------------------------------------------------------------	

