//Função para contar tempo para o futuro (contagem regressiva) 
function contador_data() {
  YY = 2010;
  MM = 01;
  DD = 02;
  HH = 21;
  MI = 00;
  SS = 00;
  
  var hoje = new Date();
  var futuro = new Date(YY,MM-1,DD,HH,MI,SS);
 
  var ss = parseInt((futuro - hoje) / 1000);
  var mm = parseInt(ss / 60);
  var hh = parseInt(mm / 60);
  var dd = parseInt(hh / 24);
 
  ss = ss - (mm * 60);
  mm = mm - (hh * 60);
  hh = hh - (dd * 24);
 
  var faltam = '';
  if(dd > 1){
	  faltam += 'Faltam <b>'+dd+' dias </b>para nosso momento especial!';
  }
  if(dd == 1 ){
	  faltam += '<b> É AMANHÃ!!! </b>Falta apenas 1 dia, '+hh+' horas e '+mm+' minutos para o nosso momento especial!';
  }

  if(dd == 0 && dd+hh+mm+ss > 0){
	  faltam += '<b> É HOJE!!! </b>Faltam apenas '+hh+' horas e '+mm+' minutos para o nosso momento especial!';
  }

//faltam += (dd && dd > 1) ? '<b> Faltam </b>'+dd+' dias ' : (dd==1 ? '1 dia, ' : '');
  //faltam += (toString(hh).length) ? hh+' : ' : '';
  //faltam += (toString(mm).length) ? mm+' : ' : '';
  //faltam += ss+' <b>para nosso dia tão especial!</b>';
  //faltam += '';
 
  if (dd+hh+mm+ss > 0) {
    document.getElementById('contador').innerHTML = faltam;
    setTimeout(contador_data,50000);
  } else {
    document.getElementById('contador').innerHTML = '<b> Já estamos casados!!! </b>Obrigado a todos que compartilharam do nosso momento especial!';
    //setTimeout(atualizaContador,1000);
  }
}



//Função para limpar espaços no início e no final dos campos
function trimtrim(campo){
	campo = eval (campo);
	String = campo.value;
	Resultado = String;
	//Retira os espaços do inicio//Enquanto o primeiro caracter for igual à "Espaço" //1 caracter do inicio é removido
	var i = 0;
	while (Resultado.charCodeAt(0) == '32'){   Resultado = String.substring(i,String.length);  i++;}
	//Pega a string já formatada e agora retira os espaços do final//mesmo esquema, enquanto o ultimo caracter for um espaço, //ele retira 1 caracter do final...
	while(Resultado.charCodeAt(Resultado.length-1) == "32"){   Resultado = Resultado.substring(0,Resultado.length-1);  }
	campo.value = Resultado
	String = ""
}


// ************************  Função para formatacao generica de campos
function formataCampo(campo, Mascara, evento) { 
    var boleanoMascara; 
    
    var Digitato = evento.keyCode;
	var campo = document.getElementById(campo);
    exp = /\-|\:|\.|\/|\(|\)| /g
    campoSoNumeros = campo.value.toString().replace( exp, "" ); 
   
    var posicaoCampo = 0;     
    var NovoValorCampo="";
    var TamanhoMascara = campoSoNumeros.length;; 
    
    if (Digitato != 8) { // backspace 
        for(i=0; i<= TamanhoMascara; i++) { 
            boleanoMascara  = ((Mascara.charAt(i) == "-") || (Mascara.charAt(i) == ".")
                                || (Mascara.charAt(i) == "/") || (Mascara.charAt(i) == ":")) 
            boleanoMascara  = boleanoMascara || ((Mascara.charAt(i) == "(") 
                                || (Mascara.charAt(i) == ")") || (Mascara.charAt(i) == " ")) 
            if (boleanoMascara) { 
                NovoValorCampo += Mascara.charAt(i); 
                  TamanhoMascara++;
            }else { 
                NovoValorCampo += campoSoNumeros.charAt(posicaoCampo); 
                posicaoCampo++; 
              }            
          }     
        campo.value = NovoValorCampo;
          return true; 
    }else { 
        return true; 
    }
}


