/***************************************************************************************************************
@Tipo Arquivo: 		JS - Java Script
@Dt. Atualizacao: 	2009-04-17
@Versão:			1.0
@Autor: 			Eduardo Chiaradia (Dunix)
@MSN | E-Mail:		eduardo_chiaradia@hotmail.com
@OBS:				O Conteudo desta pagina tem como objetivo utilizar de maneira facil e dinamica a metodologia ajax.


@Funcoes neste Arquivo
	
	001		$Ajax_Field				Retorna o Resultado do Ajax em um CAMPO da tela
	002		$Ajax_Layer				Retorna um Resultado de Ajax dentro de uma CAMADA
	003		$Ajax_ReplaceSpace		Essa função Substitui o caracter espaço pela sua representacao numerica
	004		$Ajax_Return				Esta função resume o uso da função ajax, retornando para uma VARIAVEL
	005		$Ajax_Array				Esta função resume o uso da função ajax, retornando para uma varivel ARRAY
	006		$CreateXMLHTTP			É a Alma do Ajax, é a Função que processa as Informações do Ajax


***************************************************************************************************************/



function $Ajax_Field(pagina,parameters,camada_carregando,campo){
	/*
	Esta função resume o uso da função ajax, retornando para uma camada
	*/

	var Retorno="";		
	var oHTTPRequest = CreateXMLHTTP(); //crio o ajax
	
	oHTTPRequest.open("post", pagina, true); //chamo a pagina que irá processar os dados
	oHTTPRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //identifico o conteudo da pagina		

	oHTTPRequest.onreadystatechange=function(){   

			   if (camada_carregando!=""){ //verifico se tenho alguma div para mostrar o carregando, posso trocar por imagem
				   document.getElementById(camada_carregando).innerHTML="<img src='../../imgs/carregando.gif' border=0>carregando..";
			   }
   
			   if (oHTTPRequest.readyState==4)
					{



						    Retorno= oHTTPRequest.responseText;	//trago o retorno da pagina			
							
							if (camada_carregando!=""){ //verifico se tenho alguma div para mostrar o carregando, posso trocar por imagem
								document.getElementById(camada_carregando).innerHTML=""; //limpo a div que tinha o carregando						
			   				}
							

							campo.value = Retorno; //Aqui eu coloco o resultado no campo
							
					}
	}

	oHTTPRequest.send($Ajax_ReplaceSpace(parameters)); //passo parametros pelo metodo post para a pagina que escolhi acima	

	
}




function $Ajax_Layer(pagina,parameters,camada_carregando,camada_resultado){
	/*
	Esta função resume o uso da função ajax, retornando para uma camada
	*/

	var Retorno="";		
	var oHTTPRequest = CreateXMLHTTP(); //crio o ajax
	
	oHTTPRequest.open("post", pagina, true); //chamo a pagina que irá processar os dados
	oHTTPRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //identifico o conteudo da pagina		

	oHTTPRequest.onreadystatechange=function(){   

			   if (camada_carregando!=""){ //verifico se tenho alguma div para mostrar o carregando, posso trocar por imagem
				   document.getElementById(camada_carregando).innerHTML="<img src='imagens/carregando.gif' border=0>carregando..";
			   }
   
			   if (oHTTPRequest.readyState==4)
					{
						    //Retorno= oHTTPRequest.responseText;	//trago o retorno da pagina		
							Retorno=unescape(oHTTPRequest.responseText.replace(/\+/g," "));
							if (camada_carregando!=""){ //verifico se tenho alguma div para mostrar o carregando, posso trocar por imagem
								   document.getElementById(camada_carregando).innerHTML=""; //limpo a div que tinha o carregando
			   				}
							
							
							
							if (camada_resultado!=""){ //verifico se vou mostrar o resultado da pagina em alguma div
								   document.getElementById(camada_resultado).innerHTML= Retorno; //se sim mostro
								   
							
								
									// executa scripts
									//vlRetorno=unescape(oHTTPRequest.responseText.replace(/\+/g," "));
									ExtraiScript(Retorno);
									
						   }			
					}
	}

	oHTTPRequest.send($Ajax_ReplaceSpace(parameters)); //passo parametros pelo metodo post para a pagina que escolhi acima

}


function $Ajax_ReplaceSpace(variavel){
			
	//retira os espacos e substitui pelo caracter correto
	for (x=0;x<=variavel.length;x++)
	{
		variavel=variavel.replace(' ','%20');
		variavel=variavel.replace('\n','<br>');
	}

	return  variavel;

}

