//importar biblioteca para formatacao de campo
document.write( '<script language="JavaScript" src="/lib_js/formulario_mask.js" type="text/javascript"></script>\n' );
document.write( '<script language="JavaScript" src="/lib_js/valida_cnpj_cpf.js" type="text/javascript"></script>\n' );


/*
funcao para apagar os caracteres corretamente
*/
function editaCampo( obj ){
    if( event.keyCode == 8 || event.keyCode == 46 ){ 
        obj.value = obj.value.substr( 0, (obj.value.length-1) ); 
        return false;
    }else{
        return true;
    }
}


/*
funcao para navegacao e formatacao do campo
	- quando o tecla pressionada for "ENTER", funcao irah navegar
	- quando o tecla pressionada for outra, funcao irah formatar caso o tipo do campo seja identificado
	- quando o tecla pressionada for outra, funcao naum irah fazer nada caso o tipo do campo NAUM seja identificado
*/
function navegaCampo( obj ){	

	//verifica se deve navegar ou formatar o campo
	if( event.keyCode == 13 ){ 

		var objTabIndex = obj.tabIndex + 1;
		var formulario = obj.form;
		var formElementos = formulario.elements;
		var enviarSubmit = true;
		
		//buscar o proximo campo pelo TabIndex
		for( i=0; i<formElementos.length; i++ ){
			if( formElementos[i].tabIndex == objTabIndex ){
				formElementos[i].focus();
				enviarSubmit = false;
				break;
			}			
		}
		
		//caso naum encontre o proximo campo, fazer submit
		if( enviarSubmit ){
			enviarForm( obj.form );
		}
		
		return false;

	//formatar o campo
	}else{
	
		//verificar se o tipo de formatacao estah definido
		if( obj.tipo == undefined ){
			//escreve o que foi digitado sem tratamento
			return true;
		}else{
			//verifica tipo de formatacao do campo
			switch( obj.tipo ){
			
				//campo CNPJ CPF
				case 'cnpj_cpf':
					if( obj.value.length < 14 ){
						return txtBoxFormat( obj.form, obj.name, '999.999.999-99', event );
					}else{
						return txtBoxFormat( obj.form, obj.name, '99.999.999/9999-99', event );
					}
					break;
					
				//campo data
				case 'data':
					return txtBoxFormat( obj.form, obj.name, '99/99/9999', event );
					break;
					
				//campo Moeda
				case 'moeda':
					return formataMoeda( obj );
					break;
					
				//campo Somente Texto
				case 'somente_texto':
					return formataSomenteTexto( obj );
					break;
                    
				//campo mascara dinamica
				case 'mask':
					return txtBoxFormatEvent2( obj.form, obj.name, obj.mask, event );
					break;
				
				//erro: tipo de campo indefinido
				default:
					//escreve o que foi digitado sem tratamento
					return true;
			}			
		}		
	}
}

//funcao utilizada para formatacao de campo tipo moeda
function formataMoeda( obj ){
	var tecla = String.fromCharCode( event.keyCode );

	if( tecla.search( /[0-9]/g ) > -1 ){
		//formatar variavel para fica no padrao: '999999999.99'
		var objValor = LTrim( RTrim( obj.value ) );
		objValor = objValor.replace(/\./g,'');
		objValor = objValor.replace(/\,/g,'.');
		
		//verificar se eh preciso adicionar o valor inicial		
		if( objValor.length == 0 ) objValor = '0.00';

		//concatena o valor digitado
		objValor = objValor.replace(/\./g,'');
		objValor = objValor + tecla;
		
		//formata o valor novamente para o padrao
		var objTamanho = objValor.length;
		var objValor1 = objValor.substr( 0, ( objTamanho - 2 ) );
		var objValor2 = objValor.substr( ( objTamanho - 2 ), objTamanho );
		//cria o novo valor
		objValor = objValor1 + '.' + objValor2;
		
		objValor = new Number( objValor );
		
		obj.value = objValor.toLocaleString()
	}
	
	return false;
}

//funcao utilizada para formatacao de campo tipo somente texto
function formataSomenteTexto( obj ){
	var tecla = String.fromCharCode( event.keyCode );
	
	if( tecla.search( /\b[^0-9]/gi ) > -1 ){
		return true;
	}else{
		return false;
	}
}


//funcao para dar submit no formulario
function enviarForm( obj ){
	
	var qqValidacao = obj.fireEvent( 'onSubmit' );

	if( qqValidacao )
		obj.submit();
}

//funcao para enviar senha para e-mail
function esqueciForm( obj ){
	
	var cnpj = obj.cnpj_cpf.value;
	if (cnpj == ""){
		alert('Campo de CNPJ/CPF deve ser preenchido.');
		obj.cnpj_cpf.focus();
		return false;
	}
    
    if ( validaCampoCnpjCpf( obj.elements[0] ) ){
		validaMostraErro( obj.elements[0] );
		return false;
	}
	
	var prefa = obj.prefeitura.value;    
	if (prefa == ""){
		alert('Voce deve selecionar uma prefeitura.');
		obj.prefeitura.focus();
		return false;
	}
	
	window.location='solicitacao_aidf/esqueci_senha.cfm?cnpj=' + cnpj + '&prefeitura=' + prefa;
}

