	/**
    * @author Heber
    */
	/**********************************************************************
	* Framework Javascript                                                *
	* Desenvolvimento : Heber Aragão 									  *
	* Data : 12/03/2007													  *
	* Objetivo : Esta Classe tem por Objetivo facilitar o uso do Ajax     *
	* (Assincronus javascript and XML)                                    *	
	* 																	  *
	* Classe AJAX                    							          *
	***********************************************************************/
    
    // classe que cria o objeto HttpRequest
	function ajax(vmetodo,vurl,vheader,vdiv) 
	{	
		/* Declaração dos atributos ou propriedades da classe*/			
		var obj    = undefined;
		var metodo = "";
		var url    = "";
		var user   = "";
		var pass   = "";
		var header = "";
		var div    = "";
		
		/* decalração de Métodos da classe */		
		this.ajax              = ajax;
		this.startAjax         = startAjax;
		this.openAjax          = openAjax;
		this.header            = header;
		this.getStatusLeitura  = getStatusLeitura;
		this.getStatus         = getStatus;
		this.getStatusText     = getStatusText;
		this.resposta          = resposta;
		this.envia             = envia;
		this.enviaExecuta      = enviaExecuta;
		this.enviaTestaExecuta = enviaTestaExecuta;
		this.enviaExecJson     = enviaExecJson; 
		
		/* Construtor */
		ajax(vmetodo,vurl,vheader,vdiv);
		
		// método construtor da classe
		function ajax(vmetodo,vurl,vheader,vdiv)
		{
			// seta os Atributos
			metodo = vmetodo;
			url    = vurl;
			header = vheader;
			div    = vdiv;
			startAjax();		
		}
		
		// starta o objeto XMLHttpRequest
		function startAjax()
		{				
		    try
		    {
		       obj = new XMLHttpRequest(); // XMLHttpRequest para: Firefox, Opera, Safari.
		    }
		    catch(ee)
		    {		
		        try
		        {
		           obj = new ActiveXObject("Msxml2.XMLHTTP"); // Para o IE da MS
		        }
		        catch(e)
		        {
		            try
		            {
		               obj = new ActiveXObject("Microsoft.XMLHTTP"); // Para o IE da MS
		            }
		            catch(E)
		            {
		               obj = false;
		            }
		        }
		    }									
		}	
		
		// abre o ajax passando o arquivo
		function openAjax(sinc,vuser,vpass)
		{
			user = vuser;
			pass = vpass;
			
			if((user != "")&&(pass != ""))
			{
				if(sinc == 1)
				{
					obj.open(metodo,url,true,user,pass);	
				}
				if(sinc == 0)
				{
					obj.open(metodo,url,false,user,pass);	
				}	
			}	
			else
			{
				if(sinc == 1)
				{
					obj.open(metodo,url,true);	
				}
				if(sinc == 0)
				{
					obj.open(metodo,url,false);	
				}	
			}							
			obj.setRequestHeader("Content-Type",header);							
		}		
		
		// verifica o estatus enquando lê o arquivo (status de leitura)
		function getStatusLeitura()
		{						
			return obj.readyState;						
		}
		
		// verifica o status final do arquivo
		function getStatus()
		{			
			return obj.status;					
		}		
		
		// verifica o texto do status final do arquivo
		function getStatusText()
		{			
			return obj.statusText;					
		}	
		
		// retorna a resposta do arquivo chamado
		function resposta()
		{
			return obj.responseText;		
		}
									
		// submete o arquivo simplesmente
		function envia(param,mens,ret)
		{	
			// verifica quando for o evento de leitura qual é o status que retonou	
			obj.onreadystatechange = function()
			{			
				// enquanto estiver lendo o arquivo
				if((getStatusLeitura() == 1)||(getStatusLeitura() == 2)||(getStatusLeitura() == 3))
				{		
					div.innerHTML = "<div id='res'>"+mens+"</div>";
				}				
			
				// Quando estiver tudo pronto.
				if(getStatusLeitura() == 4) 
				{ 
					// se não retornou erro
					if(getStatus() == 200) 
					{						
						if(ret)
						{
							// Retorna o resultado em um alert tratando problema dos acentos.						
							alert(unescape(resposta().replace(/\+/g," ")));	
							div.innerHTML = " ";
						}
						else
						{
							// Retorna o resultado tratando problema dos acentos.						
							div.innerHTML = unescape(resposta().replace(/\+/g," "));						
						}
					} 
					else // caso retorne algum erro 
					{
						if(ret)
						{
							// Retorna o resultado de erro em um alert tratando problema dos acentos.						
							alert(getStatusText());	
							div.innerHTML = " ";
						}
						else
						{
							div.innerHTML = " <div id='res'> Erro: "+getStatusText()+" </div>";
						}
					}
				}
			};	
			// executa passando o parametro
			obj.send(param); 		
		}	
		
		// submete o arquivo e executa uma função quando terminado
		function enviaExecuta(param,mens,exec,ret)
		{	
			// verifica quando for o evento de leitura qual é o status que retonou	
			obj.onreadystatechange = function()
			{			
				// enquanto estiver lendo o arquivo
				if((getStatusLeitura() == 1)||(getStatusLeitura() == 2)||(getStatusLeitura() == 3))
				{		
					div.innerHTML = "<div id='res'>"+mens+"</div>";
				}
			
				// Quando estiver tudo pronto.
				if(getStatusLeitura() == 4) 
				{ 
					// se não retornou erro
					if(getStatus() == 200) 
					{
						if(ret)
						{
							// Retorna o resultado em um alert tratando problema dos acentos.						
							alert(unescape(resposta().replace(/\+/g," ")));	
							div.innerHTML = " ";
							eval(exec);	
						}
						else
						{
							// Retorna o resultado tratando problema dos acentos.						
							div.innerHTML = unescape(resposta().replace(/\+/g," "));	
							eval(exec);						
						}											
					} 
					else // caso retorne algum erro 
					{
						if(ret)
						{
							// Retorna o resultado de erro em um alert tratando problema dos acentos.						
							alert(getStatusText());	
							div.innerHTML = " ";
						}
						else
						{
							div.innerHTML = " <div id='res'> Erro: "+getStatusText()+" </div>";
						}						
					}
				}
			};	
			// executa passando o parametro
			obj.send(param); 		
		}	
		
		// submete o arquivo e executa uma função quando terminado
		function enviaTestaExecuta(param,mens,teste,exec)
		{	
			// verifica quando for o evento de leitura qual é o status que retonou	
			obj.onreadystatechange = function()
			{			
				// enquanto estiver lendo o arquivo
				if((getStatusLeitura() == 1)||(getStatusLeitura() == 2)||(getStatusLeitura() == 3))
				{		
					div.innerHTML = "<div id='res'>"+mens+"</div>";
				}
			
				// Quando estiver tudo pronto.
				if(getStatusLeitura() == 4) 
				{ 
					// se não retornou erro
					if(getStatus() == 200) 
					{
						// Retorna o resultado tratando problema dos acentos.						
						div.innerHTML = unescape(resposta().replace(/\+/g," "));
						if(eval(teste))
						{
							eval(exec);													
						}
					} 
					else // caso retorne algum erro 
					{
						div.innerHTML = " <div id='res'> Erro: "+getStatusText()+" </div>";
					}
				}
			};	
			// executa passando o parametro
			obj.send(param); 		
		}	
		
		// submete o arquivo e executa uma função quando terminado
		function enviaExecJson(param,mens,exec)
		{	
			// verifica quando for o evento de leitura qual é o status que retonou	
			obj.onreadystatechange = function()
			{			
				// enquanto estiver lendo o arquivo
				if((getStatusLeitura() == 1)||(getStatusLeitura() == 2)||(getStatusLeitura() == 3))
				{		
					div.innerHTML = "<div id='res'>"+mens+"</div>";
				}
			
				// Quando estiver tudo pronto.
				if(getStatusLeitura() == 4) 
				{ 
					// se não retornou erro
					if(getStatus() == 200) 
					{
						// Retorna o resultado tratando problema dos acentos.						
						var strJson = unescape(resposta().replace(/\+/g," "));						
						
						// cria o objeto JASON
						JSON = eval("("+strJson+")");
						div.innerHTML = " ";		
						eval(exec);						
					} 
					else // caso retorne algum erro 
					{
						div.innerHTML = " <div id='res'> Erro: "+getStatusText()+" </div>";
					}
				}
			};	
			// executa passando o parametro
			obj.send(param); 		
		}	

	}