﻿/*
-----------------------------------------------------------------------------
Nome da Função: somenteNumeros(eventoTecla)
Objetivo: Permitir apenas caracteres numéricos.
Parâmetros:
		eventoTecla -> evento que representa a tecla digitada (event).
Chamada: onKeyPress="return somenteNumeros(event)"
-----------------------------------------------------------------------------
*/

function somenteNumeros(eventoTecla)
{
    // codigo ASCII da tecla pressionada
	switch (buscaNavegador()){
		case 'IE':
			codTecla = eventoTecla.keyCode;
			break;
		case 'FIREFOX':
			codTecla = eventoTecla.which;
			break;
	}
	
	if (!(((codTecla >= 48) && (codTecla <= 57)) || (codTecla == 8) || (codTecla == 9) || (codTecla == 13) || (codTecla == 0)))
        return false;
}

/*
-----------------------------------------------------------------------------
Nome da Função: buscaNavegador()
Objetivo: Busca o navegador utilizado pelo usuário
Parâmetros: Nenhum
Chamada: return buscaNavegador()
-----------------------------------------------------------------------------
*/
function buscaNavegador()
{
	agent = navigator.userAgent;
	IE = (agent.indexOf("MSIE") > -1)?true:false;
	FIREFOX = (agent.indexOf("Firefox")> -1)?true:false;

	if (IE)
		return "IE";
	else
		if (FIREFOX)
			return "FIREFOX";
}
	
/*
-----------------------------------------------------------------------------
Nome da Função: validaFormulario(formulario)
Objetivo: Valida o preenchimento dos campos do formulário.
Parâmetros:
Chamada: Botão de Envio do Formulário - evento onClick="return validaFormulario()"
-----------------------------------------------------------------------------
*/
function validaFormulario(formulario)
{
	msg = '';
	qtCampos = formulario.length;
	semAlerta = false;
	
	for (i=0;i< qtCampos;i++)
	{
		if (formulario.elements[i].className.indexOf('obrigatorio') >= 0)
		{
			switch (formulario.elements[i].type) {
				case 'select-one':
					if ((formulario.elements[i].value == '') || (formulario.elements[i].value == 0)) {
						titulo = formulario.elements[i].title;
						if (titulo != '')
							msg += 'O Campo '+ titulo +' deve ser preenchido! \n';
						else
							semAlerta = true;
					}
					break;
				case 'select-multiple':
					if (formulario.elements[i].options.length <= 0) {
						titulo = formulario.elements[i].title;
						if (titulo != '')
							msg += 'O Campo '+ titulo +' deve ser preenchido! \n';
						else
							semAlerta = true;
					}
					break;
				default: 
					if (formulario.elements[i].value == '')	{
						titulo = formulario.elements[i].title;
						if (titulo != '')
							msg += 'O Campo '+ titulo +' deve ser preenchido! \n';
						else
							semAlerta = true;
					}
					break;
			}
		}
		if (formulario.elements[i].type == 'select-multiple')
			for (j = formulario.elements[i].options.length-1 ; j >= 0 ; j-- )
				formulario.elements[i].options[j].selected = true;
	}
	if (msg != '') {
		msg = 'Os seguintes erros ocorreram: \n'+ msg;
		alert(msg);
		return false;
	}
	else {
		if (semAlerta)
			return false;
		else {
			if (formulario.onsubmit == '')
				alert('fasdfasd')//formulario.submit(); 
			else
				return true;
		}
	}
}

/*
-----------------------------------------------------------------------------
Nome da Função: validaFormularioFiltro(formulario)
Objetivo: Valida o preenchimento de um dos campos do formulario
Parâmetros:
Chamada: Botão de Envio do Formulário - evento onClick="return validaFormularioFiltro(formulario)"
-----------------------------------------------------------------------------
*/
function validaFormularioFiltro(formulario)
{
	msg = '';
	qtCampos = formulario.length;
	preenchido = false;
	
	for (i=0;i< qtCampos;i++)
	{
		if (formulario.elements[i].className.indexOf('obrigatorio') >= 0)
		{
			switch (formulario.elements[i].type) {
				case 'select-one':
					if ((formulario.elements[i].value != '') || (formulario.elements[i].value != 0))
						preenchido = true;
					break;
				default: 
					if (formulario.elements[i].value != '')
						preenchido = true;
					break;
			}
		}
	}

	if (!preenchido) {
		alert('Pelo menos um dos campos do formulário de filtro deve ser preenchido!');
		return false;
	}
	else
	{
		if (formulario.onsubmit == '')
			formulario.submit();
		else
			return true;
	}
}

