function validartipos(fr)
{
	//Define as variáveis utilizadas na função
	var resp;
	var a=0;
	var temp;
	var s;
	resp=true;
	//Limpa o objeto de erro
	erro.innerHTML="";
	// Faz o laço através de todos os elementos do form
	for(a=0;a<fr.elements.length;a++)
	{ 
		if (fr.elements[a].Tipo=="integer")
		{
			// Se o tipo for inteiro, faz a validação de valores
	    	s=fr.elements[a].value;
	    	s=limparstring(s);
			if (s.length>0) 
			{
				// A validação só é feita se o campo for obrigatório OU se estiver preenchido
	  			temp=fr.elements[a].value;
				// Utiliza a função isNaN para verificar se é um número e parseInt para verificar se é inteiro
	  			if (isNaN(parseInt(temp)))
	   			{ 
					resp=false;
	     			erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " deve conter um número inteiro<br>";
	     		}
			}
		}
		if (fr.elements[a].Tipo=="float") 
		{
			//Se o tipo for Float faz a validação
	    	s=fr.elements[a].value;
	    	s=limparstring(s);
			if (s.length>0) 
			{
				// A validação só é feita se o campo for obrigatório OU se estiver preenchido
	  			temp=fr.elements[a].value;
				//Utiliza a função isNaN para verificar se é um número e parseFloat para verificar se é Float
      			if (isNaN(parseFloat(temp)) || parseFloat(temp)<=0)
	   			{ 
					resp=false;
	     			erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " deve conter um número real positivo<br>";
	     		}
			}
		}
		if (fr.elements[a].Tipo=="date") 
		{
			//Se o tipo for date faz a validação
	    	s=fr.elements[a].value;
	    	s=limparstring(s);
			if (s.length>0) 
			{
				resp= validadata(fr.elements[a],0);
			}
		}
		if (fr.elements[a].Tipo=="email")
		{
			//Se o tipo for date faz a validação
	    	s=fr.elements[a].value;
	    	s=limparstring(s);
			if (s.length>0) 
			{
				if( validarEmail(fr.elements[a].value, fr.elements[a].Descricao) == false)
				{
					resp=false;
				}
			}
		}
		if (fr.elements[a].Tipo=="cnpj") 
		{
			//Se o tipo for email faz a validação
	    	s=fr.elements[a].value;
	    	s=limparstring(s);
			if (s.length>0) 
			{
				if(validarcnpj(fr.elements[a])==false)
				{
					resp=false;
				}
			}
		}	
		if (fr.elements[a].Tipo=="cpf") 
		{
			//Se o tipo for cpf faz a validação
	    	s=fr.elements[a].value;
	    	s=limparstring(s);
			if (s.length>0) 
			{
				if(validarcpf(fr.elements[a].value, fr.elements[a].Descricao) == false)
				{
					resp=false;
				}
			}
		}
	}
	//Se algo foi inválido, resp contém false
	return(resp); 
}

/// ************************************************************************************* '
// Função Valida_Dadta(obj, int)
// Verifica se a data informada pelo usário é valida
// Retorno nenhum
//************************************************************************************* '
function validadata(vObjeto, vDataDif)
{ 
  var now = new Date();
  var vDia     = parseInt(now.getDate());
  var vMes     = parseInt(now.getMonth() + 1);
  var vAno     = parseInt(now.getYear());
  
  if(vObjeto.value.length == 0) { return true; }	
  if(vObjeto.value.length == 9) { vObjeto.value = "0" + vObjeto.value; }
	
  dia = vObjeto.value.substring(0,2);
  mes = vObjeto.value.substring(3,5);
  ano = vObjeto.value.substring(6,10);
  
  barra1 = vObjeto.value.substring(2,3);  
  barra2 = vObjeto.value.substring(5,6);
  if (barra1 != "/")
  {
	erro.innerHTML=erro.innerHTML +  "O formato da data está inválido! Exemplo: dd/mm/aaaa<br>";	
	return(false); 
  }
  if (barra2 != "/") 
  {
	erro.innerHTML=erro.innerHTML +  "O formato da data está inválido! Exemplo: dd/mm/aaaa<br>";	
	return(false);  
  } 
  if (isNaN(dia))
  {
	erro.innerHTML=erro.innerHTML +  "A data (dia) contém caracteres inválidos<br>";
	return(false);
  } 
  if (isNaN(mes))
  {
  	erro.innerHTML=erro.innerHTML +  "A data (mês) contém caracteres inválidos<br>";	
	return(false); 
  }  
  if (isNaN(ano))
  {
  	erro.innerHTML=erro.innerHTML +  "A data (ano) contém caracteres inválidos<br>";	
	return(false); 
  } 
  if (vObjeto.value.length != 10)
  {
  	erro.innerHTML=erro.innerHTML +  "O formato da data está inválido! Exemplo: dd/mm/aaaa<br>";	
	vObjeto.focus();	
	return false;  
  }  
  quociente = (eval(ano) % 4);  
  if (quociente == 0)
  {
  	biss = true;
  }  
  else
  {
  	biss = false;
  }  
  if (mes < 1 || mes > 12)
  {
  	erro.innerHTML=erro.innerHTML +  "O mês da data é inválido<br>";	
	return(false);
  }  
  if (dia < 1 || dia > 31) 
  {
  	erro.innerHTML=erro.innerHTML +  "O dia da data é inválido<br>";	
	return(false);  
  }
  if (ano < 1950)
  {	
  	erro.innerHTML=erro.innerHTML +  "Ano menor que 1950<br>";	
	vObjeto.focus();	
	return(false);  
  }
  if (mes == 2)
  {   
  	if (dia == 29)
	{	
		if (biss == false)
		{
			erro.innerHTML=erro.innerHTML +  "O dia é inválido pois o ano não é bissexto<br>";
			return(false);		
		}  
	 }
	 if (dia >= 30)   
	 {
		erro.innerHTML=erro.innerHTML +  "O dia é inválido para o mês de Fevereiro<br>";		
		return(false);
	 }  
  }  
  if (dia == 31)  
  {	
  	if (mes == 2)	
	{
		erro.innerHTML=erro.innerHTML +  "O dia é inválido para o mês de Fevereiro<br>";		
		return(false);
	}	
	if (mes == 4)	
	{
		erro.innerHTML=erro.innerHTML +  "O dia é inválido para o mês de Abril<br>";
		return(false);	
	}
	if (mes == 6)
	{		
			erro.innerHTML=erro.innerHTML +  "O dia é inválido para o mês de Junho<br>";
		    return(false);	
	}	
	if (mes == 9)
	{
		erro.innerHTML=erro.innerHTML +  "O dia é inválido para o mês de Setembro<br>";		
		return(false);	
	}	
	if (mes == 11)	
	{
		erro.innerHTML=erro.innerHTML +  "O dia é inválido para o mês de Novembro<br>";
		return(false);	
	} 
  }
  if( vDataDif == "1" )
  {
	if(( ano <= vAno ) && ( mes < vMes ) ||(( ano <= vAno ) && ( mes <= vMes ) && ( dia < vDia )) || (( ano <= vAno ) && ( mes < vMes ) && ( dia <= vDia )) )
	{
		erro.innerHTML=erro.innerHTML +  "A data não pode ser inferior a data atual.<br>";
		return(false);	
	}		  
  }
  return(true);
 }
 
