﻿var AJAXObjeto = false; //Serve para guardar o objeto XmlHTTPRequest que é quem faz requisições pro servidor
var AJAXCriando=false;	//Guarda se já existe ou não requisição sendo feita
var AJAXErro=0;					//Quantos erros já ocorreram durante a tentativa de pegar os dados
var AJAXObjRetorno=false; //Objeto que receberá os dados voltados do servidor
var AJAXErrCallback=false;

function RegistrarErrCallback(nome)
{
	try { eval(nome+'(-5,"Registro Carregado.")'); AJAXErrCallback=nome; ok=true;}
	catch(err) { ok=false; }
	return ok;
}

function CriarObjeto()
{
	if (window.XMLHttpRequest)	//GECKO
		AJAXObjeto = new XMLHttpRequest();
	else if (window.ActiveXObject) //IE
		AJAXObjeto = new ActiveXObject("Microsoft.XMLHTTP");
}

function CheckErrCallback(s,msg)
{
	if(AJAXErrCallback)
	{
		try {	eval(AJAXErrCallback+'(s,msg)'); }
		catch(err) {}
	}
}

function setConteudo(obj,link,postar)
{	
	if(AJAXCriando==true) return false;
	AJAXCriando=true;

	if(postar==undefined)
	{
		date = new Date();
		tam=link.lenght;
		if(link.search(/\?/)!=-1)
			link+='&NIL='+date.getTime();
		else
			link+='?NIL='+date.getTime();
	}

	AJAXObjRetorno=document.getElementById(obj);
	if(AJAXObjRetorno==undefined)
		AJAXObjRetorno=obj;

	ok=false;
	for(i=0;i<2;i++)
	{
		try
		{
			if(postar==undefined)	AJAXObjeto.open("GET", link,true); //aqui é onde chamamos o link, a função acima será executada assim que os dados retornarem.
			else									AJAXObjeto.open("POST", link,true); //aqui é onde chamamos o link, a função acima será executada assim que os dados retornarem.
			ok=true;
			break;
		}
		catch(err)
		{
			CriarObjeto();
		}
	}

	if(ok==false) {/* CheckErrCallback(-1,"Falha ao criar componente.");*/ AJAXCriando=false; return false;}

	AJAXObjeto.onreadystatechange = function()
			{
				try
				{
					if (AJAXObjeto.readyState == 4)
					{
						erro=false;
						if(AJAXObjeto.status == 200)
								chamada=AJAXObjRetorno+'(AJAXObjeto.responseText)';
						else
							erro=true;

						if(!erro)
						{
							if(AJAXObjRetorno.innerHTML==undefined && AJAXObjRetorno.value==undefined)
							{
								try	{ eval(chamada); }
								catch(err){ CheckErrCallback(AJAXObjeto.status,err); }
							}
							else if(AJAXObjRetorno.innerHTML)
								AJAXObjRetorno.innerHTML=AJAXObjeto.responseText;
							else if(AJAXObjRetorno.value)
								AJAXObjRetorno.value=AJAXObjeto.responseText;
						}
						else
							CheckErrCallback(AJAXObjeto.status,'Código de resposta incorreto.')

						AJAXCriando=false;
						AJAXErro=0;
					}

					if(AJAXErro>10)
					{
						CheckErrCallback(0,'Muitos erros de conexão.');
						AJAXErro=0;
						AJAXCriando=false;
					}
				}
				catch(err)
				{
					CheckErrCallback(1,'Falha interna do navegador.');
					AJAXCriando=false;
					if(AJAXErro) AJAXErro++;
				}		
			};
	if(postar==undefined)
	{
		AJAXObjeto.send(null); //se fosse um POST aqui estariam os parâmetros mas como é get não tem (null).						
	}
	else
	{
		AJAXObjeto.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		AJAXObjeto.setRequestHeader("Content-length", postar.length);
		AJAXObjeto.setRequestHeader("Connection", "close");

		AJAXObjeto.send(postar);
	}
	return true;
}