
/* 
Função: Abrir Janela
Inserida: 19/05/2006 11:31
Ultima alteração: 19/05/2006 11:31
Propósito: Abre um formulario em outra janela
*/
		
function f_abrir_janela(p_url, p_refresh) {
	if(p_refresh && p_refresh != '') {
		p_url = p_url+((p_url.indexOf('?') != -1)?'&':'?')+'atualiza_combo=top.opener.'+p_refresh+'&janela=1';
	}
	NewWindow('/janela.cfm?url='+escape(p_url),'_blank',800,600,'yes');
}

/* 
Função: Carrega Imagem
Inserida: 19/01/2006 16:41
Ultima alteração: 19/01/2006 16:41
Propósito: Carrega uma imagem selecionada em um input:file em um img.
Obs: inserida em onChange do input:file
*/
		
function f_carrega_imagem(v_file_input, v_image_preview) {
	if(v_file_input.value != "") {
		v_image_preview.style.display = '';
		v_image_preview.src = v_file_input.value;
	} else {
		v_image_preview.style.display = 'none';
	}
}

/* 
Função: Compara duas datas
Inserida: 06/05/2006 15:16
Ultima alteração: 06/05/2006 15:17
Propósito: Parâmetros
	- p_data1 : Campo data 1
	- p_data2 : Campo data 2
Chamada
	- Deve ser colocada no evento onBlur
Retorno
    - -1 se a data 1 for maior que a data 2
    - 1 se a data 2 for maior que a data 1
    - 0 se as datas forem iguais
	- -2 Data 1 inválida
	- -3 Data 2 inválida
*/
		
function f_compara_data(p_data1, p_data2)
{
	if (!p_data1.isDataHora() && !p_data1.isDate()) 
		return -2;

	if (!p_data2.isDataHora() && !p_data2.isDate()) 
		return -3;
    
	var v_data1 = new Date(p_data1.substr(6,4),p_data1.substr(3,2)-1,p_data1.substr(0,2),p_data1.substr(11,2),p_data1.substr(14,2),00);
	var v_data2 = new Date(p_data2.substr(6,4),p_data2.substr(3,2)-1,p_data2.substr(0,2),p_data2.substr(11,2),p_data2.substr(14,2),00);;	
	
	if (v_data1 > v_data2) 
		return -1;
    else if (v_data1 < v_data2)
	         return 1;
	     else
	         return 0;
}


/* 
Função: Controla Campos
Inserida: 19/01/2006 16:03
Ultima alteração: 29/03/2006 09:39
Propósito: f_controla_campos(num_forms) : Cria show messagem para os campos, inclusive pode gerar tabindex
	* variáveis *
	  - num_forms : numero de formularios da tela
	  - cria_tab_index : parâmetro deve ser passado caso o desenvolvedor desejar a criação automática do tanindex dos forms
	* chamada *
    windown.onload = function() { f_controla_campos(1); }
*/
		
function f_controla_campos(num_forms) {
	if(!window.event)
		return;
    var v_controla_tab_index = false;
	var args = f_controla_campos.arguments;

    if (args.length > 1) 
	   var v_controla_tab_index = true;
	   
	for (var j = 0; j<num_forms; j++) {  
	    var formulario = eval(document.forms[j]);
		for (var i = 0; i<formulario.length; i++) {		
			// Limpar todos os TABINDEX
			if (v_controla_tab_index) 
				formulario.elements[i].tabIndex = 0;		
			if (formulario.elements[i].onfocus) {
				formulario.elements[i].v_funcao_focus = formulario.elements[i].onfocus;
				formulario.elements[i].onfocus = function() { 
																v_funcao = String(this.v_funcao_focus).replace('function anonymous()','');
																v_funcao = String(v_funcao).replace('}','');
																v_funcao = String(v_funcao).replace('{','');																
																v_funcao = Trim(v_funcao);
																eval(v_funcao);											
																if (f_verifica_tipo(this)) {
																	event.srcElement.style.backgroundColor='#FFFFDD'; 
																	event.srcElement.style.color = '#000000';
																}
																if (event.srcElement.hint) 
																   show_popup(event.srcElement,event,event.srcElement.hint);
															}
			}
			else 
				formulario.elements[i].onfocus = function() { 
												              if (f_verifica_tipo(this)) { 
															     event.srcElement.style.backgroundColor='#FFFFDD'; 
 																 event.srcElement.style.color = '#000000';
															  }
															  if (event.srcElement.hint) 
																show_popup(event.srcElement,event,event.srcElement.hint);
															}

			if (v_controla_tab_index) 
				formulario.elements[i].tabIndex = i+1;   
				
			if (f_verifica_tipo(formulario.elements[i])) {
					
				formulario.elements[i].onhelp = function() { show_popup(event.srcElement,event,event.srcElement.hint); }
				
				if (formulario.elements[i].onblur) {
					formulario.elements[i].v_funcao = formulario.elements[i].onblur;
					formulario.elements[i].onblur = function() { 
																v_funcao = String(this.v_funcao).replace('function anonymous()','');
																v_funcao = String(v_funcao).replace('}','');
																v_funcao = String(v_funcao).replace('{','');																
																v_funcao = Trim(v_funcao);
																eval(v_funcao);																
					                                            event.srcElement.style.backgroundColor='';
																event.srcElement.style.color = '';
																window.status = '';
																}
				}
				else
					formulario.elements[i].onblur = function() {  
																 event.srcElement.style.backgroundColor='';
															     event.srcElement.style.color = '';
																 window.status = '';
															   }															   
			}
		}	
	}
	window.status = ''; 
}

/* 
Função: Cria Botão
Inserida: 19/01/2006 16:34
Ultima alteração: 12/05/2006 11:07
Propósito: Cria objeto BUTTON em uma barra do site
variáveis:
 - p_nome -> Nome do botão, palavra unica e sem espaços ou caracteres especiais
 - p_label  -> Label do botão
 - p_click   -> Evento de click
 - p_barra  -> Função completa para inserir o botão na barra (parent.document.getElementById('barra_botoes_top').appendChild(obj))
*/
		
function f_cria_botao (p_nome, p_label, p_click, p_barra) {
                if (!p_barra) {
                             p_barra = parent.document.getElementById('barra_botoes_top');
                }
	// Cria o objeto BOTAO
	var obj = parent.document.createElement('button');
	if(p_label == 'Localizar') {
		obj.accessKey = 'l';
		p_label = '<u>L</u>ocalizar';
	}
	if(p_label == 'Imprimir') {
		obj.accessKey = 'p';
		p_label = 'Im<u>p</u>rimir';
	}
	if(p_label == 'Filtro') {
		obj.accessKey = 'f';
		p_label = '<u>F</u>iltro';
	}

	// Marca como temporario para o RESETA BOTOES eliminá-lo na proxima pagina
	obj.temp = 1;
	// Identifica novo botão
	obj.id = 'btn_' + p_nome;
	obj.name = 'btn_' + p_nome;
	obj.className = 'botao_cab';
	// Gera o conteudo visual do objeto
	obj.innerHTML = '<img src="_imagens/botoes/16x16/' + p_nome + '.gif" id="img_'+p_nome+'" width="16" height="16" align="absmiddle"> ' + p_label;
	// Gera evento do click no objeto
	obj.onclick = function() {  eval(p_click); }

	// Adiciona o botão a barra determinada
               obj.temp = 1;
	p_barra.appendChild(obj);
}

/* 
Função: Cria carregando AJAX
Inserida: 31/03/2006 11:28
Ultima alteração: 31/03/2006 11:48
Propósito: Cria o objeto DIV e seta o intervalo para a rotina de posicionamento do carregando
*/
		
var v_timeoutId = 0;
function f_cria_carregando_ajax() {
	if (!document.getElementById('div_carregando')) {
		var v_div = document.createElement('DIV');	    
		document.body.appendChild(v_div);
		v_div.id = "div_carregando";
		v_div.style.position = "absolute";
		v_div.innerHTML = '<img height="35" width="182" src="/_imagens/uteis/processando_1.gif">';
	}
	if (v_timeoutId == 0) {
		v_timeoutId = window.setInterval("f_carregando_ajax()",50);
	}
}


/* 
Função: Cria erro AJAX
Inserida: 03/04/2006 18:13
Ultima alteração: 03/04/2006 18:13
Propósito: Cria uma janela de erro para funções rodadas pelo AJAX
*/
		
function f_cria_erro_ajax() {
		if (!document.getElementById('div_erro')) {
			var v_div_interno = document.createElement('DIV');	    
			v_div_interno.id = "div_erro_interno";
			v_div_interno.style.position = "absolute";
			v_div_interno.style.top = 15;
			v_div_interno.style.left = 10;
			v_div_interno.style.width = 600;
			v_div_interno.style.height = 265;
			v_div_interno.style.display = 'none';
			v_div_interno.style.zIndex = 1;
			v_div_interno.innerHTML =   '<iframe frameborder="0" style="width:600px; height:265px;"></iframe>';
	
			var v_div = document.createElement('DIV');	    
			v_div.id = "div_erro";
			v_div.style.position = "absolute";
			v_div.style.top = 15;
			v_div.style.left = 10;
			v_div.style.width = 600;
			v_div.style.height = 265;
			v_div.style.display = 'none';
			v_div.style.zIndex = 1000;
			v_div.innerHTML =   '<table width="600" height="265" border="0" cellpadding="3" cellspacing="2">' +
								'  <tr id="barra_botoes_top">' + 
								'      <td height="25">Erro!</td>'+ 
								'   </tr>'+
								'   <tr class="obrigatorio">'+
								'      <td height="215"><div id="td_erro" style="overflow:scroll;vertical-align:top; width:596; height:215"></div></td>'+
								'   </tr>'+
								'   <tr id="barra_botoes_bottom">'+
								'      <td height="25"><button type="button" onClick="document.getElementById(\'div_erro\').style.display=\'none\'; document.getElementById(\'div_erro_interno\').style.display=\'none\'" class="botao"><img src="/_imagens/botoes/16x16/fechar_tela.gif" alt="" width="16" height="16" align="absmiddle">&nbsp;Fechar</button>'+   
								'      </td>'+
								'   </tr>'+
								'</table>';
			

			document.body.appendChild(v_div_interno);
			document.body.appendChild(v_div);
		}
	}