//funcao que redireciona para tela de cadastro de graficas
function cadGrafica( obj ){
	
	var cnpj = obj.cnpj_cpf.value;
	if (cnpj.length > 0){
        if ( validaCampoCnpjCpf( obj.elements[0] ) ){
    		validaMostraErro( obj.elements[0] );
    		return false;
    	}
    }
	
	var prefa = obj.prefeitura.value;
	if (prefa == ""){
		alert('Voce deve selecionar uma prefeitura.');
		obj.prefeitura.focus();
		return false;
	}
	
	window.location='solicitacao_aidf/cadastro_grafica.cfm?cnpj=' + cnpj + '&prefeitura=' + prefa;
}

/*
funcao para validar formularios gerais
	- percorre todos dos campos do formulario onde a propriedade obrigatorio = 1
	- os campos sao validados de acordo com o seu tipo
*/
function validaForm( obj ){
	var formElementos = obj.elements;
	
	for( p=0; p<formElementos.length; p++ ){		
	
		//verifica obrigatoriedade do campo
		if( formElementos[p].obrigatorio == 1 ){
			var erroValidacao = false;

			//verifica tipo de validacao do campo
			switch( formElementos[p].tipo ){
			
				//campo numerico
				case 'numero':
					var erroValidacao = validaCampoNumero( formElementos[p] );
					break;
					
				//campo moeda
				case 'moeda':					
					var erroValidacao = validaCampoMoeda( formElementos[p] );
					break;
					
				//campo texto
				case 'texto':
					var erroValidacao = validaCampoTexto( formElementos[p] );
					break;
					
				//campo somente texto
				case 'somente_texto':
					var erroValidacao = validaCampoSomenteTexto( formElementos[p] );
					break;
					
				//campo combo
				case 'combo':
					var erroValidacao = validaCampoCombo( formElementos[p] );
					break;
					
				//campo checkbox
				case 'checkbox':
					var erroValidacao = validaCampoCheckbox( document.getElementsByName( formElementos[p].name ) );
					break;
				
				//campo data
				case 'data':
					var erroValidacao = validaCampoData( formElementos[p] );
					break;
				
				//campo CNPJ CPF
				case 'cnpj_cpf':
					var erroValidacao = validaCampoCnpjCpf( formElementos[p] );
					break;
				
				//campo numero de verificacao
				case 'num_verificacao':
					var erroValidacao = validaCampoNumVerificacao(formElementos[p]);
					break;

				//campo select de prefeituras
				case 'select':
					var erroValidacao = validaCampoSelect( formElementos[p] );
					break;
                    
				//campo numerico
				case 'mask':
					var erroValidacao = validaCampoTexto(formElementos[p]);
					break;

				//erro: tipo de campo indefinido
				default:
					alert( 'Tipo de campo indefinido: ' + formElementos[p].name );
			}
			
			//mostrar erro para usuario
			if( erroValidacao ){
				validaMostraErro( formElementos[p], obj.vNumValGerado );
				return false;
			}
						
		}		
	}
	
	return true;
}

//funcao para mostrar erro na validacao do formulario
function validaMostraErro( obj ){
	//mensagem de erro padrao
	if( obj.erroMsg == undefined ){
		alert( 'Por favor preencha o campo ' + obj.name + ' corretamente.' );
		
	//mensagem de erro customizada
	}else{
		alert( obj.erroMsg);
	}
	
	obj.focus();
}

//funcao para validar campos do tipo Numerico
function validaCampoNumero( obj ){
	var objValor = LTrim( RTrim( obj.value ) );
	
	if( isNaN( objValor ) || ( objValor.length == 0 ) ){
		return true;
	}else{
		return false;
	}
}

//funcao para validar campos do tipo Moeda
function validaCampoMoeda( obj ){
	var objValor = LTrim( RTrim( obj.value ) );
	objValor = objValor.replace(/\./g,'');
	objValor = objValor.replace(/\,/g,'.');
	
	if( isNaN( objValor ) || ( objValor.length == 0 ) ){
		return true;
	}else{
		return false;
	}
}

//funcao para validar campos do tipo Texto
function validaCampoTexto( obj ){
	var objValor = LTrim( RTrim( obj.value ) );
	
	if( objValor.length == 0 ){
		return true;
	}else{
		return false;
	}	
}

//funcao para validar campos do tipo Somente Texto
function validaCampoSomenteTexto( obj ){
	var objValor = LTrim( RTrim( obj.value ) );
	var objValida = objValor.search( /\b[^0-9]/gi );
	
	if( ( objValor.length == 0 ) || ( objValida == -1 ) ){
		return true;
	}else{
		return false;
	}	
}

