/*
* 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);
}
}