/* 
Função: Cria Option Select
Inserida: 19/01/2006 16:47
Ultima alteração: 12/04/2006 11:11
Propósito: Insere um option em um select
*/
		
function f_cria_option(p_value, p_text, p_select) {
	var v_opt = document.createElement('option');
	v_opt.value = p_value;
	v_opt.text = p_text; 
	p_select.add(v_opt);
}

/* 
Função: Currency
Inserida: 19/01/2006 16:46
Ultima alteração: 02/03/2006 16:41
Propósito: Converte um valor numerico para formatação monetaria
Ex: 1 = 1,00
*/
		
function toCurrency(v_valor) {
	var partes = String(v_valor).split('.');
	if (partes[1]) {
		partes[1] = String(partes[1]);
		if(partes[1].length == 0) {
			partes[1] = '00';
		}
		if(partes[1].length == 1) {
			partes[1] = partes[1]+'0';
		}
		if(partes[1].length > 2) {
			partes[1] = partes[1].substr(0,2);
		}
		var dec = partes[1];
	} else {
		var dec = '00';
	}
	var result = 0;
	if (Math.round(v_valor) > v_valor) {
			result = (Math.round(v_valor)-1)+'.';
	} else {
			result = Math.round(v_valor)+'.';
	}
//	var dec = (((Math.round(v_valor*100) % 100)<10)?'0':'')+(Math.round(v_valor*100) % 100);
	return result+dec;
}

/*
function toCurrency(v_valor) {
                var result = 0;
                if (Math.round(v_valor) > v_valor) {
                        result = (Math.round(v_valor)-1)+'.';
                } else {
                        result = Math.round(v_valor)+'.';
                }
	var dec = (((Math.round(v_valor*100) % 100)<10)?'0':'')+(Math.round(v_valor*100) % 100);
	return result+dec;
}
*/

/* 
Função: Desabilita Todos os Campos
Inserida: 19/01/2006 15:56
Ultima alteração: 19/01/2006 15:56
Propósito: Desabilita todos os campos do formulário
*/
		
function f_desabilita_todos_campos( ) {
  for( var i = 0; i < document.forms[0].length; i++ ) {
	if(!document.forms[ 0 ].elements[ i ].sempre_ativo || document.forms[ 0 ].elements[ i ].sempre_ativo != 1) {
		document.forms[ 0 ].elements[ i ].disabled = true;
	}
  } 
}

/* 
Função: Desabilitar Botão
Inserida: 19/01/2006 15:51
Ultima alteração: 19/01/2006 15:51
Propósito: Desabilita um botao
*/
		
function f_desabilitar_botao( p_botao ) {
	try {
		v_img   		 = document.getElementById('img_'+ p_botao);
		v_botao          = document.getElementById('btn_'+p_botao);
		v_img.src   	 = '/_imagens/botoes/16x16/' + p_botao + '_disable.gif'; 
		v_botao.onclick	 = '';
		v_botao.disabled = true;
	} catch(e) {
		with(parent) {
			v_img   	     = document.getElementById('img_'+ p_botao);
			v_botao 	     = document.getElementById('btn_'+p_botao);
		    v_img.src   	 = '/_imagens/botoes/16x16/' + p_botao + '_disable.gif'; 
			v_botao.onclick	 = '';
			v_botao.disabled = true;
		}
	}
}

/* 
Função: Erro Imagem
Inserida: 19/01/2006 16:42
Ultima alteração: 19/01/2006 16:42
Propósito: Trata um erro de carregamento da imagem em um img. 
display => Exibe mensagem de erro quando não for possível carregar
Evento: onError
*/
		
function f_erro_imagem(v_image_preview, display) {
	v_image_preview.style.display = 'none';
	if(display) {
		alert('Nao foi possivel carregar esta imagem!');
	}
}

/* 
Função: Exportar Excel
Inserida: 04/04/2006 11:30
Ultima alteração: 04/04/2006 11:30
Propósito: Exporta uma tabela para o Excel
*/
		
function f_exportar_excel(p_table) {
	v_span = document.createElement('span');
	p_table.parentNode.insertBefore(v_span, p_table);
	v_span.appendChild(p_table);
	v_html = v_span.innerHTML;
	v_span.removeNode();
	v_form = document.createElement('form');
	v_form.action = '/_consultas/exportar_excel.cfm';
	v_form.method = 'post';
	v_form.target = 'consultas';
	v_input = document.createElement('input');
	v_input.name = 'CONTEUDO';
	v_input.value = v_html;
	v_form.appendChild(v_input);
	document.body.appendChild(v_form);
	v_form.submit();
	v_input.removeNode();
	v_form.removeNode();
}


/* 
Função: Filtra Celula
Inserida: 17/02/2006 11:39
Ultima alteração: 17/02/2006 11:39
Propósito: Filtra as linhas da tabela de acordo com o conteudo da celula
*/
		
function f_filtra_celula(p_tbl, p_cell, p_filtro) {
	for(var i=0;i<p_tbl.tBodies.length;i++) {
		for(var j=0;j<p_tbl.tBodies[i].rows.length;j++) {
			if(p_tbl.tBodies[i].rows[j].cells[p_cell] != null) {
				if (p_filtro == '') {
					p_tbl.tBodies[i].rows[j].style.display = '';
				} else {
					if(p_tbl.tBodies[i].rows[j].cells[p_cell].innerHTML == p_filtro) {
						p_tbl.tBodies[i].rows[j].style.display = '';
					} else {
						p_tbl.tBodies[i].rows[j].style.display = 'none';
					}
				}
			}
		}
	}
}

/* 
Função: Formata Data ColdFusion
Inserida: 04/04/2006 08:25
Ultima alteração: 04/04/2006 08:25
Propósito: Formata uma data fornecida pelo coldfusion
*/
		
function f_cf_date_format(p_date, p_format) {
	var date = new Date(p_date);
	var MONTH_NAMES = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	var DAY_NAMES = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
	var ret = p_format.replace(/dd/g, ((date.getDate() < 10)?'0':'')+date.getDate());
	var ret = ret.replace(/mm/g, ((Number(date.getMonth())+1 < 10)?'0':'')+(Number(date.getMonth())+1));
	var ret = ret.replace(/yyyy/g, date.getFullYear());
	var ret = ret.replace(/hh/g, ((date.getHours() < 10)?'0':'')+date.getHours());
	var ret = ret.replace(/mi/g, ((date.getMinutes() < 10)?'0':'')+date.getMinutes());
	var ret = ret.replace(/ss/g, ((date.getSeconds() < 10)?'0':'')+date.getSeconds());
	return ret;
}

/* 
Função: Formata numero com decimal e milhar
Inserida: 09/03/2006 14:24
Ultima alteração: 10/03/2006 16:34
Propósito: Formatar numero com decimais e milhar (00.000,00)
*/
		
function f_formata_decimal_milhar(_v)
{
  var _dollars=parseInt(_v);
  var _cents=parseInt((_v-_dollars)*100);
  var _negative=_dollars<0;
  if(_negative){_dollars=-_dollars;_cents=-_cents;}
  while(_cents.toString().length<2)_cents="0"+_cents;
  var _dA=_dollars.toString().split("");
  var _d="";
  for(var i=_dA.length-1;i>=0;i--)
  {
    var _comma="";
	if((_dA.length-i)%3==0 && i!=0)_comma=".";
    _d=_comma+_dA[i]+_d;
  }
  var _neg_sign=_negative?"-":"";
  var _result=_neg_sign+_d+","+_cents;
  return _result;
}

/* 
Função: Formata Número Decimal
Inserida: 19/01/2006 15:52
Ultima alteração: 30/03/2006 09:06
Propósito: Filtra a entrada de dados para apenas numeros, com "," ou "."
Ex: onKeyPress="return f_formata_numero_decimal(this)"
*/
		
function f_formata_numero_decimal(objeto, p_event) {
	var k = -1;
	if(f_formata_numero_decimal.arguments.length == 2) {
		ev = p_event;
	}
	if (window.event && window.event.keyCode) {
		k = window.event.keyCode;
	} else {
		if(p_event) {
			k = p_event.charCode;
		}
		if(k == 0) {
			k = -1;
		}
	}
	if(k == 44 && objeto.value.indexOf('.') == -1) objeto.value += '.';
	return (k > -1 ? ((k > 47 && k < 58) || (k == 8 || (k == 46 && objeto.value.indexOf('.') == -1 ))) : true);
}

/* 
Função: Gera Input de Atributo
Inserida: 08/03/2006 17:50
Ultima alteração: 27/03/2006 16:21
Propósito: Gera os inputs dinamicos de atributos, de acordo com seu tipo, aplicando mascaras e outras funcionalidades como calendario

p_tipo = Tipo do campo (NUMERO,INTEIRO,CARACTER,HORA,DATA,DATA_HORA,LISTA)
p_nome = Nome e ID do campo no formulario
p_valores = valores passados para o tipo LISTA, separados por ","

*/
		
