/* 
Variaveis e Objetos para Requisies em AJAX 
Criado por Jos Wilker
*/

/* Funes Principais */

var xmlhttp = null;
var xmlhttpX = null;

function criaObjetoAjax() { 
if (typeof window.XMLHttpRequest != 'undefined') {
	xmlhttp = new XMLHttpRequest(); /* objeto de requisio do firefox / safari */
} else if (typeof window.ActiveXObject != 'undefined') {
	try {
	xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); /* objeto de requisio pro IE */
	}
	catch(e) {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); /* objeto de requisio pro IE */
		}
	}
}

function criaObjetoAjaxTwo() { 
if (typeof window.XMLHttpRequest != 'undefined') {
	xmlhttpX = new XMLHttpRequest(); /* objeto de requisio do firefox / safari */
} else if (typeof window.ActiveXObject != 'undefined') {
	try {
	xmlhttpX = new ActiveXObject("Microsoft.XMLHTTP"); /* objeto de requisio pro IE */
	}
	catch(e) {
		xmlhttpX = new ActiveXObject("Msxml2.XMLHTTP"); /* objeto de requisio pro IE */
		}
	}
}

/* 
Funo para obter dados e Enviar Dados 

as Urls enviadas pela funo openHtml devero conter a variavel endHtml
informando o arquivo aonde sero enviadas ou buscadas as informaes

Requisio de Dados = endHtml = nomedoarquivo.extensao?variaveis=constantes&...

Envio de dados o tipo deve ser igual a 1 e a varForm deve conter, se varForm for
igual a 0 no ir enviar dados.

*/

/* construtor de fila de requisiçoes */
fila = [];
ifila = 0;


function openHtmlOut(endHtml,divID,divLoading,modo) {
	criaObjetoAjaxTwo();
	if (xmlhttpX) {
		obj = document.getElementById(divID);
		xmlhttpX.open(modo, endHtml, true);
		xmlhttpX.onreadystatechange = function () {
		if (xmlhttpX.readyState == "1") {
				obj.innerHTML = "";
				loading(divLoading,'block');
			}
				if (xmlhttpX.readyState == "4" && xmlhttpX.status == "200") {
					obj.innerHTML = xmlhttpX.responseText;
					loading(divLoading,'none');
				}
			}
		xmlhttpX.send(null);
	}
}

function openHtml(endHtml,divID,divLoading,modo,tipo,varForm,pagRetorno,divResposta,Mensagem) {
	// cria o objeto de requisio em ajax
	criaObjetoAjax();
	if (varForm == "0") { varForm == ""; }
	if (pagRetorno == "0") { pagRetorno == ""; }
	if (tipo == "2") { document.getElementById(divResposta).style.display = "none"; }
	if (xmlhttp) {
			if (tipo != "dual") {
				var objeto = document.getElementById(divID);
				xmlhttp.open(modo, endHtml, true);	
			}
			xmlhttp.onreadystatechange = function () {
				if (xmlhttp.readyState == "1") {
					objeto.innerHTML = "";
					loading(divLoading,'block');
				}
					if (xmlhttp.readyState == "4" && xmlhttp.status == "200") {
					if (tipo != "1") {
						objeto.innerHTML = xmlhttp.responseText;
					}
					loading(divLoading,'none');
					if (tipo == "1" || tipo == "4") {
					resposta(pagRetorno,divID,divResposta,divLoading,Mensagem); 
					}
				}
			}
			/* 
			Tipos
			1 = Enviar Dados - Formulrio - POST
			2 = Obter Dados - Arquivo - GET
			3 = Obter Dados Mostrando a janelinha de confirmao de ao
			*/
			if (tipo == "1") {
		xmlhttp.setRequestHeader("Method", "POST" + varForm + "HTTP/1.1");
		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		xmlhttp.send(varForm);
		} else if (tipo == "2" || tipo == "3" || tipo == "4") {
			xmlhttp.send(null);
		}
	}	
}

/* funo para mostrar o carregando */

function loading(divLoading,status) {
		var loading = document.getElementById(divLoading);
//		loading.style.display = status;
}

/* funo para mostrar confirmao aps envio de dados por formulrio */

function resposta(endHtml,divID,divResposta,divLoading,Mensagem) {
	document.getElementById(divResposta).innerHTML = Mensagem;
	document.getElementById(divResposta).style.display = "block";
	modo = "GET";
	tipo = "3";
	varForm = "0";
	pagRetorno = "0";
	openHtml(endHtml,divID,divLoading,modo,tipo,varForm,pagRetorno,divResposta);
}

/* funao para ler arquivos passandos dados via url passando informacoes por metodo GET */

function openUrlGET(openUrl,divID,divLoading,pagRetorno,divResposta,Mensagem) {
	modo = "GET";
	tipo = "4";
	varForm = "0";
	openHtml(openUrl,divID,divLoading,modo,tipo,varForm,pagRetorno,divResposta,Mensagem);
}

/* Funo para ler arquivos simples */

function openUrl(openUrl,divID,divLoading) {
	modo = "GET";
	tipo = "2";
	varForm = "0";
	divResp = "divResposta";
	pagRetorno = "0";
	Mensagem = "0";
	openHtml(openUrl,divID,divLoading,modo,tipo,varForm,pagRetorno,divResp,Mensagem);
}

function openUrlOut(openUrl,divID,divLoading) {
	modo = "GET";
	openHtmlOut(openUrl,divID,divLoading,modo);
}

function limpaUrl(divLimpa) {
	document.getElementById(divLimpa).innerHTML = "";	
}

/****************************************************************
		CONJUNTO DE FUNCOES PARA TRABALHAR COM FORMULARIOS
****************************************************************/

/* Funo para enviar dados por formulrio */

function enviaDados(openUrl,divLoading,pagRetorno,divID,divResposta,Mensagem,nomeFormulario) {
	// modo principal 
	modo = "POST";
	tipo = "1";
	// monta as variaveis para pegar os dados dos campos do formulrio
	stringFormulario = document.getElementById(nomeFormulario).elements;
	qntElementos = stringFormulario.length;
	variavel = "";
	for (i=0; i < qntElementos; i++) {
		if (stringFormulario[i].type == "text" || stringFormulario[i].type == "password" || stringFormulario[i].id == "select" || stringFormulario[i].type == "textarea" || stringFormulario[i].id == "file") {
		variavel += stringFormulario[i].name + "=" +  stringFormulario[i].value;
	if (i < qntElementos) {
			variavel += "&";
			 }
	     }
     }
	// monta a variavel geral
	dadosForm = variavel;
	openHtml(openUrl,divID,divLoading,modo,tipo,dadosForm,pagRetorno,divResposta,Mensagem);
}