/*
Autoria: www.HEPTO.net
Não utilizar sem autorização.
*/

function validateFormFields( form ) {

	var erro = false;

	// Remove error Messages
    $$('.errMsg').each(function(ob) {
		ob.parentNode.removeChild(ob);
    });


	if ( $(form) ) {
	
		Form.getElements(form).each(function(fld) {
		
			// Remove error Messages
			if ( fld.className.indexOf('errMsg')>-1 )
				fld.parentNode.removeChild(fld);
			
			if ( fld.className.indexOf('notnull')>-1 && fld.value.length == 0 ) {
				insert_after('', fld);
				erro = true;
			}
			
			if ( fld.className.indexOf('asPriceBRL')>-1 ) {
				value = fld.value.replace(',', '');
				value = value.replace('.', '');
				exp = /^\d+$/;
				if ( !exp.test(value) && (fld.value.length > 0) ) {
					insert_after('deve ser numérico', fld);
					erro = true;
				}				
			}
			
			if ( fld.className.indexOf('asNumber')>-1 ) {
				value = fld.value.replace(',', '');
				value = value.replace('.', '');
				exp = /^\d+$/;
				if ( !exp.test(value) && (fld.value.length > 0) ) {
					insert_after('deve ser numérico', fld);
					erro = true;
				}
			}
			
			if ( fld.className.indexOf('asInteger')>-1 ) {
				exp = /^-?\d+$/;
				if ( !exp.test(fld.value) && (fld.value.length > 0) ) {
					insert_after('deve ser um inteiro', fld);
					erro = true;
				}
			}

			if ( fld.className.indexOf('asEmail')>-1 ) {
				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) ) {
					insert_after('e-mail inválido', fld);
					erro = true;
				}
			}
			
			if ( fld.className.indexOf('asPercentual')>-1 ) {
				exp = /^(\d{1,2}|100)$/;
				if ( !exp.test(fld.value) && (fld.value.length > 0) ) {
					insert_after('deve ser um valor de 0 a 100', fld);
					erro = true;
				}
			}
			
			if ( fld.className.indexOf('asCPF')>-1 ) {
				
				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);
						erro = true;
				   }
				}				
			}
			
			if ( fld.className.indexOf('asCNPJ')>-1 ) {
			
				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);
					erro = true;
				} 
			
			}
			
			
			
		
		});
	
		if ( erro )
			return false;
		else
			return true;
	
	} else
		return false;

}

function validateAllFields() {

    var erro = false;
    var errMsg = '';

	// Remove error Messages
    $$('.errMsg').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);
        }
    });

    $$('.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 errMsg"> * '+ errMsg +'</span>');
}



