/**
 * Instancia do objeto XMLHttpRequest
 * Nao e necessario criar na pagina como objeto, as outras funcoes abaixo farao isso
 * @return void
 */
function ajax() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("ERRO");
	}
}

/**
 * Obtem os dados da pagina solicitada em XML ou TEXTO e aloca em um objeto determinado atraves do codigo 'executar'
 * O parametro executar é a instrução javaScript que sera executado pra receber o retorno, 
 * para não precisar criar uma nova função na pagina apenas para receber o resultado 
 * ex: executar ="document.getElementByID('divConteudo').innerHTML="  O 'divConteudo' vai receber o conteudo em formato text
 * 
 * @return void - getDados é da página para o objeto XMLHttpRequest e não um return
 * @param String dest - destinatário, página que vai receber a requisicao
 * @param String executar - Codigo que sera executado pra receber o retorno, ex executar ="document.getElementByID('obj').innerHTML=" 
 * @param String formato - formato xml ou text para o objetoque vai receber o retorno
 * @param String metodo - metodo GET ou POST
 */
function getDados(dest,executar,formato,metodo){
	request = ajax(); // Cria o objeto ajax
	fechaComando = "";//Faz o fechamento do executar. Obtem do proprio parametro executar, separado por | pipe
	if( executar.indexOf("|",0) > 0){
		parte2 = executar.substr(executar.indexOf("|",0) + 1);
		executar = executar.substr(0, executar.indexOf("|",0) );
	}
	
	//alert(executar+'(request.responseText)' + parte2);//debug
	if(request.readyState == 4 || request.readyState == 0) {
		request.open(metodo, dest, true);
		this.request.onreadystatechange = function(){ if (request.readyState == 4) {
				if(request.responseText!='') { //alert(request.responseText );
					if(formato=='xml'){
						if(window.ActiveXObject)eval(executar+'(loadXML(dest))' + parte2 );// Para IE
						else eval(executar+'(request.responseXML)' + parte2 );//Firefox
					}else {eval(executar+'(request.responseText)' + parte2 );
					
					}
				}
			}
		}
		request.send(null);
	}
}

/**
 * Utilizado pelo getDados para obter em formato XML
 * Nao e necessario utilizar esta funcao
 * @return void
 */
function loadXML(){// Cria um documento XML e Carrega o conteudo pelo endereço	
	var xmlDoc;
	// code for IE
	if (window.ActiveXObject)	xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
	// code for Mozilla, Firefox, Opera, etc.
	else if (document.implementation && document.implementation.createDocument)
		xmlDoc=document.implementation.createDocument("","",null);
	else
		xmlDoc = 'ERROR!';
	xmlDoc.async=false;
	xmlDoc.load(loadXML.arguments[0]);//Carrega
	return(xmlDoc);
}



/**
 * Obtem os dados da pagina solicitada 'dest' em XML e aloca em um objeto determinado atraves do codigo 'executar' 
 * Utiliza a funcao getDados para obter o Xml 
 * O parametro executar é a instrução javaScript que sera executado pra receber o retorno, 
 * para não precisar criar uma nova função na pagina apenas para receber o resultado 
 * ex: executar ="document.getElementByID('divConteudo').innerHTML="  O 'divConteudo' vai receber o conteudo em formato text
 * 
 * @return void - getDados é da página para o objeto XMLHttpRequest e NAO um return
 * @param String dest - destinatário, página que vai receber a requisicao
 * @param String executar - Codigo que sera executado pra receber o retorno, ex executar ="document.getElementByID('obj').innerHTML=" 
 * @param String metodo - metodo GET ou POST
 */
function getXML(dest,executar,metodo) {
	getDados(dest,executar,'xml',metodo);
}


/**
 * Obtem os dados da pagina solicitada 'dest' em Texto e aloca em um objeto determinado atraves do codigo 'executar' 
 * Utiliza a funcao getDados para obter o Xml 
 * O parametro executar é a instrução javaScript que sera executado pra receber o retorno, 
 * para não precisar criar uma nova função na pagina apenas para receber o resultado 
 * ex: executar ="document.getElementByID('divConteudo').innerHTML="  O 'divConteudo' vai receber o conteudo em formato text
 * 
 * @return void - getDados é da página para o objeto XMLHttpRequest e NAO um return
 * @param String dest - destinatário, página que vai receber a requisicao
 * @param String executar - Codigo que sera executado pra receber o retorno, ex executar ="document.getElementByID('obj').innerHTML=" 
 * @param String metodo - metodo GET ou POST
 */