function f_input_atributo(p_tipo, p_nome, p_valores) {
	switch(p_tipo.toUpperCase()) {
		case 'NUMERO':
			document.write('<input type="text" name="'+p_nome+'" id="'+p_nome+'" onKeyPress="return f_formata_numero_decimal(this)">')
			break;
		case 'INTEIRO':
			document.write('<input type="text" name="'+p_nome+'" id="'+p_nome+'" onKeyPress="return f_formata(this, \'0000000000000000000000000\')">')
			break;
		case 'CARACTER':
			document.write('<input type="text" name="'+p_nome+'" id="'+p_nome+'">')
			break;
		case 'TEXTO_LONGO':
			document.write('<input type="text" name="'+p_nome+'" id="'+p_nome+'" style="width:250px">')
			break;
		case 'HORA':
			document.write('<input type="text" name="'+p_nome+'" id="'+p_nome+'" onKeyPress="return f_formata(this, \'00:00\')">')
			break;
		case 'DATA':
			document.write('<input type="text" name="'+p_nome+'" id="'+p_nome+'" style="width: 80px" onKeyPress="return f_formata(this, \'00/00/0000\')"><button class="botao-16x16" id="btn_'+p_nome+'"><img src="/_imagens/botoes/16x16/calendario.gif" width="16" height="16" align="absmiddle" /></button>')
			Calendar.setup(
				{
				  inputField  : p_nome,      // ID of the input field
				  ifFormat    : "%d/%m/%Y",    // the date format
				  button      : "btn_"+p_nome,    // ID of the button
				  range       : [2001,2050]
				}
			);
			break;
		case 'DATA_HORA':
			document.write('<input type="text" name="'+p_nome+'" id="'+p_nome+'" style="width: 110px" onKeyPress="return f_formata(this, \'00/00/0000 00:00\')"><button class="botao-16x16" id="btn_'+p_nome+'"><img src="/_imagens/botoes/16x16/calendario.gif" width="16" height="16" align="absmiddle" /></button>')
			Calendar.setup(
				{
				  inputField  : p_nome,      // ID of the input field
				  ifFormat    : "%d/%m/%Y %H:%M",    // the date format
				  button      : "btn_"+p_nome,    // ID of the button
				  range       : [2001,2050],
				  showsTime   : true
				}
			);
			break;
		case 'LISTA':
			if(!p_valores) {
				alert('Não foram fornecidos os valores para o preechimento da lista "'+p_nome+'"!');
				return;
			}
			var v_str = '<select name="'+p_nome+'" id="'+p_nome+'">';
			v_str += '<option value="">-- Selecione --</option>';
			v_valores = p_valores.split(',');
			for(var i=0;i<v_valores.length;i++) {
				v_str += '<option value="'+v_valores[i]+'">'+v_valores[i]+'</option>';
			}
			v_str += '</select>';
			document.write(v_str)
			break;
		case 'FLAG':
			if(!p_valores) {
				alert('Não foram fornecidos os valores para o preechimento da lista "'+p_nome+'"!');
				return;
			}
			var v_str = '<select name="'+p_nome+'" id="'+p_nome+'">';
			v_str += '<option value="">-- Selecione --</option>';
			v_str += '<option value="1">Sim</option>';
			v_str += '<option value="0">N'+String.fromCharCode(227)+'o</option>';
			v_str += '</select>';
			document.write(v_str)
			break;
		default:
			alert('Tipo "'+p_tipo.toUpperCase()+'" não implementado para os atributos!');
			break;
	}
}

/* 
Função: Gerar Scroll
Inserida: 05/04/2006 16:16
Ultima alteração: 05/04/2006 16:54
Propósito: Gera um componente scroll
*/
		
function f_gera_scroll(p_name, p_min, p_max, p_position, p_on_change, p_on_move) {
	var MIN_X = 3;
	var MAX_X = 103;
	document.write('<div class="barra_rolagem" id="'+p_name+'_div" style="float:left"></div><input type="hidden" name="'+p_name+'" id="'+p_name+'" value="'+p_position+'" />');
	v_div_scroll = document.getElementById(p_name+'_div');
	v_div_cursor = document.createElement('img');
	v_div_cursor.className = 'barra_rolagem_cursor';
	v_div_cursor.style.position = 'relative';
	v_left = Math.round(((p_position-p_min)/(p_max-p_min)*(MAX_X-MIN_X))+MIN_X);
	v_div_cursor.style.left = v_left+'px';
	v_div_cursor.style.top = '1px';
	v_div_scroll.appendChild(v_div_cursor);
	v_input = document.getElementById(p_name);
	v_div_cursor.onChangePosition = function () {
		v_atual = (Number(String(this.style.left).replace('px',''))-MIN_X)/(MAX_X-MIN_X);
		v_input.value = (p_max-p_min)*v_atual;
		if(p_on_move) {
			p_on_move(v_input.value);
		}
	}	
	v_div_scroll.onmousedown = function () {
		f_get_scroll();
		var v_posicao = window.event.clientX-5 - scrOfX - f_posicao_objeto(this, true);
		this.childNodes[0].style.left = (v_posicao<MIN_X)?MIN_X:((v_posicao>MAX_X)?MAX_X:v_posicao);
		this.dragging = true;
		this.childNodes[0].onChangePosition();
	}
	v_div_scroll.onmousemove = function () {
		if(this.dragging) {
			f_get_scroll();
			var v_posicao = window.event.clientX-5 - scrOfX - f_posicao_objeto(this, true);
			this.childNodes[0].style.left = (v_posicao<MIN_X)?MIN_X:((v_posicao>MAX_X)?MAX_X:v_posicao);
			this.childNodes[0].onChangePosition();
		}
		this.dragging = ((v_posicao>=MIN_X)&&(v_posicao<=MAX_X));
		
	}
	v_div_scroll.onmouseup = function () {
		this.dragging = false;
	}
	v_div_cursor.onmousedown = function () {
		f_get_scroll();
		var v_posicao = window.event.clientX-5 - scrOfX - f_posicao_objeto(this, true);
		this.style.left = (v_posicao<MIN_X)?MIN_X:((v_posicao>MAX_X)?MAX_X:v_posicao);
		this.dragging = ((v_posicao>=MIN_X)&&(v_posicao<=MAX_X));
		this.onChangePosition();
	}
	v_div_cursor.onmousemove = function () {
		if(this.dragging) {
			f_get_scroll();
			var v_posicao = window.event.clientX-5 - scrOfX - f_posicao_objeto(this, true);
			this.style.left = (v_posicao<MIN_X)?MIN_X:((v_posicao>MAX_X)?MAX_X:v_posicao);
			this.onChangePosition();
		}
		this.dragging = ((v_posicao>=MIN_X)&&(v_posicao<=MAX_X));
		
	}
	v_div_cursor.onmouseup = function () {
		this.dragging = false;
	}
}

/* 
Função: get Query String
Inserida: 29/03/2006 14:29
Ultima alteração: 29/03/2006 14:29
Propósito: Gera uma "query string" baseada nos campos de um formulario
*/
		
function f_get_query_string(p_form) {
	var res = '';
	with (p_form) {
		for(var i=0;i<p_form.elements.length;i++) {
			if(!p_form.elements[i].disabled && p_form.elements[i].name) {
				if(p_form.elements[i].type == 'radio' || p_form.elements[i].type == 'checkbox') {
					if(p_form.elements[i].checked) {
						res += p_form.elements[i].name+'='+escape(p_form.elements[i].value)+'&';
					}
				} else {
					res += p_form.elements[i].name+'='+escape(p_form.elements[i].value)+'&';
				}
			}
		}
	}
	res = res.substr(0,res.length-1);
	return res;
}


/* 
Função: Get Scroll
Inserida: 05/04/2006 16:17
Ultima alteração: 05/04/2006 16:17
Propósito: Busca o scroll efetuado na tela
*/
		
function f_get_scroll() {
	if( typeof( window.pageYOffset ) == 'number' ) {
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop || document.documentElement.scrollTop == 0) ) {
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
}

/* 
Função: Habilita Todos os campos
Inserida: 19/01/2006 15:58
Ultima alteração: 03/05/2006 14:17
Propósito: Habilita Todos os campos do formulário
*/
		
function f_habilita_todos_campos( ) {
  var v_focus = true;
  for( var i = 0; i < document.forms[ 0 ].length; i++ ) {	
	
	if (!document.forms[ 0 ].elements[ i ].ativo || document.forms[ 0 ].elements[ i ].ativo != 0)
		document.forms[ 0 ].elements[ i ].disabled = false;
	
	if ( ( ( document.forms[ 0 ].elements[ i ].type == 'select-multiple' ) || ( document.forms[ 0 ].elements[ i ].type == 'select-one' ) || ( document.forms[ 0 ].elements[ i ].type == 'text' ) ) && v_focus && !document.forms[ 0 ].elements[ i ].disabled && !document.forms[ 0 ].elements[ i ].readOnly) {
		try {
			document.forms[ 0 ].elements[ i ].focus();
			v_focus = false;
		} catch(e) {}
	}
  }	
}

/* 
Função: Habilitar Botão
Inserida: 19/01/2006 15:50
Ultima alteração: 19/01/2006 15:51
Propósito: Função: Habilita botão
Propósito: Habilita o botão
*/
		
