//	Valida um formulário completo
function ValidaFormulario(formulario)
{

	// Array de criticas sobre cada campo do formulario
	var criticas = new Array(formulario.elements.length * 5);
	
	//for(var i=0;i<=formulario.elements.length;i++)
	//	{alert(formulario.elements(i).name + ' Indice = ' + i)}

	// Preenchendo o array
	switch(formulario.name)  
	{

//ESTRUTURA		
		// Formulário de cadastro de documentos
		case "FormCadastrarDocumento":
			
			//Validação do Identificador 
			var campoTipo, intSeparador, codTipo, blnExterno;
			campoTipo = formulario.Tipo.value;
			intSeparador = campoTipo.indexOf("-");
			codTipo = campoTipo.substring(0,intSeparador);
			blnExterno = campoTipo.substring(intSeparador+1,campoTipo.length);
			
			criticas = MontaArray(criticas,0,"Espécie",true,false,0,0);
			criticas = MontaArray(criticas,1,"Função",true,false,0,0);
			criticas = MontaArray(criticas,2,"Meio",true,false,0,0);
			
			/*if (blnExterno == 'True') 
				criticas = MontaArray(criticas,2,"Remetente",true,false,0,0);*/
			
			criticas = MontaArray(criticas,4,"Nível de Sensibilidade",true,false,0,0);
			criticas = MontaArray(criticas,5,"Assunto",true,false,0,0);
			criticas = MontaArray(criticas,6,"Data do Documento",true,false,10,3);
			criticas = MontaArray(criticas,7,"Número de Folhas",true,true,0,0);
		
			
			
			
			

			//Se o tipo de documento for ofício/carta/Memorando o identificador é obrigatório.
			if ((codTipo == 7) || (codTipo == 9) || (codTipo == 10))
			{
				criticas = MontaArray(criticas,8,"Identificador do Documento",true,false,0,0);
			}
			
			//criticas = MontaArray(criticas,10,"Numero do processo associado",false,true,15,0);
		break;
		
		// Formulário de cadastro de documentos
		case "FormCadastrarDocumentoNumerado":

			//alert(formulario.elements[10].name);
			
			//Validação do Identificador 
			var campoTipo, intSeparador, codTipo, blnExterno;
			campoTipo = formulario.Tipo.value;
			intSeparador = campoTipo.indexOf("-");
			codTipo = campoTipo.substring(0,intSeparador);
			blnExterno = campoTipo.substring(intSeparador+1,campoTipo.length);
			
			
			
			criticas = MontaArray(criticas,0,"Tipo",true,false,0,0);
			criticas = MontaArray(criticas,1,"Meio",true,false,0,0);
						
			criticas = MontaArray(criticas,2,"Grau de sigilo",true,false,0,0);
			criticas = MontaArray(criticas,3,"Assunto",true,false,0,0);
			criticas = MontaArray(criticas,4,"Data do Documento",true,false,10,3);
			criticas = MontaArray(criticas,6,"Emissor",true,false,0,0);
			criticas = MontaArray(criticas,7,"Elaborador",true,false,0,0);
			criticas = MontaArray(criticas,10,"Número de Folhas",true,true,0,0);
			
			
			
			
		break;
		
		
		case "FormCadastrarInstrumento":
		
			criticas = MontaArray(criticas,0,"Identificador",true,false,0,0);
			criticas = MontaArray(criticas,1,"Data do Documento/Processo",true,false,10,3);
			criticas = MontaArray(criticas,2,"Data DOU",false,false,10,5);
			//criticas = MontaArray(criticas,3,"Seção",true,true,0,0);
			//criticas = MontaArray(criticas,4,"Número da Página do DOU",true,true,0,0);
			criticas = MontaArray(criticas,5,"Tipo",true,false,0,0);
			criticas = MontaArray(criticas,6,"Local de Arquivamento",true,false,0,0);
			criticas = MontaArray(criticas,7,"Suporte Físico",true,false,0,0);
			criticas = MontaArray(criticas,8,"Número de Páginas",true,true,0,0);
			criticas = MontaArray(criticas,9,"Grau de sigilo",true,false,0,0);
			criticas = MontaArray(criticas,10,"Assunto",true,false,0,0);
			//criticas = MontaArray(criticas,11,"Serviço",true,true,0,0);
			criticas = MontaArray(criticas,12,"Origem",true,false,0,0);
			criticas = MontaArray(criticas,13,"Destino",true,false,0,0);
			criticas = MontaArray(criticas,14,"Interessado",true,false,0,0);
			criticas = MontaArray(criticas,15,"Resumo",true,false,0,0);
			criticas = MontaArray(criticas,16,"Classificação",true,false,0,0);
			break;
		
		
		
		
		// Formulário de Anexar / Qualificar Documentos aos PADOS
		case "FormPadoAnexar":
			
			criticas = MontaArray(criticas,0,"Número Documento/Processo",true,false,15,0);			
			criticas = MontaArray(criticas,1,"Qualificação",true,false,0,0);
			
		break;
		
		// Inserido por Genival em 18/03/2005
		case "FormAlterarArquivo":
			criticas = MontaArray(criticas,2,"Local do arquivamento",true,false,0,0);
		break;

		
		// Formulário de cadastro de PROCESSO
		case "FormCadastrarProcessoCompleto":
			
			criticas = MontaArray(criticas,0,"Número do Processo",true,false,15,0);			
			criticas = MontaArray(criticas,1,"Tipo",true,false,0,0);
			criticas = MontaArray(criticas,2,"Suporte Físico",true,false,0,0);
			criticas = MontaArray(criticas,3,"Interessado",true,false,0,0);
			criticas = MontaArray(criticas,4,"Grau de sigilo",true,false,0,0);
			criticas = MontaArray(criticas,5,"Assunto",true,false,0,0);
			criticas = MontaArray(criticas,6,"Data do Processo",true,false,10,3);
			
		break;
		
		// Formulário de alteração de documentos/processos
		case "FormAlterar":
			
			var cpf=false;
			
			var objCpf = document.all.item("CPF");
			
			//para ambos os casos
			criticas = MontaArray(criticas,1,"Tipo",true,false,0,0);
			criticas = MontaArray(criticas,2,"Meio",true,false,0,0);
			
			
			//SE EXISTIR O CAMPO CNPJ-CPF(PODE SER PROCESSO
			/*if(formulario.CpfCnpj!= undefined)
			{
				//VERIFICO SE O CNPJ/CPF INFORMADO ESTÁ REALMENTE GRAVADO NA BASE 
				if(formulario.CpfCnpj.value != '')
				{
					
											   //DESFORMATO O CAMPO(CNPJ OU CPF)	
					formulario.CpfCnpj.value = substcnpj_cpf(formulario.CpfCnpj.value)
					
					alert('Campo ' + formulario.CpfCnpj.value + ' - Hidem  ' + formulario.txtCnpj.value)
					
					if(formulario.CpfCnpj.value != formulario.txtCnpj.value)
					{
						alert('O CNPJ/CPF informado não coincide com a Entidade indicada')
						formulario.CpfCnpj.focus()
						return false
					}
				
					//Processo
					if (cpf == true)
						{criticas = MontaArray(criticas,3,"CPF/CNPJ",true,false,0,0);}
					else
						{criticas = MontaArray(criticas,10,"Remetente ou Interessado",true,false,0,0);}
					
					
					//processo
					criticas = MontaArray(criticas,13,"Grau de sigilo",true,false,0,0);
					criticas = MontaArray(criticas,14,"Assunto",true,false,0,0);
					criticas = MontaArray(criticas,15,"Data",true,false,10,3);	
				}
			}
			else
			{*/
				criticas = MontaArray(criticas,5,"Grau de sigilo",true,false,0,0);
				criticas = MontaArray(criticas,6,"Assunto",true,false,0,0);
				criticas = MontaArray(criticas,7,"Data",true,false,10,3);
				if (formulario.NumPaginas){
					criticas = MontaArray(criticas,8,"Número de Folhas",true,true,0,0);
				}
			//}
			
			
			var campoTipo, intSeparador, codTipo, blnExterno;
			campoTipo = formulario.Tipo.value;
			intSeparador = campoTipo.indexOf("-");
			codTipo = campoTipo.substring(0,intSeparador);
			blnExterno = campoTipo.substring(intSeparador+1,campoTipo.length);
			
			//Se o tipo de documento for ofício/carta, Ofício, Memorando o identificador é obrigatório.
			if ((codTipo == 7) || (codTipo == 9) || (codTipo == 10))
			{
				criticas = MontaArray(criticas,0,"Identificador do Documento",true,false,0,0);
			}
			
		break;
		
		
		// Formulário de cancelamento de documento/processo
		case "FormCancelar":
			criticas = MontaArray(criticas,0,"Justificativa",true,false,0,0);
			
		break;
		
		// Formulário de descancelamento de documento/processo
		case "FormRestaurar":
			criticas = MontaArray(criticas,0,"Justificativa",true,false,0,0);
		break;
		
		// Formulário de desanexação
		case "DesanexarDocumentoProcesso":
			criticas = MontaArray(criticas,0,"Justificativa",true,false,0,0);
		break;
		
		case "FormMeio":
			criticas = MontaArray(criticas,1,"Nome Meio",true,false,0,0);
		break;
		

//TRÂMITE
		//Formulário de geração de CT
		case "FormGeraCT":
			criticas = MontaArray(criticas,0,"Movímentações 'De'",true,false,10,3);
			criticas = MontaArray(criticas,1,"Movímentações 'Para'",true,false,10,3);
			criticas = MontaArray(criticas,2,"Órgão do destinatário",true,false,0,0);
		break;

		//Formulário de Baixa no Follow Up
		case "FormBaixaFUp":
			criticas = MontaArray(criticas,0,"Texto do despacho",true,false,0,0);
		break;

		//Formulário de Movimentação 
		case "FormMovimentacaoInternaMultipla":
			criticas = MontaArray(criticas,0,"Texto do despacho",true,false,0,0);
			criticas = MontaArray(criticas,5,"Órgão Destino",true,false,0,0);			
			var obcodigo = FormMovimentacaoInternaMultipla.OrgaosDestino;
			var obMotivo = FormMovimentacaoInternaMultipla.Motivo;
			
			if ((obMotivo!=null)&&(obMotivo!=""))
			{ 
				criticas = MontaArray(criticas,8,"Tipo da matéria",true,false,0,0);
			}
				
			if ((obcodigo!=null)&&(obcodigo!=""))
			{ 				
				if ( (obcodigo.value == 3)||(obcodigo.value == 2)||(obcodigo.value == 4)||(obcodigo.value == 5)||(obcodigo.value == 20) )
				{
					
					var obAnalise = FormMovimentacaoInternaMultipla.Analise;
					var CanceladoIncompleto = FormMovimentacaoInternaMultipla.CanceladoIncompleto;

					if ((obAnalise!=null)&&(obAnalise!=""))
					{	
									 
						if (ValidaRadio(obAnalise, 'Encaminhar para Analise'))
						{
							if (obAnalise(0).checked)
							{ 
								if (!(CanceladoIncompleto!=null)&&(CanceladoIncompleto!=""))
								{ 
									criticas = MontaArray(criticas,8,"Tipo da matéria",true,false,0,0);
									criticas = MontaArray(criticas,10,"Numero do Memorando",true,false,0,0);
								}
							}
								
						}
						else
						{
						return false;
						}
						
									
					}						
			 }
		 }
			
			
		break;
		
			
		//Formulário de Movimentação Externa (ESTOU FAZENDO A VALIDAÇÃO NA PÁGINA POR EXISTIR A CIRCULAR E NÃO CIRCULAR)
		/*case "FormMovimentacaoExterna":
			criticas = MontaArray(criticas,0,"Texto do despacho",true,false,0,0);
			criticas = MontaArray(criticas,1,"Entidade Externa",true,false,0,0);
		break;
		*/
				
		//Formulário de Devolução de Movimentação 
		case "FormDevolucaoMovimentacao":
			criticas = MontaArray(criticas,0,"Motivo da recusa",true,false,0,0);
		break;
		
		//Formulário de Distribuição
		case "FormDistribuicao":
			criticas = MontaArray(criticas,0,"Texto do Despacho",true,false,0,0);
			criticas = MontaArray(criticas,1,"Colaborador",true,false,0,0);
		break;
		
		//Formulário de CirculacaoInterna
		case "FormCirculacaoInterna":
			criticas = MontaArray(criticas,0,"Colaborador",true,false,0,0);
		break;
		
		
		//Formulário de Devolução de Distribuição
		case "FormDevolucaoDistribuicao":
			criticas = MontaArray(criticas,0,"Motivo da recusa",true,false,0,0);
		break;
		
		//Consulta CT(s) geradas (ESTOU FAZENDO A VALIDAÇÃO NA PÁGINA)
		//case "FormConsultaCT":
		//	criticas = MontaArray(criticas,0,"Data de Referência",true,false,0,3);
		//break;
		
		
//ARQUIVO
		
		//Formulário de Envio de Arquivo Local
		case "FormEnvioArquivoLocal":
			criticas = MontaArray(criticas,0,"Motivo do arquivamento",true,false,0,0);
			criticas = MontaArray(criticas,1,"Local do arquivamento",true,false,0,0);
			//criticas = MontaArray(criticas,2,"Andamento",true,false,0,0);
		break;

		
		//Formulário de Envio de Arquivo Geral
		case "FormEnvioArquivoGeral":
			criticas = MontaArray(criticas,0,"Motivo do arquivamento",true,false,0,0);
		break;
		
		//Formulário de Solicitação de Desarquivamento
		case "FormSolicitaDesarquivamento":
			criticas = MontaArray(criticas,0,"Justificativa do desarquivamento",true,false,0,0);
		break;
		
		//Formulário de Receber Arquivamento
		case "FormRecebeArquivamento":
			criticas = MontaArray(criticas,0,"Classificação",true,false,0,0);
			//criticas = MontaArray(criticas,1,"Classificação",true,false,0,0);
			criticas = MontaArray(criticas,5,"Grau de sigilo",true,false,0,0);
			criticas = MontaArray(criticas,6,"Local de arquivamento",true,false,0,0);
			
		break;
		
		//Formulário de Manter DocProcesso Arquivado
		case "FormManterArquivo":
			criticas = MontaArray(criticas,0,"Justificativa",true,false,0,0);
		break;
		
		//Formulário de Pesquisa de documento/processo para desarquivamento
		case "FormNumDocProcesso":
			criticas = MontaArray(criticas,0,"Número",true,true,12,0);
		break;
		
		
		// Formulário para gerar relatório dos documentos arquivados/desarquivados
		case "FormArquivadosDesarquivados":
			criticas = MontaArray(criticas,2,"Data De",true,false,10,3);
			criticas = MontaArray(criticas,3,"Data Até",true,false,10,3);
		break;
		
		
		// Formulário para altera o local de arquivamento e/ou mensagem ao cidadão (SETORIAL)
		case "FormAlteraArquivoSetorial":
			criticas = MontaArray(criticas,0,"Local de Arquivamento",true,false,0,0);
		break;
		
		// Formulário para altera o local de arquivamento e/ou mensagem ao cidadão (GERAL)
		case "FormAlteraArquivo":
			criticas = MontaArray(criticas,0,"Local de Arquivamento",true,false,0,0);
			criticas = MontaArray(criticas,2,"Classificação",true,false,0,0);
			criticas = MontaArray(criticas,3,"Classificação",true,false,0,0);
		break;

		// Formulário para devolver um documento/processo que foi enviado para o arquivo
		case "FormDevolverArquivamento":
			criticas = MontaArray(criticas,0,"Motivo da Recusa",true,false,0,0);
		break;
//PROTOCOLO		
		
		// Formulário de Cadastro de Processo
		case "FormCadastrarProcesso":
			criticas = MontaArray(criticas,0,"Número",true,true,15,0);
			criticas = MontaArray(criticas,1,"Remetente",true,false,0,0);
			criticas = MontaArray(criticas,2,"Órgão Destino",true,false,0,0);
		break;
		
		// Formulário de Aviso de Recebimento (AR)
		case "FormAR":
			criticas = MontaArray(criticas,0,"Código do AR",true,false,0,0);
			criticas = MontaArray(criticas,3,"Data de Recebimento",true,false,10,3);
		break;
		
		
			

//CONSULTA
		//Formulário de consulta por número de documento/processo
		case "FormPesquisaNumero":
			criticas = MontaArray(criticas,0,"Número",true,true,12,0);
		break;
		
		//Formulário de consulta de log por número de documento/processo
		case "FormPesquisaLog":
			criticas = MontaArray(criticas,0,"Número",true,true,12,0);
		break;	
		

//ADM		
		// Formulário para dar acesso para um colaborador tramitar documentos de um outro órgão
		case "FormAcesso":
			//criticas = MontaArray(criticas,0,"Órgão do Colaborador",true,false,0,0);
			//criticas = MontaArray(criticas,1,"Colaborador",true,false,0,0);
			//criticas = MontaArray(criticas,4,"Órgão",true,false,0,0);
			//criticas = MontaArray(criticas,5,"Data de Vencimento",true,false,0,4);
			//criticas = MontaArray(criticas,6,"Justificativa para Acesso",true,false,0,0);
		break;
		
		// Formulário para dar acesso para um colaborador tramitar documentos de um outro órgão
		case "FormPerfil":
			criticas = MontaArray(criticas,0,"Órgão",true,false,0,0);
			
		break;
		
		// Formulário para alterar os dados da tabela de classificacao
		case "FormAlterarClassificacao":
			criticas = MontaArray(criticas,0,"Número da Classificação",true,false,0,0);
			criticas = MontaArray(criticas,1,"Nome da Classificação",true,false,0,0);
		break;

		// Formulário para incluir os dados da tabela de classificacao
		case "FormIncluirClassificacao":
			criticas = MontaArray(criticas,0,"Número da Classificação",true,false,0,0);
			criticas = MontaArray(criticas,1,"Nome da Classificação",true,false,0,0);
		break;

//OUTROS
		// Formulário genérico que tem apenas NumDocumentoProcesso
		case "FormNumDocProcesso":
			criticas = MontaArray(criticas,0,"Número",true,true,12,0);
			
		break;
		
		
		
	}
	
	// Validando o formulário
	for(cont = 0; cont < formulario.elements.length; cont ++) 
	{
		//alert(formulario.elements[cont].name + " - " + formulario.elements[cont].disabled);
		if(criticas[cont * 5] != null && !formulario.elements[cont].disabled)
			if(!ValidaCampo(formulario.elements[cont], criticas[cont * 5], criticas[cont * 5 + 1], criticas[cont * 5 + 2], criticas[cont * 5 + 3], criticas[cont * 5 + 4]))
				return false;
	}
	
	// Submetendo o formulário em caso de crítica validada
	formulario.submit();
	document.getElementById("ImagemSubmit").disabled = true;
	document.all["ImagemSubmit"].disabled = true;

}


