// JavaScript Document
/*Escrito por Mauricio Barros de Jesus -> MAU
Orgão: 	Semarh-GO 
Data: 	05/08/2007

Objetivo: validar o que q usuario digita em um campo de acordo com o tipo de dados
		  que o campo aceita. Por exemplo, um campo do tipo "nr_" so pode conter dados
		  Numericos enquanto o tipo "nm_" pode conter numeros e letras.
		  
Premissa: os campos imput, textarea devem ter nome de id segundo o padrão adotado no estilo de programação
		  PHP dadotado pelo CERCOMP-UFG:
		  - campos numericos devem começar com "nr_" ou "cd_", por exemplo "nr_cpf".
		  - campos alfanumericos devem começar com "nm_", por exemplo "nm_endereco".
		  - campos com datas devem começar com "dt_".
		  - campos bloquados (que não podem ser editados pelo usuario) decem começar com "bl_".
*/

var obj_elemento = false;
var selectObj    = false;
var verifica_alert = true;
var disable_zero_key = true;
function filto_string(evt)
{
	 
	 if(!f_fechar_menus(evt))
	 	return false;
	
	ret_val = true;
	keyCode = 0;
	
	if (evt) 
	{
		keyCode = evt.keyCode || evt.which;
	}
	else 
	{
		// The old version of this file did not use the evt parameter
		// and would only work under IE.
		keyCode = window.event.keyCode;
	}
	//alert(keyCode);
	//dixar colocar 0

	
		if(keyCode == 96){
			
			if(disable_zero_key){
				disable_zero_key = false;
			}
			else{
				selectObj.value = selectObj.value+'0';
				disable_zero_key = true;
				return false;
				
			}
		}
		
	
	
	// Allow special characters: BACKSPACE, TAB, RETURN, LEFT ARROW,RIGHT ARROW to go through
	if((keyCode == 8) || (keyCode == 9) || (keyCode == 13) || (keyCode == 46) || (keyCode == 116)) 
	{
		return (ret_val);
	}
	
	//se nao tiver nehum elemento selecionado bloqueia
	if(obj_elemento === false)
		return false;
		
	if (obj_elemento == 'alphanum') 
	{
		
			
		ret_val = 	 (keyCode >= 44 && keyCode <= 57) 
				   || (keyCode >= 63 && keyCode <= 90) 
				   || (keyCode >= 97 && keyCode <= 122) 
				   || (keyCode == 32)
				   || (keyCode == 8) 
				   || (keyCode == 37) 
				   || (keyCode == 118)
				   || (keyCode >= 192 && keyCode <= 255) 
				   || (keyCode == 33)
				   || (keyCode == 59) 
				   || (keyCode == 42) 
				   || (keyCode == 38);
		
	}
	else if (obj_elemento == 'numeric') 
	{
		// Simply test for a numeric value
		ret_val = ((keyCode >= 48) && (keyCode <= 57)  || keyCode == 46 || (keyCode >= 96) && (keyCode <= 105));
	}
	else if (obj_elemento == 'float') 
	{
		// Simply test for a numeric value
		ret_val = ((keyCode >= 48) && (keyCode <= 57)) || keyCode <= 44 ;
	}
	else if (obj_elemento == 'date') 
	{	
		var strtmp = '';
		var rExpr = new RegExp("[0-9/]");
		var inicio = selectObj.value.length - 1;
		var text = selectObj.value;

		if(keyCode != 8)
		{
			if(rExpr.test(text.substr(inicio, 1)) != true)
				strtmp = text.substr(0, inicio);
				
			if(text.length == 3 && text.substr(2, 1) != '/')
				strtmp = text.substr(0, 2) + '/' + text.substr(2, 1);
				
			if(text.length == 6 && text.substr(5, 1) != '/')
				strtmp = text.substr(0, 5) + '/' + text.substr(5, 1);
				
			if(strtmp != '')
				selectObj.value = strtmp;
		}
	}
			 
	return (ret_val);
}

function f_fechar_menus(e){	
	//alert('açlsdkfj');
	if (!e) 
		var e = window.event;
		
	if (e.target) 
		targ = e.target;
	else if (e.srcElement) 
			targ = e.srcElement;
	
	obj_click = targ;
	selectObj = obj_click;

	tipo_valido  = false;
	obj_elemento = false;
	
	//campos validados
	if(obj_click.type)
		tipo_valido = ((obj_click.type == 'text') || (obj_click.type == 'textarea') || (obj_click.type == 'password'));
	
	tipo_el = obj_click.id;
	tipo_el = tipo_el.substr(0,3);
	
	if(tipo_valido){
		if(obj_click.id){
			//verifica tipo do objeto
			if(tipo_el.indexOf("nm_") >= 0 || tipo_el.indexOf("ch_") >= 0 )
				obj_elemento = 'alphanum';
			else if(tipo_el.indexOf("cd_") >= 0 || tipo_el.indexOf("nr_")  >= 0)
				obj_elemento = 'numeric';
			else if(tipo_el.indexOf("dt_") >= 0)
				obj_elemento = 'date';
			else if(tipo_el.indexOf("bl_") >= 0){
				obj_elemento = false;
				
				if(verifica_alert){
					alert("Você não pode editar essa informação!");
					verifica_alert = false;
				}
				else
					verifica_alert = true;
					
				return false;
			}
			else
			{
				obj_elemento = false;
				alert('ERRO: elemento nao tipado!');
			}
		}
		else
			alert("ERRO: objeto sem ID!")
	}
  
   return true;
}

//pegar o tipo do objeto		
document.onclick	= f_fechar_menus;

//validar digitaçao
document.onkeypress = filto_string;			
document.onkeydown 	= filto_string;
document.onkeyup	= filto_string;