function $Ajax_Return(pagina,parameters,camada_carregando){
	/*
	Esta função resume o uso da função ajax, retornando para uma varivel
	*/

	var Retorno=$Ajax_Exec();
	return Retorno;
	
	
	function $Ajax_Exec(){	
	
			var vlRetorno="";
			var oHTTPRequest = CreateXMLHTTP(); //crio o ajax			
			oHTTPRequest.open("POST", pagina, false); //chamo a pagina que irá processar os dados
			oHTTPRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); //identifico o conteudo da pagina				
			oHTTPRequest.send($Ajax_ReplaceSpace(parameters)); //passo parametros pelo metodo post para a pagina que escolhi acima				
			//vlRetorno= oHTTPRequest.responseText;

			// coloca o valor no objeto requisitado
			vlRetorno=unescape(oHTTPRequest.responseText.replace(/\+/g," "));
			
			// executa scripts
			ExtraiScript(vlRetorno);

			
			return vlRetorno;
	}
	
}

function ExtraiScript(texto){

        var ini, pos_src, fim, codigo;
        var objScript = null;
        ini = texto.indexOf('<script', 0)
        while (ini!=-1){

                var objScript = document.createElement("script");
                //Busca se tem algum src a partir do inicio do script
                pos_src = texto.indexOf(' src', ini)
                ini = texto.indexOf('>', ini) + 1;

                //Verifica se este e um bloco de script ou include para um arquivo de scripts
                if (pos_src < ini && pos_src >=0){//Se encontrou um "src" dentro da tag script, esta e um include de um arquivo script
                        //Marca como sendo o inicio do nome do arquivo para depois do src
                        ini = pos_src + 4;
                        //Procura pelo ponto do nome da extencao do arquivo e marca para depois dele
                        fim = texto.indexOf('.', ini)+4;
                        //Pega o nome do arquivo
                        codigo = texto.substring(ini,fim);
                        //Elimina do nome do arquivo os caracteres que possam ter sido pegos por engano
                        codigo = codigo.replace("=","").replace(" ","").replace("\"","").replace("\"","").replace("\'","").replace("\'","").replace(">","");
                        // Adiciona o arquivo de script ao objeto que sera adicionado ao documento
                        objScript.src = codigo;
                }else{//Se nao encontrou um "src" dentro da tag script, esta e um bloco de codigo script
                        // Procura o final do script
                        fim = texto.indexOf('</script>', ini);
                        // Extrai apenas o script
                        codigo = texto.substring(ini,fim);
                        // Adiciona o bloco de script ao objeto que sera adicionado ao documento
                        objScript.text = codigo;
                }

                //Adiciona o script ao documento
                document.body.appendChild(objScript);
                // Procura a proxima tag de <script
                ini = texto.indexOf('<script', fim);

                //Limpa o objeto de script
                objScript = null;
        }
}

function $Ajax_Array(pagina,parameters,camada_carregando,separacao){
	/*
	Esta função resume o uso da função ajax, retornando para uma varivel array
	*/	
	var Retorno=$Ajax_Return(pagina,parameters,camada_carregando);
	Retorno = Retorno.split(separacao);
	return Retorno;
	
	
}

function CreateXMLHTTP(){
	/*
	Essa função é responsavel por qualquer tipo de rotina em Ajax,
	digamos que ela é a alma do Ajax	
	*/

	try{
		
		vajax = new ActiveXObject("Microsoft.XMLHTTP");
		
	}

	catch(e){
			   
			   try
			   {
					vajax = new ActiveXObject("Msxml2.XMLHTTP");
					alert(vajax);
			   }
			   
			   
			   catch(ex)
			   {
				   
				   try
				   {
							   vajax = new XMLHttpRequest();
				   }
				   catch(exc){
								alert("Esse browser não tem recursos para uso do Ajax");
								vajax = null;
				   }
				   
			   }

				return vajax;
	}
	
	
	var arrSignatures = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
	"MSXML2.XMLHTTP.3.0", "MSXML2.XMLHTTP",
	"Microsoft.XMLHTTP"];
	
	for (var i=0; i < arrSignatures.length; i++) {
		
		  try {
				var oRequest = new ActiveXObject(arrSignatures[i]);
				return oRequest;
		  } 
		  catch (oError) {
			  
		  }
				  
	}
	
	throw new Error("MSXML não está instalado em seu sistema.");
	
}						  