// *************** Valida formularios
function valida_form(conf_senha){
	var campos  = document.getElementById('campos_valida').value.split(';');
	var valores = document.getElementById('valores_valida').value.split(';');
	var nomes   = document.getElementById('nomes_valida').value.split(';');
	for (i=0;i<campos.length;i++){
		if(valores[i] != 'checked'){
			if(document.getElementById(campos[i]).value == valores[i]) {
				//alert("O campo "+nomes[i]+" é obrigatório.\nPreencha o campo para prosseguir.");
				pos_alert_form(campos[i], '<b>Campo obrigatório.</b><BR>Este campo ('+nomes[i]+') é obrigatório.\nPreencha este campo para prosseguir.'); // chama função para mostrar balão no campo
				document.getElementById(campos[i]).focus();
				return false;
			}
		} else {
			if(!document.getElementById(campos[i]).checked) {
				//alert("O campo "+nomes[i]+" é obrigatório.\nSelecione o campo para prosseguir.");
				pos_alert_form(campos[i], '<b>Campo obrigatório.</b><BR>Este campo ('+nomes[i]+') é obrigatório.\nSelecione uma opção para prosseguir.'); // chama função para mostrar balão no campo
				document.getElementById(campos[i]).focus();
				return false;
			}
		}
	}
	if(conf_senha==1){
		if(document.getElementById('txt_senha').value != document.getElementById('txt_conf_senha').value) {
			//alert("O campo "+nomes[i]+" é obrigatório.\nPreencha o campo para prosseguir.");
			pos_alert_form('txt_senha', '<b>A senha não confere.</b><BR>A senha e a confirmação estão diferentes. Preencha estes campos novamente.'); // chama função para mostrar balão no campo
			document.getElementById('txt_senha').value='';
			document.getElementById('txt_conf_senha').value='';
			document.getElementById('txt_senha').focus();
			return false;
		}	
	}
	if(document.getElementById('btn_envia')){
		document.getElementById('btn_envia').disabled = true;
	}
}


// ***************************** Valida digitação de DATAS (só aceita 0-9, (/) .... 
																			// ***************************** Valida digitação de datas em geral (só aceita 0-9 e /.... 
function valida_data(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[0-9/]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^0-9/]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
			 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas números neste campo. <br>Formato: dd/mm/aaaa'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
		formataCampo(campo, '00/00/0000', event);		
	}
}

// ***************************** Valida digitação de horas em geral (só aceita 0-9 e :.... 
function valida_hora(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[0-9:]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^0-9:]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
			 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas números neste campo. <br>Formato: hh:mm'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
		formataCampo(campo, '00:00', event);		
	}
}

// ***************************** Faz a confirmação se a data digitada está realmente no padrao válido dd/mm/aaaa
function confirma_data(campo, classerro){
    var dia = document.getElementById(campo).value;
	if(dia.length<10){
        muda_estilo(campo, classerro); // Muda campo para classe de erro
		pos_alert_form(campo, '<b>Data inválida.</b><BR>Esta data deve estar no formato dd/mm/aaaa.'); // chama função para mostrar balão no campo		
		document.getElementById(campo).value='';
	} 
}

// ***************************** Faz a confirmação se a hora digitada está realmente no padrao válido hh:mm
function confirma_hora(campo, classerro){
    var dia = document.getElementById(campo).value;
	if(dia.length<5){
        muda_estilo(campo, classerro); // Muda campo para classe de erro
		pos_alert_form(campo, '<b>Hora inválida.</b><BR>Esta hora deve estar no formato hh:mm.'); // chama função para mostrar balão no campo		
		document.getElementById(campo).value='';
	} 
}


// ***************************** Valida digitação de TELEFONE (só aceita 0-9, (, - e ) .... 
function valida_telefone(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[0-9 ()-]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^0-9 ()-]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
			 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas números neste campo. <br>Formato: (00) 0000-0000'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
		formataCampo(campo, '(00) 0000-0000', event);		
	}
}