function f_habilitar_botao( p_botao, p_evo_click) {
	try {
		v_img = eval("document.getElementById('img_"+ p_botao + "')");
		v_botao = eval("document.getElementById('btn_"+p_botao+"')");
		v_img.src   		= '/_imagens/botoes/16x16/' + p_botao + '.gif'; 
		v_botao.onclick	    = function() { eval(p_evo_click);              };	
		v_botao.disabled = false;
	} catch(e) {
		with(parent) {
                                        try{
			v_img = document.getElementById('img_'+ p_botao );
			v_botao = document.getElementById('btn_'+p_botao);
			v_img.src   		= '/_imagens/botoes/16x16/' + p_botao + '.gif'; 
			v_botao.onclick	    = function() { eval(p_evo_click);              };	
			v_botao.disabled = false; 
                                         }catch(e) {}
		}
	}
}

/* 
Função: Hide Hint
Inserida: 19/01/2006 15:55
Ultima alteração: 19/01/2006 15:55
Propósito: Oculta um Hint da função show_popup
*/
		
function showhide(fld){
	var campo = document.createElement("tr") ;; 
	campo = eval(fld);
	if(campo.style.display == 'none'){
		campo.style.display ='';
	}else{
		campo.style.display ='none';
	}
                return false;
}

/* 
Função: Image to Check
Inserida: 19/01/2006 16:36
Ultima alteração: 19/01/2006 16:36
Propósito: Transforma um img e um input type="hidden" em um checkbox, alternando as imagens conforme clicado.

*/
		
function f_img_check(obj, img_check, img_uncheck, v_field) {
	if(obj.src.indexOf(img_check) != -1) {
		v_field.value = 0;
		obj.src = img_uncheck;
	} else {
		v_field.value = 1;
		obj.src = img_check;
	}
}

/* 
Função: Inicializa Abas
Inserida: 19/01/2006 16:29
Ultima alteração: 03/04/2006 14:46
Propósito: Inicializa uma tabela para conter abas
*/
		
function initAbas(v_id, v_aba_inicial) {
	var tbl = document.getElementById(v_id);
	var abas = tbl.rows[0].cells
	var nro_abas = abas.length;
	var corpos = new Array();
	for(var i=0;i<tbl.rows.length;i++) {
		if(i!=0) {
			corpos[corpos.length] = tbl.rows[i];
			tbl.rows[i].cells[0].className = 'td_aba_corpo';
		}
	}
	var nro_corpos = corpos.length;
	if (nro_abas < nro_corpos) {
//		alert("O numero de abas é menor que o numero de corpos!");
	}
	for(var i=0;i<abas.length;i++) {
		if (i < nro_corpos) {
			if(v_aba_inicial == i) {
				abas[i].className = 'td_aba_up';
			} else {
				abas[i].className = 'td_aba_down';
			}
			f_old = abas[i].onclick;
			abas[i].onclick = function() {
				mudaAba(corpos, abas, this);
				if(f_old) 
					f_old(event);
			}
		} else {
			abas[i].className = 'td_aba_none';
		}
	}
	for(var i=0;i<corpos.length;i++) {
		if(v_aba_inicial == i) {
			corpos[i].style.display = '';
		} else {
			corpos[i].style.display = 'none';
		}
	}		
}

/* 
Função: Inicializa Filtros
Inserida: 17/02/2006 11:38
Ultima alteração: 17/02/2006 11:42
Propósito: Inicializa a opção de Filtros nas tabelas
*/
		
function initFiltros(p_tbl_id) {
	var v_tbl = document.getElementById(p_tbl_id);
	for (var i=0;i<v_tbl.tHead.rows.length;i++) {
		for(var j=0;j<v_tbl.tHead.rows[i].cells.length;j++) {
			var celula = v_tbl.tHead.rows[i].cells[j];
			if (celula.filtro) {
				celula.index = j;
				index = j;
				var v_div = document.createElement('div');
				v_div.style.position = 'absolute';
				v_div.style.width = celula.width;
				v_div.className = 'titulo_3';
				v_div.style.display = 'none';
				var v_list = document.createElement("select");
				opcoes = celula.filtro.split(',');
				f_cria_option('', '-- Tudo --', v_list);
				for (k=0;k<opcoes.length;k++) {
					if(opcoes[k].replace(' /g', '') != '') {
						f_cria_option(opcoes[k], opcoes[k], v_list);
					}
				}
				v_list.size = 5;
				v_list.onclick = function () {
					this.parentNode.style.display = 'none';
					f_filtra_celula(v_tbl, this.parentNode.parentNode.index, this.value);
				}
				v_div.appendChild(v_list);
				celula.appendChild(v_div);
				var v_btn = document.createElement('button');
				v_btn.value = '<img src="/_imagens/botoes/16x16/seta_down.gif" width="8" height="4" align="absmiddle" />';
				v_btn.className = 'botao-16x16';
				v_btn.style.height = 16;
				v_btn.title = 'Filtrar...';
				v_btn.onclick = function () {
					var scrOfY;
					var scrOfX;
					if( typeof( window.pageYOffset ) == 'number' ) {
					//Netscape compliant
						scrOfY = window.pageYOffset;
						scrOfX = window.pageXOffset;
					} else {
						if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
						//DOM compliant
							scrOfY = document.body.scrollTop;
							scrOfX = document.body.scrollLeft;
						} else {
							if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop || document.documentElement.scrollTop == 0) ) {
							//IE6 standards compliant mode
								scrOfY = document.documentElement.scrollTop;
								scrOfX = document.documentElement.scrollLeft;
							}
						}	
					}
					this.parentNode.div_filtro.style.top = event.clientY+scrOfY;
					this.parentNode.div_filtro.style.left = event.clientX;
					this.parentNode.div_filtro.style.display = ((this.parentNode.div_filtro.style.display == 'none')?'':'none');
				}
				celula.insertBefore(v_btn, celula.childNodes[0]);
				celula.div_filtro = v_div;
			}
		}
	}
}

/* 
Função: Limita Imagem
Inserida: 19/01/2006 16:44
Ultima alteração: 19/01/2006 16:44
Propósito: Limita as dimensões de uma imagem em um img, sem alterar a proporção
*/
		
function f_limita_imagem(v_image, v_width, v_height) {
	larga = ((v_image.width/v_image.height) > (v_width/v_height));
	if(v_image.height > v_height || v_image.width > v_width) {
		if (larga) {
			v_image.width = v_width;
		} else {
			v_image.height = v_height;
		}
	}
}

/* 
Função: Limpa PLACA
Inserida: 19/01/2006 15:48
Ultima alteração: 19/01/2006 15:48
Propósito: Parâmetros
- fld = campo PLACA a ser formatado
Chamada
- Deve ser colocada no evento onBlur
*/
		
function f_placa(fld) {
	fld.value = (fld.value.replace('-','')).toUpperCase();	
}

/* 
Função: Limpa Select
Inserida: 19/01/2006 16:48
Ultima alteração: 19/01/2006 16:48
Propósito: Exclui todos os options do select
*/
		
function f_limpa_select(obj) {
	while (obj.options.length > 0)
		obj.options[0] = null;
}

/* 
Função: Limpar Campos
Inserida: 19/01/2006 15:59
Ultima alteração: 28/03/2006 17:40
Propósito: Limpa todos os campos
*/
		
function f_limpar_campos() {
	  for( var i = 0; i < document.forms[ 0 ].length; i++ ) {	
		if (!document.forms[ 0 ].elements[ i ].getAttribute("fixo")) {
			switch (document.forms[ 0 ].elements[ i ].type) {
				case 'text'     : document.forms[ 0 ].elements[ i ].value = '';
				   break;
				case 'textarea' : document.forms[ 0 ].elements[ i ].value = '';
				   break;
				case 'checkbox' : document.forms[ 0 ].elements[ i ].checked = false;
				   break;
				case 'radio'    : document.forms[ 0 ].elements[ i ].checked = false;
				   break;
				case 'select-one' : document.forms[ 0 ].elements[ i ].value = '';
				   break;
				case 'select-multiple' : document.forms[ 0 ].elements[ i ].value = '';
				   break;
				case 'hidden' : document.forms[ 0 ].elements[ i ].value = '';
				   break;
			}
		}
	  }	
	 //document.forms[ 0 ].reset();
}

/* 
Função: Marca Checks
Inserida: 19/01/2006 16:28
Ultima alteração: 19/01/2006 16:28
Propósito: Marca todos os itens de um check group
*/
		
function f_marca_todos( p_check_name ) {
  for (var i = 0;i<document.forms[0].elements.length; i++) {		
    if ( (document.forms[0].elements[i].type == 'checkbox') && (p_check_name == document.forms[0].elements[i].name) )
       document.forms[0].elements[i].checked = true;	
  }
}

/* 
Função: Marcar/Desmarcar Todos os Check
Inserida: 31/01/2006 12:06
Ultima alteração: 31/01/2006 12:06
Propósito: Marca ou desmarca todos os checks com determinado nome no formulario
*/
		
function f_marcar_todos_check(v_form, v_name, v_marca) {
  for(var i=0;i<v_form.elements.length;i++) {
    if(v_form.elements[i].type == 'checkbox' && v_form.elements[i].name == v_name) {
      v_form.elements[i].checked = v_marca;
    }
  }
}

/* 
Função: Maskara de Formatação
Inserida: 19/01/2006 15:56
Ultima alteração: 03/04/2006 08:59
Propósito: Formata um campo de acordo com uma maskara pré-determinada.
0 indica caracteres somente numericos
X indica caracteres alfa numericos
Ex: 
Formatação de datas
onKeyPress="return f_formata(this, '00/00/0000')
*/
		
