<!--
//---------------------------------------------------------------------------------------
//--- Observe o exemplo de uma chamada onSubmit:
//---onSubmit="return fnVerifica(this,'datanascimento','Data de Nascimento','data');"
//---------------------------------------------------------------------------------------

var blnHidden;

function fnValidaCampo(obj,desc,tipovalidacao)
{var blnValido;
	
	blnHidden = false;
	if ( typeof obj == 'object' )
	{
		blnHidden = (obj.type == 'hidden');
	}

 switch (tipovalidacao)
 {
	case 'text'			:
	case 'textarea'		:
	case 'password'		:blnValido=fnVerificaTxtVazio(obj,desc);break;
	case 'select'		:blnValido=fnVerificaCombo(obj,desc);break;
	case 'checkbox'		:
	case 'radio'		:blnValido=fnVerificaRadio(obj,desc);break;
	case 'data'			:blnValido=fnVerificaData(obj,desc);break;			//dd/mm/aaaa
	case 'data2'		:blnValido=fnVerificaData2(obj,desc);break;			//dd/mm/aaaa
	case 'dia'			:blnValido=fnVerificaDia(obj,desc);break;			//01-31
	case 'mes'			:blnValido=fnVerificaMes(obj,desc);break;			//01-12
	case 'ano'			:blnValido=fnVerificaAno(obj,desc);break;			//0000-9999
	//case 'hora24HHMM'	:blnValido=fnVerificaHora24HHMM(obj,desc);break;	//00:00-23:59
	//case 'hora12HHMM'	:blnValido=fnVerificaHora12HHMM(obj,desc);break;	//01:00-12:59
	case 'hora24'		:blnValido=fnVerificaHora24(obj,desc);break;		//00-23
	case 'hora12'		:blnValido=fnVerificaHora12(obj,desc);break;		//01-12
	case 'minuto'		:
	case 'segundo'		:blnValido=fnVerificaMinutoSegundo(obj,desc);break; //00-59
	case 'email'		:blnValido=fnVerificaEmail(obj,desc);break;
	case 'cgc/cpf'		:blnValido=fnValidaCGCCPF(obj,desc);break;			//cgc ou cpf
	case 'cpf'			:blnValido=fnValidaCPF(obj,desc);break;				//cpf
	case 'cgc'			:blnValido=fnValidaCGC(obj,desc);break;				//cgc
	case 'numero'		:blnValido=fnSoNumero(obj,desc);break;
	case 'decimal'		:blnValido=fnDecimal(obj,desc);break;
	case 'dataNascimento' :blnValido=fnVerificaDataNascimento(obj);break;
	
 }
return blnValido;
}
// --------------------------------------------------------
function meuTrim(strTexto)
{ while (strTexto.charAt(0) == " ")
        strTexto = strTexto.substring(1,strTexto.length);
 while (strTexto.charAt(strTexto.length - 1) == " ")
        strTexto = strTexto.substring(0,strTexto.length - 1);
 return strTexto;
}
// --------------------------------------------------------
function fnSoNumero(obj,desc)
{var i,s1,
     blnValido = true,
     s = obj.value;
	
	if (meuTrim(s)=='')
		blnValido = false;
	
     if (blnValido)
		for (i=0;i<s.length;i++)
		{s1=s.substr(i,1);
 		 if (s1 < '0' || s1 > '9')
			blnValido = false;
		}

     if (!blnValido)
	{window.alert ('O campo ' + desc + ' deve ser preenchido somente com números!');
	 if (!blnHidden)
		obj.focus();
	}

 return blnValido;
}
// --------------------------------------------------------
function fnDecimal(obj,desc)
{
	var strDecimal = /^([0-9]+(,[0-9]{1,2})?)$/;
	var strPadraoDecimal = new RegExp( strDecimal );
	obj.value = meuTrim( obj.value );
	strDecimalFornecido = obj.value;
	if ( !strPadraoDecimal.test( strDecimalFornecido ) )
	{window.alert ( 'Verifique o campo ' + desc + '!' );
	 if ( !blnHidden )
		obj.focus( );
	 return false;
	};
return true;
}
// --------------------------------------------------------
function fnVerificaDia( obj,desc )
{
	var strDia = /^(([0]?[1-9])|([12][0-9])|([3][01]))$/;
	var strPadraoDia = new RegExp( strDia );
	obj.value = meuTrim( obj.value );
	strDiaFornecido = obj.value;
	if ( !strPadraoDia.test( strDiaFornecido ) )
	{window.alert ( 'Verifique o campo ' + desc + '!' );
	 if ( !blnHidden )
		obj.focus( );
	 return false;
	};
	
return true;
}
// --------------------------------------------------------
function fnVerificaMes( obj,desc )
{
	var strMes = /^(([0]?[1-9])|([1][012]))$/;
	var strPadraoMes = new RegExp( strMes );
	obj.value = meuTrim( obj.value );
	strMesFornecido = obj.value;
	if ( !strPadraoMes.test( strMesFornecido ) )
	{window.alert ( 'Verifique o campo ' + desc + '!' );
	 if ( !blnHidden )
		obj.focus( );
	 return false;
	};
return true;
}
// --------------------------------------------------------
function fnVerificaAno( obj,desc )
{
	var strAno = /^([0-9][0-9][0-9][0-9])$/;
	var strPadraoAno = new RegExp( strAno );
	obj.value = meuTrim( obj.value );
	strAnoFornecido = obj.value;
	if ( !strPadraoAno.test( strAnoFornecido ) )
	{window.alert ( 'Verifique o campo ' + desc + '!' );
	 if ( !blnHidden )
		obj.focus( );
	 return false;
	};
return true;
}
// --------------------------------------------------------
function fnVerificaHora12(obj,desc)
{
	var strHora = /^(([0]?[1-9])|([1][0-2]))$/;
	var strPadraoHora = new RegExp( strHora );
	obj.value = meuTrim( obj.value );
	strHoraFornecida = obj.value;
	if ( !strPadraoHora.test( strHoraFornecida ) )
	{window.alert ( 'Verifique o campo ' + desc + '!' );
	 if ( !blnHidden )
		obj.focus( );
	 return false;
	};
	
return true;
}
// --------------------------------------------------------
function fnVerificaHora24(obj,desc)
{
	var strHora = /^(([01]?[0-9])|([2][0-3]))$/;
	var strPadraoHora = new RegExp( strHora );
	obj.value = meuTrim( obj.value );
	strHoraFornecida = obj.value;
	if ( !strPadraoHora.test( strHoraFornecida ) )
	{window.alert ( 'Verifique o campo ' + desc + '!' );
	 if ( !blnHidden )
		obj.focus( );
	 return false;
	};

return true;
}
// --------------------------------------------------------
function fnVerificaMinutoSegundo( obj, desc )
{
	var strMinuto = /^([0-5]?[0-9])$/;
	var strPadraoMinuto = new RegExp( strMinuto );
	obj.value = meuTrim( obj.value );
	strHoraFornecida = obj.value;
	if ( !strPadraoMinuto.test( strHoraFornecida ) )
	{window.alert ( 'Verifique o campo ' + desc + '!' );
	 if ( !blnHidden )
		obj.focus( );
	 return false;
	};
	
return true;
}
// --------------------------------------------------------
function fnVerificaTxtVazio(obj,desc)
{	if (meuTrim(obj.value) == '')
	{window.alert ('O campo ' + desc + ' deve ser preenchido!');
	 if (!blnHidden)
		obj.focus();
	 return false;
	}
return true;
}
// --------------------------------------------------------
function fnVerificaCombo(obj,desc)
{	if (obj.options[obj.selectedIndex].value == '')
	{window.alert ('Faça uma escolha no campo ' + desc + '!');
	 if (!blnHidden)
		obj.focus();
	 return false;
	}
return true;
}
// --------------------------------------------------------
function fnVerificaRadio(obj,desc)
{var count,blnChecked,i=obj.length;
	blnChecked=false;
	for (count=0;count<i;count++)
	{if (obj[count].checked)
	 {blnChecked=true;}}
	if (!blnChecked)
	{window.alert ('Faça uma escolha no campo ' + desc + '!');
	 obj[0].focus();}
return blnChecked;
}
// --------------------------------------------------------