// ***************************** Valida digitação de usuário de e-mail (antes do arroba) - campo=ID do campo (this.id) - event = tecla pressionada (event) - classerro = código da class para aplicar no caso de erro - classnormal = cód. da class qdo estiver normal o campo.... 
function valida_email(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[A-Za-z0-9@._-]*$"); // Caracteres permitidos
	var pesq2 = new RegExp("[@._-]{2}"); // Evitar dupla pontuação seguida pq também não pode
	var pesq3 = new RegExp("[^A-Za-z0-9@._-]|[@._-]{2}", "g"); // Caracteres PROIBIDOS

	if (!document.getElementById(campo).value.match(pesq1) || document.getElementById(campo).value.match(pesq2)) { // Verifica se encontrou algo proibido
		 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas letras (sem acentos), números, hífem (-), ponto (.) ou underline (_)'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
	}
}

// ***************************** Faz a confirmação se o CPF digitado é realmente válido
function confirma_cpf(campo, classerro){
    var cpf = document.getElementById(campo).value;
    exp = /\.|\-/g
    cpf = cpf.toString().replace( exp, "" ); 
    var digitoDigitado = eval(cpf.charAt(9)+cpf.charAt(10));
    var soma1=0, soma2=0;
    var vlr =11;
    
    for(i=0;i<9;i++){
        soma1+=eval(cpf.charAt(i)*(vlr-1));
        soma2+=eval(cpf.charAt(i)*vlr);
        vlr--;
    }    
    soma1 = (((soma1*10)%11)==10 ? 0:((soma1*10)%11));
    soma2=(((soma2+(2*soma1))*10)%11);
    
    var digitoGerado=(soma1*10)+soma2;
    if(digitoGerado!=digitoDigitado || cpf=="11111111111" || cpf=="22222222222" || cpf=="33333333333" || cpf=="44444444444" || cpf=="55555555555" || cpf=="66666666666" || cpf=="77777777777" || cpf=="88888888888" || cpf=="99999999999" || cpf=="00000000000")  {  
        muda_estilo(campo, classerro); // Muda campo para classe de erro
		pos_alert_form(campo, '<b>CPF Inválido.</b><BR>O número de CPF fornecido foi considerado inválido pelo nosso sistema.'); // chama função para mostrar balão no campo		
		document.getElementById(campo).value='';
		//document.getElementById(campo).focus();
	}
}


// ***************************** Valida digitação de CPF (só aceita 0-9, . e - .... 
function valida_cpf(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[0-9.-]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^0-9.-]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
			 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas números neste campo. <br>Formato: 000.000.000-00'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
		formataCampo(campo, '000.000.000-00', event);		
	}
}

// ***************************** Faz a confirmação se o CNPJ digitado é realmente válido
function confirma_cnpj(campo, classerro){
    var CNPJ = document.getElementById(campo).value;
	erro = new String;
	if (CNPJ.length < 18) erro += "E' necessarios preencher corretamente o numero do CNPJ! \n\n";
	if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-")){
		if (erro.length == 0) erro += "E' necessarios preencher corretamente o numero do CNPJ! \n\n";
	}
	//substituir os caracteres que nao sao numeros
	if(document.layers && parseInt(navigator.appVersion) == 4){
		x = CNPJ.substring(0,2);
		x += CNPJ.substring(3,6);
		x += CNPJ.substring(7,10);
		x += CNPJ.substring(11,15);
		x += CNPJ.substring(16,18);
		CNPJ = x; 
	} else {
		CNPJ = CNPJ.replace(".","");
		CNPJ = CNPJ.replace(".","");
		CNPJ = CNPJ.replace("-","");
		CNPJ = CNPJ.replace("/","");
	}
	var nonNumbers = /\D/;
	if (nonNumbers.test(CNPJ)) erro += "A verificacao de CNPJ suporta apenas numeros! \n\n"; 
	var a = [];
	var b = new Number;
	var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
	for (i=0; i<12; i++){
		a[i] = CNPJ.charAt(i);
		b += a[i] * c[i+1];
	}
	if ((x = b % 11) < 2) { a[12] = 0 } else { a[12] = 11-x }
	b = 0;
	for (y=0; y<13; y++) {
		b += (a[y] * c[y]); 
	}
	if ((x = b % 11) < 2) { a[13] = 0; } else { a[13] = 11-x; }
	if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13])){
		erro +="Digito verificador com problema!";
	}
	if (erro.length > 0){
        muda_estilo(campo, classerro); // Muda campo para classe de erro
		pos_alert_form(campo, '<b>CNPJ Inválido.</b><BR>O número de CNPJ fornecido foi considerado inválido pelo nosso sistema.'); // chama função para mostrar balão no campo		
		document.getElementById(campo).value='';
		//document.getElementById(campo).focus();
	}
}


