<!--

function exibe_imagem(i){
   // vis_imagem é o nome dado à imagem padrão que é exibida no form, pela tag img src, e aqui ela
   // será trocada pela imagem requerida pelo usuário 

   // esta função é chamada após o usuário informar o caminho para o upload da imagem ou,
   // em caso de alteração, em que as imagens já foram enviadas anteriormente
   // Deste modo, as imagens serão exibida na tela 

  if(eval("document.form1.nome_imagem_up"+i).value != "") { // imagem escolhida
     document.images["vis_imagem"+i].src = eval("document.form1.nome_imagem_up"+i).value;
     // checa a existência do campo checkbox exclui_imagem... no formulário, campo este que dá a opção de excluir imagem,
	 // na operação de alteração
     if(eval("document.form1.exclui_imagem"+i) != null) {
       eval("document.form1.exclui_imagem"+i).value = '';  // limpa o valor do campo, como precaução (troca de imagem)
       eval("document.form1.exclui_imagem"+i).disabled = true;
     }
  }else {
     // checa a existência do campo hidden nome_imagem... no formulário, campo este que armazena o nome da imagem anterior
     if(eval("document.form1.nome_imagem"+i)== null) { 
         document.images["vis_imagem"+i].src = "../icones/vis_imagem.jpg" ;
	 }else { // imagem enviada anteriormente
        // "?"+new Date().getTime() é um recurso para forçar a atualização da imagem no browser, 
	    // caso contrário, o browser traz a imagem do cache, quando tem o mesmo nome. No caso de alteração,
    	// a imagem nova terá o mesmo nome da anterior, então este recurso é necessário

        // na alteração, as linhas abaixo servem tanto para quando
		// o usuário mude a imagem anterior, mas volte atrás antes de gravar, e também para
		// carregar as imagens já enviadas antes, e armazenadas nos campos hidden nome_imagem...
        nome_imagem = eval("document.form1.nome_imagem"+i).value ;  
        document.images["vis_imagem"+i].src = "../imagens_bd/" + nome_imagem+"?"+new Date().getTime() ;

        eval("document.form1.exclui_imagem"+i).disabled = false;		  	
	 }
  }
  
}

// a função testa_numero testa a digitação de um número pelo usuário
function valida_numero(nome_form, campo_form){
var numero = nome_form[campo_form].value;
	if(isNaN(numero)){
	     alert("Este campo só aceita números!");
         nome_form[campo_form].focus();		 
    }
}

function formata_campo(nome_form, campo_form, mask_campo, evento) {
	// recebe 4 parâmetros
/***
* Descrição :  ::: formata um campo do formulário de acordo com a máscara informada :::
* Parâmetros: - nome_form (o nome do formulário)- valor_campo (string contendo o nome do elemento do formulário)
*             - mask_campo (mascara que define o formato do campo a ser apresentado no formulário)
*             - evento = evento keypress (ao pressionar uma tecla)
***/

var i, contador, valor_campo, tam_campo, tam_campo_mask, mask_bool, mask_final, cod_tecla ;

if(document.all) { // Internet Explorer
    cod_tecla = evento.keyCode ; // recebe o código da tecla pressionada
} else if(document.layers) { // Nestcape
    cod_tecla = evento.which ; // recebe o código da tecla pressionada, no caso de Netscape
}

if((cod_tecla != 8) && (cod_tecla != 46)){  // teclas backspace e delete são permitidas no campo
	if((cod_tecla < 48) || (cod_tecla > 57)){ // não permite caracteres alfa, somente números de 0 a 9
   		evento.returnValue = false;  // cancela pressionamento de teclas alfa
	}
}

valor_campo = nome_form[campo_form].value; // armazena o valor do campo do form. na variável

// Limpa caracteres de formatação digitados pelo usuário
valor_campo = valor_campo.toString().replace( "-", "" );
valor_campo = valor_campo.toString().replace( "-", "" );
valor_campo = valor_campo.toString().replace( ".", "" );
valor_campo = valor_campo.toString().replace( ".", "" );
valor_campo = valor_campo.toString().replace( "/", "" );
valor_campo = valor_campo.toString().replace( "/", "" );
valor_campo = valor_campo.toString().replace( "(", "" );
valor_campo = valor_campo.toString().replace( "(", "" );
valor_campo = valor_campo.toString().replace( ")", "" );
valor_campo = valor_campo.toString().replace( ")", "" );
valor_campo = valor_campo.toString().replace( " ", "" );
valor_campo = valor_campo.toString().replace( " ", "" );

tam_campo = valor_campo.length; // informa o tamanho dos dados digitados no campodo form.

i = 0 ;
contador = 0 ;
mask_final = "" ;
tam_campo_mask = tam_campo ;

// O trecho de repetição abaixo, será usado para inserir a máscara de formatação no campo,
// poupando o usuário de digitá-las

while (i <= tam_campo_mask) { 

	// verifica desde a primeira posição da máscara, passada com o parâmetro mask_campo, se existe algum dos caracteres de
	// formatação abaixo. Checa a partir da primeira posição da máscara até o total de dados digitados no campo do formulário

	// a variável 'i' vai de zero até o tamanho total de dados digitados no campo

	mask_bool = ((mask_campo.charAt(i) == "-") || (mask_campo.charAt(i) == ":") || (mask_campo.charAt(i) == "."));
	mask_bool = mask_bool || ((mask_campo.charAt(i) == "(") || (mask_campo.charAt(i) == ")") || (mask_campo.charAt(i) == " "));
	mask_bool = mask_bool || (mask_campo.charAt(i) == "/");

	if (mask_bool) { // se algum dos caracteres de formatação foram passados com a máscara
    	mask_final += mask_campo.charAt(i); // adiciona os caracteres de máscara
	    tam_campo_mask++; // tam_campo_mask armazenou acima o tamanho do campo, aqui é incrementado mais o tamanho da máscara
	} else {
	    mask_final += valor_campo.charAt(contador);  // a variável campo_mask adiciona valores do campo do formulário
	    contador++; // incrementa em 'um'
	}
	i++ ; // incrementa em 'um' 
}

nome_form[campo_form].value = mask_final ;// retorna o campo formatado ao formulário

} //Fim da Função formata_campo