//	Monta array de validação
function MontaArray(criticas,indice,titulo,valor1,valor2,valor3,valor4) {
	criticas[indice * 5] = titulo;
	criticas[indice * 5 + 1] = valor1;
	criticas[indice * 5 + 2] = valor2;
	criticas[indice * 5 + 3] = valor3;
	criticas[indice * 5 + 4] = valor4;
	return criticas;
}


///////////////////////////////////////////////////
//	Valida um campo de um determinado formulário
//  Entrada: 
//		   intCampo: Representa a sequencia numérica que o campo se encontra no formulário
//     strDescricao: O Nome que foi dado ao campo
//   blnObrigatório: True ou False
//      blnNumerico: True ou False  
// intMinimoDigitos: Número mínimo de dígitos
//intFuncaoEspecial: Número da função especial
//
//    Saida:
//		True ou False, representando se o formulário foi possui dados válidos ou não.	

function ValidaCampo(intCampo, strDescricao, blnObrigatorio, blnNumerico, intMinimoDigitos, intFuncaoEspecial) {
	// Valor do campo
	var strValor = intCampo.value;
	
	// Verifica campos de preenchimento obrigatório
	if(blnObrigatorio && (strValor == "" || strValor == 0) ) 
	{ 
		alert("O campo [" + strDescricao + "] tem preenchimento obrigatório!");
		intCampo.focus();
		return false;
	}
	
	// Verifica campos numéricos
	if(blnNumerico && !EhNumero(strValor)) 
	{
		alert("O campo [" + strDescricao + "] deve ser numérico!");
		intCampo.focus();
		return false;
	}
	
	// Valida o número mínimo de dígitos do campo
	if(strValor != "" && intMinimoDigitos > 0 && strValor.length < intMinimoDigitos) 
	{
		alert("O campo [" + strDescricao + "] deve conter pelo menos " + intMinimoDigitos + " dígitos!"); 
		intCampo.focus();
		return false;
	}

	// Validando casos especiais
	switch(intFuncaoEspecial) 
	{
	
		//	Select vazios
		case 1:
			if(!Especiais1(intCampo, strDescricao))
				return false;
			break;
	
		//	Select com opção de escolha selecionada
		case 2:
			if(!Especiais2(intCampo, strDescricao))
				return false;
			break;
			
		// Data menor que a data de hoje
		//Tem que verificar o que fazer quando a data não for obrigatória
		//Sendo que a data tem que ser menor que a data de hoje
		case 3:
			if(!EspecialDataMenorHoje(intCampo, strDescricao))
				return false;
			break;
		
		// Data maior que a data de hoje
		//Tem que verificar o que fazer quando a data não for obrigatória
		//Sendo que a data tem que ser maior que a data de hoje
		case 4:
			if(!EspecialDataMaiorHoje(intCampo, strDescricao))
				return false;
			break;
			
		case 5:
			if(!EspecialDataOpcional(intCampo))
				return false;
			break;
		//Verifica se o cpf está validado e se é o mesmo que está sendo enviado para alteração
		case 7:			
			if(!EspeciaisCpfCnpj(intCampo, strDescricao))
				return false;
			break;			
				
			//verifica se o campo radio não está marcado
		case 7:			
			if(!EspeciaisCpfCnpj(intCampo, strDescricao))
				return false;
			break;
		case 8:
				//valida campos radio
			if(!EspeciaisRadio(objCampo, strDescricao))
				return false;
			break;			
							
				
	}
	return true;
	
}