// ***************************** Valida digitação de CNPJ (só aceita 0-9, . e - .... 
function valida_cnpj(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[0-9/.-]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^0-9/.-]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
			 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas números neste campo. <br>Formato: 00.000.000/0000-00'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
		formataCampo(campo, '00.000.000/0000-00', event);		
	}
}

// ***************************** Valida digitação de RG (só aceita 0-9, . , - e x.... 
function valida_rg(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[0-9xX.-]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^0-9xX.-]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
			 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas números neste campo. <br>Formato: 99.999.999-X'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
		formataCampo(campo, '00.000.000-x', event);		
	}
}

// ***************************** Valida digitação de RG (só aceita 0-9, . , - e x.... 
function valida_rg_login(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[0-9xX]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^0-9xX]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
			 pos_alert_form(campo, '<b>Não utilize pontos ou traços.</b><BR>Utilize apenas números e dígitos neste campo.'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
		//formataCampo(campo, '00.000.000-x', event);		
	}
}

// ***************************** Valida digitação de CEP (só aceita 0-9 e -)
function valida_cep(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[0-9-]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^0-9-]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
			 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas números neste campo. <br>Formato: 99999-999'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
		formataCampo(campo, '00000-000', event);		
	}
}

// *************** Solicita confirmação ao clicar em algum link. pagina = URL // msg = mensagem para exibição
function valida_link(pagina, msg){
	if(confirm(msg)){ 
		window.location = pagina;
	}
}

// *************** Abre nova janela
function abre_janela(url, nome, larg, alt, barra){
	window.open(url, nome,"width="+larg+",height="+alt+",scrollbars="+barra) 
}

// ***************************** Valida digitação de e-mail - campo=ID do campo (this.id) - event = tecla pressionada (event) - classerro = código da class para aplicar no caso de erro - classnormal = cód. da class qdo estiver normal o campo.... 
function valida_end_mail(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[A-Za-z0-9@._-]*$"); // Caracteres permitidos
	var pesq2 = new RegExp("[@._-]{2}"); // Evitar dupla pontuação seguida pq também não pode
	var pesq3 = new RegExp("[^A-Za-z0-9@._-]|[@._-]{2}", "g"); // Caracteres PROIBIDOS

	if (!document.getElementById(campo).value.match(pesq1) || document.getElementById(campo).value.match(pesq2)) { // Verifica se encontrou algo proibido
		 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas letras (sem acentos), números, hífem (-), ponto (.) ou underline (_)'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
	}
}

// ***************************** Valida digitação de senhas em geral (só aceita A-Za-z0-9.... 
function valida_senha(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[A-Za-z0-9]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^A-Za-z0-9]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
		 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas letras e números em sua senha'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}		
	}
}

// ***************************** Valida digitação de senhas em geral (só aceita A-Za-z0-9.... 
function valida_nome_arquivo(campo, event, classerro, classnormal){
	var pesq3 = new RegExp('[:*?"<>|/]', "g"); // Caracteres proibidos

	if (document.getElementById(campo).value.match(pesq3)) { // Verifica se encontrou algo proibido
		 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>O nome de arquivo não pode conter caracteres coringas.<BR>'); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}		
	}
}

// ***************************** Valida campos FILE de imagens (só aceita jpg, gif, jpeg, png.... 
function valida_imagem(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("(jpg|gif|png|jpeg)$"); // Caracteres permitidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
		 pos_alert_form(campo, '<b>Arquivo não permitido.</b><BR>Você só pode enviar imagens nos formatos: jpg, png, gif ou jpeg'); // chama função para mostrar balão no campo
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
	}
}