function fnVerificaDataNascimento(obj){

if (obj.value!="")
{
    erro=0;
    hoje = new Date();
    anoAtual = hoje.getFullYear();
    mesAtual = hoje.getMonth();
    diaAtual = hoje.getDay();
    barras = obj.value.split("/");
    if (barras.length == 3)
    {
        dia = barras[0];
        mes = barras[1];
        ano = barras[2];
        idade = anoAtual - ano;
        if(mes >= mesAtual){
        	idade--;
        }
        /*if(mes == mesAtual && diaAtual < dia){
        	idade--;
        }*/
        resultado = ((!isNaN(dia) && (dia > 0) && (dia < 32)) && (!isNaN(mes) && (mes > 0) && (mes < 13)) && (!isNaN(ano) && (ano.length == 4) && ((ano <= anoAtual && ano >= 1900 && ano <= anoAtual - 18) && idade >= 18)));
        if (!resultado)
        {
        	window.alert(idade+"Data de Nascimento inválida!");
            obj.focus();
            return false;
        }
     } 
     else
     {
         window.alert(idade+"Data de Nascimento inválida!");
         obj.focus();
         return false;
     }
return true;
}

}

//--------------------------------------------------------
function fnVerificaData(obj,desc)
{var strDataFornecida;
 var DiasPorMes = new Array (31,29,31,30,31,30,31,31,30,31,30,31);
	if (meuTrim(obj.value) == '')
	{window.alert ('O campo ' + desc + ' deve ser preenchido!');
	 if (!blnHidden)
		obj.focus();
	 return false;}
	strDataFornecida = obj.value;
	var strDataDiaMesAno=/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
	var strPadraoData=new RegExp(strDataDiaMesAno);
	var arrVetorCompara=strDataFornecida.match(strPadraoData);
	if (arrVetorCompara==null) 
	{window.alert ('Data inválida! Verifique o formato dd/mm/aaaa.');
	 if (!blnHidden)
		obj.focus();
	 return false;}
	var strDia=arrVetorCompara[1];
	var strMes=arrVetorCompara[2];
	var strAno=arrVetorCompara[3];
	if (strMes>12 || strMes<1)
	{window.alert ('Mes inválido! Verifique o mes.');
	 if (!blnHidden)
		obj.focus();
	 return false;}
	if (strDia > DiasPorMes[strMes - 1] || strDia < 1)
	{window.alert ('Dia inválido! Verifique o dia.');
	 if (!blnHidden)
		obj.focus();
	 return false;}
	if (strMes == 2)
	{if (strDia == 29)
		if (!(strAno % 4 == 0 && (strAno % 100 != 0 || strAno % 400 == 0)))
		{window.alert ('Dia inválido! Verifique o dia.');
			if (!blnHidden)
				obj.focus();
			return false;}}
	// Se chegou até aqui, a data eh valida
           return true;
}
// --------------------------------------------------------
//--Para testar a data em campos separados, passar o objeto dia
function fnVerificaData2( objDia, desc ) 
{var i, strMes, strAno, strDia;
 var DiasPorMes = new Array ( 31,29,31,30,31,30,31,31,30,31,30,31 );

	var frm = objDia.form;

	var strNomeObjDia = objDia.name;
	var strNomeObjMes = strNomeObjDia.replace( 'Dia','Mes' );
	var strNomeObjAno = strNomeObjDia.replace( 'Dia','Ano' );

	var objMes = eval( 'document.' + frm.name + '.' + strNomeObjMes );
	var objAno = eval( 'document.' + frm.name + '.' + strNomeObjAno );

	blnValido = fnVerificaDia( objDia, desc );

	if ( blnValido )
		blnValido = fnVerificaMes( objMes, desc );

	if ( blnValido )
		blnValido = fnVerificaAno( objAno, desc );

	if ( blnValido )
	{	strDia = objDia.value;
		strMes = objMes.value;
		strAno = objAno.value;
	
		if ( strDia > DiasPorMes[strMes - 1] )
		{
		 window.alert ( 'Dia inválido! Verifique o campo ' + desc  );
		 if ( !blnHidden )
			objDia.focus( );
		 return false;
		}

		if ( strMes == 2 )
		 if ( strDia == 29 )
			if ( !( strAno % 4 == 0 && ( strAno % 100 != 0 || strAno % 400 == 0 ) ) )
			{
			 window.alert ( 'Dia inválido! Verifique o campo ' + desc );
				if ( !blnHidden )
					objDia.focus( );
				return false;
			}

	}

	return blnValido;
}
// --------------------------------------------------------
function fnVerificaEmail(obj,desc)
{	if (meuTrim(obj.value) == '')
	{window.alert ('O campo ' + desc + ' deve ser preenchido!');
	 if (!blnHidden)
		obj.focus();
	 return false;}
    obj.value = meuTrim(obj.value)
    if (!isEmail(obj.value))
	{if (!blnHidden)
		obj.focus();
	 return false;}
return true;
}
// --------------------------------------------------------
function isEmail(strEnderecoEmail) {

	for (i=0;i<strEnderecoEmail.length;i++)
		if (strEnderecoEmail.substr(i,1)==' ')
			{window.alert('O e-mail não pode conter espaços!')
			 return false;
			}

	// O seguinte modelo eh usado para verificar se o endereco
	// "bate" com o formato usuario@dominio. Tambem eh usado para separar 
	// o usuario do dominio 
	var strPadraoEmail=/^(.+)@(.+)$/;
	// Esta string representa o padrao para comparacao de todos os caracteres
   	// especiais. Nao eh desejavel ter caracteres especiais no endereco. 
   	// These characters include ( ) < > @ , ; : \ " . [ ]
	var strCaracteresEspeciais="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
	// Esta string representa a faixa de caracteres validos range para dominio e usuario. 
	var strCaracteresValidos="\[^\\s" + strCaracteresEspeciais + "\]";
	// Faixa de caracteres permitidos para o primeiro caracter para um 
	// usuario e dominio validos.
	var strPrimeirosCaracts=strCaracteresValidos;
	// Sera aplicado se o "usuario" estiver entre aspas
	// Ex. "jiminy cricket"@disney.com - eh um endereco valido.
	var strUsuarioAspas="(\"[^\"]*\")";
	// Aplicado para enderecos que utilizam o endereco IP ao inves do nome do dominio.
	// Ex joe@[123.124.233.4] - eh um endereco valido.
	// NOTA: Os colchetes sao obrigatorios
	var strPadraoDominioIP=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	// Atomos - serie de caracteres nao-especiais
	var strAtomos="(" + strPrimeirosCaracts + strCaracteresValidos + "*" + ")";
	// Representacao de uma palavra em um nome de usuario tipico.
	// Ex.: em joao.maria@qualquer.com, joao e maria sao palavras.
	// Basicamente, uma palavra é um atomo ou uma string entre aspas.
	var strPalavra="(" + strAtomos + "|" + strUsuarioAspas + ")";
	// Padrao que descreve a estrutura do usuario
	var strPadraousuario=new RegExp("^" + strPalavra + "(\\." + strPalavra + ")*$");
	// Padrao que descreve a estrutura de um dominio simbolico (que nao seja strPadraoDominioIP).
	var strPadraoDominio=new RegExp("^" + strAtomos + "(\\." + strAtomos +")*$");
	// Inicio da verificacao do endereco de email
	// Inicialmente quebra o padrao usuario@dominio em diferentes partes para
	// facilitar sua analise
	var arrVetorCompara=strEnderecoEmail.match(strPadraoEmail);
	if (arrVetorCompara==null) {
		// Muitos ou nenhum "@"; basicamente, este endereco nao
		// "bate" com o molde geral de um endereco de mail valido.
		window.alert('Endereço de email pode estar incorreto (verifique \'@\' e \'.\'s)');
		return false;}
	var strUsuario=arrVetorCompara[1];
	var strDominio=arrVetorCompara[2];
	// Verifica se "usuario" eh valido 
	if (strUsuario.match(strPadraousuario)==null) {
    		// usuario nao valido
		window.alert('Endereço de email pode estar incorreto (verifique nome do usuário).');
		return false;}
	// Se o endereco contiver um endereco IP ao inves do nome simbolico do dominio,
	// verifica se é um endereco IP valido
	var arrEnderecoIP=strDominio.match(strPadraoDominioIP);
	if (arrEnderecoIP!=null) {
		// Eh um Enderdeco IP
		for (var i=1;i<=4;i++) {
			if (arrEnderecoIP[i]>255) {
				window.alert('Endereço de email pode estar incorreto (verifique o Endereco IP).');
				return false;}
		}
	}
	// Se o endereco contiver um dominio com o nome simbolico
	var arrDominio=strDominio.match(strPadraoDominio);
	if (arrDominio==null) {
		window.alert('Endereço de email pode estar incorreto (verifique o Dominio).');
		return false;}
	// O nome do dominio esta correto
	// Agora sera testado o finao do endereco: palavra de 03 letras (como edu, com, gov, etc) 
	// ou palavra de 02 letras representando o pais (como br, uk, nt, etc)
	// Se existir o codigo do pais no fim do endereco, o dominio completo deve 
	// incluir o nome do host e sua categoria (Ex: host.co.uk ou host.pub.nl).
	// Se o final for .com ou outra coisa, tenha certeza que existe o hostname.
	// Agora precisamos quebrar o dominio para pegar seus atomos e consisti-los
	var strPadraoAtomo=new RegExp(strAtomos,'g');
	var arrDom=strDominio.match(strPadraoAtomo);
	var len=arrDom.length;
	if (arrDom[arrDom.length-1].length<2 || arrDom[arrDom.length-1].length>3) {
		// O endereco deve terminar com uma palavra de 02 ou 03 palavras
		window.alert('Endereço de email pode estar incorreto (verifique codigo do pais ou o tipo de dominio).');
		return false;}
	// Se terminar com um codigo de pais, verificar se os dois ultimos atomos
	// que o precedem (representando o host e a categoria (com, gov, etc.))
	// if (arrDom[arrDom.length-1].length==2 && len<3) {
	//	var errStr="O endereço de e-mail termina com dois caracteres, representando um código de país."
	//	errStr+=" O Código do país deve ser precedido pelo nome do servidor e sua categoria (como com, co, pub, pu, etc.)"
	//	alert(errStr)
	//	return false
	// }
	// Se terminar com .com, .gov, etc., verificamos se tem o nome do host.
	if (arrDom[arrDom.length-1].length==3 && len<2) {
		var errStr='O Endereço de e-mail necessita do nome do Host!';
		window.alert(errStr);
		return false;}
	
		// Se chegou até aqui, o email eh valido
	return true;
}
// --------------------------------------------------------
function fnValidaCGCCPF(obj,desc)
{var blnValido=true;
     blnValido=fnVerificaTxtVazio(obj,desc); 
     
     if (blnValido)
     {s = obj.value;
      // checa se é cpf
      if (s.length == 11)
      {blnValido=fnValidaCPF(obj,desc);}
      // checa se é cgc
      else if (s.length == 14) 
      {blnValido=fnValidaCGC(obj,desc);}
      else 
	{alert(desc + ' é inválido!');
	 if (!blnHidden)
		obj.focus();
	 blnValido=false;
	}
      }
return blnValido;
}
// --------------------------------------------------------
function fnValidaCPF(obj,desc)
{	var i,blnValido=true,c,dv,d1;

	if (!fnSoNumero(obj,desc))
		return false;
	else
	{s=obj.value;
	 c = s.substr(0,9);
	 dv = s.substr(9,2);
	 d1 = 0;
         if (s.length == 11)
         {for (i = 0; i < 9; i++)
	     {d1 += c.charAt(i)*(10-i);}
         }
	 else 
	    blnValido=false;
         if (d1 == 0) 
	    blnValido=false;
	}

	if (blnValido)
	{d1 = 11 - (d1 % 11);
	 if (d1 > 9) 
		d1 = 0;
	 if (dv.charAt(0) != d1)
		{blnValido=false;}
	}

	if (blnValido)
	{d1 *= 2;
	 for (i = 0; i < 9; i++)
		{d1 += c.charAt(i)*(11-i);}
	 d1 = 11 - (d1 % 11);
	 if (d1 > 9) 
		d1 = 0;
	 if (dv.charAt(1) != d1)
		{blnValido=false;}
	}

	if (!blnValido)
        {window.alert (desc + ' é inválido!');
		if (!blnHidden)
			obj.focus();
        }

    return blnValido;
}
// --------------------------------------------------------
function fnValidaCGC(obj,desc)
{	var i,blnValido=true,c,dv,d1;

	if (!fnSoNumero(obj,desc))
		return false;
	else
	{s = obj.value;
         if (s.length == 14)
         {
	  c = s.substr(0,12);
	  dv = s.substr(12,2);
	  d1 = 0;
	  for (i = 0; i < 12; i++)
	 	{d1 += c.charAt(11-i)*(2+(i % 8));}
          if (d1 == 0) 
	     blnValido=false;
	 }
	 else 
	     blnValido=false;
        }

	if (blnValido)
	{d1 = 11 - (d1 % 11);
	 if (d1 > 9) 
		d1 = 0;
	 if (dv.charAt(0) != d1)
		{blnValido=false;}
	}

	if (blnValido)
	{d1 *= 2;
	 for (i = 0; i < 12; i++)
		{d1 += c.charAt(11-i)*(2+((i+1) % 8));}
	 d1 = 11 - (d1 % 11);
	 if (d1 > 9) 
		d1 = 0;
	 if (dv.charAt(1) != d1)
		{blnValido = false;}
	}

	if (!blnValido)
        {window.alert (desc + ' é inválido!');
		if (!blnHidden)
			obj.focus();
        }
    return blnValido;
}
// --------------------------------------------------------
function fnVerifica(frm)
{var totalArgumentos=fnVerifica.arguments.length,
	 args=fnVerifica.arguments,
	 obj,blnValido=true,
	 tipovalidacao,desc;
 if (totalArgumentos >= 1)
 {for (count=1;count<totalArgumentos;count+=3)
  {	obj=eval('document.'+frm.name+'.'+args[count]);
	desc=args[count+1];
	tipovalidacao=args[count+2];
	if (!(blnValido=fnValidaCampo(obj,desc,tipovalidacao))) break;}}
 return blnValido;
}
// --------------------------------------------------------
//---	CHECAGEM DE EXCLUSÃO
//--- Exemplo: onClick="return fnExclusao(this,'chkExclui_x','exclui.asp',['tp=exc']);"
// --------------------------------------------------------
function fnExclusao(frm,obj,pag,param)
{
  var i;
  var sel = 0;
  
  for( i = 0; i < frm.elements.length; i++ )
  {
    if( frm.elements[ i ].name.substring( 0, obj.length ) == obj ) 
		{
      if( frm.elements[ i ].checked ) 
			{
        sel++;
			}
		}
  }
  
  if( sel == 0 )
  {
    alert( "Selecione os itens a serem excluídos." );
    return false;
  }
  
  if( confirm( "Deseja realmente excluir todos os itens selecionados ?\nQuantidade de itens selecionados: " + sel ) )
  {
		if ( param == '' || param == null ) {
	    frm.action = pag;
		}
		else {
	    frm.action = pag + '?' + param;
		}
    frm.method = 'POST';
    frm.submit( );
  } 
	else {
		return false;
	}
}
//-->
