/*
###############################################################
# Versão: 2.0
# Data  : 23-04-2004
#
# updates:
# 23-04-2004 Colocação de mais um parâmetro para a descrição
#            da legenda do campo para vir no alert
# 22-07-2004 Correção para radio ser crossbrowser
###############################################################
modo de usar : no onSubmit passar legenda:nomedocampo=tipo ou legenda:nomedocampo=tipo=itens
tipos possiveis :
vazio
email
numero
intervalo=valorinicial=valorfinal
cep=cep
onSubmit="return valida('form1','Nome:nome=vazio','E-mail:email=email','Número:numero=numero','Modelo:modelo=radio=2','Idade:idade=intervalo=10=20','Cep:cep=cep');"
*/

// funcArgs : funcao para listar os nomes dos argumentos da função em um array
function funcArgs( func )
{
	var p = /function[^(]*\(([^)]*)\)/.exec( func + "" );
	if( p && p[1] )
	{
		p[1]=p[1].replace( /\s/g, "" );
		return p[1].split( "," );
	} else return null;
}


function campo_numero( formulario, campo, label )
{
	valor = 'document.' + formulario + '.' + campo + '.value';
	foco  = 'document.' + formulario + '.' + campo + '.focus()';
	if ( isNaN( eval( valor ) ) )
	{ 
		alert( "O campo " + label + " deve ser um número" );
		eval( foco );
		return false;
	}	
	return true;
}


// campo_vazio : funcao para testar campo text vazio
// formulario = nome do form
// campo      = nome do campo tipo text
// tamanho    = document.formulario.campo.value.length
// foco       = document.formulario.campo.focus()

function campo_vazio( formulario, campo, label )
{ 
	tamanho = 'document.' + formulario + '.' + campo + '.value.length';
	foco    = 'document.' + formulario + '.' + campo + '.focus()';
	 
	if ( eval( tamanho ) < 1 )
	{
		//status = ' > > > > > > ' + "O campo " + campo + " é obrigatório e deve estar preenchido";
		alert( "O campo " + label + " é obrigatório e deve estar preenchido" );
		eval( foco );
		return false;
	}
	return true;
}


// email_valido : funcao para testar campo text de email invalido
// formulario = nome do form
// campo      = nome do campo tipo text
// tamanho    = document.formulario.campo.length
// valor      = document.formulario.campo.value
// foco       = document.formulario.campo.focus()

function email_valido( formulario, campo, label )
{ 
	tamanho = 'document.' + formulario + '.' + campo + '.value.length';
	valor   = 'document.' + formulario + '.' + campo + '.value';
	foco    = 'document.' + formulario + '.' + campo + '.focus()';

	if( eval( tamanho ) >= 1 )
	{

		var vExp = /^[a-zA-Z][a-zA-Z0-9_\-.]+@[a-zA-Z][a-zA-Z0-9_\-.]+\.[a-zA-Z]+/;
		var vEmail = eval( valor );
		
		if( vEmail.match( vExp ) == null )
		{
			//status = 'O campo ' + campo + ' não é válido';
			alert('O campo ' + label + ' deve conter um e-mail válido');
			eval( foco );
			return false;
		}								
	}
	return true;
}


// radio_valido : funcao para testar campo tipo radio - clicar pelo menos um
// formulario = nome do form
// campo      = nome do array de radio
// opcoes     = numero de opcoes para o mesmo array de radio
// marcado    = ( (!campo[0].checked) && (!campo[n].checked) )
// foco       = document.formulario.campo[0].focus()

function radio_valido( formulario, campo, label, opcoes )
{ 
	marcado = '( ';
	for ( i=0; i < opcoes ; i++) {	
		marcado+= '(! ' + 'document.'+ formulario + '.' + campo + '[' + i + '].checked) ';
		if ( i != opcoes-1 ) { marcado += '&& '; }		
	}
	marcado+= ' )';

if ( eval( marcado ) )
	{
		alert( "Você não informou a opção " + label + ". Selecione pelo menos uma." );
		foco = ' document.' + formulario + '.' + campo + '[0].focus()';
		eval( foco );
		return false;
	}
	return true;
}


function intervalo_valido( formulario, campo, label, inicio, fim )
{
	valor   = 'document.' + formulario + '.' + campo + '.value';
	foco    = 'document.' + formulario + '.' + campo + '.focus()';

	if ( ( eval( valor ) < inicio ) || ( eval( valor) > fim ) )
	{
		alert( "O campo " + label + " precisa ser um número entre " + inicio + " e " + fim );
		eval( foco );
		return false;	
	}
	return true;
}


function cep_valido( formulario, campo, label )
{ 
	caminho   = 'document.' + formulario + '.' + campo + '.value';
	foco      = 'document.' + formulario + '.' + campo + '.focus()';
	tamanho   = 'document.' + formulario + '.' + campo + '.value.length';
	valor     = eval( caminho ); //alert(valor);
	
	tam = parseInt( eval( tamanho ),10 ); //alert(tam);
	for( i=0; i<tam; i++ )
	{	
		descricao = eval(valor.charAt(i)); //alert(descricao);
		if( ( descricao >= '0' && descricao <= '9' ) || ( i == 5 && descricao=='-' ) )
		
			//inclusao das barras.
			if ( ( i==4 ) && ( tam==5 ) )
			{
				{ //alert('z');
				eval( valor ) = eval( valor.substring( 0, i+1 ) + '-' );
				i = i + 1;
			}

		}
		else
		{
			//alert("CEP inválido");
			valor = valor.substring( 0, tam-1 );
			eval( foco );
			return false;		
		}		
	}
	return true;
}