// ***************************** Valida digitação de NUMEROS (só aceita 0-9 
function valida_numero(campo, event, classerro, classnormal){
	var pesq1 = new RegExp("^[0-9]*$"); // Caracteres permitidos
	var pesq3 = new RegExp("[^0-9]", "g"); // Caracteres proibidos

	if (!document.getElementById(campo).value.match(pesq1)) { // Verifica se encontrou algo proibido
			 pos_alert_form(campo, '<b>Caracter não permitido.</b><BR>Utilize apenas números neste campo. '); // chama função para mostrar balão no campo
		 document.getElementById(campo).value = document.getElementById(campo).value.replace(pesq3,"");
		 muda_estilo(campo, classerro); // Muda campo para classe de erro
	} else { // Se tudo estiver OK
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; // Pega ultima telca apertada
		if(keyCode!='16' && keyCode!='9'){ // se não for o Shift, remove o balao
			rem_alert_form();
		 	muda_estilo(campo, classnormal); // Muda campo para classe aceso
		}
		if(keyCode=='13'){
			document.getElementById(campo).blur();
		}
	}
}



// ************************  Função para inserir ítens em um select
function inserir_select(meuselect, texto, valor){
    var x=document.getElementById(meuselect); //retorna o objeto select
    var options = x.getElementsByTagName("option"); //pega a lista de options do select
    
    if (x.selectedIndex>=0)
    {
        var y=document.createElement('option'); //cria um novo elemento option
        y.text=texto; //seta o texto do elemento option
        //y.value=options.length; 
		y.value=valor;//seta o valor do elemento option
        try {
            x.add(y,null); // adiciona um novo option no fim da lista para navegadores complacentes
        } catch(ex) {
            x.add(y); // adiciona um novo option no fim da lista para o IE
        }
    }
}
  
function remover_select(meuselect){

	var temp=document.getElementById(meuselect);
	for (m=temp.options.length;m>=0;m--) { 
		temp.options[m]=null 
	}
	temp.options[0] = new Option('/','0');  	
}


// ************************  Função para exibir a caixa de aviso de formulário
function pos_alert_form(camporef, texto){
	var el = document.getElementById(camporef); // Campo de referencia para localização
	var x = 0; //Lado
	var y = el.offsetHeight; // Topo
	var divexib = "alerta_form"; //DIV do alerta
	//Walk up the DOM and add up all of the offset positions.
	while (el.offsetParent && el.tagName.toUpperCase() != 'BODY'){ // Pegar posição do campo do form
		x += el.offsetLeft;
		y += el.offsetTop;
		el = el.offsetParent;
	}

	x += el.offsetLeft;
	y += el.offsetTop;
	document.getElementById(divexib).style.left 		= x + 'px';
	document.getElementById(divexib).style.top 			= (y-5) + 'px';
	document.getElementById(divexib).style.display 		= 'block';
	document.getElementById(divexib+'_texto').innerHTML	= '<font size=1 face=Verdana color=#000000>'+texto+'</font>';
}

// ************************  Função para REMOVER a caixa de alerta nos fomulários
function rem_alert_form(){
	var divexib = "alerta_form";
	document.getElementById(divexib).style.left 		= '0px';
	document.getElementById(divexib).style.top 			= '0px';
	document.getElementById(divexib).style.display 		= 'none';
	document.getElementById(divexib+'_texto').innerHTML	= '&nbsp;';
}


// Trocar estilo de campo
function muda_estilo(atual, status){ // Muda class dos campos (atual=campo, status=tipo da mudança (0 - Normal, 1 - aceso, 2 - erro, 3 - Invisível)
	//alert(atual);
	if(status==0){
		document.getElementById(atual).className = 'campo_normal';
	}
	if(status==1){
		document.getElementById(atual).className = 'campo_aceso';		
	}
	if(status==2){
		document.getElementById(atual).className = 'campo_erro';		
	}
	if(status==3){
		document.getElementById(atual).className = 'campo_invisivel';
	}
	if(status==4){
		document.getElementById(atual).className = 'campo_revelado';
	}
	if(status==5){
		document.getElementById(atual).className = 'campo_invisivel_alterado';
	}
	if(status==6){
		document.getElementById(atual).className = 'campo_invisivel_erro';
	}
	if(status==7){
		document.getElementById(atual).className = 'opaco';
	}
	if(status==8){
		document.getElementById(atual).className = 'transparente';
	}
	if(status==9){
		document.getElementById(atual).className = 'clicavel';
	}
	if(status==10){
		document.getElementById(atual).className = 'spam_parametro_desab';
	}
	if(status==11){
		document.getElementById(atual).className = 'spam_parametro';
	}
	if(status==12){
		document.getElementById(atual).className = 'spam_resultado';
	}
	if(status==13){
		document.getElementById(atual).className = 'campo_invisivel2';
	}
	if(status==14){
		document.getElementById(atual).className = 'campo_revelado2';
	}
	if(status==15){
		document.getElementById(atual).className = 'campo_invisivel_alterado2';
	}
	if(status==16){
		document.getElementById(atual).className = 'campo_invisivel_erro2';
	}

}