/*
-----------------------------------------------------------------------------
Função: mascara(campo, tipo)
Objetivo: Aplica Máscara a um campo. 
Parâmetros:
		campo -> campo a ser aplicado a máscara.
		mascara -> máscara a a ser aplicada(data, telefone, cpf..)
Chamada: onKeyUp="mascara(this,'tipodemascara')"
-----------------------------------------------------------------------------
*/
function mascara(campo, mascara)
{
    var valorAtual = campo.value;        
    var valorNumerico = '';
    var nIndexModelo = 0;
    var nIndexString = 0;
    var valorFinal = '';
    var adicionarValor = true;
    
	switch(mascara)
	{
		case 'telefone':
			Modelo = '(##)####-####'
			break;
		case 'telefoneSimples':
			Modelo = '####-####'
			break;
		case 'data':
			Modelo = '##/##/####'
			break;
		case 'hora':
			Modelo = '##:##'
			break;
		case 'referencia':
			Modelo = '##/####'
			break;
		case 'CPF':
			Modelo = '###.###.###-##'
			break;
		case 'CNPJ':
			Modelo = '##.###.###/####-##'
			break;
		case 'CEP':
			Modelo = '#####-###'
			break;
		case 'placa':
			Modelo = '###-####'
			break;
		case 'cartaoCredito':
			Modelo = '####-####-####-####'
			break;			
	}
     
    // limpa a string valor atual para verificar se todos os caracteres são números
    for (i=0;i<Modelo.length;i++){
        if (Modelo.substr(i,1) != '#'){
            valorAtual = valorAtual.replace(Modelo.substr(i,1),'');
        }
    }
    valorAtual = valorAtual.toUpperCase();
     
    // aplica a máscara ao campo informado usando o modelo de máscara informado
    for (i=0;i<Modelo.length;i++){
        if (Modelo.substr(i,1) == '#'){
            if (valorAtual.substr(nIndexModelo,1) != ''){
                valorFinal = valorFinal + valorAtual.substr(nIndexModelo,1);
                nIndexModelo++;nIndexString++;
            } 
            else
                adicionarValor = false;
        }
        else {
            if (adicionarValor && valorAtual.substr(nIndexModelo,1) != ''){
                valorFinal = valorFinal + Modelo.substr(nIndexString,1)
                nIndexString++;
            }
        }
    }
    campo.value = valorFinal 
}

