/*
Autoria: www.HEPTO.net
Não utilizar sem autorização.
*/

function validateAllFields() {

    var erro = false;
    var errMsg = '';

	// Remove error Messages
    $$('.errMsg').each(function(ob) {
		ob.parentNode.removeChild(ob);
    });
	
    $$('.warning').each(function(ob) {
		ob.parentNode.removeChild(ob);
    });

    $$('.notnull').each(function(fld) {
		if ( fld.value.length == 0 ) {
            erro = true;
            insert_after('não pode ser vazio', fld);
        }
    });
	
    $$('.mustCheck').each(function(fld) {
		if ( !fld.checked ) {
            erro = true;
            insert_after('campo obrigatório', fld);
        }
    });

    $$('.asPriceBRL').each(function(fld) {
		value = fld.value.replace(',', '');
		value = value.replace('.', '');
        exp = /^\d+$/;
        if ( !exp.test(value) && (fld.value.length > 0) ) {
            erro = true;
            insert_after('deve ser numérico', fld);
        }
    });

    $$('.asNumber').each(function(fld) {
//	  alert(fld.className);
        value = fld.value.replace(',', '');
		value = value.replace('.', '');
        exp = /^\d+$/;
        if ( !exp.test(value) && (fld.value.length > 0) ) {
            erro = true;
            insert_after('deve ser numérico', fld);
        }
    });

    $$('.asInteger').each(function(fld) {
        exp = /^-?\d+$/;
        if ( !exp.test(fld.value) && (fld.value.length > 0) ) {
            erro = true;
            insert_after('deve ser um inteiro', fld);
        }
    });

    $$('.asEmail').each(function(fld) {
        exp = /^[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])$/;
        if ( !exp.test(fld.value) && (fld.value.length > 0) ) {
            erro = true;
            insert_after('e-mail inválido', fld);
        }
    });
    
	  $$('.asPercentual').each(function(fld) {
        exp = /^(\d{1,2}|100)$/;
        if ( !exp.test(fld.value) && (fld.value.length > 0) ) {
            erro = true;
            insert_after('deve ser um valor de 0 a 100', fld);
        }
    });
	  
	 $$('.asCPF').each(function(fld) { 
                 cpf = fld.value;
				 msg = false;
                if(cpf.length>0){	 
						 if (cpf.length < 11){ 
							msg = true;
							erro = true;
						 }
						 
					 var nonNumbers = /\D/;
					 
					 if (nonNumbers.test(cpf)){ 
						msg = true;
						erro = true;
					 }
					 
					 if (cpf == "00000000000" || cpf == "11111111111" || cpf == "22222222222" || cpf == "33333333333" || cpf == 			"44444444444" || cpf == "55555555555" || cpf == "66666666666" || cpf == "77777777777" || cpf == "88888888888" || cpf == "99999999999"){
						msg = true;
						erro = true; 
				   }
				   var a = [];
				   var b = new Number;
				   var c = 11;
				   var x;	
				   for (i=0; i<11; i++){
						a[i] = cpf.charAt(i);
						if (i < 9) 
							b += (a[i] * --c);
				   }
				   
				   if ((x = b % 11) < 2){ 
				   a[9] = 0;
				   
				   }else{ 
				   a[9] = 11-x; 
				   }
				   
				   b = 0;
				   c = 11;
				   for (y=0; y<10; y++) 
						b += (a[y] * c--);
				   if ((x = b % 11) < 2){
						a[10] = 0; 
				   }else{ 
						a[10] = 11-x; 
				   }
				   
				   if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10])){
						   msg = true;
						   erro = true;
				   } 
				   
				   
				   if (msg){
						msg = false;
						insert_after('CPF inválido (apenas números)', fld);
				   }
			}
       
  });
	 
	 
   $$('.asCNPJ').each(function(fld){
	var cnpj = fld.value;  
	msg = false;   
	var numeros, digitos, soma, i, resultado, pos, tamanho, digitos_iguais;  
	   
	 digitos_iguais = 1;  
	   
	if(cnpj.length>0){
	
		for (var i=0; i < cnpj.length - 1; i++)  
		   
			if (cnpj.charAt(i) != cnpj.charAt(i + 1)) {  
		  
				digitos_iguais = 0;  
				break;  
			}  
		   
		if (!digitos_iguais) {  
		  
			tamanho = cnpj.length - 2  
			numeros = cnpj.substring(0,tamanho);  
			digitos = cnpj.substring(tamanho);  
			soma = 0;  
			pos = tamanho - 7;  
		   
			for (var i=tamanho; i >= 1; i--) {  
		   
				soma += numeros.charAt(tamanho - i) * pos--;  
					if (pos < 2) {  
						pos = 9;  
					}  
			}  
		   
			resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;  
		   
				if (resultado != digitos.charAt(0)) {  
		   
					msg = true; 
					erro = true;    
				}		  
		   
			tamanho = tamanho + 1;  
			numeros = cnpj.substring(0,tamanho);  
			soma = 0;  
			pos = tamanho - 7;  
		   
				for (i = tamanho; i >= 1; i--) {  
		   
					soma += numeros.charAt(tamanho - i) * pos--;  
						if (pos < 2){  
		   
							pos = 9;  
						}  
				}  
		   
			resultado = soma % 11 < 2 ? 0 : 11 - soma % 11;  
		   
				if (resultado != digitos.charAt(1)) {  
		  
					msg = true; 
					erro = true;   
				}
				
			  
		}else{
			msg = true; 
			erro = true;   
		}  
	
	}
		if(msg){
			msg = false;
			insert_after('CNPJ inválido (apenas números)', fld);
		} 
	
	
   });
    if (erro)
        return false;
    else
        return true;
}

function insert_after( errMsg, fld) {
    new Insertion.After(fld, '<span class="warning"> * </span><span class="errMsg">'+ ( fld.alt ? fld.alt : fld.id ) +': '+ errMsg +'</span>');
}