function VerificaCEP( valor )
{ //alert( valor );
	var tam, descricao ,i;
	var grupo1, grupo2, grupo3, grupodv;
	var obj = valor.value;//alert(obj);
	tam = parseInt(obj.length,10 );//alert(tam);
	for( i=0; i<tam; i++ )
	{	
		descricao = obj.charAt(i)
		//alert( 'desc' + descricao );
		if( ( descricao >= '0' && descricao <= '9' ) || ( i==5 && descricao == '-' ) )
		{
			//inclusao das barras.
			if( ( i==4 ) && ( tam==5 ) )
			{
				valor.value = obj.substring( 0, i+1 ) + '-';
				i = i + 1;
			}

		}
			else
		{
			alert( "CEP - Preenchimento inválido." );
			valor.value = obj.substring( 0,tam-1 )
			valor.focus();
			return false;		
		}		
	}
	return true;
}





// valida : funcao para validar no onSubmit do form recebendo o nome do form, e o nome dos campos=valor dos campos, nesta ordem
// >>>>>>>> Ao enviar submit, ir campo a campo, parando em cada foco, para receber o preenchimento e aguardar novo submit
// >>>>>>>> Não está funcionando. Ao enviar submit, vai para o primeiro campo vazio, e roda todo o loop até o fim.
//
// args = array com nome dos argumentos de valida()
// formx = nome do formulario ( primeiro argumento )
// partes = array de duas partes dos argumentos campo=valor
// chamafuncao = campo_vazio( 'formulario', 'campo=valor' );

function valida()
{ 
	args = valida.arguments; 	
	formx = args[0];
		
	for ( j=1; j < (args.length); j++)
	{ 
		todo   = args[j].split(":");
		label  = todo[0];
		
		partes = todo[1].split("=");
		campox = partes[0];			
		
		if ( partes[1] == 'vazio' )
		{			
			chamafuncao = "campo_vazio( '" + formx + "', '" + campox + "', '" + label + "' )";
			
			if (! eval( chamafuncao ) ) { return false; } 
		}
		
		if ( partes[1] == 'email' )
		{ 
			chamafuncao = "campo_vazio( '" + formx + "', '" + campox + "', '" + label + "' )";
			if (! eval( chamafuncao ) ) { return false; }
			chamafuncao = "email_valido( '" + formx + "', '" + campox + "', '" + label + "' )";
			if (! eval( chamafuncao ) ) { return false; }
		}
		
		if ( partes[1] == 'numero' )
		{ 
			chamafuncao = "campo_vazio( '" + formx + "', '" + campox + "', '" + label + "' )";
			if (! eval( chamafuncao ) ) { return false; }
			chamafuncao = "campo_numero( '" + formx + "', '" + campox + "', '" + label + "' )";
			if (! eval( chamafuncao ) ) { return false; }			 			 
		}
		
		if ( partes[1] == 'radio' )
		{ 
			chamafuncao = "radio_valido( '" + formx + "', '" + campox + "', '" + label + "', '" + partes[2] + "' )" ; 
			if (! eval( chamafuncao ) ) { return false; }
		}
		
		if ( partes[1] == 'intervalo' )
		{
			chamafuncao = "campo_vazio( '" + formx + "', '" + campox + "', '" + label + "' )";
			if (! eval(chamafuncao) ) { return false; }
			chamafuncao = "campo_numero( '" + formx + "', '" + campox + "', '" + label + "' )"; 
			if (! eval(chamafuncao) ) { return false; }					 
			chamafuncao = "intervalo_valido( '" + formx + "', '" + campox + "', '" + label + "', '" + partes[2] + "', '" + partes[3] + "' )" ; 
			if (! eval(chamafuncao) ) { return false; }
		}

		if ( partes[1] == 'cep' )
		{
			chamafuncao = "campo_vazio( '" + formx + "', '" + campox + "', '" + label + "' )";
			if (! eval( chamafuncao ) ) { return false; }
			chamafuncao = "campo_numero( '" + formx + "', '" + campox + "', '" + label + "' )";
			if (! eval( chamafuncao ) ) { return false; }
			//if (! VerificaCEP( eval('document.'+formx+'.'+campox) ) ) { return false; }					 
			chamafuncao = "cep_valido( '" + formx + "', '" + campox + "', '" + label + "' )";
			if (! eval( chamafuncao ) ) { return false; }
		}						
	}
	return true;
}
/*
function funcao_recursiva (elemento) { 
     // FAZER COISAS 
     alert(elemento.tagName); 
     // RECURSIVIDADE 
     var next = elemento.firstChild; 
     while (next) { 
          funcao_recursiva (next); 
                next = next.nextSibling; 
        }; 
}; 
 
funcao_recursiva(document.forms[0]);
*/