//	Validações especiais 
function EspeciaisCpfCnpj(campo, descricao)
{ 
	var CampoValidado = document.all.item("ValidaCpfCnpj");
	var CpfCnpjValidado = CampoValidado.value		
	var CpfCnpj =  campo.value;
	var MaskNumber = "";
	
	for(posicao = 0; posicao < CpfCnpj.length; posicao ++) 
		{
			var chr = CpfCnpj.substring(posicao, posicao + 1);
			if (chr != "." && chr != "/" && chr != "-")
				MaskNumber+= chr;		
		}
		CpfCnpj = MaskNumber
							
	if ((CpfCnpjValidado != CpfCnpj)&&(CpfCnpjValidado != ''))
		{
			alert("O campo [" + descricao + "] tem que ser validado antes de solicitar altaração!!!");
				campo.focus();
				return false;		
		}
		return true;
}

function Especiais1(campo, descricao) 
{
	if(campo.length == 0) 
	{
		alert("O campo [" + descricao + "] tem preenchimento obrigatório!!!");
		campo.focus();
		return false;
	}
	
}

function EspeciaisRadio(campo, descricao) 
{
var x=0
	for (i=0;i<campo.length;i++)
	{
		if(campo(i).checked) 
		{
			x++
		}
	}
	if (x>0) 
	{
		alert("O campo [" + descricao + "] tem preenchimento obrigatório!!!");
		campo.focus();
		return false;
	}

return true;
	
}

