/* * PROCERGS - Companhia de Processamento de Dados do Estado do Rio Grande do Sul */ var enableOnSubmit = true; //validaform deve habilitar campos disabled ao submeter? var customMsg = ''; //mensagem de erro personalizada var joinMessages = false; //Exibe todas as mensagens de uma vez function validaForm(form, vetor, idioma, customMessage){ //os parametros passados para a funcao: nome_do_campo|tipo_de_validacao|"label"_para_campo. //Para validar mais de um campo, passa-los separados por virgulas. //O parâmetro customMessage serve para alerts personalizados strMessages = ''; var i, campos; if ( customMessage ) { customMsg = customMessage; } if(vetor.indexOf(",") == -1) { campos = vetor; lastField = true; getParams(form, campos, idioma); } else { tmp = vetor.split(","); campos = new Array(); for (i=0; i < tmp.length; i++) { if (tmp[i]) { campos.push(tmp[i]); } } for (i=0; i < campos.length; i++) { if (campos[i]) { lastField = (i == (campos.length-1) ? campos[i] : ""); getParams(form, campos[i], idioma); if ( erro && !joinMessages) { break; } } } } // Força msg de erro quando msgs são agrupadas mas o ultimo campo não gera erro if ( !erro && strMessages) { errorMsg(); erro = true; } if ( !erro && enableOnSubmit ) { enableAll(form); } return !(erro); } /************************************************************************************************ * Responsável pela chamada de cada um dos tipos de validação * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function getParams(form, campos, idioma) { var params = campos.split("|"); var tipoValidacao = params[1].toUpperCase(); //frm = $(nomeForm); var field = form.elements[params[0]]; //var field = $('#' + params[0]); //alert(params[0] +'\n'+ field +'\n'+ tipoValidacao); var label = params[2]; var disabled = !isEnabled(field); if ( !disabled) { switch (tipoValidacao) { case 'ISNULL': //Valida se o campo está em branco if ( (field.length && !field.type) || field.type == 'checkbox' ) { xNull(field, label); } else { isNull(field, label, idioma); } break; case 'ISXNULL': //Valida radios e checkboxes xNull(field, label); break; case 'ISEMAIL': case 'VT_MAIL': //Valida se o campo contém um e-mail válido isEmail(field, label, idioma); break; case 'ISPASSWORD': case 'PASSWORD': case 'VT_PASSWORD': //Valida se dois campos contém o mesmo valor field2 = field.form.elements[params[2]]; compareFields(field, field2); break; case 'ISNUMBER': case 'VT_NUMBER': //Valida se o campo contém um valor numérico isNumeric(field, label); break; case 'ISNATURAL': case 'VT_NATURAL': //Valida se o campo contém um valor positivo isNatural(field, label); break; case 'LEN': //Valida se o length do campo é igual ao parâmetro "requiredLen" da tag Len(field, label); break; case 'ISCPF': case 'VT_CPF': //Valida se é um cpf válido isCPF(field, label); break; case 'ISCNPJ': case 'ISCGC': case 'VT_CNPJ': //Valida se é um cgc válido isCGC(field, label); break; case 'ISTIME': case 'VT_TIME': //Valida se é um horário no formato hh:mm isTime(field, label); break; case 'ISDATE': case 'VT_DATE': //Valida se é uma data no formato dd/mm/aa isDate(field, label); break; case 'MAXLEN': //MaxLength(para textareas) maxLen(field, label); break; case 'ISRG': //Valida se é um rg válido isRG(field.value); break; case 'ISCEP': case 'VT_CEP': //Valida se é um cpf válido isCEP(field,label); break; case 'ISIE': //Valida se é uma IE válida isIE(field,label); break; case 'ISWORD': case 'VT_WORD': //Valida campos de username isWord(field, label); break case 'ISGREATER': case 'VT_GREATER': //Verifica se o valor campo eh maior do q determinado valor isGreater(field, label, params[3]); break; } } } /************************************************************************************************ * Habilita todos os campos antes do submit do form * * Autor: Carlos Eduardo Maciel * * Data/Hora: 06/02/2002 - 14:53 * ************************************************************************************************/ function enableAll(oForm) { for (z=0; z < oForm.elements.length; z++) { if ( oForm.elements[z].disabled ) { vFormEnabled[vFormEnabled.length] = oForm.elements[z]; oForm.elements[z].disabled = false; } } } /************************************************************************************************ * Desabilita todos os campos habilitados por enableall * * Autor: Carlos Eduardo Maciel * * Data/Hora: 06/02/2002 - 14:53 * ************************************************************************************************/ function rollback() { for (i=0; i campo.maxlength) { erro = true; msg = "O campo '"+ alias +"' deve conter, no máximo, "+ campo.maxlength +" caracteres!"; errorMsg(campo, alias, msg); } return !erro; } /************************************************************************************************ * Validação de campos username * * Autor: Carlos Eduardo Maciel * * Data/Hora: 30/01/2003 - 17:44 * ************************************************************************************************/ function isWord(campo, alias) { erro = false; var re = /^[a-zA-Z_][a-zA-Z_0-9]+$/; var msg; if ( campo.value.match(re) == null ) { erro = true; msg = "O campo '"+ alias +"' não deve conter espaços!"; errorMsg(campo, alias, msg); } return !erro; } /************************************************************************************************ * Comparação se campos senha * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function compareFields(field1, field2, msg) { erro = false; if (!msg) { msg = 'As senhas digitadas não conferem!'; } if (field1.value != field2.value) { erro = true; errorMsg(field1, '', msg); } return !erro; } /************************************************************************************************ * auto-complete para campos de CEP * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function setCep() { var ignoreKeys = Array(8,9,13,16,17,35,36,37,39,46); var fld = window.event.srcElement; var frm = fld.form; var str = fld.value.replace(/\-/g,''); if (str) { if ( !inArray(ignoreKeys, window.event.keyCode) ) { if (str.length == 5) str += '-'; else if (str.length > 5) str = str.substr(0,5) +'-'+ str.substr(5,3); fld.value = str; if (str.length == 9) focusNext(fld); } } } /************************************************************************************************ * Validação de CEO * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function isCEP(campo, alias){ var str; var msg; erro = false; str = trim(campo.value); if (str) { var re = /^[0-9]{8}$/ig; if ( !str.match(re) ) { erro = true; msg = "O campo '"+ alias +"' não contém um CEP válido!"; errorMsg(campo, alias, msg); } } return !erro; } /************************************************************************************************ * Validação de CGC * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function isCNPJ(cnpj) { return isCGC(cnpj); } function isCGC(campo, alias) { var calcCGC; var s1; var s2; var i; var soma; var digito; var result; var cgc = campo.value; s1 = cgc; if (s1 == '') { return true; } if (s1.length != 14) { if(customMsg){ errorMsg(campo, alias, customMsg); } else { errorMsg(campo, alias, 'O campo '+ alias +' deve conter 14 dígitos.'); } erro = true; return false; } if (s1 == '00000000000000') { if(customMsg){ errorMsg(campo, alias, customMsg); } else { errorMsg(campo, alias, 'O campo '+ alias +' é inválido.'); } erro = true; return false; } calcCGC = s1.substring(0, 12); // Cálculo do 1º dígito soma = 0; for (i = 1; i <= 4; i++) { soma = soma + (calcCGC.charAt(i-1) * (6 - i)); } for (i = 1; i <= 8; i++) { soma = soma + (calcCGC.charAt(i + 3) * (10 - i)); } digito = 11 - (soma % 11); if ((digito == 10) || (digito == 11)) calcCGC = calcCGC + '0'; else calcCGC = calcCGC + digito; // Cálculo do 2º dígito soma = 0; for (i = 1; i <= 5; i++) { soma = soma + (calcCGC.charAt(i-1) * (7 - i)); } for (i = 1; i <= 8; i++) { soma = soma + (calcCGC.charAt(i + 4) * (10 - i)); } digito = 11 - (soma % 11); if ((digito == 10) || (digito == 11)) calcCGC = calcCGC + '0'; else calcCGC = calcCGC + digito; if (calcCGC == s1) result = true; if (!result) { if(customMsg){ errorMsg(campo, alias, customMsg); } else { errorMsg(campo, alias, 'O campo '+ alias +' é um CNPJ inválido.'); } } erro = !result; return result; } /************************************************************************************************ * Validação de CPF * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function isCPF(campo, alias) { var i; var soma; var digito; var calcCPF; var s1; var s2; var b; var c; var result; var cpf = campo.value; s1 = cpf; if (s1 == '') { return true; } if (s1.length != 11) { if(customMsg){ errorMsg(campo, alias, customMsg); } else { errorMsg(campo, alias, 'O campo '+ alias +' deve conter 11 dígitos.'); } erro = true; return false; } // Teste se os 11 díg. são iguais b = true; c = s1.charAt(0); for (i = 1; i < 11; i++) { if ((b) && (s1.charAt(i) == c)) b = true; else b = false; c = s1.charAt(i); } if (b) { result = false; } else { calcCPF = s1.substring(0, 9); // Cálculo do 1º dígito soma = 0; for (i = 1; i <= 9; i++) { soma = soma + (calcCPF.charAt(i-1) * (11 - i)); } digito = 11 - (soma % 11); if ((digito== 10) || (digito == 11)) calcCPF = calcCPF + '0'; else calcCPF = calcCPF + digito; // Cálculo do 2º dígito soma = 0; for (i = 0; i <= 10; i++) { soma = soma + (calcCPF.charAt(i-1) * (12 - i)); } digito = 11 - (soma % 11); if ((digito== 10) || (digito == 11)) calcCPF = calcCPF + '0'; else calcCPF = calcCPF + digito; if (calcCPF == s1) result = true; else result = false; } if (!result) { if(customMsg){ errorMsg(campo, alias, customMsg); } else { errorMsg(campo, alias, 'O campo '+ alias +' possui CPF inválido.'); } } erro = !result; return result; } /************************************************************************************************ * Validação de Inscricao Estadual * * Autor: Alberto Fujita * * Data/Hora: 06/12/2004 - 11:59 * ************************************************************************************************/ function isIE(campo, alias) { var ie = campo.value; var peso = new Array(2,9,8,7,6,5,4,3,2); var i; var soma = 0; var modulo = 0; var validaIE, validaDigito; erro = false; // verifica o tamanho da string if ( ie.length != 10) { errorMsg(campo, alias, 'O campo '+ alias +' deve conter 10 dígitos.'); erro = true; } else { // calcula o digito verificador validaIE = ie.substring(0,9); for (i=0; i<9; i++) { soma += validaIE.charAt(i) * peso[i]; } modulo = 11 - (soma % 11); validaDigito = ie.substring(9,10); if ( modulo > 9 ) { modulo = 0; } // valida o digito de verificao if ( modulo != validaDigito ) { errorMsg(campo, alias, 'O campo '+ alias +' não contém uma Inscrição Estadual válida.'); erro = true } } return !erro; } /************************************************************************************************ * Validação de data * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function isDate( campo , alias) { var msg; var str = campo.value; erro = true; arrMonths = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31); var re = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/ig; if ( str.match(re) ) { aDate = str.split('/'); day = aDate[0]*1; month = aDate[1]*1; year = aDate[2]*1; if (isLeap(year)) arrMonths[2] = 29; if ( (day > 0) && (day <= arrMonths[month]) && (month > 0) && ( month < 13) ) erro = false; } else if ( !str ) erro = false; if (erro) { msg = 'O campo '+ alias +' deve conter uma data no formato DD/MM/AAAA'; errorMsg(campo, alias, msg); } return !erro; } /************************************************************************************************ * Verifica se eh ano bissexto (usada na funcao isDate) * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function isLeap(y) { var N = parseInt(y); return ( ( N%4==0 && N%100 !=0 ) || ( N%400==0 )); } /************************************************************************************************ * Validação de e-mail * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function isEmail(campo, alias, idioma) { var c; var msg; erro = false; strMail = campo.value; if (strMail) { //Verifica a existência de "@" e se existe alguma string antes if(strMail.search("@")>=1) { //Verifica se existe algum caracter inválido strMail = strMail.replace("@","."); arrMail = strMail.split("."); if(arrMail.length<3) erro = true; for(c=0; c 0) && campo.value) { erro = true; msg = "O campo '"+ alias +"' deve conter um valor positivo!"; errorMsg(campo, alias, msg); } return !erro; } /************************************************************************************************ * Verifica se o valor de um campo eh maior q determinado valor * * Autor: Carlos Eduardo Maciel * * Data/Hora: 04/09/2003 - 11:57 * ************************************************************************************************/ function isGreater(campo, alias, value) { erro = false; var msg; var n = campo.value.replace(',', '.')*1; v2 = ( isNaN(value.replace(',', '.') * 1) ? campo.form.elements[value].value : value).replace(',', '.')*1; if ( campo.value && n <= v2 ) { erro = true; msg = "O valor do campo '"+ alias +"' deve ser maior que "+ v2.toString() +"!"; errorMsg(campo, alias, msg); } return !erro; } /************************************************************************************************ * Validação de campos de hora * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function isTime(campo, alias){ erro = true; var msg; var hour = campo.value; if ( campo.value ) { if(hour.indexOf(":")) { arrParts = hour.split(":") if(arrParts.length == 2){ hora = (arrParts[0]*1); mins = ('0'+ arrParts[1]*1); if(!(isNaN(hora)) && !(isNaN(mins))){ if((hora<24)&&(hora>=0)) { if( (mins<60) && (mins>=0) ){ erro = false; campo.value = Right('00'+ hora, 2) +':'+ Right('00'+ mins, 2); } } } } } } else { erro = false; } if (erro) { if (alias) msg = "O campo Hora '"+ alias +"' deve conter um horário válido!"; errorMsg(campo, alias, msg); } return !erro; } /************************************************************************************************ * Validação de radios e checkboxes * * Autor: Carlos Eduardo Maciel * * Data/Hora: 10/05/2001 - 13:41 * ************************************************************************************************/ function xNull(campo, alias) { erro = true; var multiple = false; if (campo.length) { multiple = (campo[0].type != 'radio'); for (var i=0; i 2) str = str.substr(0,2) +':'+ str.substr(2,2); fld.value = str; if (str.length == 5) focusNext(fld); } } else fld.value = ''; } /************************************************************************************************ * auto-complete para campos de Hora * * Autor: Carlos Eduardo Maciel * * Data/Hora: 26/02/2003 - 18:49 * ************************************************************************************************/ function setTimeComplete(fld) { if (!fld) fld = window.event.srcElement; str = fld.value; if (str) { tmp = str.split(':'); str = Right('00'+ tmp[0], 2); str += ':'+ Right('00'+ (tmp.length == 2 ? tmp[1] : ''), 2); fld.value = str; } } /************************************************************************************************ * auto-complete para campos de Data * * Autor: Carlos Eduardo Maciel * * Data/Hora: 26/02/2003 - 18:49 * ************************************************************************************************/ function setDate(fld, autoComplete) { var ignoreKeys = Array(8,9,13,16,17,35,36,37,39,46); str = fld.value.replace(/\D/g,''); if (str) { if ( !inArray(ignoreKeys, window.event.keyCode) ) { var s1 = str.substr(0,2); var s2 = str.substr(2,2); var s3 = str.substr(4,4); str = s1 +(s1.length==2 ? '/' : '') + s2 + (s2.length==2 ? '/' : '') + s3; fld.value = str; if ( autoComplete ) { setDateComplete(fld); str = fld.value; } /*if ( str.match(/^\d{2}\/\d{2}\/\d{4}$/) ) { focusNext(fld); }*/ } } } /************************************************************************************************ * auto-complete para campos float * * usar no onKeyUp do campo * * Autor: Carlos Eduardo Maciel * * Data/Hora: 29/08/2003 - 10:32 * ************************************************************************************************/ function setFloat(campo, precision, ev) { if (!campo.value) return false; if ( !precision || isNaN(precision) ) { precision = 2; } if ( !campo.onkeypress ) { campo.onkeypress = stripNaN; } var tammax = 18; var result; vr = intval(campo.value.replace(/\D/g, '')).toString(); tam = (vr.length <= tammax ? vr.length : tammax); if ( tam <= precision) { result = '0,'+ Right(strRepeat('0', precision) + vr, precision); } else { result = ''; init = tam - precision - 1; for (var i = init; i >= 0; i--) { result = vr.charAt(i) + result; if ( ((init-i+1) % 3 == 0) && (i != 0) ) { result = '.' + result; } } result += ',' + vr.substr(init + 1); } campo.value = result; if ( tam > tammax ) { if (isGecko()) { return false; } else { ev.returnValue = false; } } return true; } /************************************************************************************************ * auto-complete para campos de Data * * Autor: Carlos Eduardo Maciel * * Data/Hora: 26/02/2003 - 18:49 * ************************************************************************************************/ function setDateComplete(fld) { if (!fld) fld = window.event.srcElement; str = fld.value; var re = /^\d{2}\/\d{2}\/\d{2}$/i; if ( str.match(re) ) fld.value = str.replace(/(\d{2})$/i, '20$1'); } /************************************************************************************************ * Seta mascara em campos texto * * Autor: Carlos Eduardo Maciel * * Data/Hora: 15/01/2004 - 20:12 * ************************************************************************************************/ function maskNumber(field, strMask) { strMask = strMask.replace(/\d/g, '0'); var size = strMask.length; var strValue = field.value.replace(/\D/g, ''); var digPointer = 0; var maskPointer = 0; for (i=0; i String(str).length) return str; else return String(str).substring(0,n); } function Right(str, n){ if (n <= 0) return ""; else if (n > String(str).length) return str; else { var iLen = String(str).length; return String(str).substring(iLen, iLen - n); } }