function valida_data(nome_form, campo_form){
    var data = nome_form[campo_form].value;  // armazena o campo data do formulário na variável data.
    if(data != "") {	
    // os métodos substr e substring não são a mesma coisa. 
    // se omitirmos o segundo parâmetro, substr e substring serão exatamente iguais,
	// usando o segundo parâmetro, a diferença é que para o substr você especifica a quantidade de caracteres
	// que deseja a partir do inicio.
	// já no substring, você especifica exatamente o inicio e o fim do corte na string. 
	
     // no método substring, x e y são inteiros compreendidos entre 0 e o comprimento menos 1 
	 // da cadeia de caracteres. 

	data = data.substring(0,6) + "20" + data.substr(6);  // converte para data com ano de 4 dígitos
	
    // cria um array, delimitando seus elementos pelo caractere '/' do campo do form.
    // o método split é usado somente com string
	// o método reverse() reverte os elementos do array 

 	var temp = data.split("/").reverse();

    var um_dia =1000*60*60*24 ; //converte um dia em milissegundos
    // o mês do objeto Date vai de 0-11, sendo 0 o mês 1, e assim em diante...
    var data = new Date(temp[0], temp[1]-1, temp[2]);  // ano, mes, dia
	var data_hoje = new Date() ;
    // calcula a diferença entre a data digitada no formulário e data atual, em dias
    var dias_dif = (Math.ceil( (data.getTime()-data_hoje.getTime()) /(um_dia)));

    /***
    * 
    * O bug da função parseInt do JavaScript, que converte para inteiro
    * 
    * O bug é que parseInt pode retornar um valor incorreto. Por exemplo, parseInt("08") resulta em 0 em vez
    * de 8. E parseInt("09") resulta em 0 em vez de 9. A razão para isto acontecer, é que o zero na frente do
    * número, está tentando dizer ao browser que é um número octal (base 8), e "08" e "09" não são números
    * octais válidos.

    * Tenha em mente que este bug só acontece quando o valor a ser avaliado é uma string iniciada com zero.
    *
    * Previna-se usando uma destas duas técnicas:
    *
    * parseInt(parseFloat(<my text value>))
    *
    * parseInt(<my text value>, 10)
    ***/
	
	var ano = parseInt(parseFloat(temp[0]));
	var mes = parseInt(parseFloat(temp[1]));
	var dia = parseInt(parseFloat(temp[2]));

	var dias_mes = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31); // dia final de cada mes do ano

    // a variável texto não foi declarada com var, pois ela tem que ser global para a função invalida_data()

    if ((temp.length < 3) || (temp[0].length < 4) || (temp[1].length < 2) ||
    	(temp[2].length < 2) || (temp[1] == 0)) {
    	// checa se o array temp possui 3 elementos (dia, mes e ano)
		// checa quant. de dígitos dos elementos do array temp
       texto = "Data inválida. Por favor verifique!"; 	 
	}//else if (dias_dif < 0) texto = "Não é permitido data retroativa!";
    //else if (dias_dif > 365) texto = "Não é permitido data maior que 1 ano";
    else if((dia > 0) && (dia <= dias_mes[mes])) { // compara o dia com o limite máximo do mes em referencia
		return true;
	}else if((mes == 2) && (dia == 29) && ((ano % 400 == 0) || ((ano % 4 == 0) && (ano % 100 != 0)))) {
       // verifica ano bissexto	
		return true;
	}else texto = "O mês da data digitada não tem dia " + dia ;

	invalida_data(nome_form, campo_form);
	return false;
	}
}