function Especiais2(campo, descricao) 
{
	if(campo.value == 0) 
	{
		alert("O campo [" + descricao + "] tem preenchimento obrigatório!!!");
		campo.focus();
		return false;
	}
	return true;
}

function EspecialDataMenorHoje(campo, descricao)
{
		//define o padrão e compara
		var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
		var matchArray = campo.value.match(datePat);

		//checagem básica
		if (matchArray == null) {
			alert("Data em formato inválido. \nPor favor, informe a data no formato dd/mm/yyyy");
			campo.focus();
			return false;
		}

		// trata partes da expressão como sendo variáveis
		day = matchArray[1];
		month = matchArray[3]; 
		year = matchArray[4];

		// checa faixa de dias
		if (day < 1 || day > 31) {
			alert("O dia deve ser um valor entre 1 e 31!");
			campo.focus();
			return false;
		}		
		
		// checa faixa de meses
		if (month < 1 || month > 12) { 
			alert("O mês deve ser um valor entre 1 e 12!");
			campo.focus();
			return false;
		}

		// checa qtde de dias num mês
		if ((month==4 || month==6 || month==9 || month==11) && day==31) {
			alert("O mês "+month+" não tem 31 dias!");
			campo.focus();
			return false;
		}

		// checa se o ano é bissexto
		if (month == 2) { 
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (	day>29 || (day==29 && !isleap)) {
				alert("Fevereiro " + year + " não tem " + day + " dias!");
				campo.focus();
				return false;
			}
		}

		// checa se o ano é válido
		if (year < 1900 || year > 2100) {
			alert("O ano indicado é inválido!");
			campo.focus();
			return false;
		}
		
		
		
		var now, diaAtual, mesAtual, anoAtual, DataAtual
		
		//now = new Date();
		//anoAtual = now.getFullYear();
		//mesAtual = (now.getMonth()+1);
		//diaAtual = now.getDate();
		
		if (year > anoAtual ) 
		{
			alert("A data não pode ser maior que a data de hoje.");
			campo.focus();
			return false;
		}
		//Ano válido mas mês não
		if (year == anoAtual && month > mesAtual) 
		{
			alert("A data não pode ser maior que a data de hoje.");
			campo.focus();
			return false;
		}
		//Ano e mês válidos mas dia não
		if (year == anoAtual && month == mesAtual && day > diaAtual)
		{
			alert("A data não pode ser maior que a data de hoje.");
			campo.focus();
			return false;
		}
		
		
		return true;

}


