//No Mozilla Firefox o objeto XMLHttpRequest é nativo do brownser
//enquanto que no IE (a partir da versão 4) ela é um objeto ActiveX
//Desta forma, defino a variavel que irá me retornar o objeto XMLHttpRequest
//atribuindo a ela o valor do return da função getXmlHttpRequest através da
//verificação do navegador do usuário
var xmlhttp = getXmlHttpRequest();
//Função que irá identificar se o objeto deverá ser criado para os navegadores
//que possuem o objeto XMLHttpRequest nativo, ou para o IE através do ActiveX
function getXmlHttpRequest() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			return new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
}
//Função para montar e atualizar as cidades no combobox cidades através do seu valor
function loadDados(method, url, alvo) {
	//mensagem de aguardando 
	document.getElementById(alvo).innerHTML = '<br><br><br><br><br><br><br><div align="center"><img src="/imagens/carregando.gif" width="22" height="21" /><br><font class="Texto">Aguarde, carregando dados...</font></div><br><br><br><br><br><br><br>';
	//
	var metodo = method.toUpperCase();
	//open('metodo', 'URL'[,asyncFlag[,'userName'[,'password']]])
	//o método open 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 do usuário e a senha.
	//No ASP, para realizar a atualização dos dados na página, utilizo a função Math.random
	xmlhttp.open(metodo, url+'&rnd'+ Math.random(), true); 
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=iso-8859-1");
	xmlhttp.setRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
	xmlhttp.setRequestHeader("Cache-Control", "post-check=0, pre-check=0");
	xmlhttp.setRequestHeader("Pragma", "no-cache");
	//Médoto a ser chamado quando o estado da requisição mudar(definido em readyState)
	xmlhttp.onreadystatechange = function() {
		//O método readyState representa o estado da requisição, sendo:
		//0 - não inicializado
		//1 - carregando
		//2 - carregado
		//3 - modo interativo
		//4 - completado
		//
		if (xmlhttp.readyState == 4) {
			//Se o retorno do readyState for true, vericarei seu status para prosseguir
			//Para conhecer outros status: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
			//O status 200 retorna "OK", a requisição foi bem sucedida.
			if (xmlhttp.status == 200) {
				//responseText - retorna os dados do servidor como uma string de texto.
				//responseXML - retorno os dados do servidor como um documento XML.
				//getElementById(): Método que identifica qualquer elemento na página HTML.
				//createElement(): Método que cria qualquer elemento na página HTML.
				//innerHTML: Obtém o controle do objeto para manipulá-lo. Esta propriedade só
				//existe em elementos <div>, <span>, <td> e <p>. O valor desta propriedade é o
				//código HTML que está dentro do elemento.
				 var texto = unescape(xmlhttp.responseText).replace(/\+/g,' ');
				 document.getElementById(alvo).innerHTML = texto;
				 extraiScript(texto);
				var ancora = url.split("#")
				//Verifico se existem âncoras na URL
				if (ancora.length > 1){
					document.location.hash = "#"+ancora[1];
				}
			}
		} 
	};
	//É o método SEND que ativa a conexão e faz a requisição das informações ao documento aberto
	//pelo método OPEN. Este método possui somente um parâmetro que serve para enviar dados
	//extras ao documento. Para o acesso a este parâmetro é necessário que o método esteja 
	//com seu valor atribuído como POST ao invés de GET.
	//O Internet Explorer não obriga a passar nenhum parâmetro, mas outros navegadores como
	//o Mozilla, exigem algum dado, neste caso, a melhor solução é que mesmo não havendo 
	//necessidade de passar nenhum parâmetro enviemos NULL neste método.
	if(metodo == "POST") {  
		xmlhttp.send(url);  
	} else {  
		xmlhttp.send(null);  
	}
};
//Função para montar a query com as variáveis de um formulário
//Parâmetros: método da função, valores do formulário, url de destino e o DIV alvo
function mountValues(method, form, url, target) {
	var queryString = "";
	for (var i = 0; i<form.elements.length; i++) {
		if (form.elements[i].type == "text" || form.elements[i].type == "password" || form.elements[i].type == "textarea" || form.elements[i].type == "select-one" || form.elements[i].type == "hidden") {
			if(form.elements[i].value){
			queryString = queryString+form.elements[i].name+"="+form.elements[i].value+"&";
			} else {
				//Caso queira validar os campos, habilito as duas linhas abaixo
				alert('Por favor, preencha todos os campos');
				return false;
				queryString = queryString+form.elements[i].name+"=&";
			}
		}
		if (form.elements[i].type == "checkbox") {
			if (form.elements[i].checked == true) {
				queryString = queryString+form.elements[i].name+"="+form.elements[i].value+"&";
			}
		}
		if (form.elements[i].type == "radio") {
			if (form.elements[i].checked == true) {
				queryString = queryString+form.elements[i].name+"="+form.elements[i].value+"&";
			}
		}
	}
	var urlParam = url+'?'+queryString;
	loadDados(method, urlParam, target);
}
//Função para extrair scripts em páginas carregadas com Ajax
function extraiScript(texto){
    // inicializa
    var ini = 0;
    // loop enquanto achar um script 
    while (ini!=-1){
        // procura uma tag de script
        ini = texto.indexOf('<script', ini);
        // se encontrar
        if (ini >=0){
            // define o inicio para depois do fechamento dessa tag 
            ini = texto.indexOf('>', ini) + 1;
            // procura o final do script
            var fim = texto.indexOf('</script>', ini);
            // extrai apenas o script
            codigo = texto.substring(ini,fim);
            // executa o script
            //eval(codigo);
            novo = document.createElement("script")
            novo.text = codigo;
             document.body.appendChild(novo);
        }
    }
}
//Caso não precise utilizar as imagens mais e menos, utilizo vazio no parâmetro valor
function abreMenu(metodo, url, alvo, valor){
	if (document.getElementById(alvo).style.display == 'none') {
		document.getElementById(alvo).style.display = 'block';
		if(valor != ''){
			document.getElementById('mais'+valor).src = 'imagens/menos.jpg';
		}
		loadDados(metodo, url, alvo);
	} else {
			document.getElementById(alvo).style.display = 'none';
		if(valor != ''){
			document.getElementById('mais'+valor).src = 'imagens/mais.jpg';
		}
	}	
}
//
function apagarRegistro() {
	sFlag = confirm("Você tem certeza que quer APAGAR o regitro selecionado?");
	if (sFlag == true) {
		return true;
	} else {
		return false;
	}
}
//Função para ler o subMenu
function MenuEsq(alvo){
	var itensMenu = new Array(1);
	itensMenu[0]='MenuEsq0';
	//
	if (document.getElementById(alvo).style.display == 'none') {
		document.getElementById(alvo).style.display = 'block';
			for(i=0; i<itensMenu.length; i++){
				if(itensMenu[i] != alvo)
					document.getElementById(itensMenu[i]).style.display = 'none';
			}
	} else {
		document.getElementById(alvo).style.display = 'none';
	}
	//
}
//Função para validar o envio de e-mail
function Envia(form){
	//Validação do Destinatário
	if (form.sDestinatario.selectedIndex == 0) {
		alert("É necessário selecionar o Destinatário!");
		form.sDestinatario.focus();
		return (false);
	}
	//Validação do Nome
	if (form.sNome.value == "") {
		alert("É necessário peencher com o seu nome!");
		form.sNome.focus();
		return (false);
	}
	//Validação do Email
	var reEmail = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
//
	if (form.sEmail.value == "") {
		alert("É necessário informar o e-mail!");
		form.sEmail.focus();
		return (false);
	} else {
		sEmail = form.sEmail.value;
		if (!reEmail.test(sEmail)) {
			alert(sEmail+" Este não é um E-mail válido.");
			form.sEmail.focus();
			return (false);
		}
	}
	//Validação do Assunto
	if (form.sAssunto.value == "") {
		alert("É necessário informar o assunto!");
		form.sAssunto.focus();
		return (false);
	}
	//Validação da mensagem
	if (form.sMensagem.value == "") {
		alert("É necessário escrever a mensagem!");
		form.sMensagem.focus();
		return (false);
	}
}
//Função para o cadastro de novidades
function novidades(){
	var email = document.formNovidades('sEmailNovidades').value;
	//Validação do Email
	var reEmail = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
//
	if (email == "") {
		alert("É necessário informar o e-mail!");
		document.formNovidades('sEmailNovidades').value = '';
		document.formNovidades('sEmailNovidades').focus();
		return (false);
	} else {
		sEmail = email;
		if (!reEmail.test(sEmail)) {
			alert(sEmail+" Este não é um E-mail válido.");
			document.formNovidades('sEmailNovidades').value = '';
			document.formNovidades('sEmailNovidades').focus();
			return (false);
		}
	}
	//
	document.getElementById('formNovidades').style.display = 'none';
	loadDados('GET', 'cadastro.php?sEmail='+email, 'conteudo')
}
//
function contarPalavras(campo, contador, limite) {
	if (campo.value.length>limite) {
		campo.value = campo.value.substring(0, limite);
	} else {
		contador.value = limite-campo.value.length;
	}
}