/*
funcao para validar campos do tipo Combo
	- para essa validacao, entende-se que a opção com valor "" significa naum selecionado
*/
function validaCampoCombo( obj ){
	var selecionado = obj.selectedIndex;
	var objValor = LTrim( RTrim( obj[selecionado].value ) );
	
	if( objValor.length == 0 ){
		return true;
	}else{
		return false;
	}
}

/*
funcao para validar campos do tipo CheckBox
*/
function validaCampoCheckbox( obj ){	
	var selecionado = 0;
	
	//varrer checkbox e verificar se somente 1 estah checado
	for( i=0; i<obj.length; i++ ){
		if( obj[i].checked ) selecionado++;
	}
	
	if( selecionado == 1 ){
		return false;
	}else{
		return true;
	}	
}

//funcao para validar campos do tipo data
function validaCampoData( obj ){
	var objValor = LTrim( RTrim( obj.value ) );
	
	//verificar formatacao da data
	if( objValor.length != 10 ){
		return true;
	}
	
	var dataArray = objValor.split( "/" );
	
	var dataUsrDia = new Number( dataArray[0] );
	var dataUsrMes = new Number( dataArray[1] );
	var dataUsrAno = new Number( dataArray[2] );

	var data = new Date( dataUsrAno, (dataUsrMes - 1), dataUsrDia );	
	
	var dataComp = data.getFullYear() + '' + (data.getMonth()+1) + '' + data.getDate();
	var dataUsr = dataUsrAno + '' + dataUsrMes + '' + dataUsrDia;
	
	return ( dataComp != dataUsr );

}

//funcao para validar campos do tipo CNPJ CPF
function validaCampoCnpjCpf( obj ){
	var objValor = LTrim( RTrim( obj.value ) );
	objValor = objValor.replace(/\./g,'');
	objValor = objValor.replace(/\//g,'');
	objValor = objValor.replace(/\-/g,'');
	
	if( objValor.length < 12 ){
		return !valida_cpf( objValor );
	}else{
		return !valida_cnpj( objValor );
	}

}

//funcao para validar campo de Numero de Verificacao
function validaCampoNumVerificacao( obj ){
	var objValor = LTrim( RTrim( obj.value ) );

	if( objValor.length > 0 ){
		return false;
	}
	else{
		return true;
	}

}

//funcao para validar campo de seleção de Municipios
function validaCampoSelect(obj){
	var objValor = LTrim( RTrim( obj.value ) );

	if( objValor == '' ){
		return true;
	}
	else{
		return false;
	}
}

// funcao de Right Trim
function RTrim(s) {
    return s.replace (/\s+$/,'');
}
// funcao de Left Trim
function LTrim(s) {
    return s.replace (/^\s+/,'');
}
// funcao de Middle Trim
function MTrim(s) {
    return s.replace (/\B\s+/g,' ');
}
// funcao de Trim
function Trim(s) {
    return s.replace (/\s+/g,'');
}

function fctClearCopy(){
	window.clipboardData.setData('text','');
}

function fctFormataString(vCaracter, vAcentuado, vNumero, vEspecial, vUpper){
	var vStatus			= false;
	var vCodCaracter	= event.keyCode;

	//SOMENTE LETRAS [A-Z] [a-z]
	if(vCaracter && !vStatus)
		if((vCodCaracter >= 65 && vCodCaracter <= 90) || (vCodCaracter >= 97 && vCodCaracter <= 122))
			vStatus = true;

	//SOMENTE LETRAS ACENTUADAS
	if(vAcentuado && !vStatus)
		if((vCodCaracter >= 192 && vCodCaracter <= 221) || (vCodCaracter >= 224 && vCodCaracter <= 253))
			vStatus = true;

	//SOMENTE NÚMEROS [0-9]
	if(vNumero && !vStatus)
		if(vCodCaracter >= 48 && vCodCaracter <= 57)
			vStatus = true;

	//SOMENTE CARACTERES ESPECIAIS SOLICITADOS('') E SEPARADOS POR |
	while(vEspecial.indexOf('|') != -1){
		var vCompara	= vEspecial.substring(0, 1).toLowerCase();
		var vDigitado	= String.fromCharCode(vCodCaracter).toLowerCase();

		if(vCompara == vDigitado){
			vStatus = true;
			break;
		}
		vEspecial= vEspecial.substring(1);
	}

	//RETORNA OBRIGATORIAMENTE MAIÚSCULO O CARACTER DIGITADO
	if(vUpper)
		if((vCodCaracter >= 97 && vCodCaracter <= 122) || (vCodCaracter >= 224 && vCodCaracter <= 253))
			event.keyCode = vCodCaracter - 32;

	//SE NÃO OBTER NENHUM RESULTADO POSITIVO DO CARACTER DIGITADO RETORNA FALSE
	if(!vStatus)
		event.returnValue = vStatus;
}