function invalida_data(nome_form, campo_form){
	alert(texto);
	nome_form[campo_form].focus();
	nome_form[campo_form].select();
}

// não permite campos vazios, desde que seu atributo denominado vazio, no formulário, esteja configurado para false
function checa_campo_vazio(nome_form){  
    var qt_campos = document.forms[nome_form].elements.length;
	
	for (var i = 0; i < qt_campos; i++) {
		var campo_form = document.forms[nome_form].elements[i];
		if (campo_form.getAttribute('vazio') == 'false') {  // vazio é o atributo do campo definido no formulário
			if (campo_form.value == "") {
				nome = campo_form.getAttribute('nome');
				alert("O campo " + nome + " deve ser preenchido!");
				campo_form.focus();
				return false;
				break;
			}
		}
	}
}

// função que delimita texto, por quant.caracteres e quant.linhas
function delimita_texto(textarea){ 

elem = textarea.value.split('\n') 
elem = elem.join(' ') 
elem = elem.split('\r') 
elem = elem.join(' ') 
elem = elem.split('  ') 
elem = elem.join(' ') 

col = textarea.cols 
total_col = col-1 

conta_char = 0 
elem2 = new Array() 
i = 0 

while (total_col < elem.length && i < textarea.rows){ 
   total_col = elem.lastIndexOf(' ',total_col) 
   elem2[i] = elem.substring(conta_char, total_col) 
   i++ 
   conta_char = total_col + 1 
   total_col += col 
} 

if (i < textarea.rows-2) elem2[i] = elem.substring(conta_char, elem.length) 
else textarea.value = textarea.value.substring(0,textarea.value.length - 1); 

elem = elem2.join('\n') 

} 


// as duas funções abaixo, tornam a interface mais fluida para o usuário e aprimora a sua
// experiência. Assim, o usuário pode clicar próximo ao elemento radiobutton ou checkbox para
// ativá-lo, ou seja, a área clicável das caixas de verificação e botões de rádio são estendidas
// também para a label destes elementos. Sem ter que clicar precisamente sobre o item.


// alternarão o valor de um campo de caixa de verificação ou botão de rádio . Se estiver marcada,
// será desmarcada e vice-versa.

// é importante dizer que estas funções só terão funcionalidade se usadas como links,
// ou seja, cria-se um <a href="javascript:funcao_abaixo(parâmetros)", e antes de fechar o link
// com </a>, coloca-se o botão de rádio ou a caixa de verificação
// os parâmetros a serem passados para estas funções, devem estar entre aspas simples, caso contrário, não funcionará
// não esquecer de mudar o nome do formulário aqui (form1), quando este não for o mesmo que constará no código html
function check_box(campo_form){  
	var checkset = eval("document.form1."+campo_form); // construir o objeto
	checkset.checked = !(checkset.checked);	
}

function radio(campo_form, valor) { 
	var radioset = eval("document.form1."+campo_form);  // construir o objeto

    for (i=0;i<radioset.length;i++) {
		if (radioset[i].value == valor){
			radioset[i].checked = true;
		}
	}
}

function submeta(nome_form, elemento) {
	// desabilita o botao confirma apos envio do formulario
	nome_form[elemento].disabled = true ;
	document.form1.submit();
}

function getFile(sFilePath){
   var oFileSystem = new ActiveXObject("Scripting.FileSystemObject");	
   document.form1.display.value = oFileSystem.GetFile(sFilePath).Size+' Bytes';
}

function resize(textarea) { // textarea dinâmico
  //redimensiona o tamanho do campo textarea, conforme aumentam as linhas
   a = textarea.value.split('\n');  // separa quebra de linhas em elementos de array
   if(!textarea.value.length) {
	  b=0 ;
   }else {	  
	  b=2;
   }
   
   for(i=0; i < textarea.value.length; i++) {
      if(textarea.value.charCodeAt(i) == 13) { // detecta um enter na linha
		  b++ ;
	  }
   }

   for (i = 0; i < a.length; i++) {  // length conta os elementos de um array
      if (a[i].length >= textarea.cols) {
		  b+= Math.floor(a[i].length/textarea.cols); // calcula qtde.total de linhas		  
	  }
   } 

   b+= a.length ; // acumula total de elementos de a em b
   
   if (textarea.rows != b) { // decrementa a linha, se pressionar del na linha em branco
	   textarea.rows = b; // aumenta mais uma linha, conforme aumenta o texto
   }

} 
function aumenta_area(textarea) {
	if(!textarea.value.length) {
		textarea.rows = 2 ;
	}else{
	    textarea.rows = 20 ;
    }
}
//-->