function validarEmail(valor, descricao) {
  if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(valor)){
    return (true)
  } else {
    erro.innerHTML=erro.innerHTML +  descricao + " não é um endereço válido.<br>";
    return (false);
  }
}

function validarcpf(valor, descricao){
	
	var i; 
	s = valor;
	var c = s.substr(0,9); 
	var dv = s.substr(9,2); 
	var d1 = 0; 
	var v = false;
	for (i = 0; i < 9; i++) 
	{ 
		d1 += c.charAt(i)*(10-i); 
	} 
	if (d1 == 0)
	{ 
  	    erro.innerHTML=erro.innerHTML +  descricao + " não é válido.<br>";
		v = true; 
	    return(false); 
	} 
	d1 = 11 - (d1 % 11); 
	if (d1 > 9) d1 = 0; 
	if (dv.charAt(0) != d1) 
	{ 
 	    erro.innerHTML=erro.innerHTML +  descricao + " não é válido.<br>";
		v = true;
		return(false); 
	} 

	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) 
	{ 
  	    erro.innerHTML=erro.innerHTML +  descricao + " não é válido.<br>";
		v = true;
		return(false); 
	} 
	if (!v) 
	{
		return(true);
	}
}

function validarcnpj(valor) 
{
   var CNPJ = valor.value;
   if (CNPJ.length < 18) 
   {
   		erro.innerHTML+= "É necessario preencher corretamente o número do CNPJ.<br>"; 
		return(false);
   }
   if ((CNPJ.charAt(2) != ".") || (CNPJ.charAt(6) != ".") || (CNPJ.charAt(10) != "/") || (CNPJ.charAt(15) != "-"))
   {
       erro.innerHTML += "É necessário preencher corretamente o número do CNPJ.<br>";
	   return(false);
   }
   //substituir os caracteres que não são números
   if(document.layers && parseInt(navigator.appVersion) == 4)
   {
	  x = CNPJ.substring(0,2);
	  x += CNPJ. substring (3,6);
	  x += CNPJ. substring (7,10);
	  x += CNPJ. substring (11,15);
	  x += CNPJ. substring (16,18);
	  CNPJ = x; 
   } 
   else 
   {
     CNPJ = CNPJ. replace (".","");
	 CNPJ = CNPJ. replace (".","");
	 CNPJ = CNPJ. replace ("-","");
	 CNPJ = CNPJ. replace ("/","");
   }
   var nonNumbers = /\D/;
   if (nonNumbers.test(CNPJ)) 
   {
  	 erro.innerHTML += "A verificação de CNPJ suporta apenas números! <br>"; 
	 return(false);
   }
   var a = [];
   var b = new Number;
   var c = [6,5,4,3,2,9,8,7,6,5,4,3,2];
   for (i=0; i<12; i++)
   {
      a[i] = CNPJ.charAt(i);
      b += a[i] * c[i+1];
 	}
    if ((x = b % 11) < 2) 
	{ 
		a[12] = 0 
	} 
	else 
	{ 
		a[12] = 11-x 
	}
    b = 0;
    for (y=0; y<13; y++) 
	{
		   b += (a[y] * c[y]); 
    }
    if ((x = b % 11) < 2) 
	{ 
		a[13] = 0; 
	} 
	else 
	{ 
		a[13] = 11-x; 
	}
    if ((CNPJ.charAt(12) != a[12]) || (CNPJ.charAt(13) != a[13]))
	{
    	erro.innerHTML +="Cnpj inválido!<br>";
		return(false);
    }
	return(true);
}