function EspecialDataMaiorHoje(campo, descricao)
{
		//define o padrão e compara
		var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
		var matchArray = campo.value.match(datePat);

		//checagem básica
		//alert("matchArray = " + matchArray);
		//alert("campo = [" + campo.value + "]");
		if (matchArray == null) {
			alert("Data em formato inválido. \nPor favor, informe a data no formato dd/mm/yyyy");
			campo.focus();
			return false;
		}

		// trata partes da expressão como sendo variáveis
		day = parseInt(matchArray[1],10);
		month = parseInt(matchArray[3],10); 
		year = parseInt(matchArray[4],10);

		// checa faixa de dias
		if (day < 1 || day > 31) {
			alert("O dia deve ser um valor entre 1 e 31!");
			campo.focus();
			return false;
		}		
		
		// checa faixa de meses
		if (month < 1 || month > 12) { 
			alert("O mês deve ser um valor entre 1 e 12!");
			campo.focus();
			return false;
		}

		// checa qtde de dias num mês
		if ((month==4 || month==6 || month==9 || month==11) && day==31) {
			alert("O mês "+month+" não tem 31 dias!");
			campo.focus();
			return false;
		}

		// checa se o ano é bissexto
		if (month == 2) { 
			var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
			if (	day>29 || (day==29 && !isleap)) {
				alert("Fevereiro " + year + " não tem " + day + " dias!");
				campo.focus();
				return false;
			}
		}

		// checa se o ano é válido
		if (year < 1900 || year > 2100) {
			alert("O ano indicado é inválido!");
			campo.focus();
			return false;
		}
		
		
		//Checa se a data é maior do que da data de hoje
		var now, diaAtual, mesAtual, anoAtual, DataAtual

		now = new Date();
		anoAtual = now.getFullYear();
		mesAtual = (now.getMonth()+1);		
		diaAtual = now.getDate();
		
		if (year < anoAtual) 
		{
			alert("A data não pode ser menor que a data de hoje.");
			campo.focus();
			return false;
		}
		//Ano válido mas mês não
		if ((year >= anoAtual) && (month < mesAtual)) 
		{
			alert("A data não pode ser menor que a data de hoje.");
			campo.focus();
			return false;
		}
		
		//Ano e mês válidos mas dia não
		if ((year == anoAtual) && (month == mesAtual) && (day < diaAtual))
		{
			alert("A data não pode ser menor que a data de hoje.");
			campo.focus();
			return false;
		}
		
		
		return true;

}