function f_formata(obj, p_event, p_mask) {
	if(f_formata.arguments.length == 2) {
		mask = p_event;
	} else {
		mask = p_mask;
		ev = p_event;
	}
	var k = -1;
	var v_tipos = '0XxAa';
	if (window.event && window.event.keyCode ) {
		k = window.event.keyCode;
	} else {
		if(f_formata.arguments.length != 2) {
			k = ev.charCode;
			if(k == 0) {
				return true;
			}
		}
	}
	while (v_tipos.indexOf(mask.substring(obj.value.length, obj.value.length+1)) == -1 && obj.value.length < mask.length) {
		obj.value = obj.value + mask.substring(obj.value.length, obj.value.length+1);
	}
	var v_numeros = '0123456789';
	var v_letras_maius = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
	if(document.selection)
		document.selection.createRange().text = '';
	if(mask.substring(obj.value.length, obj.value.length+1) == '0') {
		ret = (k > -1 ? (v_numeros.indexOf(String.fromCharCode(k)) != -1) : true);
	} else if (mask.substring(obj.value.length, obj.value.length+1) == 'x') {
		//permite somente a entrada de letras, permanecendo maiusculas ou minusculas conforme o usuario digitar
		ret = (k > -1 ? (v_letras_maius.indexOf(String.fromCharCode(k).toUpperCase()) != -1) : true);
	} else if (mask.substring(obj.value.length, obj.value.length+1) == 'X') {
		//permite somente a entrada de letras, tornando todas maiusculas
		if (window.event && window.event.keyCode ) {
			window.event.keyCode = String.fromCharCode(k).toUpperCase().charCodeAt(0);
		} else if(f_formata.arguments.length != 2) {
			ev.charCode = String.fromCharCode(k).toUpperCase().charCodeAt(0);
		}
		ret = (k > -1 ? (v_letras_maius.indexOf(String.fromCharCode(k).toUpperCase()) != -1) : true);
	} else if (mask.substring(obj.value.length, obj.value.length+1) == 'a') {
		//permite entradas alfa-numericas, permanecendo maiusculas ou minusculas conforme o usuario digitar
		ret = true;
	} else if (mask.substring(obj.value.length, obj.value.length+1) == 'A') {
		//permite entradas alfa-numericas, tornando todas maiusculas
		if (window.event && window.event.keyCode ) {
			window.event.keyCode = String.fromCharCode(k).toUpperCase().charCodeAt(0);
		} else if(f_formata.arguments.length != 2) {
			ev.charCode = String.fromCharCode(k).toUpperCase().charCodeAt(0);
		}
		ret = true;
	} 

	return ((!(obj.value.length>(mask.length-1)))&&ret);
}


/* 
Função: Minimo
Inserida: 30/01/2006 15:08
Ultima alteração: 30/01/2006 15:08
Propósito: Retorna o menor dos valores fornecidos como parametro
*/
		
function min() {
  if(arguments.length <= 0) {
    alert('Não foram fornecidos parâmetros para a função!');
  }
  var v_menor = arguments[0];
  for(var i=1;i<arguments.length;i++) {
    v_menor = ((v_menor <= arguments[i])?v_menor:arguments[i]);
  }
  return v_menor;
}

/* 
Função: Mostra Erro
Inserida: 19/01/2006 16:31
Ultima alteração: 19/01/2006 16:31
Propósito: f_erro(p_mensagem, p_campo, form) : Mostra mensagem de erro e posiciona o cursor no campo que disparou o erro
	* variáveis *
	  - p_mensagem : mensagem que deve ser mostrada
	  - p_campo : campo que disparou o erro
	  - form : formulario
*/
		
function f_erro(p_mensagem, p_campo, form) {
     try {
	alert(p_mensagem);
	if (form.MENSAGEM) 
        form.MENSAGEM.value = p_mensagem;
	if (p_campo.type == 'select-one') 
		p_campo.focus();
	if (p_campo.type == 'text') 
		p_campo.select();
     } catch(e) {}
	return false;
}

/* 
Função: Muda Aba
Inserida: 19/01/2006 16:30
Ultima alteração: 19/01/2006 16:30
Propósito: Muda a aba atual selecionada
*/
		
function mudaAba(v_tbody, v_tr, obj) {
	tb = v_tbody;
	tr = v_tr;
	var sel = -1;
	for(var i=0;i<tr.length;i++) {
		if (i < tb.length) {
			if (tr[i] == obj) {
				sel = i;
				tr[i].className = 'td_aba_up';
			} else {
				tr[i].className = 'td_aba_down';
			}
		}
	}
	for(var i=0;i<tb.length;i++) {
		if (i == sel) {
			tb[i].style.display = '';
		} else {
			tb[i].style.display = 'none';
		}
	}			
}

/* 
Função: New Window
Inserida: 19/01/2006 16:32
Ultima alteração: 26/05/2006 11:56
Propósito: Exibe uma nova janela, sem as barras de ferramentas
*/
		
function NewWindow(mypage, myname, w, h, scroll) {
	mypage = mypage.replace('http%3A','http:');
	if(mypage != '' && mypage.replace(/ /g, '').toLowerCase() != 'about:blank' && mypage.indexOf('/') != 0 && mypage.indexOf('http://') != 0) {
		init = '';
		t = window.location.toString().split('/');
		for(var i=0;i<t.length-1;i++) {
			init += t[i]+'/';
		}
		mypage = init+mypage;
	}
	var winl = (screen.width - w) / 2;
	var wint = (screen.height - h) / 2;
	winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',scrollbars='+scroll+',resizable,status'
	win = window.open(mypage, myname, winprops)
	if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
}

/* 
Função: Oculta o Carregando AJAX
Inserida: 31/03/2006 11:27
Ultima alteração: 31/03/2006 11:27
Propósito: Oculta o DIV de carregando e mata o setInterval de posicionamento
*/
		
function f_hide_carregando_ajax() {
	if (document.getElementById('div_carregando')) {
		window.clearInterval(v_timeoutId);
		v_timeoutId = 0;		
		document.getElementById('div_carregando').style.display = 'none';
	}
}


/* 
Função: Open Ajax
Inserida: 29/03/2006 10:26
Ultima alteração: 29/03/2006 10:26
Propósito: Função para iniciarmos o Ajax no browser do cliente
*/
		
function f_open_ajax() {
var ajax;
try{
    ajax = new XMLHttpRequest(); // XMLHttpRequest para browsers decentes, como: Firefox, Safari, dentre outros.
}catch(ee){
    try{
        ajax = new ActiveXObject("Msxml2.XMLHTTP"); // Para o IE da MS
    }catch(e){
        try{
            ajax = new ActiveXObject("Microsoft.XMLHTTP"); // Para o IE da MS
        }catch(E){
            ajax = false;
        }
    }
}
return ajax;
}

/* 
Função: Organizar Colunas
Inserida: 13/02/2006 16:38
Ultima alteração: 13/02/2006 16:38
Propósito: Abre a janela de ordenação de colunas do sistema
*/
		
function f_organizar_colunas (p_table_id, p_cookie) {
  NewWindow('/_consultas/organizar_colunas.cfm?TABELA_ID='+p_table_id+'&COOKIE='+p_cookie, 'org_colunas', 600, 500, 'yes');
}

/* 
Função: Posição absoluta
Inserida: 05/04/2006 16:18
Ultima alteração: 05/04/2006 16:18
Propósito: Retorna a posicao absoluta do objeto na tela
*/
		
function f_posicao_objeto(p_obj,p_left){
	var total=0;
	while(p_obj!=null){
		total+=p_obj["offset"+(p_left?"Left":"Top")];
		p_obj=p_obj.offsetParent;
	}
	return total;
}

/* 
Função: Posiona e mostra carregando AJAX
Inserida: 31/03/2006 11:26
Ultima alteração: 31/03/2006 11:48
Propósito: Cria o DIV de carregando que é utilizado no AJAX
*/
		
function f_carregando_ajax() {
	if (document.getElementById('div_carregando')) {
		ns=(document.layers)?1:0;
		if (ns){
			Ypos=window.pageYOffset;
			Xpos=window.pageXOffset+window.innerWidth-200;
		}
		else{
			Ypos=document.body.scrollTop;
			Xpos=document.body.scrollLeft+window.document.body.clientWidth-200;
		}	

		with(document.getElementById('div_carregando')) {
			style.top = Ypos;	
			style.left = Xpos;
			style.width = '182px'; 
			style.height = '35px';
			style.display = '';
		}
	}
}

/* 
Função: Prototype Dtos
Inserida: 19/01/2006 16:58
Ultima alteração: 19/01/2006 16:58
Propósito: ???
*/
		
Date.prototype.Dtos = function(){
		var dd = this.getDate();
		var mm = this.getMonth() + 1;
		var yy = this.getFullYear();
		
		return( [ yy , ( mm < 10 ? '0' : '' ) + mm , ( dd < 10 ? '0' : '' ) + dd ].join( '' ) );
	}

/* 
Função: Prototype hasEmptyElements
Inserida: 19/01/2006 16:58
Ultima alteração: 19/01/2006 16:58
Propósito: Verifica se um array possui elementos em branco, nulos ou indefinidos
*/
		
Array.prototype.hasEmptyElements = function(){
		for ( var i = 0 ; i < this.length ; i++ )
			if ( ( this[ i ] == '' ) || ( this[ i ] == null ) || ( this[ i ] == undefined ) )
				return( true );
		return( false );
	}

/* 
Função: Prototype isCNPJ
Inserida: 19/01/2006 16:50
Ultima alteração: 20/01/2006 08:44
Propósito: Verifica se o valor da string é um CNPJ válido
*/
		
String.prototype.isCNPJ = function() {
	return testacnpj(this);
}

