<!--
//---onSubmit="return fnVerifica(this,'datanascimento','Data de Nascimento','data');"

function fnValidaCampo(obj,desc,tipovalidacao)
{var blnValido;
 switch (tipovalidacao)
 {
	case 'text'    :
	case 'textarea':
	case 'password':blnValido=fnVerificaTxtVazio(obj,desc);break;
	case 'select'  :blnValido=fnVerificaCombo(obj,desc);break;
	case 'radio'   :blnValido=fnVerificaRadio(obj,desc);break;
	case 'data'    :blnValido=fnVerificaData(obj,desc);break;
	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;
 }
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!');
	 obj.focus();
	}

 return blnValido;
}
// --------------------------------------------------------
function fnVerificaTxtVazio(obj,desc)
{	if (meuTrim(obj.value) == '')
	{window.alert ('O campo ' + desc + ' deve ser preenchido!');
	 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 + '!');
	 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 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!');
	 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.');
	 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.');
	 obj.focus();
	 return false;}
	if (strDia > DiasPorMes[strMes - 1] || strDia < 1)
	{window.alert ('Dia inválido! Verifique o dia.');
	 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.');
			obj.focus();
			return false;}}
	// Se chegou até aqui, a data eh valida
           return true;
}
// --------------------------------------------------------
function fnVerificaEmail(obj,desc)
{	if (meuTrim(obj.value) == '')
	{window.alert ('O campo ' + desc + ' deve ser preenchido!');
	 obj.focus();
	 return false;}
    obj.value = meuTrim(obj.value)
    if (!isEmail(obj.value))
	{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!');
	 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!');
         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!');
         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;
}
//-->