/*
-----------------------------------------------------------------------------
Nome da Função: formataValorDecimal
Parâmetros:
		campo -> campo no formulario
		teclapress -> Evento pressionar da tecla (event)
		casasDecimais -> Quantidade de casas decimais
Objetivo: Formatar e validar campos com 4 decimais
Validacoes:
		1 - nao deixa digitar numero negativo;
Chamada:
	onKeyUp="formataValorDecimal(this,event,2)"
-----------------------------------------------------------------------------
*/
function formataValorDecimal(campo, teclapres, casasDecimais) {
	var codtecla = teclapres.keyCode;
	vr = campo.value;
	vr = vr.replace( "/", "" );
	vr = vr.replace( "/", "" );
	vr = vr.replace( ",", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( ".", "" );
	vr = vr.replace( "-", "" );
	tam = vr.length;
	if ( codtecla == 8 || codtecla >= 48 && codtecla <= 57 || codtecla >= 96 && codtecla <= 105 ){
		if ( tam < 2 ){ 
	 		campo.value = vr ; }
		if ( tam == 2 ){ 
	 		campo.value = vr.substr( 0, 1 ) + ',' + vr.substr( 1, 2 ) ; }
	 	if ( (tam > casasDecimais + 1) && (tam <= casasDecimais + 3)){
	 		campo.value = vr.substr( 0, tam - casasDecimais ) + ',' + vr.substr( tam - casasDecimais, tam ) ; }
	 	if ( (tam > casasDecimais + 3) && (tam <= casasDecimais + 6) ){
	 		campo.value = vr.substr( 0, tam - (casasDecimais + 3)) + '.' + vr.substr( tam - (casasDecimais + 3), 3 ) + ',' + vr.substr( tam - casasDecimais, tam ) ; }
	 	if ( (tam > casasDecimais + 6) && (tam <= casasDecimais + 9) ){
	 		campo.value = vr.substr( 0, tam - (casasDecimais + 6)) + '.' + vr.substr( tam - (casasDecimais + 6), 3 ) + '.' + vr.substr( tam - (casasDecimais + 3), 3 ) + ',' + vr.substr( tam - casasDecimais, tam ) ; }
	 	if ( (tam > casasDecimais + 9) && (tam <= casasDecimais + 12) ){
	 		campo.value = vr.substr( 0, tam - (casasDecimais + 9)) + '.' + vr.substr( tam - (casasDecimais + 9), 3 ) + '.' + vr.substr( tam - (casasDecimais + 6), 3 ) + '.' + vr.substr( tam - (casasDecimais + 3), 3 ) + ',' + vr.substr( tam - casasDecimais, tam ) ; }
	}
}

/*
-----------------------------------------------------------------------------
Função: verificaData(campo)
Objetivo: Faz a validação da data digitada.
Parâmetros:
		campo -> campo a ser validado.
Chamada: onBlur="verificaData(this)"
-----------------------------------------------------------------------------
*/
function verificaData(campo)
{
	msg = ''
	bissexto = false
	tam = campo.value.length;
	if (tam == 0)
		return false;
	if ((tam < 10) && (tam > 0))
		msg = 'Data Inválida! O ano deve ter 4 dígitos!';
	if (tam == 10)
	{
		partes = campo.value.split("/");
		dia = partes[0];
		mes = partes[1];
		ano = partes[2];		
		if (!((dia >= '01')&&(dia <= '31')))
			msg = 'Dia Inválido!';
		else
		{
			if (!((mes >= '01')&&(mes <= '12')))
				msg = 'Mês Inválido!';
			else
			{
				if (((ano % 4 == 0) && (ano % 100 != 0)) || (ano % 400 == 0))
				    bissexto = true;
     			if (mes == '02')
				{
					if  ((dia > '28')  && (!bissexto))
						msg = 'O mês correspondente possui no máximo 28 dias!';
					if ((dia > '29')  && (bissexto))
						msg = 'O mês correspondente possui no máximo 29 dias!';
				}		
     			if (!((mes == '01') || (mes == '03') || (mes == '05') || (mes == '07') || (mes == '08') || (mes == '10') || (mes == '12')) && (dia == '31'))
					msg = 'O mês correspondente possui apenas 30 dias!';
			}
		}
	}
	if (msg != '')
	{
		alert(msg);
		campo.value = '';
		campo.focus();
	}
	else
		return true;
}

/*
-----------------------------------------------------------------------------
Função: verificaHora(campo)
Objetivo: Faz a validação da hora digitada.
Parâmetros:
		campo -> campo a ser validado.
Chamada: OnBlur="verificaHora(this)"
-----------------------------------------------------------------------------
*/

function verificaHora(campo)
{
	msg = ''
	tam = campo.value.length;
	if (tam == 0)
		return false;
	if ((tam < 5) && (tam > 0))
		msg = 'Hora Inválida!';
	if (tam == 5)
	{
		partes = campo.value.split(":");
		hora = partes[0];
		minuto = partes[1];

		if (!((hora >= 00)&&(hora <= 23)))
			msg = 'Hora Inválida!';
		else
		{
			if (!((minuto >= 00)&&(minuto <= 59)))
				msg = 'Minuto Inválido!';
		}
	}
	if (msg != '')
	{
		alert(msg);
		campo.value = '';
		campo.focus();
	}
	else
		return true;
}

/*
-----------------------------------------------------------------------------
Nome da Função: abreJanela()
Objetivo: Abrir uma nova janela exibindo uma página com tamanho definido.
Parâmetros:
		pagina -> página a ser exibida
		largura -> largura da janela
		altura -> altura da janela
-----------------------------------------------------------------------------
*/
function abreJanela(pagina, largura, altura)
{
	window.open(pagina, 'janela','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width='+largura+',height='+altura);
}	

/*
-----------------------------------------------------------------------------
Nome da Função: habilitaCampo(campo, estiloCss)
Objetivo: Habilitar um campo do formulário, trocando também o seu estilo.
Parâmetros:
		campo -> campo a ser habilitado
		estiloCss -> estilo css a ser utilizado
-----------------------------------------------------------------------------
*/

function habilitaCampo(campo, estiloCss)
{
	campo.disabled = false;
	campo.className = estiloCss;
}

/*
-----------------------------------------------------------------------------
Nome da Função: desabilitaCampo(campo, estiloCss)
Objetivo: Desabilitar um campo do formulário, trocando também o seu estilo.
Parâmetros:
		campo -> campo a ser desabilitado
		estiloCss -> estilo css a ser utilizado
-----------------------------------------------------------------------------
*/

function desabilitaCampo(campo, estiloCss)
{
	campo.disabled = true;
	campo.className = estiloCss;
}

/*
-----------------------------------------------------------------------------
Nome da Função: validaMinimoCaracteres(campo, qtdMinima)
Objetivo: Utilizada para validar uma quantidade mínimo de caracteres digitados.
Parâmetros:
		campo -> campo a ser validado
		qtdMinima -> quantidade mínima de caracteres
-----------------------------------------------------------------------------
*/
function validaMinimoCaracteres(campo, qtdMinima)
{
	if((campo.value.length < qtdMinima) && (campo.value != '')) {
		alert('Este campo tem que ter no mínimo ' + qtdMinima + ' caracteres.');	
		campo.value = '';
	}
}

/*
-----------------------------------------------------------------------------
Nome da Função: validaEmail(campo)
Objetivo: Validar o e-mail digitado.
Parâmetros:
		campo -> campo a ser validado
Chamada: onBlur="validaEmail(this);"		
-----------------------------------------------------------------------------
*/

function validaEmail(campo)
{
	emailValido = true;
	if (campo.value != "") {
		prim = campo.value.indexOf("@")
		if(prim < 2) { emailValido = false;	}
		if(campo.value.indexOf("@",prim + 1) != -1) { emailValido = false; }
		if(campo.value.indexOf(".") < 1) { emailValido = false; }
		if(campo.value.indexOf(" ") != -1) { emailValido = false; }
		if(campo.value.indexOf("meil") > 0) { emailValido = false; }
		if(campo.value.indexOf(".@") > 0) { emailValido = false; }
		if(campo.value.indexOf("@.") > 0) { emailValido = false; }
		if(campo.value.indexOf(".com.br.") > 0) { emailValido = false; }
		if(campo.value.indexOf("/") > 0) { emailValido = false; }
		if(campo.value.indexOf("[") > 0) { emailValido = false; }
		if(campo.value.indexOf("]") > 0) { emailValido = false; }
		if(campo.value.indexOf("(") > 0) { emailValido = false; }
		if(campo.value.indexOf(")") > 0) { emailValido = false; }
		if(campo.value.indexOf("..") > 0) { emailValido = false;}
	}

	if (emailValido)
		return true;
	else
	{
		alert('O e-mail informado não é válido!');
		campo.value = '';
		return false;
	}
}

/*
-----------------------------------------------------------------------------
Nome da Função: paginar(numPagina)
Objetivo: Utilizada na paginação
-----------------------------------------------------------------------------
*/
function paginar(numPagina)
{
	formulario = document.frmFiltrar;
	formulario.hdPaginaAtual.value = numPagina;
	formulario.submit();
}

/*
-----------------------------------------------------------------------------
Nome da Função: validaComando(form, action, comando, codigoSelecionado)
Objetivo: Utilizada na validação do comando de editar e excluir das páginas default
-----------------------------------------------------------------------------
*/

function validaComando(form, action, comando, codigoSelecionado)
{
	formulario = document.getElementById(form);
	formulario.action = action;
	formulario.hdComando.value = comando;
	formulario.hdCodigoSelecionado.value = codigoSelecionado;
	
	if ((comando == 'incluir') || (comando == 'salvar')) {
		if (!validaFormulario(formulario)) {
				alert('Existem campos em branco!');
				return false;
		}
	}	
	
	if (comando == 'excluir')
		return confirm("Deseja realmente excluir o registro?");
		
	if (comando == 'cadastrar')
		return confirm("Deseja realmente cadastrar esta publicação?");
		
	if (comando == 'arquivar') {
		if (document.getElementById('slcFases') == null) {
			return confirm("Deseja realmente arquivar esta publicação?");
		} else {
			if (document.getElementById('slcFases').value != 0) {
				return confirm("Deseja realmente arquivar esta publicação?");
			} else {
				alert("Selecione uma fase para arquivar esta publicação!");
				return false;
			}
		}
	}
}

/*
-----------------------------------------------------------------------------
Nome da Função: validaComandoLink(form, action, comando, codigoSelecionado)
Objetivo: Utilizada na validação do comando de links
-----------------------------------------------------------------------------
*/

function validaComandoLink(form, action, comando, codigoSelecionado)
{
	formulario = document.getElementById(form);
	formulario.action = action;
	formulario.hdComando.value = comando;
	formulario.hdCodigoSelecionado.value = codigoSelecionado;
	formulario.submit();
}

/*
-----------------------------------------------------------------------------
Nome da Função: validaNovoRegistro()
Objetivo: Utilizada para setar comando 'novo' nas telas de cadastro simples
-----------------------------------------------------------------------------
*/
function validaNovoRegistro(action)
{
	formulario = document.frmGest;
	formulario.action = action;
	formulario.hdComando.value = 'novo';
	formulario.submit();
}
/*
-----------------------------------------------------------------------------
Nome da Função: adicionaOpcaoSelect(selectElement, textoOpcao, valorOpcao)
Objetivo: Utilizada para acrescentar um novo <option value="valorOpcao">textoOpcao</option> em um select
-----------------------------------------------------------------------------
*/
function adicionaOpcaoSelect( selectElement, textoOpcao, valorOpcao )
{
	var objOption = document.createElement("OPTION") ;

	objOption.text	= textoOpcao ;
	objOption.value = valorOpcao ;	

	selectElement.options.add(objOption) ;

	return objOption;
}

/*
-----------------------------------------------------------------------------
Nome da Função: removeOpcoesSelect(idSelectElement)
Objetivo: Utilizada para remover todos os <options> de um select (pelo id)
-----------------------------------------------------------------------------
*/
function removeOpcoesSelect(idSelectElement) {
	selectElement = document.getElementById(idSelectElement);
	var objOptions = selectElement.options;
	// Removendo options
	for (i = objOptions.length-1 ; i >= 0 ; i-- ) {
		selectElement.remove(i);
	}
}
/*
-----------------------------------------------------------------------------
Nome da Função: transfereOpcoesSelecionadas(idSelectOrigem, idBotaoOrigemDestino, idBotaoDestinoOrigem, idSelectDestino)
Objetivo: Utilizada para transferir <options> de um select MULTIPLE para outro.
Observações: Faz tratamento dos botões de adicionar e remover os <options>
Parâmetros:
idSelectOrigem -> id do Select multiple origem das opções
idBotaoOrigemDestino -> id do botão >> (Adicionar)
idBotaoDestinoOrigem -> id do botão << (Remover)
idSelectDestino -> id do Select multiple origem das opções
-----------------------------------------------------------------------------
*/
function transfereOpcoesSelecionadas(idSelectOrigem, idBotaoOrigemDestino, idBotaoDestinoOrigem, idSelectDestino) {
	selectOrigem = document.getElementById(idSelectOrigem);
	botaoOrigemDestino = document.getElementById(idBotaoOrigemDestino);
	botaoDestinoOrigem = document.getElementById(idBotaoDestinoOrigem);
	selectDestino = document.getElementById(idSelectDestino);
	var objOptions = selectOrigem.options ;
	selecionado = false;
	// Remove all selected options
	for (i = 0; i < objOptions.length; i++ ) {
		if (objOptions[i].selected) {
			opcao = adicionaOpcaoSelect(selectDestino, objOptions[i].text,objOptions[i].value);
			selectOrigem.remove(i);
			selecionado = true;
			i -= 1;
		}
	}
	if (selectOrigem.options.length <= 0)
		botaoOrigemDestino.disabled = true;
	if (selectDestino.options.length > 0)
		botaoDestinoOrigem.disabled = false;
	if (!selecionado)
		alert('Nenhuma opção foi selecionada!');
}

/*
-----------------------------------------------------------------------------
Nome da Função: selecionarTodos(cbTodos, cb) 
Objetivo: Selecionar todos os checkbox da tela
Parâmetros:
	idCheckboxTodos : id do checkbox TODOS
	idCheckbox : id do checkbox que será selecionado
-----------------------------------------------------------------------------
*/
function selecionarTodos(idCheckboxTodos, checkbox) {
	checkboxTodos = document.getElementById(idCheckboxTodos);

	if (checkboxTodos.checked)
		checkar = true;
	else
		checkar = false;

	if (checkbox.length == undefined)
		checkbox.checked = checkar;
	else
		for (i=0; i<checkbox.length; i++)
			checkbox[i].checked = checkar;
}

/*
-----------------------------------------------------------------------------
Nome da Função: validaCPF(campo)
Objetivo: Utilizada para validar um CPF digitado no campo
Parâmetros:
		campo -> campo a ser validado
Observações: A página que for utilizar, precisa referenciar também o arquivo funcoesCpfCnpj.js.
-----------------------------------------------------------------------------
*/
function validaCPF(campo)
{

}

/*
-----------------------------------------------------------------------------
Nome da Função: validaCNPJ(campo)
Objetivo: Utilizada para validar um CNPJ digitado no campo
Parâmetros:
		campo -> campo a ser validado
Observações: A página que for utilizar, precisa referenciar também o arquivo funcoesCpfCnpj.js.
-----------------------------------------------------------------------------
*/
function validaCNPJ(campo)
{

}