function ValidaData(campo)
{
	//define o padrão e compara
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
	var matchArray = campo.value.match(datePat);

	//checagem básica
	if (matchArray == null) {
		return false;
	}

	// trata partes da expressão como sendo variáveis
	day = matchArray[1];
	month = matchArray[3]; 
	year = matchArray[4];

	// checa faixa de dias
	if (day < 1 || day > 31) {
		//alert("O dia deve ser um valor entre 1 e 31!");
		return false;
	}		
		
	// checa faixa de meses
	if (month < 1 || month > 12) { 
		//alert("O mês deve ser um valor entre 1 e 12!");
		return false;
	}

	// checa qtde de dias num mês
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		//alert("O mês "+month+" não tem 31 dias!");
		return false;
	}

	// checa se o ano é bissexto
	if (month == 2) { 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (	day>29 || (day==29 && !isleap)) {
			//alert("Fevereiro " + year + " não tem " + day + " dias!");
			return false;
		}
	}

	// checa se o ano é válido
	if (year < 1900 || year > 2100) {
		//alert("O ano indicado é inválido!");
		return false;
	}
	
	return true;
		
}



function EspecialDataOpcional(campo)
{
	
	if (campo.value == "") { 
		//alert("Campo vazio, OK");
		return true; 
	}

	//define o padrão e compara
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;
	var matchArray = campo.value.match(datePat);

	//checagem básica
	if (matchArray == null) {
		return false;
	}

	// trata partes da expressão como sendo variáveis
	day = matchArray[1];
	month = matchArray[3]; 
	year = matchArray[4];

	// checa faixa de dias
	if (day < 1 || day > 31) {
		alert("O dia deve ser um valor entre 1 e 31!");
		return false;
	}		
		
	// checa faixa de meses
	if (month < 1 || month > 12) { 
		alert("O mês deve ser um valor entre 1 e 12!");
		return false;
	}

	// checa qtde de dias num mês
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
		alert("O mês "+month+" não tem 31 dias!");
		return false;
	}

	// checa se o ano é bissexto
	if (month == 2) { 
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (	day>29 || (day==29 && !isleap)) {
			alert("Fevereiro " + year + " não tem " + day + " dias!");
			return false;
		}
	}

	// checa se o ano é válido
	if (year < 1900 || year > 2100) {
		alert("O ano indicado é inválido!");
		return false;
	}
	
	return true;
		
}