function getText(dest,executar,metodo) {
	getDados(dest,executar,'text',metodo);
}


// EXEMPLO:
/* pagina1.jsp
 * 
<script src="js/ajax.js"></script>
<input value="populaDiv" type="button" onClick = "popula();"><br>
<div id="divConteudo">divConteudo</div><br>
		
<script language="javascript" >
	function popula(){
		var dest = 'dados.jsp';
		var executar = "select_innerHTML( document.getElementById('"+ _combo+ "'), |) ";//IE e FF, OK 	
		var metodo = 'post';
		getText(dest,executar,metodo);		
	}
</script>

------------------------------------------

dados.jsp

<table border=1>
	<tr><td align="right">testaAJAX</td><td align="right">testaAJAX</td></tr>
	<tr><td>conteudo da Pagina dados.jsp:</td><td>Teste</td></tr>	
</table>



*/

//==========================================================
// Funcoes auxiliares
//==========================================================


function select_innerHTML(objeto,innerHTML){
	/******
	* select_innerHTML - altera o innerHTML de um select independente se é FF ou IE
	* Corrige o problema de não ser possível usar o innerHTML no IE corretamente
	* Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
	* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
	* Versão: 1.0 - 06/04/2006
	* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
	* Parametros:
	* objeto(tipo object): o select a ser alterado
	* innerHTML(tipo string): o novo valor do innerHTML
	*******/
	    objeto.innerHTML = ""
	    var selTemp = document.createElement("micoxselect")
	    var opt;
	    selTemp.id="micoxselect1"
	    document.body.appendChild(selTemp)
	    selTemp = document.getElementById("micoxselect1")
	    selTemp.style.display="none"
	    if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
	        innerHTML = "<option>" + innerHTML + "</option>"
	    }
	    innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
	    selTemp.innerHTML = innerHTML
	    for(var i=0;i<selTemp.childNodes.length;i++){
	        if(selTemp.childNodes[i].tagName){
	            opt = document.createElement("OPTION")
	            for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
	                opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true))
	            }
	            opt.value = selTemp.childNodes[i].getAttribute("value")
	            opt.text = selTemp.childNodes[i].innerHTML
	            if(document.all){ //IEca
	                objeto.add(opt)
	            }else{
	                objeto.appendChild(opt)
	            }                    
	        }    
	    }
	    document.body.removeChild(selTemp)
	    selTemp = null
	}





function camposForm(objForm)
{
/**************************************************
* Autor: José Cláudio Medeiros de Lima
* Data: 17/12/2007
* Objetivos: Pega todos os campos de um formulário, seus valores
      e junta tudo em um formato de querystring,
      por exemplo: var1=valor1var2=valor2
* Parâmetros: objForm - O objeto formulário qualquer.
**************************************************/
	var buff = [];
	var contador = 0; //viabiliza a contagem de laços do for,  
	  //pois sem ele dá "undefined" nos checkboxes
	  //ou radiobuttons que não estão marcados
	
	for (i=0;i<objForm.length;i++)
	{
		campo = objForm.elements[i];
	
		if(campo.type=="checkbox" || campo.type=="radio")
		{
			if(campo.checked){
				buff[contador] = campo.name + "=" + campo.value;
				contador ++; //incrementa 1 ao contador
			}
		}else{
			buff[contador] = objForm.elements[i].name + "=" + objForm.elements[i].value;
			contador++;
		}
	}
	return buff.join("&");
}


// EXEMPLO:
/* pagina1.jsp
 * 
<script src="js/ajax.js"></script>
<input value="populaDiv" type="button" onClick = "popula();"><br>
<div id="divConteudo">divConteudo</div><br>
		
<script language="javascript" >
	function popula(){
		var dest = 'dados.jsp';
		var executar = "document.getElementById('divConteudo').innerHTML = "; 	
		var metodo = 'post';
		getText(dest,executar,metodo);		
	}
</script>

------------------------------------------

dados.jsp

<table border=1>
	<tr><td align="right">testaAJAX</td><td align="right">testaAJAX</td></tr>
	<tr><td>conteudo da Pagina dados.jsp:</td><td>Teste</td></tr>	
</table>



*/