/* 
Função: Prototype isCPF
Inserida: 19/01/2006 16:52
Ultima alteração: 20/01/2006 08:43
Propósito: Verifica se o valor da String é um CPF
*/
		
String.prototype.isCPF = function(){
    return testacpf(this);
}

/* 
Função: Prototype isDataHora
Inserida: 19/01/2006 16:54
Ultima alteração: 19/01/2006 16:54
Propósito: Verifica se o valor da String é uma data/Hora no formata dd/mm/yyyy HH:MM válida.
*/
		
String.prototype.isDataHora = function(){
		var pt = this.split( '/' );
		var dt = new Date();
		var dd = Number( pt[ 0 ] );
		var mm = Number( pt[ 1 ] );
		var yy = Number(this.substr(6,4));
		var hh = this.substr(11,2);
		var mi = this.substr(14,2);

		// Data sem HORA
		if ( this.length < 15 ) return false ;
		
		// Caso seja preenchida com segundos
		if (this.length > 15) 
			var ss = this.substr(17,2); 
		else 
			var ss = '00';

		if ( !( ( hh >= 00 ) && ( hh < 24 ) && ( mi >= 00 ) && ( mi < 60 ) && ( ss >= 00 ) && ( ss < 60 ) ) )
		   return( false );
			
		if ( pt.length < 3 ) return( false );
		
		if ((mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12) && (dd <= 0 || dd > 31)) return false;
			
		if ((mm == 4 || mm == 6 || mm == 9 || mm == 11 ) && (dd <= 0 || dd > 30)) return false;

		if ((mm == 2 ) && (dd <= 0 || (yy%4 == 0 && dd > 29 ) || (yy%4 != 0 && dd > 28 ))) return false;

		if (yy < 1900 || yy > 2100) return false;
		return true;
//		dt.setFullYear( yy , mm - 1 , dd );

//		return( [ yy , ( mm < 10 ? '0' : '' ) + mm , ( dd < 10 ? '0' : '' ) + dd ].join( '' ) == dt.Dtos() );
	}

/* 
Função: Prototype isDate
Inserida: 19/01/2006 16:55
Ultima alteração: 05/05/2006 08:57
Propósito: Verifica se o valor da string é uma data valida
*/
		
String.prototype.isDate = function(){
		var pt = this.split( '/' );
		var dt = new Date();
		var dd = Number( pt[ 0 ] );
		var mm = Number( pt[ 1 ] );
		var yy = Number( pt[ 2 ] );
		
		if ( pt.length != 3 ) return( false );
		
		if ((mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12) && (dd <= 0 || dd > 31)) return false;
			
		if ((mm == 4 || mm == 6 || mm == 9 || mm == 11 ) && (dd <= 0 || dd > 30)) return false;

		if ((mm == 2 ) && (dd <= 0 || (yy%4 == 0 && dd > 29 ) || (yy%4 != 0 && dd > 28 ))) return false;

		if (yy < 1900 || yy > 2100) return false;
		return true;
	}

/* 
Função: Prototype isMail
Inserida: 19/01/2006 16:51
Ultima alteração: 19/01/2006 16:51
Propósito: Verifica se o valor da String é um e-mail
*/
		
String.prototype.isMail = function(){
		var test
		var pt1    = this.split( '@' );
		var valid = '.-_@';
		
		if ( ( pt1.length != 2 ) || ( pt1[ 0 ].length == 0 ) || ( pt1[ 1 ].length == 0 ) ) return( false );
		else {
			for ( var i = 0 ; i < valid.length - 1 ; i++ ){
				if ( pt1[ 0 ].split( valid.charAt( i ) ).hasEmptyElements() ) return( false );
				if ( pt1[ 1 ].split( valid.charAt( i ) ).hasEmptyElements() ) return( false );
			}			
		}
		
		for ( var i = 0 ; i < this.length ; i++ ){
			var v_char = this.toUpperCase().charCodeAt( i );
			if ( valid.indexOf( String.fromCharCode( v_char ) ) == -1 )
				if ( !( ( ( v_char >= 65 ) && ( v_char <= 90 ) ) || ( ( v_char >= 48 ) && ( v_char <= 57 ) ) ) ) return( false );
		}	
		
		return( true );
	}

/* 
Função: Prototype isNumber
Inserida: 19/01/2006 16:56
Ultima alteração: 20/01/2006 15:56
Propósito: Verifica se o valor da string é um numero
*/
		
String.prototype.isNumber = function(){
  return( !isNaN( this.split( '.' ).join( '' ).split( ',' ).join( '' ).split( '-' ).join( '' ) ) );
}

/* 
Função: Prototype isPlaca
Inserida: 19/01/2006 16:56
Ultima alteração: 09/02/2006 10:44
Propósito: Verifica se o valor de uma string é uma placa valida no formato 'XXX0000'
*/
		
String.prototype.isPlaca = function(){
		if ( this.replace('-','').length != 7) return( false );
		v_num = this.replace('-','').substr(3,4);
		if ( isNaN( v_num ) ) return( false );
		return( true );
	}

/* 
Função: Query Ajax
Inserida: 29/03/2006 14:27
Ultima alteração: 04/05/2006 15:10
Propósito: Efetua uma consulta por ajax
*/
		
function f_query_ajax(p_url, p_fnc_result, p_fnc_carregando) {
		ajax = f_open_ajax();
		if(p_url.indexOf('?') != -1) 
			p_url += '&rnddate='+(new Date());
		else
			p_url += '?rnddate='+(new Date());
		ajax.open("GET", p_url, true); // Envia o termo da busca como uma querystring, nos possibilitando o filtro na busca.
		ajax.onreadystatechange = function() {
			if(ajax.readyState == 1) { // Quando estiver carregando, exibe: carregando...
				if(p_fnc_carregando) {
					p_fnc_carregando();
				} else {
					p_fnc_result({texto: '<img src="/_imagens/uteis/carregando.gif">', ajax:ajax, toString: function() { return this.texto; }});
				}
			}
			if(ajax.readyState == 4) { // Quando estiver tudo pronto.
				var resultado = ajax.responseText; // Coloca o resultado (da busca) retornado pelo Ajax nessa variável (var resultado).
				resultado = resultado.replace(/\+/g," "); // Resolve o problema dos acentos (saiba mais aqui: http://www.plugsites.net/leandro/?p=4)
				resultado = unescape(resultado); // Resolve o problema dos acentos
				if(ajax.status == 200) {
					p_fnc_result({texto: resultado, ajax:ajax, toString: function() { return this.texto; }});
				} else {
					p_fnc_result({texto: resultado, ajax:ajax, toString: function() { return this.texto; }});
				}
			}	
		}
		ajax.send(null);		
}	


/* 
Função: Query Ajax WDDX
Inserida: 31/03/2006 09:37
Ultima alteração: 31/05/2006 14:28
Propósito: Função que gera uma conexão com o componente CFC e retorna os dados em WDDX para consulta.
Exemplo da função de retorno:
function list_response(obj){ //callback functions always take one argument. This is the result passed back from the server.
	if( (obj.ajax.readyState == 1) || (obj.ajax.readyState == 2) || (obj.ajax.readyState == 3) ){ // Quando estiver carregando, exibe: carregando...
		f_cria_carregando_ajax();
	}
	else if(obj.ajax.readyState == 4) { // Quando estiver tudo pronto.
		v_texto = '';
		v_linhas = new Array();
		v_linhas = obj.struct.cargo.toString().split(',');
		for (var i=0;i<v_linhas.length;i++) {
			v_texto +=  v_linhas[i] + '<br>';
		}
		document.getElementById('teste').innerHTML =  v_texto;
		f_hide_carregando_ajax();
	}	
}
*/
		
function f_query_wddx(p_url, p_arguments, p_fnc_result, p_not_show_carregando) {
	if(!p_not_show_carregando) 
	   f_cria_carregando_ajax();
   f_cria_erro_ajax();
   v_meta = '<META NAME="ColdFusionMXEdition" CONTENT="ColdFusion DevNet Edition - Not for Production Use.">';
   ajax = f_open_ajax();
		if(p_url.indexOf('?') != -1) 
			p_url += '&rnddate='+(new Date());
		else
			p_url += '?rnddate='+(new Date());
   ajax.open("POST", p_url, true); // Envia o termo da busca como uma querystring, nos possibilitando o filtro na busca.
   ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
   ajax.send(p_arguments);
   ajax.onreadystatechange = function() {
      rObj = null;
      resultado = '';
      if(ajax.readyState == 4) { // Quando estiver tudo pronto.
		if(ajax.status == 200) {
          var resultado = ajax.responseText; // Coloca o resultado (da busca) retornado pelo Ajax nessa variável (var resultado).
          resultado = resultado.replace(/\+/g," "); // Resolve o problema dos acentos (saiba mais aqui: http://www.plugsites.net/leandro/?p=4)
          resultado = unescape(resultado); // Resolve o problema dos acentos
		  if (resultado.toString().replace(v_meta,'').length > 0)
	         rObj = parseWDDX(resultado.toString().replace(v_meta,''));
		  if(!p_not_show_carregando) 
          	 f_hide_carregando_ajax();
        }
        else { 
			   document.getElementById("div_erro").style.display = '';
			   document.getElementById("div_erro_interno").style.display = '';
			   document.getElementById("td_erro").innerHTML = ajax.responseText;
			   if(!p_not_show_carregando) 
			       f_hide_carregando_ajax();
			 }
      }	
      p_fnc_result({  texto: resultado.toString().replace(v_meta,''), struct:rObj, ajax:ajax, toString: function() { return this.texto; }});
   }
}