//	Verifica se o string tem algum dígito que não seja número
function EhNumero (Valor) 
{
	var Numeros="1234567890";
	for (Cont=0; Cont < Valor.length; Cont++) 
	{
		TempChar = Valor.substring(Cont,Cont+1);
		if	(Numeros.indexOf(TempChar,0) == -1)	return (false);
	}
	return (true);
}


//	Solicita a confirmação do usuário antes de submeter um formulário
function ConfirmaSubmissao(sPergunta, formulario) 
{
	var bResposta = window.confirm(sPergunta);
	if (bResposta) 
	{
		formulario.submit();
	}
}

// Confirma
function confirma(mensagem, link)
{ 
	bresposta = confirm(mensagem);
	if (bresposta == true)
	{
	window.location.href = link;
	} 
}

//	Solicita a confirmação do usuário antes de submeter um formulário
function ConfirmaSubmissao(sPergunta, formulario) 
{
	var bResposta = window.confirm(sPergunta);
	if (bResposta) 
	{
		formulario.submit();
	}
}


//	Solicita a confirmação do usuário antes de submeter um formulário Envio Arquivo Local
function ConfirmaLocal(sPergunta, formulario,Acao) 
{
	var bResposta = window.confirm(sPergunta);
	if (bResposta) 
	{
		formulario.action= Acao + '&Parametro=Sim';
		formulario.submit();
	}else{
		formulario.action= Acao + '&Parametro=Nao';
		formulario.submit();
	
	}
}
function validaHora(valor) {
alert(valor)
 var time = valor.match(/\b(\d|)\d\:\d\d\b/);
 return (time==null ? false :  true);
}

