// +"&antiCache="+Math.round(Math.random()*10000000);
var request = null;
/**
	Função createRequest: Instancia o classe XMLHttpRequest tanto como
	objeto nativo (Firefox, Netscape, Opera, etc...), como um ActiveX
	para o navegador Internet Explorer
	retorno: object XMLHttpRequest
*/
function createRequest()
{	
	if(request != null) // se já houver um objeto ajax rodando, cancelar para instanciar o novo
	{
		request.abort();
	}
	
	// verifica se é Firefox...
	try{
		request = new XMLHttpRequest();
	}
	// se não é, obtem a exceção e cria um objeto de erro trymicrosoft
	catch(trymicrosoft){
		// verifica se é IE, versão nova do ActiveX e tenta criar o objeto
		try{
			request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		// se não é, obtem a exceção e cria um objeto de erro othermicrosoft
		catch(othermicrosft){
			// tentar criar um objeto na versão antiga do ActiveX
			try{
				request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			// se tudo não deu certo, cria a exceção que é a falha, e retorna
			// o valor da variável request recebe null
			catch(falha){
				request = null;
			}
		}
	}
	// se não foi possível a criação do objeto, mostre um alerta ao visitante
	if(request == null){
		alert("Seu navegador não oferece suporte para AJAX");
	}
}



function showLoading(flag){
	var loading = document.getElementById('loading');
	
	/**
	 * Condicionamento implantado porque esta medida não estava funcionando no contatoMalaDireta.php
	 * Como não dá para se saber onde irá quebrar se retirasse estes posicionamentos, coloquei a condicional.
	 */
	if ( window.posicionar===undefined ) {
		loading.style.marginTop = document.documentElement.scrollTop+"px";
		loading.style.marginLeft = document.documentElement.scrollLeft+"px";
	}
	
	if(flag == 'true'){
		loading.style.display = '';
	}
	else if(flag == 'false'){
		loading.style.display = 'none';
	}
}

function tempoEsgotado(){
	request.abort();
	alert("A requisição foi cancelada porque o servidor demorou a responder.\n\rTente novamente.");
}

function requisicaoAjax(url,idenfificacao,method,dados){
	//alert('iniciando ajax em public_html/js/ajax.php');
	
	if( method==null ){
		method = 'GET';
		dados = null;
	}
	else{
		method = 'POST';
	}
	
	/**
	 * Cria o objeto de requisição em AJAX: request
	 */
	createRequest();
	request.open(method,url,true);
	
	/**
	 * Só deixa a requisição rodando por 30 segundos [= 30.000 milisegundos].
	 * Se o servidor não responder, aborta e deixa uma msg para o usuário.
   *
   * obs: 30 segundos é o tempo máximo que o PHP deixa um script rodar.
   * Se o script não finalizar neste intervalo de tempo, o PHP retorna um fatal error.
	 */
	var idTimeout = setTimeout(tempoEsgotado,30000);
	
	request.onreadystatechange = function() {
		/**
		 * A PÁGINA FOI CARREGADA
		 */
		if(request.readyState == 4){
			/**
			 * Se o servidor respondeu, cancela o contador do timeout
			 */
			clearTimeout(idTimeout);
		
			/**
			 * A PÁGINA FOI CARREGADA CORRETAMENTE
			 */
			if(request.status == 200){
				trataDados(idenfificacao);
			}
			/**
			 * request.status = 122 =>
			 * This error occurs for me only when the ajax method is GET and the data length is too long for get.
			 * Solution? change the method to POST.
			 * alert("Problema de comunicação com o servidor...\nTente novamente em alguns minutos.\nErro: "+request.status);
			 */
			else {
				request.abort();
			}
			showLoading('false');
		}
		else {
			showLoading('true');
			//alert('Problema:'+request.statusText);
		}
	}
	
	/**
	 * cabeçalho para o método post
	 */
	if( method=='POST' ){
		request.setRequestHeader('Content-Type','application/x-www-form-urlencoded;');
	}
	
	request.send(dados);
}

function bodyOnReady(func){
	/**
	 * call the function 'func' when DOM loaded
	 * by Micox - www.elmicox.com - elmicox.blogspot.com - webly.com.br
	 * http://www.elmicox.com/2007/evento-body-onready-sem-o-uso-de-libs/
	 */
	if(!(document.body==null)){
	  func();
	}else{
	  var func_rep = func;
	  setTimeout(function(){ bodyOnReady(func_rep) },100);
	}
}