//----------------------------------------------------------------- // validacoes_1.js // // funções auxiliares para validações de forms // // copyright (c) 2000 Ponto.C - Desenv. Sistemas de Informação, Lda // //Autor: Nuno Santos //Alterada por: Margarida Fernandes //----------------------------------------------------------------- //Inicio funções de ajuda************************************************************ // permite verificar se um elemento passado é um objecto function SPW_JS_IsObject(eElem) { var isObj = false; if (eElem.toString().indexOf('object') > 0) isObj = true; return isObj } //permite fazer o replace para mostrar as msg nas linguas definidas pelo sistema function SPW_JS_ReplaceAll(str, replacements) { for (i = 0; i < replacements.length; i++) { str = str.replace("{%" + (i + 1) + "}", replacements[i]); } return str; } // Função para introduzir o focus function SPW_JS_SetFocus(campo) { if (SPW_JS_IsObject(campo)) { if (campo.focus) { try { campo.focus(); } catch (ex) { } } } } //mostra msg de erro e coloca o ponteiro no input function SPW_JS_MsgErro(theForm, campo, descerro, radio) { if (SPW_JS_IsObject(campo)) var cam = campo; else var cam = eval(theForm + "." + campo); SPW_JS_MsgErroShow(descerro); if (radio > 1) SPW_JS_SetFocus(cam[0]); else SPW_JS_SetFocus(cam); } //mostra msg de erro function SPW_JS_MsgErroShow(descerro) { alert(descerro); } //validar hora function SPW_JS_Hora(checkStr) { var date = checkStr.split(':'); var num = date.length; var hora = date[0]; var minutos = date[1]; if (Number(hora) < 0 || Number(hora) > 23 || hora == "") { return (false); } if (Number(minutos) < 0 || Number(minutos) > 59 || minutos == "") { return (false); } if (Number(hora) == 24) { if (Number(minutos) != 0) { return (false); } } return (true); } //validar nº de horas (as horas não são limitadas a 24) function SPW_JS_NumHora(checkStr) { var date = checkStr.split(':'); var num = date.length; var hora = date[0]; var minutos = date[1]; if (Number(hora) < 0 || hora == "") { return (false); } if (Number(minutos) < 0 || Number(minutos) > 59 || minutos == "") { return (false); } return (true); } //ver se é ano bisexto function SPW_JS_IsLeapYear(y) { return (y % 4 == 0 && (y % 400 == 0 || y % 100 != 0)) } //validar data function SPW_JS_Data(checkStr, tipo) { //tipo = 0 = ddmmaaaa //tipo = 1 = aaaammdd //tipo = 2 = aaaaddmm var daysOfMonth = new Object(); daysOfMonth['Jan'] = daysOfMonth['January'] = daysOfMonth[1] = 31; daysOfMonth['Feb'] = daysOfMonth['February'] = daysOfMonth[2] = 28; daysOfMonth['Mar'] = daysOfMonth['March'] = daysOfMonth[3] = 31; daysOfMonth['Apr'] = daysOfMonth['April'] = daysOfMonth[4] = 30; daysOfMonth['May'] = daysOfMonth['May'] = daysOfMonth[5] = 31; daysOfMonth['Jun'] = daysOfMonth['June'] = daysOfMonth[6] = 30; daysOfMonth['Jul'] = daysOfMonth['July'] = daysOfMonth[7] = 31; daysOfMonth['Aug'] = daysOfMonth['August'] = daysOfMonth[8] = 31; daysOfMonth['Sep'] = daysOfMonth['September'] = daysOfMonth[9] = 30; daysOfMonth['Oct'] = daysOfMonth['October'] = daysOfMonth[10] = 31; daysOfMonth['Nov'] = daysOfMonth['November'] = daysOfMonth[11] = 30; daysOfMonth['Dec'] = daysOfMonth['December'] = daysOfMonth[12] = 31; if (checkStr.search("/") > -1) var date = checkStr.split('/'); else if (checkStr.search("-") > -1) var date = checkStr.split('-'); else return (false); var num = date.length; if (num != 3) return (false); var month = Number(date[1]); var day = Number(date[2]); var year = Number(date[0]); if (tipo == "0") { day = Number(date[0]); month = Number(date[1]); year = Number(date[2]); } if (tipo == "1") { month = Number(date[1]); day = Number(date[2]); year = Number(date[0]); } if (tipo == "2") { month = Number(date[2]); day = Number(date[1]); year = Number(date[0]); } if (month < 1 || month > 12 || month == "") return (false); if (day < 1 || day == "") return (false); if (month == 2 && SPW_JS_IsLeapYear(year)) var dayLimit = 29; else var dayLimit = daysOfMonth[month]; if (day > dayLimit) return (false); if (year < 1000 || year == "" || year > 9999) return (false); return (true); } //validar email (esta função tarda muito com strings um pouco maiores) function SPW_JS_Email(checkStr) { if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(checkStr)) { return (true); } return (false) } //validar email function SPW_JS_Email1(checkStr) { var Viarroba = false; var Viponto = false; var Vispace = false; var i; for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); if (ch == "@") { Viarroba = true; } } for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); if (ch == ".") { Viponto = true; } } for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); if (ch == " ") { Vispace = true; } } if (!Viarroba || !Viponto || Vispace) return (false); return (true) } //função para ver se encontrou o caracter ' ou | function SPW_JS_CaracteresEsp(checkStr) { var checkOK = "'|"; var i; for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); for (j = 0; j < checkOK.length; j++) if (ch == checkOK.charAt(j)) { return (false); } } return (true); } //verifica espaços function SPW_JS_Espacos(checkStr) { var checkOk = " "; var i; var j; j = 0; for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); if (ch == checkOk.charAt(0)) j++; } if (j == i) return (false); return (true); } //função para ver se encontrou caracteres não permitidos pelo programador //Retorna falso se encontrou, true caso contrário function SPW_JS_ScanP(checkStr, checkOK) { var i; for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); for (j = 0; j < checkOK.length; j++) if (ch == checkOK.charAt(j)) { return (false); } } return (true); } //função para ver se os caracteres usados são os pretendidos //True se forem só caracteres válidos, false caso contrário function SPW_JS_Scan(checkStr, checkOK) { for (i = 0; i < checkStr.length; i++) { ch = checkStr.charAt(i); for (j = 0; j < checkOK.length; j++) if (ch == checkOK.charAt(j)) break; if (j == checkOK.length) { return (false); break; } } return (true); } //valida um numero dado function SPW_JS_Num(checkStr, NumCasasInt, NumCasasDec) { if (Number(NumCasasInt) < 0) NumCasasInt = 1; if (!Number(NumCasasInt)) NumCasasInt = 1; if (Number(NumCasasDec) < 0) NumCasasDec = 1; if (!Number(NumCasasDec)) NumCasasDec = 1; //****************************************************** var ponto = checkStr.indexOf("."); var virgula = checkStr.indexOf(","); if (ponto > -1) var str = checkStr.split("."); else if (virgula > -1) var str = checkStr.split(","); else { var str = checkStr; if (!Number(str) && str != 0) return (false); else { if (str.length > NumCasasInt) return (false); else return (true); } } if (!Number(str[0]) && str[0] != 0) return (false); if (!Number(str[1]) && str[1] != 0) return (false); var menos = checkStr.indexOf("-"); if (menos > -1) NumCasasInt = NumCasasInt + 1; if (str[0].length > Number(NumCasasInt)) return (false); if (str[1].length > Number(NumCasasDec)) return (false); return (true); } //validar hora //Alterada pela Margarida para conter segundos no tipo opt=2 function SPW_validar_hora(checkStr, opt) { var date = checkStr.split(':'); var num = date.length; if (opt == 1) { if (num < 1 || num > 2) return (false); if (date[1] == ":") return (false); } else { if (num != 2 && num != 3) return (false); if (date[1] == ":") return (false); } var hora = date[0]; var minutos = date[1]; if (Number(hora) < 0 || Number(hora) > 23 || hora == "") { return (false); } if (Number(minutos) < 0 || Number(minutos) > 59 || minutos == "") { return (false); } if (Number(hora) == 24) { if (Number(minutos) != 0) { return (false); } } if (num == 3) { var segundos = date[2]; if (Number(segundos) < 0 || Number(segundos) > 59 || segundos == "") { return (false); } if (Number(hora) == 24) { if (Number(segundos) != 0) { return (false); } } } return (true); } function SPW_JS_Trim(s) { if (s.length == 0) return s; return s.replace(/^\s*(.*?)\s*$/, '$1'); } // Check whether string s is empty. function SPW_JS_IsEmpty(s) { return (s == null || s.length == 0 || SPW_JS_Trim(s).length == 0) } // Returns true if character c is a digit // (0 .. 9). function SPW_JS_IsDigit(c) { return ((c >= "0") && (c <= "9")) } // isInteger (STRING s) // // Returns true if all characters in string s are numbers. // // Accepts non-signed integers only. Does not accept floating // point, exponential notation, etc. function SPW_JS_IsInteger(s) { if (SPW_JS_IsEmpty(s)) return false; // Search through string's characters one by one // until we find a non-numeric character. // When we do, return false; if we don't, return true. for (var i = 0; i < s.length; i++) { // Check that current character is number. var c = s.charAt(i); if (!SPW_JS_IsDigit(c)) return false; } // All characters are numbers. return true; } // isSignedInteger (STRING s) // // Returns true if all characters are numbers; // first character is allowed to be + or - as well. // // Does not accept floating point, exponential notation, etc. function SPW_JS_IsSignedInteger(s) { if (SPW_JS_IsEmpty(s)) return false; else { var startPos = 0; // skip leading + or - if ((s.charAt(0) == "-") || (s.charAt(0) == "+")) startPos = 1; return (SPW_JS_IsInteger(s.substring(startPos, s.length))) } } // isPositiveInteger (STRING s) // // Returns true if string s is an integer > 0. function SPW_JS_IsPositiveInteger(s) { if (SPW_JS_IsEmpty(s)) return false; return (SPW_JS_IsSignedInteger(s) && Number(s) > 0); } //Verifica se o Numero de Contribuinte está correcto //Valida Unicamente NIF portugueses function SPW_JS_IsNumContribuinte(s) { // se o NIF vier com as duas letras retiro-as... if (!Number(s.substring(0, 2))) { s = s.substring(2, s.length); } if (s.length != 9 || !SPW_JS_IsPositiveInteger(s)) { return false; } var soma, resto, digi; var nif = new Array(9); for (var i = 0; i < 9; i++) { nif[i] = Number(s.substring(i, i + 1)); } for (var i = 0, soma = 0; i < 8; i++) { soma += nif[i] * (9 - i); } resto = soma % 11; digi = 11 - resto; if (digi > 9) digi = 0; return (digi == nif[8]); } //Fim funções de ajuda*************************************************************** //*********************************************************************************** //INICIO funções de validação******************************************************** //*********************************************************************************** //Valida uma data obrigatoria function SPW_JS_ValidaDataObg(theForm, campo, nome, tipo) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Scan(ncamp.value, "0123456789/-")) { msgErro = SPW_JS_ReplaceAll(msgStrDataInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Data(ncamp.value, tipo)) { msgErro = SPW_JS_ReplaceAll(msgStrDataInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //Valida uma data opcional function SPW_JS_ValidaDataOpc(theForm, campo, nome, tipo) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value != "") { if (!SPW_JS_Data(ncamp.value, tipo)) { msgErro = SPW_JS_ReplaceAll(msgStrDataInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } if (!SPW_JS_Scan(ncamp.value, "0123456789/-")) { msgErro = SPW_JS_ReplaceAll(msgStrDataInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //Valida hora obrigatória function SPW_JS_ValidaHoraObg(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Scan(ncamp.value, "0123456789:")) { msgErro = SPW_JS_ReplaceAll(msgStrHoraInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } //verifica que a hora não seja 00:00 //Busca todos os zeros da hora //verifica que o comprimento da string obtida é >= 7 //se a hora for 00:00 a string obtida é: 0,0,0,0 if (ncamp.value.toString().indexOf("0") > 0) { if (ncamp.value.toString().match(/0/g).toString().length >= 7) { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } if (ncamp.value != "") { if (!SPW_validar_hora(ncamp.value, 2)) { msgErro = SPW_JS_ReplaceAll(msgStrHoraInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //Valida hora obrigatória com segundos function SPW_JS_ValidaHoraSegObg(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Scan(ncamp.value, "0123456789:")) { msgErro = SPW_JS_ReplaceAll(msgStrHoraSegInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (ncamp.value != "") { if (!SPW_validar_hora(ncamp.value, 2)) { msgErro = SPW_JS_ReplaceAll(msgStrHoraSegInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //Valida hora opcional function SPW_JS_ValidaHoraOpc(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (!SPW_JS_Scan(ncamp.value, "0123456789:")) { msgErro = SPW_JS_ReplaceAll(msgStrHoraInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (ncamp.value != "") { if (!SPW_validar_hora(ncamp.value, 2)) { msgErro = SPW_JS_ReplaceAll(msgStrHoraInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //Valida Nº de horas obrigatória function SPW_JS_ValidaNumHoraObg(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Scan(ncamp.value, "0123456789:")) { msgErro = SPW_JS_ReplaceAll(msgStrHoraInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (ncamp.value != "") { if (!SPW_JS_NumHora(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrHoraInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //Valida Nº de horas opcional function SPW_JS_ValidaNumHoraOpc(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (!SPW_JS_Scan(ncamp.value, "0123456789:")) { msgErro = SPW_JS_ReplaceAll(msgStrHoraInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (ncamp.value != "") { if (!SPW_JS_NumHora(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrHoraInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //Valida uma string obrigatoria //CNPPU = Caracteres Não Permitidos Pelo Utilizador //NotValCE = não valida caracteres especias ' e | true/false function SPW_JS_ValidaStrObg(theForm, campo, len, nome, CNPPU, NotValCE) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (!SPW_JS_Espacos(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!NotValCE) { if (!SPW_JS_CaracteresEsp(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [["'|"], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } if (CNPPU) { if (CNPPU.length > 0) { if (!SPW_JS_ScanP(ncamp.value, CNPPU)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [[CNPPU], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } } //só se for > 0 é que comparo, caso contrário quer dizer //que o campo não tem limite de caracteres. if (len > 0) { if (ncamp.value.length > len) { msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [len]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //Valida uma string obrigatoria //CNPPU = Caracteres Não Permitidos Pelo Utilizador //NotValCE = não valida caracteres especias ' e | true/false function SPW_JS_ValidaStrValueObg(valor, len, nome, CNPPU, NotValCE) { var msgErro = new String(); if (!SPW_JS_Espacos(valor)) { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErroShow(msgErro); return (false); } if (!NotValCE) { if (!SPW_JS_CaracteresEsp(valor)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [["'|"], [nome]]); SPW_JS_MsgErroShow(msgErro); return (false); } } if (CNPPU) { if (CNPPU.length > 0) { if (!SPW_JS_ScanP(valor, CNPPU)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [[CNPPU], [nome]]); SPW_JS_MsgErroShow(msgErro); return (false); } } } //só se for > 0 é que comparo, caso contrário quer dizer //que o campo não tem limite de caracteres. if (len > 0) { if (valor.length > len) { msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [len]]); SPW_JS_MsgErroShow(msgErro); return (false); } } return (true); } //Valida uma string opcional //CNPPU = Caracteres não permitidos pelo utilizador //NotValCE = não valida caracteres especias ' e | true/false function SPW_JS_ValidaStrOpc(theForm, campo, len, nome, CNPPU, NotValCE) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value != "") { if (!NotValCE) { if (!SPW_JS_CaracteresEsp(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [["'|"], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } if (CNPPU) { if (CNPPU.length > 0) { if (!SPW_JS_ScanP(ncamp.value, CNPPU)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [[CNPPU], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } } //só se for > 0 é que comparo, caso contrário quer dizer //que o campo não tem limite de caracteres. if (len > 0) { if (ncamp.value.length > len) { msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [len]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } } return (true); } //Valida uma string opcional //CNPPU = Caracteres Não Permitidos Pelo Utilizador //NotValCE = não valida caracteres especias ' e | true/false function SPW_JS_ValidaStrValueOpc(valor, len, nome, CNPPU, NotValCE) { var msgErro = new String(); if (valor != "") { if (!NotValCE) { if (!SPW_JS_CaracteresEsp(valor)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [["'|"], [nome]]); SPW_JS_MsgErroShow(msgErro); return (false); } } if (CNPPU) { if (CNPPU.length > 0) { if (!SPW_JS_ScanP(valor, CNPPU)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [[CNPPU], [nome]]); SPW_JS_MsgErroShow(msgErro); return (false); } } } //só se for > 0 é que comparo, caso contrário quer dizer //que o campo não tem limite de caracteres. if (len > 0) { if (valor.length > len) { msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [len]]); SPW_JS_MsgErroShow(msgErro); return (false); } } } return (true); } //Valida um email obrigatorio function SPW_JS_ValidaEmailObg(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_CaracteresEsp(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [["'|"], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Email(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrEmailInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //Valida um email opcional function SPW_JS_ValidaEmailOpc(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value != "") { if (!SPW_JS_Email(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrEmailInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_CaracteresEsp(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [["'|"], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //Valida um email obrigatorio com validação também do seu comprimento function SPW_JS_ValidaEmailObg1(theForm, campo, len, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_CaracteresEsp(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [["'|"], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Email(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrEmailInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (ncamp.value.length > len) { msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [len]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //Valida um email opcional com validação também do seu comprimento function SPW_JS_ValidaEmailOpc1(theForm, campo, len, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value != "") { if (!SPW_JS_Email1(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrEmailInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_CaracteresEsp(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrCaractInv, [["'|"], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //Valida um Numero Inteiro obrigatorio function SPW_JS_ValidaIntObg(theForm, campo, len, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); num = ncamp.value.toString().replace(/ /g, ""); num = num.replace(/\$|\,/g, ''); if (num == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Scan(num, '0123456789')) { msgErro = SPW_JS_ReplaceAll(msgStrNumInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Num(num, len, 0)) { msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [len]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //Valida um Numero Inteiro obrigatorio,tem que ser > 0 function SPW_JS_ValidaIntObg1(theForm, campo, len, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); num = ncamp.value.toString().replace(/ /g, ""); num = num.replace(/\$|\,/g, ''); if (num == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Scan(num, '0123456789')) { msgErro = SPW_JS_ReplaceAll(msgStrNumInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Num(num, len, 0)) { msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [len]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (num == 0) { msgErro = SPW_JS_ReplaceAll(msgStrNumObgMaiorZero, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //Valida um Numero Inteiro opcional function SPW_JS_ValidaIntOpc(theForm, campo, len, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); num = ncamp.value.toString().replace(/ /g, ""); num = num.replace(/\$|\,/g, ''); if (num != "") { if (!SPW_JS_Scan(num, '0123456789')) { msgErro = SPW_JS_ReplaceAll(msgStrNumInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Num(num, len, 0)) { msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [len]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //Valida um Numero Inteiro opcional tem que ser > 0 function SPW_JS_ValidaIntOpc1(theForm, campo, len, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); num = ncamp.value.toString().replace(/ /g, ""); num = num.replace(/\$|\,/g, ''); if (num != "") { if (!SPW_JS_Scan(num, '0123456789')) { msgErro = SPW_JS_ReplaceAll(msgStrNumInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Num(num, len, 0)) { msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [len]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (num == 0) { msgErro = SPW_JS_ReplaceAll(msgStrNumObgMaiorZero, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //valida um Numero dado obrigatorio function SPW_JS_ValidaNumObg(theForm, campo, nome, NumCasasInt, NumCasasDec) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); num = ncamp.value.toString().replace(/ /g, ""); if (num == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Scan(num, '0123456789.-')) { msgErro = SPW_JS_ReplaceAll(msgStrNumCaractVal, [[". -"], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Num(num, NumCasasInt, NumCasasDec)) { msgErro = SPW_JS_ReplaceAll(msgStrDecInv, [[nome], [NumCasasInt], [NumCasasDec]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //valida um Numero dado obrigatorio, tem que ser > 0 function SPW_JS_ValidaNumObg1(theForm, campo, nome, NumCasasInt, NumCasasDec) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); num = ncamp.value.toString().replace(/ /g, ""); if (num == "") { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!Number(num)) { msgErro = SPW_JS_ReplaceAll(msgStrNumObgMaiorZero, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); //SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é do tipo numérico e o valor deve ser maior que zero (0).\nUtilize apenas caracteres numéricos e \".\" para preencher o campo."); return (false); } if (!SPW_JS_Scan(num, '0123456789.')) { msgErro = SPW_JS_ReplaceAll(msgStrNumCaractVal, [["."], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Num(num, NumCasasInt, NumCasasDec)) { msgErro = SPW_JS_ReplaceAll(msgStrDecInv, [[nome], [NumCasasInt], [NumCasasDec]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //valida um Numero dado opcional function SPW_JS_ValidaNumOpc(theForm, campo, nome, NumCasasInt, NumCasasDec) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); num = ncamp.value.toString().replace(/ /g, ""); if (num != "") { if (!SPW_JS_Scan(num, '0123456789.-')) { msgErro = SPW_JS_ReplaceAll(msgStrNumCaractVal, [[". -"], [nome]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_Num(num, NumCasasInt, NumCasasDec)) { msgErro = SPW_JS_ReplaceAll(msgStrDecInv, [[nome], [NumCasasInt], [NumCasasDec]]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } } return (true); } //valida um Select obrigatório function SPW_JS_ValidaSelectObg(theForm, campo, nome, valor) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value == valor) { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //valida um Check obrigatório function SPW_JS_ValidaCheckObg(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (!ncamp.checked) { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //valida um radio obrigatorio function SPW_JS_ValidaRadioObg(theForm, campo, nome, num) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); var i = 0; var aux = false; if (num > 1) { if (num != ncamp.length) { msgErro = SPW_JS_ReplaceAll(msgStrRadInv, [nome]); alert(msgErro); return (false); } } if (num == 1) { if (ncamp.checked) return (true); } else { for (i = 0; i < num; i++) { if (ncamp[i].checked) aux = true; } } if (!aux) { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro, num); return (false); } return (true); } //valida um select MULTIPLE SIZE obrigatorio function SPW_JS_ValidaMultSizeObg(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.length == 0) { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //Valida que pelo menos um dos campos passados no array esteja preenchido function SPW_JS_ValidaCamposObg(theForm, arrCampos, arrNomes,valor) { var isEmpty = true; var ncamp = new Object(); var strDesc = new String(); var strDescNomes = new String(); for (var i = 0; i < arrCampos.length; i++) { if (SPW_JS_IsObject(arrCampos[i])) var ncamp = arrCampos[i]; else var ncamp = eval(theForm + "." + arrCampos[i]); strDescNomes += " - " + arrNomes[i] + "\n"; switch (ncamp.type) { case "checkbox": isEmpty = !ncamp.checked; break; case "select-one": isEmpty = (ncamp.value == valor); break; default: if (SPW_JS_Espacos(ncamp.value)) { isEmpty = false; } break; } if (!isEmpty) break; } if (isEmpty) { msgErro = SPW_JS_ReplaceAll(msgStrObgMulti, [strDescNomes]); SPW_JS_MsgErro(theForm, arrCampos[0], msgErro) return (false); } return (true); } //Valida que o Nº de Contribuinte está preechido e correcto //Valida Unicamente NIF portugueses function SPW_JS_ValidaNumContribuinteObg(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (ncamp.value == '') { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } if (!SPW_JS_IsNumContribuinte(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrNumContribuinteInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //Valida que o Nº de Contribuinte é correcto //Valida Unicamente NIF portugueses function SPW_JS_ValidaNumContribuinteOpc(theForm, campo, nome) { if (SPW_JS_IsObject(campo)) var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var msgErro = new String(); if (!SPW_JS_IsNumContribuinte(ncamp.value)) { msgErro = SPW_JS_ReplaceAll(msgStrNumContribuinteInv, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //unformat Numero function unformatNum(str) { if (!str) return str; // nothing to do str = ("" + str); var nstr = ''; var code; var hasDot = false; for (var i = 0; i < str.length; i++) { code = str.charCodeAt(i); if (code >= 48 && code <= 57) nstr += str.charAt(i); else if ((code == 44 || code == 46) && !hasDot) { // transforma virgula em ponto nstr += '.'; hasDot = true; } else if (code == 45 && i == 0) // minus sign nstr += str.charAt(i); } return nstr; } //formata numero //(str, decPlaces, GroupDigits) function SPW_JS_FormatNumber(str, decPlaces, GroupDigits) { return SPW_JS_FormatNumber2(str, decPlaces, ".", GroupDigits); } //formata numero //(str, decPlaces, decDigit, groupDigits) function SPW_JS_FormatNumber2(str, decPlaces, decDigit, groupDigits) { var auxStr; if (str == "") str = 0; if (isNaN(Number(decPlaces))) { decPlaces = 2; } str = ("" + str); auxStr = unformatNum(str); var dotPos = auxStr.indexOf(".") var decStr = ""; if (dotPos >= 0) { if (auxStr != "0") { auxStr = "" + Math.round(parseFloat(auxStr) * Math.pow(10, decPlaces)) / Math.pow(10, decPlaces); } dotPos = auxStr.indexOf(".") } if (dotPos > 0) { if (dotPos < (auxStr.length - 1)) decStr = auxStr.substr(dotPos + 1, 3); auxStr = reverseStr(auxStr.substr(0, dotPos)) } else { auxStr = reverseStr(auxStr); } var newStr = ''; for (var i = 0; i < auxStr.length; i++) { if (i > 0 && (i % 3) == 0) newStr += groupDigits.toString(); newStr += auxStr.charAt(i); } newStr = reverseStr(newStr) var _dp = ""; for (var j = 0; j < decPlaces; j++) { _dp += "0"; } decStr += _dp; decStr = decStr.substr(0, decPlaces); newStr += decDigit + decStr; return newStr; } //Devolve uma string invertida function reverseStr(str) { if (!str) return str; // nothing to do var rstr = ''; for (var i = str.length - 1; i >= 0; i--) rstr += str.charAt(i); return rstr; } // Se o caracter introduzido não fôr um número então não o mostra. // no input onkeypress="return SPW_JS_CheckNum(event)" function SPW_JS_CheckNum(e) { var codigoTecla; if (window.event) // IE { codigoTecla = event.keyCode } else if (e.which) // Netscape/Firefox/Opera { codigoTecla = e.which } if (codigoTecla == 8) return true; // BS if (codigoTecla < 48 || codigoTecla > 57) return false; return true; } // Se o caracter introduzido não fôr um número ou o ponto //ou a virgula então não o mostra. //no input onkeypress="return SPW_JS_CheckNumDot(event)" function SPW_JS_CheckNumDot(e) { var codigoTecla; //codigoTecla = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode; if (window.event) // IE { codigoTecla = event.keyCode } else if (e.which) // Netscape/Firefox/Opera { codigoTecla = e.which } switch (codigoTecla) { // virgula ou ponto case 44: case 46: if (event.srcElement.value == '') { event.srcElement.value = '0.'; return false; } return (event.srcElement.value.indexOf(",") < 0 && event.srcElement.value.indexOf(".") < 0 && event.srcElement.value.length > 0); break; // Backspace case 8: return true; break; } if (codigoTecla < 48 || codigoTecla > 57) return false; return (true); } // Se o caracter introduzido não fôr um número ou o ponto ou a virgula, //ou o sinal menos então não o mostra. //no input onkeypress="return SPW_JS_CheckNumDot(event)" function SPW_JS_CheckNumDotNeg(e) { var codigoTecla; if (window.event) // IE { codigoTecla = event.keyCode } else if (e.which) // Netscape/Firefox/Opera { codigoTecla = e.which } switch (codigoTecla) { // virgula ou ponto case 44: case 46: if (event.srcElement.value == '') { event.srcElement.value = '0.'; return false; } return (event.srcElement.value.indexOf(",") < 0 && event.srcElement.value.indexOf(".") < 0 && event.srcElement.value.length > 0); break; // menos "-" case 45: if (event.srcElement.value.indexOf("-") < 0) event.srcElement.value = '-' + event.srcElement.value; return false; break; // Backspace case 8: return true; break; } if (codigoTecla < 48 || codigoTecla > 57) return false; return (true); } // verifica se uma data é maior que a outra, //retorna false se Datafim < DataIni function SPW_JS_Compara_Data(DataIni, DataFim, Tipo) { if (!SPW_JS_Scan(DataIni, "0123456789/-")) return (false); if (!SPW_JS_Scan(DataFim, "0123456789/-")) return (false); if (!SPW_JS_Data(DataIni, Tipo)) return (false); if (!SPW_JS_Data(DataFim, Tipo)) return (false); if (DataIni.search("/") > -1) { var a_dateini = DataIni.split('/'); var a_datefim = DataFim.split('/'); } else if (DataIni.search("-") > -1) { var a_dateini = DataIni.split('-'); var a_datefim = DataFim.split('-'); } else return (false); var monthini = a_dateini[1]; var dayini = a_dateini[2]; var yearini = a_dateini[0]; var monthfim = a_datefim[1]; var dayfim = a_datefim[2]; var yearfim = a_datefim[0]; if (Tipo == "0") { var monthini = a_dateini[1]; var dayini = a_dateini[0]; var yearini = a_dateini[2]; var monthfim = a_datefim[1]; var dayfim = a_datefim[0]; var yearfim = a_datefim[2]; } if (Tipo == "1") { var monthini = a_dateini[1]; var dayini = a_dateini[2]; var yearini = a_dateini[0]; var monthfim = a_datefim[1]; var dayfim = a_datefim[2]; var yearfim = a_datefim[0]; } if (Tipo == "2") { var monthini = a_dateini[2]; var dayini = a_dateini[1]; var yearini = a_dateini[0]; var monthfim = a_datefim[2]; var dayfim = a_datefim[1]; var yearfim = a_datefim[0]; } var DI = new Date(parseInt(yearini, 10), parseInt(monthini, 10) - 1, parseInt(dayini, 10)); var DF = new Date(parseInt(yearfim, 10), parseInt(monthfim, 10) - 1, parseInt(dayfim, 10)); if (DF < DI) return (false); else return (true); } // verifica se uma data é maior que a outra, //retorna false se Datafim + HoraFim < DataIni + HoraIni function SPW_JS_Compara_DataHora(DataIni, HoraIni, DataFim, HoraFim, Tipo) { if (!SPW_JS_Scan(DataIni, "0123456789/-")) return (false); if (!SPW_JS_Scan(HoraIni, "0123456789:")) return (false); if (!SPW_JS_Scan(DataFim, "0123456789/-")) return (false); if (!SPW_JS_Scan(HoraFim, "0123456789:")) return (false); if (!SPW_JS_Data(DataIni, Tipo)) return (false); if (!SPW_JS_Hora(HoraIni)) return (false); if (!SPW_JS_Data(DataFim, Tipo)) return (false); if (!SPW_JS_Hora(HoraFim)) return (false); if (DataIni.search("/") > -1) { var a_dateini = DataIni.split('/'); var a_datefim = DataFim.split('/'); } else if (DataIni.search("-") > -1) { var a_dateini = DataIni.split('-'); var a_datefim = DataFim.split('-'); } else return (false); var monthini = a_dateini[1]; var dayini = a_dateini[2]; var yearini = a_dateini[0]; var monthfim = a_datefim[1]; var dayfim = a_datefim[2]; var yearfim = a_datefim[0]; if (Tipo == "0") { var monthini = a_dateini[1]; var dayini = a_dateini[0]; var yearini = a_dateini[2]; var monthfim = a_datefim[1]; var dayfim = a_datefim[0]; var yearfim = a_datefim[2]; } if (Tipo == "1") { var monthini = a_dateini[1]; var dayini = a_dateini[2]; var yearini = a_dateini[0]; var monthfim = a_datefim[1]; var dayfim = a_datefim[2]; var yearfim = a_datefim[0]; } if (Tipo == "2") { var monthini = a_dateini[2]; var dayini = a_dateini[1]; var yearini = a_dateini[0]; var monthfim = a_datefim[2]; var dayfim = a_datefim[1]; var yearfim = a_datefim[0]; } var a_horaini = HoraIni.split(':'); var a_horafim = HoraFim.split(':'); var DhI = new Date(parseInt(yearini, 10), parseInt(monthini, 10) - 1, parseInt(dayini, 10), parseInt(a_horaini[0]), parseInt(a_horaini[1])); var DhF = new Date(parseInt(yearfim, 10), parseInt(monthfim, 10) - 1, parseInt(dayfim, 10), parseInt(a_horafim[0]), parseInt(a_horafim[1])); if (DhF < DhI) return (false); else return (true); } // calcula a diferencia entre duas datas retorna dias function SPW_JS_Dif_Data(DataIni, DataFim, Tipo) { if (!SPW_JS_Scan(DataIni, "0123456789/-")) return (false); if (!SPW_JS_Scan(DataFim, "0123456789/-")) return (false); if (!SPW_JS_Data(DataIni, Tipo)) return (false); if (!SPW_JS_Data(DataFim, Tipo)) return (false); if (DataIni.search("/") > -1) { var a_dateini = DataIni.split('/'); var a_datefim = DataFim.split('/'); } else if (DataIni.search("-") > -1) { var a_dateini = DataIni.split('-'); var a_datefim = DataFim.split('-'); } else return (false); DataIni = a_dateini[0] + "/" + a_dateini[1] + "/" + a_dateini[2]; DataFim = a_datefim[0] + "/" + a_datefim[1] + "/" + a_datefim[2]; if (Tipo == "0") { DataIni = a_dateini[2] + "/" + a_dateini[1] + "/" + a_dateini[0]; DataFim = a_datefim[2] + "/" + a_datefim[1] + "/" + a_datefim[0]; } if (Tipo == "1") { DataIni = a_dateini[0] + "/" + a_dateini[1] + "/" + a_dateini[2]; DataFim = a_datefim[0] + "/" + a_datefim[1] + "/" + a_datefim[2]; } if (Tipo == "2") { DataIni = a_dateini[0] + "/" + a_dateini[2] + "/" + a_dateini[1]; DataFim = a_datefim[0] + "/" + a_datefim[2] + "/" + a_datefim[1]; } var sDate = new Date(DataIni); var eDate = new Date(DataFim); var daysApart = Math.abs(Math.round((sDate - eDate) / 86400000)); return (daysApart); } //calcula a data para um determinada dia da semana do ano //necessita da Função SPW_JS_GetDayLimit() function SPW_JS_WeekEnd(n_Week, n_WeekDay) { a_Date = new Date() a_Date.setFullYear(a_Date.getFullYear(), 0, 1) a_LastDate = new Date() a_LastDate.setFullYear(a_Date.getFullYear(), 11, 31) a_DateAct = new Date(); if (n_Week == null || n_Week == "") return (a_DateAct.getFullYear() + "/" + (a_DateAct.getMonth() + 1) + "/" + a_DateAct.getDate()) a_Returns = new Array() if (n_WeekDay == null || n_WeekDay == "") n_WeekDay = 0 var MaxDay = 0; cont = 1; for (var I = 0; I <= 11; I++) { a_Date.setMonth(I); MaxDay = SPW_JS_GetDayLimit(a_Date.getFullYear(), (I + 1)); for (var J = 1; J <= MaxDay; J++) { a_Date.setDate(a_Date.getDate() + 1); if (a_Date.getDay() == n_WeekDay) { a_Returns[cont] = a_Date.getFullYear() + "/" + (a_Date.getMonth() + 1) + "/" + a_Date.getDate() cont++; } } } return (a_Returns[n_Week]) } //calcula a data para um determinada dia da semana do ano seguinte ao corrente //necessita da Função SPW_JS_GetDayLimit() function SPW_JS_NextYearWeekEnd(n_Week, n_WeekDay) { a_Date = new Date() a_Date.setFullYear(a_Date.getFullYear(), 0, 1) a_LastDate = new Date() a_LastDate.setFullYear(a_Date.getFullYear() + 1, 11, 31) a_DateAct = new Date(); if (n_Week == null || n_Week == "") return (a_DateAct.getFullYear() + "/" + (a_DateAct.getMonth() + 1) + "/" + a_DateAct.getDate()) a_Returns = new Array() if (n_WeekDay == null || n_WeekDay == "") n_WeekDay = 0 var MaxDay = 0; cont = 1; for (var I = 0; I <= 11; I++) { a_Date.setMonth(I); MaxDay = SPW_JS_GetDayLimit(a_Date.getFullYear(), (I + 1)); for (var J = 1; J <= MaxDay; J++) { a_Date.setDate(a_Date.getDate() + 1); if (a_Date.getDay() == n_WeekDay) { a_Returns[cont] = a_Date.getFullYear() + 1 + "/" + (a_Date.getMonth() + 1) + "/" + a_Date.getDate() cont++; } } } return (a_Returns[n_Week]) } //busca o numero da semana para a data actual //utiliza a função SPW_JS_getWeekFromDate function SPW_JS_getWeekNr() { var today = new Date(); Year = today.getFullYear(); Month = today.getMonth() + 1; Day = today.getDate(); return SPW_JS_getWeekFromDate(Year, Month, Day); } //verifica o ano function y2k(number) { return (number < 1000) ? number + 1900 : number; } //devolve o numero da semana para uma determinada data //utiliza a função y2k function SPW_JS_getWeekFromDate(year, month, day) { var when = new Date(year, month - 1, day); var newYear = new Date(year, 0, 1); var modDay = newYear.getDay(); var daynum = ((Date.UTC(y2k(year), when.getMonth(), when.getDate(), 0, 0, 0) - Date.UTC(y2k(year), 0, 1, 0, 0, 0)) / 1000 / 60 / 60 / 24) + 1; var weeknum = Math.floor((daynum + modDay - 1) / 7) + 1; if (weeknum == 0) { year--; var prevNewYear = new Date(year, 0, 1); var prevmodDay = prevNewYear.getDay(); if (prevmodDay < 4) weeknum = 53; else weeknum = 52; } return +weeknum; } //Calcula o ultimo dia de cada mes, tomando en conta o ano //necessita da função SPW_JS_IsLeapYear() //Apoia a Função SPW_JS_WeekEnd() function SPW_JS_GetDayLimit(y, m) { var daysOfMonth = new Object(); daysOfMonth['Jan'] = daysOfMonth['January'] = daysOfMonth[1] = 31; daysOfMonth['Feb'] = daysOfMonth['February'] = daysOfMonth[2] = 28; daysOfMonth['Mar'] = daysOfMonth['March'] = daysOfMonth[3] = 31; daysOfMonth['Apr'] = daysOfMonth['April'] = daysOfMonth[4] = 30; daysOfMonth['May'] = daysOfMonth['May'] = daysOfMonth[5] = 31; daysOfMonth['Jun'] = daysOfMonth['June'] = daysOfMonth[6] = 30; daysOfMonth['Jul'] = daysOfMonth['July'] = daysOfMonth[7] = 31; daysOfMonth['Aug'] = daysOfMonth['August'] = daysOfMonth[8] = 31; daysOfMonth['Sep'] = daysOfMonth['September'] = daysOfMonth[9] = 30; daysOfMonth['Oct'] = daysOfMonth['October'] = daysOfMonth[10] = 31; daysOfMonth['Nov'] = daysOfMonth['November'] = daysOfMonth[11] = 30; daysOfMonth['Dec'] = daysOfMonth['December'] = daysOfMonth[12] = 31; if (m == 2 && SPW_JS_IsLeapYear(y)) var dayLimit = 29; else var dayLimit = daysOfMonth[m]; return (dayLimit); } //left pad function SPW_JS_LeftPad(Str, NumMax, Pad) { if (Str.length <= 0) return (Str); if (!Number(NumMax)) return (Str); if (Pad.length <= 0) return (Str); var aux = ""; for (var i = 1; i <= NumMax - Str.length; i++) aux = aux + Pad return (aux + Str) } //right pad function SPW_JS_RightPad(Str, NumMax, Pad) { if (Str.length <= 0) return (Str); if (!Number(NumMax)) return (Str); if (Pad.length <= 0) return (Str); var aux = ""; for (var i = 1; i <= NumMax - Str.length; i++) aux = aux + Pad return (Str + aux) } //valida que os intervalos de varias datas não se cruzam //retorna false se existe um Intervalo de Datas que se cruzem //utiliza a função SPW_JS_Compara_Data //entra array com as Datas Inicio e Datas Fim function SPW_JS_ValidaIntervaloDatas(arrDataIni, arrDataFim) { //validar que os arrays tenham dados if (arrDataIni.length == 0 || arrDataFim.length == 0) return (false) //validar que os valores sejam datas bem formatadas for (var i = 0; i < arrDataIni.length; i++) { if (!SPW_JS_Scan(arrDataIni[i], "0123456789/-")) return (false); if (!SPW_JS_Scan(arrDataFim[i], "0123456789/-")) return (false); if (!SPW_JS_Data(arrDataIni[i])) return (false); if (!SPW_JS_Data(arrDataFim[i])) return (false); } var arrDataIniAux = new Array(); var arrDataFimAux = new Array(); for (var i = 0; i < arrDataIni.length; i++) { arrDataIniAux[i] = arrDataIni[i]; arrDataFimAux[i] = arrDataFim[i]; for (var j = 0; j < arrDataIniAux.length; j++) { if (!SPW_JS_Compara_Data(arrDataIni[i], arrDataIniAux[j]) && !SPW_JS_Compara_Data(arrDataFimAux[j], arrDataIni[i])) return (false) if (!SPW_JS_Compara_Data(arrDataIniAux[j], arrDataIni[i]) && !SPW_JS_Compara_Data(arrDataFim[i], arrDataIniAux[j])) return (false) } } return (true); } //SPW_JS_MaxLength: limita o numero de caracteres num campo //usa o maxlength como limite de caracteres // function SPW_JS_MaxLength(theForm, campo, nome) { var total = 0; if (SPW_JS_IsObject(campo)) var Input = campo; else var Input = eval(theForm + "." + campo); total = Input.getAttribute("maxlength"); if (Input.value.length > total) { //event.keyCode=0; Input.value = Input.value.substring(0, total); msgErro = SPW_JS_ReplaceAll(msgStrLenInv, [[nome], [total]]); SPW_JS_MsgErro(theForm, campo, msgErro); return; } } //formata hora //coloca uma string Hora no formato HH:MM //Utiliza a função SPW_JS_LeftPad(Str,NumMax,Pad) //Utiliza a função SPW_JS_RightPad(Str,NumMax,Pad) //MF: Acrescentei um parâmetro opcional que me diz se quero ou não preencher o campo // e comentei o if dentro do else pois posso ter horas com mais do que duas casas function SPW_JS_FormatHora(strHora, opt) { var auxStr; var HoraFormatada = strHora; if (opt !== 1) { if (strHora == "") return ("00:00"); } else if (strHora == "") return (""); if (strHora.indexOf(":") > 0) { var auxStr = strHora.toString().split(":"); var H = auxStr[0]; var M = auxStr[1]; H = SPW_JS_LeftPad(H, 2, 0); M = SPW_JS_RightPad(M, 2, 0); HoraFormatada = H + ":" + M; } else { //if (strHora.toString().length <= 2) HoraFormatada = SPW_JS_LeftPad(strHora, 2, 0) + ":00" } return (HoraFormatada) } //Calcula o Dia da Semana //utiliza a função SPW_JS_Data para verificar que a data é válida function SPW_JS_GetDiaDaSemana(year, month, day) { var then = new Date(year, month - 1, day) //-1 por que o mês de JAN = 0 var theday = then.getDay(); var weekday = new Array(6); weekday[0] = msgDomingo; weekday[1] = msgSegunda; weekday[2] = msgTerca; weekday[3] = msgQuarta; weekday[4] = msgQuinta; weekday[5] = msgSexta; weekday[6] = msgSabado; return (weekday[theday]); } //permite Somar ou Subtrair intervalos a uma data //é semelhante à DateAdd do VB //interval = "yyyy, q, m, y, d, wd, w, h, n, s, or ms" function SPW_JS_DateAdd(p_Interval, p_Number, p_Date) { var thing = new String(); var dtNow = new Date(); if (p_Date != undefined) { // get the milliseconds for this Date object. var dtAux = Date.parse(p_Date); // check that the start parameter is a valid Date. if (isNaN(dtAux)) { throw "Date format is invalid. \n You passed: " + p_Date; return (false); } dtNow = new Date(dtAux); } //in the spirt of VB we'll make this function non-case sensitive //and convert the charcters for the coder. p_Interval = p_Interval.toLowerCase(); if (isNaN(p_Number)) { //Only accpets numbers //throws an error so that the coder can see why he effed up throw "The second parameter must be a number. \n You passed: " + p_Number; return false; } p_Number = new Number(p_Number); switch (p_Interval.toLowerCase()) { case "yyyy": {// year dtNow.setFullYear(dtNow.getFullYear() + p_Number); break; } case "q": { // quarter dtNow.setMonth(dtNow.getMonth() + (p_Number * 3)); break; } case "m": { // month dtNow.setMonth(dtNow.getMonth() + p_Number); break; } case "y": // day of year case "d": // day case "wd": { // weekday dtNow.setDate(dtNow.getDate() + p_Number); break; } case "w": { // week of year dtNow.setDate(dtNow.getDate() + (p_Number * 7)); break; } case "h": { // hour dtNow.setHours(dtNow.getHours() + p_Number); break; } case "n": { // minute dtNow.setMinutes(dtNow.getMinutes() + p_Number); break; } case "s": { // second dtNow.setSeconds(dtNow.getSeconds() + p_Number); break; } case "ms": { // second dtNow.setMilliseconds(dtNow.getMilliseconds() + p_Number); break; } default: { //throws an error so that the coder can see why he effed up and //a list of elegible letters. throw "The first parameter must be a string from this list: \n" + "yyyy, q, m, y, d, wd, w, h, n, s, or ms. You passed: " + p_Interval; return false; } } // Atenção não pode retornar uma string... tem que retornar o objecto Date. var dt = new Date(dtNow.getFullYear(), dtNow.getMonth(), dtNow.getDate()); return dt; } //Devolve um array com a Data de Inicio e Data de Fim // para uma determinada data //é caculada a semana a que pertence a data e depois //são calculadas as duas datas //utiliza a função SPW_JS_getWeekFromDate(),SPW_JS_DateAdd() function SPW_JS_GetIntervaloSemana(Ano, Mes, Dia) { var semana, inicio, fim; semana = SPW_JS_getWeekFromDate(Ano, Mes, Dia); var aux = SPW_JS_DateAdd("w", semana - 1, Ano + "/01/01"); var arrDatas = new Array(1); var aData = new Date(aux) //-1 por que o mês de JAN = 0 var oDia = aData.getDay(); arrDatas[0] = SPW_JS_DateAdd("d", -oDia, aux); arrDatas[1] = SPW_JS_DateAdd("d", 6, arrDatas[0]); return arrDatas; } // verifica se uma hora é maior que a outra, // retorna false se HoraFim < HoraIni function SPW_JS_Compara_Hora(HoraIni, HoraFim) { HoraIni = SPW_JS_FormatHora(HoraIni) HoraFim = SPW_JS_FormatHora(HoraFim) var DI = "2000/01/01 " + HoraIni var DF = "2000/01/01 " + HoraFim var DIP = Date.parse(DI) var DFP = Date.parse(DF) if (DFP < DIP) return (false); else return (true); } //valida que os intervalos de varios numeros não se cruzam //retorna false se existe um Intervalo que se cruzem //entra array com os intervalos function SPW_JS_ValidaIntervaloNumeros(arrIni, arrFim) { //validar que os arrays tenham dados if (arrIni.length == 0 || arrFim.length == 0) return (false) //validar que os valores sejam numeros for (var i = 0; i < arrIni.length; i++) { if (!SPW_JS_Scan(arrIni[i], '0123456789.')) return (false) if (!SPW_JS_Scan(arrFim[i], '0123456789.')) return (false) } for (var i = 0; i < arrIni.length; i++) { for (var j = i; j < arrIni.length; j++) { if (!SPW_JS_ComparaNumero(arrIni[i], arrIni[j]) && !SPW_JS_ComparaNumero(arrFim[j], arrIni[i])) return (false) if (!SPW_JS_ComparaNumero(arrIni[j], arrIni[i]) && !SPW_JS_ComparaNumero(arrFim[i], arrIni[j])) return (false) } } return (true); } // verifica se um numero é maior que o outro, // retorna false se numFim < numIni function SPW_JS_ComparaNumero(numIni, numFim) { // validar if (!SPW_JS_Scan(numIni, '0123456789.')) return (false) if (!SPW_JS_Scan(numFim, '0123456789.')) return (false) if (Number(numIni) > Number(numFim)) return (false); else return (true); } //valida um array de Checks, obriga a pelo menos um function SPW_JS_ValidaArrayCheckObg(theForm, campo, nome) { if (campo == '[object]') var ncamp = campo; else var ncamp = eval(theForm + "." + campo); var aux = false; var num = ncamp.length; if (num == 1) { if (ncamp.checked) return (true); } else { for (i = 0; i < num; i++) { if (ncamp[i].checked) aux = true; } } if (!aux) { msgErro = SPW_JS_ReplaceAll(msgStrObg, [nome]); SPW_JS_MsgErro(theForm, campo, msgErro); return (false); } return (true); } //formata a data passada para uma string no formato YYYY/MM/DD function SPW_JS_FormataData(dtDate) { return (dtDate.getFullYear() + "/" + (dtDate.getMonth()+1) + "/" + dtDate.getDate()); } //********************************************