function ck(fr) {
   var resp
   resp=validar(fr)
   if (resp==false) {
   		window.scroll(0, 65000)
   		return(false) 
		}
   else {
   		window.scroll(0, 65000)
		resp=validartipos(fr)
		if(resp==true){erro.innerHTML='Aguarde...'}
   		return(resp) 
		}
}

/*F : Validação de um número com casas decimais
IN : Validação de um número inteiro
NOM : Validação de um nome. Precisa ter nome e sobrenome
MAIL : Validação de endereço de e-mail
*/
//Funcao de validacao de campos obrigatorios
function validar(fr) {
var a;
var s=new String;
var resp;
a=0;
erro.innerHTML="";
resp=true;
for(a=0;a<fr.elements.length;a++)
{ if (fr.elements[a].Obrigatorio=="1")
	{
	   if(fr.elements[a].tagName!="SELECT"){
	    s=fr.elements[a].value;
	    s=limparstring(s);
		if (s.length==0) {
		    erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " &eacute; informa&ccedil;&atilde;o obrigat&oacute;ria<br />"
		    resp=false;
		}
		} else
	  //{ if (fr.elements[a].item(fr.elements[a].selectedIndex).value=="") {
	    { if (fr.elements[a].selectedIndex==0) {
		    erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " &eacute; informa&ccedil;&atilde;o obrigat&oacute;ria<br />"
		    resp=false;
		}
	  }
	}
}	
return(resp);
}

// Faz limpeza de strings. Utilizada pela função de validação de campos obrigatorios
function limparstring(s)
{
while (s.search(" ")!=-1){
s=s.replace(" ","");
 }
return(s);
 }

function sonumero(num){
	var swork=""
	var ret=""
	var numeros="0123456789"
	for(i=0;i<num.length;i++){
		swork=num.charAt(i)
		if (numeros.indexOf(swork,0)!=-1) ret+=swork
	}
	return ret
}

//===================================CGC==========================================
function modulog(str) {
 soma=0;
 ind=2;
 for(pos=str.length-1;pos>-1;pos=pos-1) {
  soma = soma + (parseInt(str.charAt(pos)) * ind);
  ind++;
  if(str.length>11) {
        if(ind>9) ind=2;
        }
  }
 resto = soma - (Math.floor(soma / 11) * 11);
 if(resto < 2) {
  return 0;
  }
 else {
  return (11 - resto);
  }
 }

function checag(str) {
         if (str.length != 14) {
                  //alert("Digite um CGC Válido")
                  return false;
         }
         if(!(modulog(str.substring(0,str.length - 2)).toString()+modulog(str.substring(0,str.length - 1)).toString() == str.substring(str.length - 2,str.length))) {
                  //alert("Digite um CGC Valido");
                  return false;
                 }
return true;
}

//==================================CPF===========================================

	function modulo(str) {
    	soma=0;
    	ind=2;
    	for(pos=str.length-1;pos>-1;pos=pos-1) {
    		soma = soma + (parseInt(str.charAt(pos)) * ind);
    		ind++;
    		if(str.length>11) {
    			if(ind>9) ind=2;
    		}
		}
    	resto = soma - (Math.floor(soma / 11) * 11);
    	if(resto < 2) {
	    	return 0
    	}
    	else {
    		return 11 - resto
    	}
	}
	function checa(valor) {
a=new Array()
a[0]="00000000000"
a[1]="11111111111"
a[2]="22222222222"
a[3]="33333333333"
a[4]="44444444444"
a[5]="55555555555"
a[6]="66666666666"
a[7]="77777777777"
a[8]="88888888888"
a[9]="99999999999"
teste=valor.charAt(1)
if (a[teste]==valor) return false;
    	if (valor.length != 11) {
    		//alert("Os dados do seu CPF aparentam não ser válidos.\nRedigite-os sem pontos (.) traços (-) ou vírgulas (,).")
    		return false;
		}
    	if(modulo(valor.substring(0,valor.length - 2)) + "" + modulo(valor.substring(0,valor.length - 1)) != valor.substring(valor.length - 2,valor.length)) {
    		//alert("Os dados do seu CPF aparentam não ser válidos.\nRedigite-os sem pontos (.) traços (-) ou vírgulas (,).");
    		return false;
    	}
		return true;
	}