//Função para exibir elementos em FLASH sem a proteção do IE.
function flash(largura, altura, arquivo, transparencia, nome){
 document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+largura+'" height="'+altura+'" id="'+nome+'">');
 document.write('<param name="allowScriptAccess" value="sameDomain" /><param name="wmode" value="'+transparencia+'" /><param name="menu" value="false" />');
 document.write('<param name="movie" value="'+arquivo+'" /><param name="quality" value="best" /><embed src="'+arquivo+'" wmode="'+transparencia+'" menu="false" quality="best" width="'+largura+'" height="'+altura+'" name="'+nome+'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
 document.write('</object>');
}

//Função em AJAX que retorna o conteúdo de uma página em um objeto especificado.
function ajaxGet(url,elemento_retorno,exibe_carregando, texto_carregando){
/****** 
* ajaxGet - Coloca o retorno de uma url em um elemento qualquer
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.2 - 20/04/2006
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* Parametros:
* url: string; elemento_retorno: object||string; exibe_carregando:boolean
*  - Se elemento_retorno for um elemento html (inclusive inputs e selects),
*    exibe o retorno no innerHTML / value / options do elemento
*  - Se elemento_retorno for o nome de uma variavel
*    (o nome da variável deve ser declarado por string, pois será feito um eval)
*    a função irá atribuir o retorno à variável ao receber a url.
*******/
     var ajax1 = pegaAjax();
     if(ajax1){
         url = antiCacheRand(url)
         ajax1.onreadystatechange = ajaxOnReady
         ajax1.open("GET", url ,true);
         //ajax1.setRequestHeader("Content-Type", "text/html; charset=iso-8859-1");//"application/x-www-form-urlencoded");
         ajax1.setRequestHeader("Cache-Control", "no-cache");
         ajax1.setRequestHeader("Pragma", "no-cache");
         if(exibe_carregando){ put(texto_carregando)    }
         ajax1.send(null)
         return true;
     }else{
         return false;
     }
     function ajaxOnReady(){
         if (ajax1.readyState==4){
             if(ajax1.status == 200){
                 var texto=ajax1.responseText;
                 if(texto.indexOf(" ")<0) texto=texto.replace(/\+/g," ");
                 //texto=unescape(texto); //descomente esta linha se tiver usado o urlencode no php ou asp
                 //alert("Vai no put: "+texto);
				 put(texto);
                 extraiScript(texto);
             }else{
                 if(exibe_carregando){put("Falha no carregamento. " + httpStatus(ajax1.status));}
             }
             ajax1 = null
         }else if(exibe_carregando){//para mudar o status de cada carregando
                 put(texto_carregando)
         }
     }
     function put(valor){ //coloca o valor na variavel/elemento de retorno
         if((typeof(elemento_retorno)).toLowerCase()=="string"){ //se for o nome da string
             if(valor!="Falha no carregamento"){ 
                 eval(elemento_retorno + '= unescape("' + escape(valor) + '")')
             }
         }else if(elemento_retorno.tagName.toLowerCase()=="input"){
             valor = escape(valor).replace(/\%0D\%0A/g,"")
             elemento_retorno.value = unescape(valor);
         }else if(elemento_retorno.tagName.toLowerCase()=="select"){        
             select_innerHTML(elemento_retorno,valor)
         }else if(elemento_retorno.tagName){
             elemento_retorno.innerHTML = valor;
             //alert(elemento_retorno.innerHTML)
         }    
     }
     function pegaAjax(){ //instancia um novo xmlhttprequest
         //baseado na getXMLHttpObj que possui muitas cópias na net e eu nao sei quem é o autor original
         if(typeof(XMLHttpRequest)!='undefined'){return new XMLHttpRequest();}
         var axO=['Microsoft.XMLHTTP','Msxml2.XMLHTTP','Msxml2.XMLHTTP.6.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'];
         for(var i=0;i<axO.length;i++){ try{ return new ActiveXObject(axO[i]);}catch(e){} }
         return null;
     }
     function httpStatus(stat){ //retorna o texto do erro http
         switch(stat){
             case 0: return "Erro desconhecido de javascript";
             case 400: return "400: Solicita&ccedil;&atilde;o incompreensível"; break;
             case 403: case 404: return "404: N&atilde;o foi encontrada a URL solicitada"; break;
             case 405: return "405: O servidor n&atilde;o suporta o m&eacute;todo solicitado"; break;
             case 500: return "500: Erro desconhecido de natureza do servidor"; break;
             case 503: return "503: Capacidade m&aacute;xima do servidor alcançada"; break;
             default: return "Erro " + stat + ". Mais informa&ccedil;&otilde;es em http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html"; break;
         }
     }
     function antiCacheRand(aurl){
         var dt = new Date();
         if(aurl.indexOf("?")>=0){// já tem parametros
             return aurl + "&" + encodeURI(Math.random() + "_" + dt.getTime());
         }else{ return aurl + "?" + encodeURI(Math.random() + "_" + dt.getTime());}
     }
}
function select_innerHTML(objeto,innerHTML){
/****** 
* select_innerHTML - altera o innerHTML de um select independente se é FF ou IE
* Corrige o problema de não ser possível usar o innerHTML no IE corretamente
* Veja o problema em: http://support.microsoft.com/default.aspx?scid=kb;en-us;276228
* Use a vontade mas coloque meu nome nos créditos. Dúvidas, me mande um email.
* Versão: 1.0 - 06/04/2006
* Autor: Micox - Náiron José C. Guimarães - micoxjcg@yahoo.com.br
* Parametros:
* objeto(tipo object): o select a ser alterado
* innerHTML(tipo string): o novo valor do innerHTML
*******/
     objeto.innerHTML = ""
     var selTemp = document.createElement("micoxselect")
     var opt;
     selTemp.id="micoxselect1"
     document.body.appendChild(selTemp)
     selTemp = document.getElementById("micoxselect1")
     selTemp.style.display="none"
     if(innerHTML.toLowerCase().indexOf("<option")<0){//se não é option eu converto
         innerHTML = "<option>" + innerHTML + "</option>"
     }
     innerHTML = innerHTML.replace(/<option/g,"<span").replace(/<\/option/g,"</span")
     selTemp.innerHTML = innerHTML
     for(var i=0;i<selTemp.childNodes.length;i++){
         if(selTemp.childNodes[i].tagName){
             opt = document.createElement("OPTION")
             for(var j=0;j<selTemp.childNodes[i].attributes.length;j++){
                 opt.setAttributeNode(selTemp.childNodes[i].attributes[j].cloneNode(true))
             }
             opt.value = selTemp.childNodes[i].getAttribute("value")
             opt.text = selTemp.childNodes[i].innerHTML
             if(document.all){ //IEca
                 objeto.add(opt)
             }else{
                 objeto.appendChild(opt)
             }                    
         }    
     }
     document.body.removeChild(selTemp)
     selTemp = null
}