function ValidaRadio(campo, descricao) 
{
var x=0
	for (i=0;i<campo.length;i++)
	{ 
		if(campo(i).checked) 
		{
			x++
		}
	}
	if (x==0) 
	{	
		alert("O campo [" + descricao + "] tem preenchimento obrigatório!!!");		
		return false;
	}

return true;
	
}



//TIRA O FORMATAÇÃO DO CNPJ OU CPF
function substcnpj_cpf(cnpj_cpf)
{
		
	if(cnpj_cpf.length==11)
		cnpj_cpf = cnpj_cpf.replace('.', '').replace('.', '').replace('-', '')  //CPF
	else
		cnpj_cpf = cnpj_cpf.replace('.', '').replace('.', '').replace('/', '').replace('-', '') //CNPJ
	
	return cnpj_cpf;
}


//Função que permitirá somente a entrada de valores numéricos
//no campo tratato, desabilitando os demais dígitos.
function isNumeros(TeclaPressionada)
{	
	if(TeclaPressionada.keyCode < 48 || TeclaPressionada.keyCode > 57)
	{
		TeclaPressionada.keyCode=0
	}
}


function AbreDetalhes(Select)
{
window.open('/sicap/comum/Display.asp?Id=' + Select.value ,'Display', 'HEIGHT=600,scrollbars=yes,WIDTH=800');

}