//======================================================================================
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=="IN"){
	{    	

// Se o tipo for inteiro, faz a validação de valores
	    s=fr.elements[a].value;
	    s=limparstring(s);
	if (fr.elements[a].Obrigatorio=="1" || 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=="F") {
//Se o tipo for Float faz a validação
	    s=fr.elements[a].value;
	    s=limparstring(s);
	if (fr.elements[a].Obrigatorio=="1" || 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=="NOM") {
	    s=fr.elements[a].value;
	    s=limparstring(s);
	if (fr.elements[a].Obrigatorio=="1" || s.length>0) {
// A validação só é feita se o campo for obrigatório OU se estiver preenchido
	  temp=fr.elements[a].value;
// Verifica a existencia de espaço para saber se nome e sobrenome foram preenchidos
      if (temp.indexOf(" ")==-1)
	   { resp=false;
	     erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " deve conter nome e sobrenome<br />";
	     } 
	}
}

if (fr.elements[a].Tipo=="CEP") {
	s=sonumero(fr.elements[a].value);
	fr.elements[a].value=s
	if(fr.elements[a].Obrigatorio=="1" || s.length > 0){
	if(s.length!=8){
		resp=false;
		erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " está incorreto<br />";
		}
	else{
		cep1=s.substr(0,5)
		cep2=s.substr(5,3)
		fr.elements[a].value=cep1+'-'+cep2
		}
	}
}

if (fr.elements[a].Tipo=="TEL") {
	s=sonumero(fr.elements[a].value);
	fr.elements[a].value=s
	if(fr.elements[a].Obrigatorio=="1" || s.length > 0){
	if((s.length!=9) && (s.length!=10)){
		resp=false;
		erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " está incorreto<br />";
		}
	else{
		if(s.length==9){
			t1='('+s.substr(0,2)+') '
			t2=s.substr(2,3)
			t3=s.substr(5,4)
			fr.elements[a].value=t1+t2+'-'+t3
			}
		if(s.length==10){
			t1='('+s.substr(0,2)+') '
			t2=s.substr(2,4)
			t3=s.substr(6,4)
			fr.elements[a].value=t1+t2+'-'+t3
			}
		}
	}
}

if (fr.elements[a].Tipo=="CPFCNPJ") {
	s=sonumero(fr.elements[a].value);
	fr.elements[a].value=s
	if(fr.elements[a].Obrigatorio=="1" || s.length > 0){
		if(s.length==11){ //CPF
			temp=checa(s)
			p1=s.substr(0,3)
			p2=s.substr(3,3)
			p3=s.substr(6,3)
			p4=s.substr(9,2)
			fr.elements[a].value=p1+'.'+p2+'.'+p3+'-'+p4
		}
		if(s.length==14){ //CNPJ 66474016/0001-44
			temp=checag(s)
			p1=s.substr(0,2)
			p2=s.substr(2,3)
			p3=s.substr(5,3)
			p4=s.substr(8,4)
			p5=s.substr(12,2)
			fr.elements[a].value=p1+'.'+p2+'.'+p3+'/'+p4+'-'+p5
		}	
		if((s.length!=11 && s.length!=14) || temp==false){
			resp=false;
			erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " está incorreto<br />";
		}
	}
}

if (fr.elements[a].Tipo=="MAIL") {
	s=fr.elements[a].value;
	s=limparstring(s.toLowerCase());
	fr.elements[a].value=s;
	if (fr.elements[a].Obrigatorio=="1" || s.length>0) {
		// A validação só é feita se o campo for obrigatório OU se estiver preenchido
	  	temp=fr.elements[a].value;
		// Verifica a existência de @ e . para validar o e-mail
      if ((s.indexOf("@", 2) == -1) || (s.indexOf(".", 3) == -1) || (s.indexOf("@.", 1) != -1) || (s.indexOf(".@", 1) != -1) || (s.indexOf(".", s.length-1) > 0))
	   { resp=false;
	     erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " deve conter um e-mail válido<br />";
	     }
		else{
			var pode="0123456789.@_-abcdefghijklmnopqrstuvwxyz"
			var novo = ""
			for (i=0;i<=s.length;i++){
				swork = s.charAt(i);
				if (pode.indexOf(swork, 0) == -1) {novo += swork}
			}
			if(novo.length>0){
				resp=false;
	     		erro.innerHTML=erro.innerHTML + fr.elements[a].Descricao + " caracteres inválidos: "+novo+"<br />";
			}
		}
	}
}

}

//Se algo foi inválido, resp contém false
return(resp); }