function extraiScript(texto){
//Maravilhosa função feita pelo SkyWalker.TO do imasters/forum
//http://forum.imasters.com.br/index.php?showtopic=165277&
     // inicializa o inicio ><
     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);
             /**********************
             * Alterado por Micox - micoxjcg@yahoo.com.br
             * Alterei pois com o eval não executava funções.
             ***********************/
             novo = document.createElement("script")
             novo.text = codigo;
             document.body.appendChild(novo);
         }
     }
}


/* Funções para fazer Upload Assíncrono (Parecido com AJAX) */
/* funçõezinhas padrão pra facilitar */
function $m(quem){
 //apelido só pra não ficar repetindo o document.getElementById
 return document.getElementById(quem)
}
function remove(quem){
 quem.parentNode.removeChild(quem);
}
function addEvent(obj, evType, fn){
 //o velho do elcio.com.br/crossbrowser
    if (obj.addEventListener)
        obj.addEventListener(evType, fn, true)
    if (obj.attachEvent)
        obj.attachEvent("on"+evType, fn)
}
function removeEvent( obj, type, fn ) {
  if ( obj.detachEvent ) {
    obj.detachEvent( 'on'+type, fn );
  } else {
    obj.removeEventListener( type, fn, false ); }
} 
/* a que faz o serviço pesado */
function micoxUpload2(form,url_action,id_elemento_retorno,html_exibe_carregando,html_erro_http){
/******
* micoxUpload - Submete um form para um iframe oculto e pega o resultado. Consequentemente pode
*               ser usado pra fazer upload de arquivos de forma assíncrona.
* Use a vontade mas coloque meu nome nos créditos. Licença Creative Commons.
* Versão: 1.0 - 03/03/2007 - Testado no FF2.0 IE6.0 e OP9.1
* Autor: Micox - Náiron JCG - elmicox.blogspot.com - micoxjcg@yahoo.com.br
* Parametros:
* form - o form a ser submetido ou seu ID
* url_action - url pra onde deve ser submetido o form
* id_elemento_retorno - id do elemento que irá receber a informação de retorno
* html_exibe_carregando - Texto (ou imagem) que será exibido enquanto se carrega o upload
* html_erro_http - texto (ou imagem) que será exibido se der erro HTTP.
*******/

 //testando se passou o ID ou o objeto mesmo
 form = typeof(form)=="string"?$m(form):form;
 
 var erro="";
 if(form==null || typeof(form)=="undefined"){ erro += "O form passado no 1o parâmetro não existe na página.\n";}
 else if(form.nodeName!="FORM"){ erro += "O form passado no 1o parâmetro da função não é um form.\n";}
 if($m(id_elemento_retorno)==null){ erro += "O elemento passado no 3o parâmetro não existe na página.\n";}
 if(erro.length>0) {
  alert("Erro ao chamar a função micoxUpload:\n" + erro);
  return;
 }

 //criando o iframe
 var iframe = document.createElement("iframe");
 iframe.setAttribute("id","micox-temp");
 iframe.setAttribute("name","micox-temp");
 iframe.setAttribute("width","0");
 iframe.setAttribute("height","0");
 iframe.setAttribute("border","0");
 iframe.setAttribute("style","width: 0; height: 0; border: none;");
 /* Não usei display:none pra esconder o iframe
    pois tem uma lenda que diz que o NS6 ignora
    iframes que tenham o display:none */
 
 //adicionando ao documento
 form.parentNode.appendChild(iframe);
 window.frames['micox-temp'].name="micox-temp"; //ie sucks
 
 //adicionando o evento ao carregar
 var carregou = function() { 
   removeEvent( $m('micox-temp'),"load", carregou);
   var cross = "javascript: ";
   cross += "window.parent.$m('" + id_elemento_retorno + "').innerHTML = document.body.innerHTML; void(0); ";
   
   $m(id_elemento_retorno).innerHTML = html_erro_http;
   $m('micox-temp').src = cross;
   //deleta o iframe
   setTimeout(function(){ remove($m('micox-temp'))}, 250);
  }
 addEvent( $m('micox-temp'),"load", carregou)
 
 //setando propriedades do form
 form.setAttribute("target","micox-temp");
 form.setAttribute("action",url_action);
 form.setAttribute("method","post");
 form.setAttribute("enctype","multipart/form-data");
 form.setAttribute("encoding","multipart/form-data");
 //submetendo
 form.submit();
 
 //se for pra exibir alguma imagem ou texto enquanto carrega
 if(html_exibe_carregando.length > 0){
  $m(id_elemento_retorno ).innerHTML = html_exibe_carregando;
 }
 
}