//----------------------------------------------------------------- //guida // validacoes_new.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************************************************************ //mostra msg de erro e coloca o ponteiro no input function SPW_JS_MsgErro(theForm,campo,descerro,radio) { var cam = eval(theForm + "." + campo) alert(descerro); if (radio > 1) cam[0].focus(); else cam.focus(); } //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); } //Fim funções de ajuda*************************************************************** //*********************************************************************************** //Valida uma data obrigatoria function SPW_JS_ValidaDataObg(theForm,campo,nome,tipo) { var ncamp = eval(theForm + "." + campo) if (ncamp.value == "") { SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório."); return(false); } if (!SPW_JS_Scan(ncamp.value,"0123456789/-")) { SPW_JS_MsgErro(theForm,campo,"Insira uma data válida no campo " + nome + "."); return(false); } if (!SPW_JS_Data(ncamp.value,tipo)) { SPW_JS_MsgErro(theForm,campo,"Insira uma data válida no campo " + nome + ". Verifique se o Mês é superior a 12 ou inferior a 1 ou se o dia é superior ao numero de dias do Mês."); return(false); } return(true); } //Valida uma data opcional function SPW_JS_ValidaDataOpc(theForm,campo,nome,tipo) { var ncamp = eval(theForm + "." + campo) if (ncamp.value != "") { if (!SPW_JS_Data(ncamp.value,tipo)) { SPW_JS_MsgErro(theForm,campo,"Insira uma data válida no campo " + nome + ". Verifique se o Mês é superior a 12 ou inferior a 1 ou se o dia é superior ao numero de dias do Mês."); return(false); } } if (!SPW_JS_Scan(ncamp.value,"0123456789/-")) { SPW_JS_MsgErro(theForm,campo,"Insira uma data válida no campo " + nome + "."); return(false); } return(true); } //Valida hora obrigatória function SPW_JS_ValidaHoraObg(theForm,campo,nome) { var ncamp = eval(theForm + "." + campo) if (ncamp.value == "") { SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório."); return(false); } if (!SPW_JS_Scan(ncamp.value,"0123456789:")) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome + ". Verifique que é do tipo HH:MM."); 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) { SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório."); return(false); } } if (ncamp.value != "") { if (!SPW_validar_hora(ncamp.value,2)) { SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique que é do tipo HH:MM."); return(false); } } return(true); } //Valida hora obrigatória com segundos function SPW_JS_ValidaHoraSegObg(theForm,campo,nome) { var ncamp = eval(theForm + "." + campo) if (ncamp.value == "") { SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório."); return(false); } if (!SPW_JS_Scan(ncamp.value,"0123456789:")) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome + ". Verifique que é do tipo HH:MM:SS."); return(false); } if (ncamp.value != "") { if (!SPW_validar_hora(ncamp.value,2)) { SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique que é do tipo HH:MM:SS."); return(false); } } return(true); } //Valida hora opcional function SPW_JS_ValidaHoraOpc(theForm,campo,nome) { var ncamp = eval(theForm + "." + campo) if (!SPW_JS_Scan(ncamp.value,"0123456789:")) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome + ". Verifique que é do tipo HH:MM."); return(false); } if (ncamp.value != "") { if (!SPW_validar_hora(ncamp.value,2)) { SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique se é do tipo HH:MM e o seu valor está compreendido entre 00:00 e 23:59."); return(false); } } return(true); } //Valida Nº de horas obrigatória function SPW_JS_ValidaNumHoraObg(theForm,campo,nome) { var ncamp = eval(theForm + "." + campo) if (ncamp.value == "") { SPW_JS_MsgErro(theForm,campo,"O campo " + nome +" é de preenchimento obrigatório."); return(false); } if (!SPW_JS_Scan(ncamp.value,"0123456789:")) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome + ". Verifique que é do tipo HH:MM."); return(false); } if (ncamp.value != "") { if (!SPW_JS_NumHora(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique se é do tipo HH:MM e o valor dos minutos inferior a 60."); return(false); } } return(true); } //Valida Nº de horas opcional function SPW_JS_ValidaNumHoraOpc(theForm,campo,nome) { var ncamp = eval(theForm + "." + campo) if (!SPW_JS_Scan(ncamp.value,"0123456789:")) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas dígitos e o caracter \":\" para preencher o campo " + nome + ". Verifique que é do tipo HH:MM."); return(false); } if (ncamp.value != "") { if (!SPW_JS_NumHora(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Insira uma hora válida no campo " + nome + ". Verifique se é do tipo HH:MM e o valor dos minutos inferior a 60."); return(false); } } return(true); } //Valida uma string obrigatoria //CNPPU = Caracteres não permitidos pelo utilizador function SPW_JS_ValidaStrObg(theForm,campo,len,nome,CNPPU) { var ncamp = eval(theForm + "." + campo) if (!SPW_JS_Espacos(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"O campo "+ nome +" é de preenchimento obrigatório."); return(false); } if (!SPW_JS_CaracteresEsp(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Não utilizar o(s) caracter(es) ' ou | para preencher o campo "+ nome +"."); return(false); } if (CNPPU) { if (CNPPU.length > 0) {//alert(CNPPU); if (!SPW_JS_ScanP(ncamp.value,CNPPU)) { SPW_JS_MsgErro(theForm,campo,"Os seguintes caracteres [" + CNPPU + "] não são permitidos no campo " + nome + "."); 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) { SPW_JS_MsgErro(theForm,campo,"O Tamanho do campo "+ nome +" supera o permitido ("+ len +" caracteres no máximo)."); return(false); } } return(true); } //Valida uma string opcional //CNPPU = Caracteres não permitidos pelo utilizador function SPW_JS_ValidaStrOpc(theForm,campo,len,nome,CNPPU) { var ncamp = eval(theForm + "." + campo) if (ncamp.value != "") { if (!SPW_JS_CaracteresEsp(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Não utilizar o(s) caracter(es) ' ou | para preencher o campo "+ nome +"."); return(false); } if (CNPPU) { if (CNPPU.length > 0) { if (!SPW_JS_ScanP(ncamp.value,CNPPU)) { SPW_JS_MsgErro(theForm,campo,"Os seguintes caracteres [" + CNPPU + "] não são permitidos no campo " + nome + "."); 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) { SPW_JS_MsgErro(theForm,campo,"O Tamanho do campo " + nome + " supera o permitido ("+ len +" caracteres no máximo)."); return(false); } } } return(true); } //Valida um email obrigatorio function SPW_JS_ValidaEmailObg(theForm,campo,nome) { var ncamp = eval(theForm + "." + campo) if (ncamp.value == "") { SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório."); return(false); } if (!SPW_JS_CaracteresEsp(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Não utilizar o(s) caracter(es) ' ou | para preencher o campo " + nome + "."); return(false); } if (!SPW_JS_Email(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Por favor, preencha o campo " + nome + " correctamente."); return(false); } return(true); } //Valida um email opcional function SPW_JS_ValidaEmailOpc(theForm,campo,nome) { var ncamp = eval(theForm + "." + campo) if (ncamp.value != "") { if (!SPW_JS_Email(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Por favor, preencha o campo " + nome + " correctamente."); return(false); } if (!SPW_JS_CaracteresEsp(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Não utilizar o(s) caracter(es) ' ou | para preencher o campo " + nome + "."); return(false); } } return(true); } //Valida um email obrigatorio com validação também do seu comprimento function SPW_JS_ValidaEmailObg1(theForm,campo,len,nome) { var ncamp = eval(theForm + "." + campo) if (ncamp.value == "") { SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório."); return(false); } if (!SPW_JS_CaracteresEsp(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Não utilizar o(s) caracter(es) ' ou | para preencher o campo " + nome + "."); return(false); } if (!SPW_JS_Email(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Por favor, preencha o campo " + nome + " correctamente."); return(false); } if (ncamp.value.length > len) { SPW_JS_MsgErro(theForm,campo,"O tamanho do campo "+ nome +" supera o permitido ("+ len +" caracteres no máximo)."); return(false); } return(true); } //Valida um email opcional com validação também do seu comprimento function SPW_JS_ValidaEmailOpc1(theForm,campo,len,nome) { var ncamp = eval(theForm + "." + campo) if (ncamp.value != "") { /*if (ncamp.value.length > len) { SPW_JS_MsgErro(theForm,campo,"O tamanho do campo "+ nome +" supera o permitido ("+ len +" caracteres no máximo)."); return(false); }*/ if (!SPW_JS_Email1(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Por favor, preencha o campo " + nome + " correctamente."); return(false); } if (!SPW_JS_CaracteresEsp(ncamp.value)) { SPW_JS_MsgErro(theForm,campo,"Não utilizar o(s) caracter(es) ' ou | para preencher o campo " + nome + "."); return(false); } } return(true); } //Valida um Numero Inteiro obrigatorio function SPW_JS_ValidaIntObg(theForm,campo,len,nome) { var ncamp = eval(theForm + "." + campo) num = ncamp.value.toString().replace(/ /g,""); num = num.replace(/\$|\,/g,''); if (num == "") { SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório."); return(false); } if (!SPW_JS_Scan(num,'0123456789')) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos para preencher o campo " + nome +"."); return(false); } if (!SPW_JS_Num(num,len,0)) { SPW_JS_MsgErro(theForm,campo,"O nº de caracteres inseridos no campo " + nome + " é superior ao permitido (" + len +")." ); return(false); } return(true); } //Valida um Numero Inteiro obrigatorio,tem que ser > 0 function SPW_JS_ValidaIntObg1(theForm,campo,len,nome) { var ncamp = eval(theForm + "." + campo) num = ncamp.value.toString().replace(/ /g,""); num = num.replace(/\$|\,/g,''); if (num == "" || !Number(num)) { SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório."); return(false); } if (!SPW_JS_Scan(num,'0123456789')) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos para preencher o campo " + nome +"."); return(false); } if (!SPW_JS_Num(num,len,0)) { SPW_JS_MsgErro(theForm,campo,"O nº de caracteres inseridos no campo " + nome + " é superior ao permitido (" + len +")." ); return(false); } return(true); } //Valida um Numero Inteiro opcional function SPW_JS_ValidaIntOpc(theForm,campo,len,nome) { var ncamp = eval(theForm + "." + campo) num = ncamp.value.toString().replace(/ /g,""); num = num.replace(/\$|\,/g,''); if (num != "") { if (!SPW_JS_Scan(num,'0123456789')) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos para preencher o campo " + nome +"."); return(false); } if (!SPW_JS_Num (num,len,0)) { SPW_JS_MsgErro(theForm,campo,"O nº de caracteres inseridos no campo " + nome + " é superior ao permitido (" + len +")." ); return(false); } } return(true); } //Valida um Numero Inteiro opcional,tem que ser > 0 function SPW_JS_ValidaIntOpc1(theForm,campo,len,nome) { var ncamp = eval(theForm + "." + campo) num = ncamp.value.toString().replace(/ /g,""); num = num.replace(/\$|\,/g,''); if (num != "") { if (!SPW_JS_Scan(num,'0123456789')) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos para preencher o campo " + nome +"."); return(false); } if (!SPW_JS_Num (num,len,0)) { SPW_JS_MsgErro(theForm,campo,"O nº de caracteres inseridos no campo " + nome + " é superior ao permitido (" + len +")." ); return(false); } if (num == 0) { SPW_JS_MsgErro(theForm,campo,"Utilize valores maiores que zero para preencher o campo " + nome +"."); return(false); } } return(true); } //valida um Numero dado obrigatorio function SPW_JS_ValidaNumObg(theForm,campo,nome,NumCasasInt,NumCasasDec) { var ncamp = eval(theForm + "." + campo) num = ncamp.value.toString().replace(/ /g,""); if (num == "") { SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório."); return(false); } if (!SPW_JS_Scan(num,'0123456789.-')) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos e \".\" ou \"-\" para preencher o campo " + nome +"."); return(false); } if (!SPW_JS_Num(num,NumCasasInt,NumCasasDec)) { SPW_JS_MsgErro(theForm,campo,"O valor inserido no campo " + nome + " não é permitido. O nº deverá ter no máximo " + NumCasasInt + " digítos na parte inteira e " + NumCasasDec +" na decimal."); return(false); } return(true); } //valida um Numero dado obrigatorio, tem que ser > 0 function SPW_JS_ValidaNumObg1(theForm,campo,nome,NumCasasInt,NumCasasDec) { var ncamp = eval(theForm + "." + campo) num = ncamp.value.toString().replace(/ /g,""); if (num == "") { SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório."); return(false); } if (!Number(num)) { 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.')) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos e \".\" para preencher o campo " + nome +"."); return(false); } if (!SPW_JS_Num(num,NumCasasInt,NumCasasDec)) { SPW_JS_MsgErro(theForm,campo,"O valor inserido no campo " + nome + " não é permitido. O nº deverá ter no máximo " + NumCasasInt + " digítos na parte inteira e " + NumCasasDec +" na decimal."); return(false); } return(true); } //valida um Numero dado opcional function SPW_JS_ValidaNumOpc(theForm,campo,nome,NumCasasInt,NumCasasDec) { var ncamp = eval(theForm + "." + campo) num = ncamp.value.toString().replace(/ /g,""); if (num != "") { if (!SPW_JS_Scan(num,'0123456789.-')) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos e \".\" ou \"-\" para preencher o campo " + nome +"."); return(false); } if (!SPW_JS_Num(num,NumCasasInt,NumCasasDec)) { SPW_JS_MsgErro(theForm,campo,"O valor inserido no campo " + nome + " não é permitido. O nº deverá ter no máximo " + NumCasasInt + " digítos na parte inteira e " + NumCasasDec +" na decimal."); return(false); } } return(true); } //valida um Select obrigatório function SPW_JS_ValidaSelectObg(theForm,campo,nome,valor) { var ncamp = eval(theForm + "." + campo) if (ncamp.value == valor) { SPW_JS_MsgErro(theForm,campo,"Por favor escolha uma opção do campo " + nome + "."); return(false); } return(true); } //valida um Check obrigatório function SPW_JS_ValidaCheckObg(theForm,campo,nome) { var ncamp = eval(theForm + "." + campo) if (!ncamp.checked) { SPW_JS_MsgErro(theForm,campo,"O campo " + nome + " é de preenchimento obrigatório."); return(false); } return(true); } //valida um radio obrigatorio function SPW_JS_ValidaRadioObg(theForm,campo,nome,num) { var ncamp = eval(theForm + "." + campo) var i = 0; var aux = false; if (num > 1) { if (num != ncamp.length) { alert("Número de radios incorrecto."); return(false); } } if (num ==1) { if (ncamp.checked) return (true); } else { for (i=0; i=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) { 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; i0 && (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 += "." + 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()" function SPW_JS_CheckNum() { var codigoTecla; codigoTecla=window.event.keyCode; 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()" function SPW_JS_CheckNumDot() { var codigoTecla; codigoTecla = window.event.keyCode; 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()" function SPW_JS_CheckNumDotNeg() { var codigoTecla; codigoTecla = window.event.keyCode; 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); } // 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); 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 d_DI = new Date(); var d_DF = new Date(); d_DI.setFullYear(yearini,monthini-1,dayini); d_DF.setFullYear(yearfim,monthfim-1,dayfim); // do mesmo mes e mesmo ano //var difer = d_DF.getDate() - d_DI.getDate(); var difer = d_DF.getTime() - d_DI.getTime(); difer = Math.floor(difer /(1000 * 60 * 60 * 24)); return(difer); } //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; var Input = eval(theForm + "." + campo); total = eval(Input.maxlength); if (Input.value.length > total){ event.keyCode=0; Input.value = Input.value.substring(0,total); SPW_JS_MsgErro(theForm,campo,"O tamanho do campo " + nome + " supera o permitido ("+ total +" caracteres no máximo)."); 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]="Domingo"; weekday[1]="Segunda-feira"; weekday[2]="Terça-feira"; weekday[3]="Quarta-feira"; weekday[4]="Quinta-feira"; weekday[5]="Sexta-feira"; weekday[6]="Sábado"; return(weekday[theday]); } //permite Somar ou Subtrair intervalos a uma data //é semelhante à DateAdd do VB //interval = w (semanas),d (dias),h (horas),m(minutos),s(segudos) function SPW_JS_DateAdd(interval, number, Data) { // get the milliseconds for this Date object. var buffer = Date.parse( Data ) ; // check that the start parameter is a valid Date. if ( isNaN (buffer) ) return null ; // check that an interval parameter was not numeric. if ( interval.charAt == 'undefined' ) return null ; // check that the number parameter is numeric. if ( isNaN ( number ) ) return null ; // so far, so good... // // what kind of add to do? switch (interval.toString()) { case 'w': case 'W': number *= 7 ; // semanas to days case 'd': case 'D': number *= 24 ; // days to hours // fall through! case 'h': case 'H': number *= 60 ; // hours to minutes // fall through! case 'm': case 'M': number *= 60 ; // minutes to seconds // fall through! case 's': case 'S': number *= 1000 ; // seconds to milliseconds break ; default: // If we get to here then the interval parameter // didn't meet the w,d,h,m,s criteria. return null ; } return new Date( buffer + number ) ; } //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,"01/01/"+Ano); 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 o Código Postal function SPW_JS_ValidaCodPostal(theForm,campo,len,nome) { var ncamp = eval(theForm + "." + campo) num = ncamp.value.toString().replace(/ /g,""); num = num.replace(/\$|\,/g,''); if (num != "") { if (!SPW_JS_Scan(num,'0123456789- ')) { SPW_JS_MsgErro(theForm,campo,"Utilize apenas caracteres numéricos,"-" ou espaço para preencher o campo " + nome +"."); return(false); } if (ncamp.value.length > len) { SPW_JS_MsgErro(theForm,campo,"O Tamanho do campo " + nome + " supera o permitido ("+ len +" caracteres no máximo)."); return(false); } } return(true); } //Valida que pelo menos um dos campos passados no array esteja preenchido function SPW_JS_ValidaCamposObg(theForm,arrCampos,arrNomes){ var isEmpty = true; var ncamp = new Object(); var strDesc = new String(); var strDescNomes = new String(); for (var i = 0; i < arrCampos.length; i++ ) { ncamp = eval(theForm + "." + arrCampos[i]); strDescNomes += " - " + arrNomes[i] + "\n"; if (ncamp.value != ""){ isEmpty = false; } } if (isEmpty) { strDesc = "Um dos seguintes campos é de preenchimento obrigatório:\n"+ strDescNomes SPW_JS_MsgErro(theForm,arrCampos[0],strDesc) return(false); } return(true); } //********************************************