/* 
Função: Show Hint
Inserida: 19/01/2006 15:54
Ultima alteração: 19/01/2006 15:54
Propósito: Mostra um hint, só funciona em IE.
*/
		
function show_popup(current,e,comentario) {
	var oPopup = window.createPopup();
	var oPopupBody = oPopup.document.body;
	oPopupBody.style.backgroundColor = "lightyellow";
	oPopupBody.style.border = "solid black 1px";    
	oPopupBody.style.fontFamily = "Verdana, Geneva, Arial, Helvetica, sans-serif";
	oPopupBody.style.fontSize = "10px";
	oPopupBody.scroll = "yes";
	
	var altura = 1;
	var largura = 320;
	var deslocamento = (parseInt(current.offsetHeight)+5);
	
	if (comentario.length > 45)
	  altura = Math.ceil(comentario.length/45);
	else
	  largura = Math.ceil(comentario.length * 8);
	 
	oPopupBody.innerHTML = comentario; 
	
	if ((current.type == 'select-one') || (current.type == 'select-multiple')) {
	   if (altura == 1)
		   deslocamento = -1*(parseInt(current.offsetHeight)+5);
	   else
		   deslocamento = -1*(parseInt(current.offsetHeight)+(10*altura));
	}
	
	oPopup.show(0, deslocamento, largura, 15*altura, current);
}

/* 
Função: Show Modal
Inserida: 19/01/2006 16:44
Ultima alteração: 19/01/2006 16:44
Propósito: Abre uma nova janela de forma Modal
*/
		
function showModal( p_pagina, p_target, p_resize, p_scroll, p_status, p_width, p_height )
{
 var path     = p_pagina.split('/');
 var pagina   = path[ path.length -1 ].split('?');
	 resize	  = ( p_resize != null || p_resize != 0 ) ? p_resize : false;
	 scrol 	  = ( p_scroll != null || p_scroll != 0 ) ? p_scroll : false;
	 status   = ( p_status != null || p_status != 0 ) ? p_status : '';
	 width	  = ( p_width  != null || p_width  != 0 ) ? p_width  : 0;
	 height	  = ( p_height != null || p_height != 0 ) ? p_height : 0; 
	 esquerda = ( screen.width  ) ? ( screen.width  - parseInt( width )  ) / 2 : 0;
	 topo	  = ( screen.height ) ? ( screen.height - parseInt( height ) ) / 2 : 0; 
	 win 	  = window.open( p_pagina, p_target ,'height='+ height +', width='+ width +', left='+ esquerda + ', top=' + topo + ', toolbar=0, location=0,directories=0,status='+ status +',menuBar=0,scrollBars='+ scrol +',resizable=' + resize + '');

	 win.focus(); 
}

/* 
Função: Testa CNPJ
Inserida: 19/01/2006 16:37
Ultima alteração: 19/01/2006 16:37
Propósito: Testa a validade de um nro de cnpj
*/
		
function testacnpj(cnpj)
{
  while (cnpj.indexOf('.') > 0)
  {
    cnpj= cnpj.replace('.', '');
  }
  while (cnpj.indexOf('-') > 0)
  {
    cnpj = cnpj.replace('-', '');
  }
  while (cnpj.indexOf('/') > 0)
  {
    cpnj = cnpj.replace('/', '');
  }
  res = false;
  digito = 0;
  if(cnpj.length == 14)
  {
    cnpjdv = cnpj.substring(12, 14);
        digito = 0;
        controle = "";
        for(i=0;i<2;i++)
        {
          soma = 0;
          for(j=0;j<12;j++)
          {
            soma += (cnpj.substring(j, j+1)*1)*((11+i-j)%8+2);
          }
          if(i == 1)
          {
            soma += digito * 2;
          }
          digito = 11 - soma%11;
          if (digito > 9)
          {
            digito = 0;
          }
          controle = controle+""+digito;
    }
        if(controle == cnpjdv)
        {
          res = true;
        }
  }
  return res;
}

/* 
Função: Testa CNPJ/CPF
Inserida: 19/01/2006 16:39
Ultima alteração: 19/01/2006 16:39
Propósito: Testa a validade de um CNPJ ou CPF, de acordo com o tamanho do nro passado
*/
		
function testacpfcnpj(cpfcnpj)
{
  if(cpfcnpj.length == 14)
  {
    return testacnpj(cpfcnpj);
  }
  else
  {
    return testacpf(cpfcnpj);
  }
}

/* 
Função: Testa CPF
Inserida: 19/01/2006 16:38
Ultima alteração: 19/01/2006 16:38
Propósito: Testa a validade de um nro de CPF
*/
		
function testacpf(cpf)
{
  while (cpf.indexOf('.') > 0)
  {
    cpf = cpf.replace('.', '');
  }
  while (cpf.indexOf('-') > 0)
  {
    cpf = cpf.replace('-', '');
  }
  while (cpf.indexOf('/') > 0)
  {
    cpf = cpf.replace('/', '');
  }
  if(cpf == '00000000000')
  {
    return true;
  }
  digito1 = 0;
  digito2 = 0;
  if(cpf.length == 11)
  {
    for(i=0;i<9;i++)
        {
          digito1 += (cpf.substring(i, i+1)*1)*(10-i);
        }
        if ((digito1%11==1)||(digito1%11==0))
        {
          digito1 = 0;
        }
        else
        {
          digito1 = 11-(digito1%11);
        }
        for (i=0;i<10;i++)
        {
          digito2 += (cpf.substring(i, i+1)*1)*(11-i);
        }
        if ((digito2%11==1)||(digito2%11==0))
        {
          digito2 = 0;
        }
        else
        {
          digito2 = 11 - (digito2%11);
        }
        return ((digito1+""+digito2)==cpf.substring(9, 11));
  }
  else
  {
    return false;
  }
}

/* 
Função: Texto HTML para JS
Inserida: 29/04/2006 10:05
Ultima alteração: 29/04/2006 10:25
Propósito: Converte os caracteres especiais do HTML para Javascript
*/
		
function f_html_to_js(texto) {
	text = texto;
    text = text.replace(/&quot;/g,unescape('%22'));
    text = text.replace(/&amp;/g,unescape('%26'));
    text = text.replace(/&lt;/g,unescape('%3C'));
    text = text.replace(/&gt;/g,unescape('%3E'));
    text = text.replace(/&nbsp;/g,unescape('%A0'));
    text = text.replace(/&iexcl;/g,unescape('%A1'));
    text = text.replace(/&cent;/g,unescape('%A2'));
    text = text.replace(/&pound;/g,unescape('%A3'));
    text = text.replace(/&yen;/g,unescape('%A5'));
    text = text.replace(/&brvbar;/g,unescape('%A6'));
    text = text.replace(/&sect;/g,unescape('%A7'));
    text = text.replace(/&uml;/g,unescape('%A8'));
    text = text.replace(/&copy;/g,unescape('%A9'));
    text = text.replace(/&ordf;/g,unescape('%AA'));
    text = text.replace(/&laquo;/g,unescape('%AB'));
    text = text.replace(/&not;/g,unescape('%AC'));
    text = text.replace(/&shy;/g,unescape('%AD'));
    text = text.replace(/&reg;/g,unescape('%AE'));
    text = text.replace(/&macr;/g,unescape('%AF'));
    text = text.replace(/&deg;/g,unescape('%B0'));
    text = text.replace(/&plusmn;/g,unescape('%B1'));
    text = text.replace(/&sup2;/g,unescape('%B2'));
    text = text.replace(/&sup3;/g,unescape('%B3'));
    text = text.replace(/&acute;/g,unescape('%B4'));
    text = text.replace(/&micro;/g,unescape('%B5'));
    text = text.replace(/&para;/g,unescape('%B6'));
    text = text.replace(/&middot;/g,unescape('%B7'));
    text = text.replace(/&cedil;/g,unescape('%B8'));
    text = text.replace(/&sup1;/g,unescape('%B9'));
    text = text.replace(/&ordm;/g,unescape('%BA'));
    text = text.replace(/&raquo;/g,unescape('%BB'));
    text = text.replace(/&frac14;/g,unescape('%BC'));
    text = text.replace(/&frac12;/g,unescape('%BD'));
    text = text.replace(/&frac34;/g,unescape('%BE'));
    text = text.replace(/&iquest;/g,unescape('%BF'));
    text = text.replace(/&Agrave;/g,unescape('%C0'));
    text = text.replace(/&Aacute;/g,unescape('%C1'));
    text = text.replace(/&Acirc;/g,unescape('%C2'));
    text = text.replace(/&Atilde;/g,unescape('%C3'));
    text = text.replace(/&Auml;/g,unescape('%C4'));
    text = text.replace(/&Aring;/g,unescape('%C5'));
    text = text.replace(/&AElig;/g,unescape('%C6'));
    text = text.replace(/&Ccedil;/g,unescape('%C7'));
    text = text.replace(/&Egrave;/g,unescape('%C8'));
    text = text.replace(/&Eacute;/g,unescape('%C9'));
    text = text.replace(/&Ecirc;/g,unescape('%CA'));
    text = text.replace(/&Euml;/g,unescape('%CB'));
    text = text.replace(/&Igrave;/g,unescape('%CC'));
    text = text.replace(/&Iacute;/g,unescape('%CD'));
    text = text.replace(/&Icirc;/g,unescape('%CE'));
    text = text.replace(/&Iuml;/g,unescape('%CF'));
    text = text.replace(/&ETH;/g,unescape('%D0'));
    text = text.replace(/&Ntilde;/g,unescape('%D1'));
    text = text.replace(/&Ograve;/g,unescape('%D2'));
    text = text.replace(/&Oacute;/g,unescape('%D3'));
    text = text.replace(/&Ocirc;/g,unescape('%D4'));
    text = text.replace(/&Otilde;/g,unescape('%D5'));
    text = text.replace(/&Ouml;/g,unescape('%D6'));
    text = text.replace(/&times;/g,unescape('%D7'));
    text = text.replace(/&Oslash;/g,unescape('%D8'));
    text = text.replace(/&Ugrave;/g,unescape('%D9'));
    text = text.replace(/&Uacute;/g,unescape('%DA'));
    text = text.replace(/&Ucirc;/g,unescape('%DB'));
    text = text.replace(/&Uuml;/g,unescape('%DC'));
    text = text.replace(/&Yacute;/g,unescape('%DD'));
    text = text.replace(/&THORN;/g,unescape('%DE'));
    text = text.replace(/&szlig;/g,unescape('%DF'));
    text = text.replace(/&agrave;/g,unescape('%E0'));
    text = text.replace(/&aacute;/g,unescape('%E1'));
    text = text.replace(/&acirc;/g,unescape('%E2'));
    text = text.replace(/&atilde;/g,unescape('%E3'));
    text = text.replace(/&auml;/g,unescape('%E4'));
    text = text.replace(/&aring;/g,unescape('%E5'));
    text = text.replace(/&aelig;/g,unescape('%E6'));
    text = text.replace(/&ccedil;/g,unescape('%E7'));
    text = text.replace(/&egrave;/g,unescape('%E8'));
    text = text.replace(/&eacute;/g,unescape('%E9'));
    text = text.replace(/&ecirc;/g,unescape('%EA'));
    text = text.replace(/&euml;/g,unescape('%EB'));
    text = text.replace(/&igrave;/g,unescape('%EC'));
    text = text.replace(/&iacute;/g,unescape('%ED'));
    text = text.replace(/&icirc;/g,unescape('%EE'));
    text = text.replace(/&iuml;/g,unescape('%EF'));
    text = text.replace(/&eth;/g,unescape('%F0'));
    text = text.replace(/&ntilde;/g,unescape('%F1'));
    text = text.replace(/&ograve;/g,unescape('%F2'));
    text = text.replace(/&oacute;/g,unescape('%F3'));
    text = text.replace(/&ocirc;/g,unescape('%F4'));
    text = text.replace(/&otilde;/g,unescape('%F5'));
    text = text.replace(/&ouml;/g,unescape('%F6'));
    text = text.replace(/&divide;/g,unescape('%F7'));
    text = text.replace(/&oslash;/g,unescape('%F8'));
    text = text.replace(/&ugrave;/g,unescape('%F9'));
    text = text.replace(/&uacute;/g,unescape('%FA'));
    text = text.replace(/&ucirc;/g,unescape('%FB'));
    text = text.replace(/&uuml;/g,unescape('%FC'));
    text = text.replace(/&yacute;/g,unescape('%FD'));
    text = text.replace(/&thorn;/g,unescape('%FE'));
    text = text.replace(/&yuml;/g,unescape('%FF'));
	return text;
}

