// #################################################################### //
// NOVAS FUNCOES DE AJAX                                                //
// #################################################################### //

function ajaxRequest(url, funcaoResposta) { // Funcionando, nomeDaVariavel é a posicao do vetor onde o dado será colocado
	if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
		objAjax = new XMLHttpRequest();

	} else { // code for IE6, IE5
	  objAjax = new ActiveXObject("Microsoft.XMLHTTP");

	}

	objAjax.onreadystatechange = function()	{
		if (objAjax.readyState == 4 && objAjax.status == 200) {
			retorno = objAjax.responseText;

			try {
				ajaxResponse(funcaoResposta, retorno);

			} catch(e) {
				alert("ajaxResponse() não encontrada!");

			}

	   }

	}

	objAjax.open("GET", url, true);
	objAjax.send();

}

function ajaxTime() { // Função usada para enviar um valor atualizado, e não pegar dados da CACHE
	var linkTime = new Date().getTime();

	return linkTime;

}

// #################################################################### //

function ajaxInit() { // Ok, inicializa o aJax e verifica se está tudo funcionando
	var req;

	try {
		req = new ActiveXObject("Microsoft.XMLHTTP");

	} catch(e) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");

		} catch(ex) {
			try {
				req = new XMLHttpRequest();

			} catch(exc) {
				alert("Esse browser não tem recursos para uso do Ajax");
				req = null;

			}

		}

	}

	return req;

}

function ajaxGet(url, nomeDaVariavel) { // Funcionando, nomeDaVariavel é a posicao do vetor onde o dado será colocado
	var objAjax = ajaxInit();
	var ret = "";

	if (typeof respostaAjax[nomeDaVariavel] == "undefined") {
		respostaAjax[nomeDaVariavel] = "";

	}

	if(objAjax) {
		objAjax.open("GET", url, true);
		objAjax.onreadystatechange = function() {

			if (nomeDaVariavel == "resposta") {
				respostaAjax["verificando"] = objAjax.readyState;

			} else {
				respostaAjax["verificando-" + respostaAjax] = objAjax.readyState;

			}

			if(objAjax.readyState == 4) {
				if(objAjax.status == 200) {
					ret = objAjax.responseText;

					respostaAjax[nomeDaVariavel] = ret;

				} else {
					ret2 = objAjax.statusText;

				}

			}

		}
		objAjax.send(null);

	}

}


function ajaxPost(url) { // Arrumar, não está 100%
	var objAjax = ajaxInit();
	var urlPagina = "";
	if (url.indexOf("?") != -1) {
		urlPagina = url.substring(0, url.indexOf("?"));

	}

	var urlQuery = "";
	if (url.indexOf("?") != -1) {
		urlQuery = url.substring(url.indexOf("?") + 1, url.length);

	}

	if(objAjax) {
		objAjax.open("POST", urlPagina, true);
		objAjax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		objAjax.send(urlQuery);
	}

}


/*

Na hora de enviar variaveis, vc deve as separar por &, td numa string soh

abort():
Pára a requisição atual.

getAllResponseHeaders():
Retorna todos os cabeçalhos (labels e valores) como uma string.

getResponseHeader("headerLabel"):
Retorna o valor de um único label do cabeçalho.

open("metodo", "URL"[, asyncFlag[, "userName"[, "password"]]]):
Define a página a ser aberta, o método (GET | POST), a URL, o marcador de "assíncrono", e, se a página requerer login, o nome de usuário e a senha.

send(content):
Envia a requisição, opcionalmente pode ser uma string ou até um objeto DOM.

setRequestHeader("label", "valor"):
Define um par label + valor para ser enviado com o cabeçalho da requisição atual.

E as propriedades:

onreadystatechange:
(!) Método a ser invocado quando o estado (definido em readyState) mudar. (!)

readyState:
Inteiro representando o estado da requisição:
0 = não inicializado
1 = carregando
2 = carregado
3 = modo interativo
4 = completado

responseText:
Versão em string dos dados retornados pela requisição.

responseXML:
Objeto DOM retornado pela requisição

status:
Código numérico do estado da requisição retornado pelo servidor. O conhecido 404 "Not Found" e o menos conhecido, mas mais importante 200 "Ok"

statusText:
A string que acompanha o código de estado acima ("Not Found", "Ok", etc)

*/