/* 
Função: Valor do Campo
Inserida: 19/01/2006 16:47
Ultima alteração: 31/01/2006 13:47
Propósito: Busca o valor de um campo em um formulário
*/
		
function f_valor_campo(p_campo, p_form) {
  var value = '';
  var j = 0;
  for(var i=0;i<p_form.elements.length;i++) {
    if(p_form.elements[i].name == p_campo && !p_form.elements[i].disabled) {
      switch(p_form.elements[i].type) {
        case 'radio':
          if(p_form.elements[i].checked) {
            return p_form.elements[i].value;
          }
          break;
        case 'checkbox':
          if (p_form.elements[i].checked) {
            if (j != 0) {
              value += ',';
            }
            value += p_form.elements[i].value;
            j++;
          }
          break;
        default:
          if (j != 0) {
            value += ',';
          }
          value += p_form.elements[i].value;
          j++;
          break;				
        }
      }
    }
    return value;
}

/* 
Função: Verifica Form
Inserida: 19/01/2006 16:33
Ultima alteração: 28/03/2006 17:36
Propósito: f_verifica_form(formulario) : Verifica os dados do formulario, o que pode ser feito apenas em uma secao do form
	* variáveis *
	  - formulario : nome do formulario
	  - secao : Opcional, indica que a verificação deve ser feita apenas em uma parte do form
*/
		
function f_verifica_form(formulario) {
	var args=f_verifica_form.arguments;
	// Verifica apenas umas secao do formulario
	var secao = false;
	if (args.length == 2) secao = true;	
	for (var i = 0; i<formulario.length; i++) {
		if (!formulario.elements[i].disable) {
			if ((!secao && !formulario.elements[i].getAttribute("secao")) || args[1] == formulario.elements[i].getAttribute("secao")) {
				if ((formulario.elements[i].getAttribute("obrigatorio") == 1) && (!formulario.elements[i].value) && (!formulario.elements[i].disable)) {
					mensagem = 'O campo '+formulario.elements[i].getAttribute("display")+' '+String.fromCharCode(233)+' requerido.';
					return f_erro(mensagem,formulario.elements[i], formulario);
				}
			}
		    if ((!secao && !formulario.elements[i].getAttribute("secao")) || args[1] == formulario.elements[i].getAttribute("secao")) {
				if ((formulario.elements[i].value) && (formulario.elements[i].getAttribute("tipo") == 'numerico')) {
					formulario.elements[i].value = formulario.elements[i].value.replace(',', '.');
					if(!formulario.elements[i].value.isNumber()) {
						mensagem = 'O valor do campo '+formulario.elements[i].getAttribute("display")+' deve ser num'+String.fromCharCode(233)+'rico.';
						return f_erro(mensagem,formulario.elements[i], formulario);
					}
				}			
				if ((formulario.elements[i].value) && (formulario.elements[i].getAttribute("tipo") == 'data') && (!formulario.elements[i].value.substr(0,10).isDate())) {
					mensagem = 'O valor do campo '+formulario.elements[i].getAttribute("display")+' deve ser uma data v'+String.fromCharCode(225)+'lida.';
					return f_erro(mensagem,formulario.elements[i], formulario)
				}			
				if ((formulario.elements[i].value) && (formulario.elements[i].getAttribute("tipo") == 'data_hora') && (!formulario.elements[i].value.isDataHora())) {
					mensagem = 'O valor do campo '+formulario.elements[i].getAttribute("display")+' deve ser uma data e hora v'+String.fromCharCode(225)+'lida, no formato (dia/m'+String.fromCharCode(234)+'s/ano hora:minuto).';
					return f_erro(mensagem,formulario.elements[i], formulario)
				}			
				if ((formulario.elements[i].value) && (formulario.elements[i].getAttribute("tipo") == 'cpf') && (!formulario.elements[i].value.isCPF())) {
					mensagem = 'O valor do campo '+formulario.elements[i].getAttribute("display")+' deve ser um nº v'+String.fromCharCode(225)+'lido de CPF.';
					return f_erro(mensagem,formulario.elements[i], formulario)
				}			
				if ((formulario.elements[i].value) && (formulario.elements[i].getAttribute("tipo") == 'email') && (!formulario.elements[i].value.isMail())) {
					mensagem = 'O valor do campo '+formulario.elements[i].getAttribute("display")+' deve ser um e-mail.';
					return f_erro(mensagem,formulario.elements[i], formulario)
				}			
				if ((formulario.elements[i].value) && (formulario.elements[i].getAttribute("tipo") == 'cnpj') && (!formulario.elements[i].value.isCNPJ())) {
					mensagem = 'O valor do campo '+formulario.elements[i].getAttribute("display")+' deve ser um CNPJ v'+String.fromCharCode(225)+'lido.';
					return f_erro(mensagem,formulario.elements[i], formulario)
				}	
				if ((formulario.elements[i].value) && (formulario.elements[i].getAttribute("tipo") == 'placa')) {
                    formulario.elements[i].value = formulario.elements[i].value.replace('-', '');
					if(!formulario.elements[i].value.isPlaca()) {
						mensagem = 'O valor do campo '+formulario.elements[i].getAttribute("display")+' deve ser uma placa v'+String.fromCharCode(225)+'lida..';
						return f_erro(mensagem,formulario.elements[i], formulario)
					}
				}	
			}
		}
	}
	return true;
}

/* 
Função: Verifica Separador Numerico
Inserida: 19/01/2006 15:49
Ultima alteração: 19/01/2006 15:49
Propósito: f_verifica_separador(fld) : Verifica o separador de um campo numérico, se o usuario digitar ',' substitui por '.'
	* variáveis *
	  - fld : Objeto
	* chamada *
    f_verifica_separador(this);
*/
		
function f_verifica_separador(fld)
{
	if ((fld.value).indexOf(',') != -1) {
	  fld.value = fld.value.substr(0,fld.value.length - 1);
	  fld.value = fld.value + '.';
    }
	if(isNaN(fld.value)) {
	  alert("Digite somente números neste campo.");
	  fld.value = fld.value.substr(0,fld.value.length - 1);
    }
}

/* 
Função: Verifica Tipo do Campo
Inserida: 19/01/2006 15:53
Ultima alteração: 19/01/2006 15:53
Propósito: Retorno TRUE se o campo é controlado pela função CONTROLA CAMPOS
*/
		
function f_verifica_tipo( p_campo )
{
	switch( p_campo.type ) 
	{
				case 'text' : 
				case 'select-one' : 
				case 'select-multiple' : 
				case 'textarea' : 
				case 'password' : 
					
					return ( true );
				
			   default :	
					return ( false );
	}

}

