function enableField(form, name) { var checkName = name + ":flag"; var check = form.elements[ checkName ]; if (check != null) check.checked = true; } function postHiddenForm(url) { postForm (document.forms["hidden"], url); } function postHiddenForm(url, target) { postForm (document.forms["hidden"], url, target); } function postForm(form, url) { form.action=url; form.submit(); } function postForm(form, url, target) { form.action=url; form.target=target; form.submit(); } function drawAttention(field) { var t = field.type.toLowerCase(); if( (t=="text") || (t=="textarea") || (t=="password") ) field.select(); field.focus(); } function trim (field) { var start = -1; var stop; var s = field.value; for (var i=0; i < s.length; i++) { if( s.charAt(i) != " " ) { start = i; break; } } if (start == -1) { field.value=""; return; } for (var i=s.length-1; i>=0; i--) { if( s.charAt(i) != " " ) { stop = i; break; } } field.value = s.substring (start, stop+1); } function getRealName (s) { var pos = s.lastIndexOf(":"); if (pos != -1) return s.substring(0,pos); return s; } function isEnabled (form, field) { var n = getRealName( field.name ); var flag = form.elements[ n + ":flag" ]; if (flag == null) return true; return flag.checked; } function isFlag (field) { var n = field.name; var l = n.length; return ( n.substring(l-5,l) == ":flag" ); } function checkInteger (field) { if( isEmpty(field) || (String( parseInt(field.value,10) ) != field.value) ) { alert ("Il campo selezionato deve contenere un numero intero"); drawAttention(field); return false; } return true; } function checkFloat (field) { if( isEmpty(field) || isNaN(field.value) ) { alert ("Il campo selezionato deve contenere un valore numerico"); drawAttention(field); return false; } return true; } function checkHHMMAmount (field) { var hh = ""; var mm = ""; var pos = field.value.indexOf(":"); if (pos == -1) { hh = "0"; mm = field.value; } else { hh = field.value.substring(0, pos); mm = field.value.substring(pos+1, field.value.length); } if( (hh=="") || (mm=="") || isNaN(hh) || isNaN(mm) ) { alert ("Il campo selezionato deve contenere un intervallo di tempo nel formato HH:MM o MM"); drawAttention(field); return false; } return true; } function isEmpty (field) { var s = field.value; for (var i=0; i < s.length; ++i) if (s.charAt(i) != " ") break; return (i >= s.length); } function checkNonEmpty (field) { var t = field.type.toLowerCase(); if( isEmpty(field) ) { if (t == "hidden") alert("Il form non può essere inviato perchè un campo obbligatori è stato lasciato vuoto"); else alert("Il campo selezionato non può essere lasciato vuoto"); field.value = ""; drawAttention(field); return false; } return true; } function checkStringID (field) { if( !checkNonEmpty(field) ) return false; var s = field.value; for (var i=0; i < s.length; ++i) { var t = s.charAt(i).toLowerCase(); if( ((t < '0') || (t > '9')) && ((t < 'a') || (t > 'z')) && (t != '_') && (t != ':') && (t != '*') && (t != '-') && (t != '.') ) { alert("Il campo selezionato può solamente contenere lettere, numeri e i caratteri _ : * - . "); drawAttention(field); return false; } } return true; } function checkDate (form, name) { var field; field = form.elements[ name+":YY" ]; if( !checkInteger(field) ) return false; var YY = parseInt( field.value,10 ); if( ((YY < 1900) || (YY > 2100)) && (YY != 0) ) { alert ("Il campo Anno selezionato non contiene valori validi"); drawAttention(field); return false; } field = form.elements[ name+":MM" ]; if( !checkInteger(field) ) return false; var MM = parseInt( field.value,10 ); if( ((MM < 1) || (MM > 12)) && (YY != 0) ) { alert ("Il campo Mese selezionato non contiene valori validi (dev'essere 1-12)"); drawAttention(field); return false; } field = form.elements[ name+":DD" ]; if( !checkInteger(field) ) return false; var DD = parseInt( field.value,10 ); var error = false; if (DD < 1) { //error = true; } else { if (MM == 2) { var leap = ((YY % 4 == 0) || (YY % 100 == 0) || (YY % 400 == 0)); if( (leap && (DD > 29)) || ((!leap) && (DD > 28)) ) error = true; } else if ( (MM == 1) || (MM == 3) || (MM == 5) || (MM == 7) || (MM == 8) || (MM == 10) || (MM == 12) ) { error = DD > 31; } else { error = DD > 30; } } if (error) { alert ("Il campo Giorno selezionato non è corretto."); drawAttention(field); return false; } var t; field = form.elements[ name+":hh" ]; if( field != null ) { if( !checkInteger(field) ) return false; t = parseInt( field.value,10 ); if( (t < 0) || (t > 23) ) { alert ("Il campo Ora selezionato non contiene dati validi (dev'essere 0-23)"); drawAttention(field); return false; } } field = form.elements[ name+":mm" ]; if( field != null ) { if( !checkInteger(field) ) return false; t = parseInt( field.value,10 ); if( (t < 0) || (t > 59) ) { alert ("Il campo Minuti selezionato non contiene dati validi (dev'essere 0-59)"); drawAttention(field); return false; } } field = form.elements[ name+":ss" ]; if( field != null ) { if( !checkInteger(field) ) return false; t = parseInt( field.value,10 ); if( (t < 0) || (t > 59) ) { alert ("Il campo Secondi selezionato non contiene dati validi (dev'essere 0-59)"); drawAttention(field); return false; } } return true; } function checkMailAddresses (field) { if( isEmpty(field) ) return true; s = field.value; var start; for (start = 0; start < s.length; start++) { if( s.charAt(start) != " " ) break; } while( start < s.length ) { var stop; for (stop = start+1; stop < s.length; stop++) { if( (s.charAt(stop)==";") || (s.charAt(stop)==",") ) break; } var addr = s.substring(start, stop); if( !isMailAddress(addr) ) { alert("Il campo selezionato non contiene un indirizzo email valido"); drawAttention(field); return false; } start = stop + 1; } return true; } function checkNumericIPAddress (field) { var error = isEmpty(field); if (error) { alert("Il campo selezionato non può essere vuoto"); drawAttention(field); return false; } var v = field.value; var n = new Array(4); var start = 0; for (var i=0; i<3; ++i) { var pos = v.indexOf(".", start); if (pos == -1) { error = true; break; } var s = v.substring(start,pos); n[i] = parseInt(s,10); if( (String(n[i]) != s) || (n[i] > 255) || (n[i] < 0) ) { error = true; break; } start = pos +1; } if (error) { alert("Il campo selezionato non contiene un indirizzo IP valido"); drawAttention(field); return false; } if (start >= v.length) { error = true; } else { var s = v.substring(start, v.length); n[3] = parseInt(s,10); if( (String(n[3]) != s) || (n[3] > 255) || (n[3] < 0) ) { error = true; } } if (error) { alert("Il campo selezionato non contiene un indirizzo IP valido"); drawAttention(field); return false; } return true; } function checkMailAddress (field) { if( isEmpty(field) ) return true; if( !isMailAddress(field.value) ) { alert("Il campo selezionato non contiene un indirizzo email valido"); drawAttention(field); return false; } return true; } function isMailAddress (emailStr) { var emailPat=/^(.+)@(.+)$/ var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]" var validChars="\[^\\s" + specialChars + "\]" var quotedUser="(\"[^\"]*\")" var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/ var atom=validChars + '+' var word="(" + atom + "|" + quotedUser + ")" // The following pattern describes the structure of the user var userPat=new RegExp("^" + word + "(\\." + word + ")*$") var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$") var matchArray=emailStr.match(emailPat) if (matchArray==null) { return false; } var user=matchArray[1] var domain=matchArray[2] if (user.match(userPat)==null) { return false } var IPArray=domain.match(ipDomainPat) if (IPArray!=null) { for (var i=1;i<=4;i++) { if (IPArray[i]>255) { return false } } return true } var domainArray=domain.match(domainPat) if (domainArray==null) { return false } var atomPat=new RegExp(atom,"g") var domArr=domain.match(atomPat) var len=domArr.length if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) { return false } if (len<2) { return false } return true; } function checkNonEmptyMailAddress (field) { if( !checkNonEmpty(field) ) return false; if( !checkMailAddress(field) ) return false; return true; } function checkCheckGroup (field) { var form = field.form; var fName = field.name.substring(0, field.name.indexOf(":")+1); var checked = false; for (i=0; (!checked) && (i < form.length); ++i) { var name = form.elements[i].name; if (name.indexOf(fName) == 0) checked = form.elements[i].checked; } if(!checked) { alert("Selezionare almeno un elemento del gruppo"); drawAttention(field); return false; } return true; } function checkNonEmptyMailAddress (field) { if( !checkNonEmpty(field) ) return false; if( !checkMailAddress(field) ) return false; return true; } function nonEmptyMaxLength(field, maxlength) { if ( field.value.length <=0 ){ alert("Il campo selezionato non può essere lasciato vuoto"); drawAttention(field); return false; } if( !checkMaxLength(field, maxlength) ){ return false; } return true; } function checkPriceLengths(field, maxlength, precision){ intPartLength = field.value.indexOf('.'); if( intPartLength <1 ){ alert("Il campo selezionato contiene un valore non significativo"); drawAttention(field); return false; } floatPartLength = field.value.substr( intPartLength +1 ).length; if( field.value.length > maxlength + 1){ alert("Il campo selezionato contiene troppe cifre"); drawAttention(field); return false; } else if( intPartLength > (maxlength - precision) ){ alert("Il campo selezionato contiene troppe cifre prima della virgola"); drawAttention(field); return false; } else if( floatPartLength > precision ){ alert("Il campo selezionato contiene troppe cifre dopo la virgola"); drawAttention(field); return false; } else if( ( intPartLength <= (maxlength - precision) ) && ( floatPartLength<=precision ) ) { return true; } } function checkPrice(field, maxlength, precision){ var tempvalue = field.value; var error = false; var notstandard = false; if (tempvalue.indexOf(",") != -1){ tempvalue = tempvalue.substring(0,(tempvalue.indexOf(",")+3)); tempvalue = tempvalue.replace(/\./g,""); tempvalue = tempvalue.replace(/\,/g,"."); } if (tempvalue.indexOf(".") != -1){ tempvalue = tempvalue.substring(0,(tempvalue.lastIndexOf(".")+3)); if (tempvalue.substring(tempvalue.indexOf(".")+1).length == 3){ tempvalue = tempvalue.replace(/\./g,""); } tempvalue = tempvalue.substring(0,tempvalue.lastIndexOf(".")).replace(/\./g,"") + tempvalue.substring(tempvalue.lastIndexOf(".")); } if (isNaN(tempvalue)) notstandard=true; if ( tempvalue.indexOf(".") == -1 ) tempvalue +=".00"; if ( tempvalue.indexOf(".") == (tempvalue.length-1) ) tempvalue +="0" ; forBound = 0; if ( tempvalue.indexOf(".") != -1 ) forBound = tempvalue.substring(tempvalue.indexOf(".")+1).length; for (jj=0;jj<2-forBound;jj++){ tempvalue+="0"; } if (isNaN(tempvalue)) error=true; if (notstandard && !error){ if (!confirm("Il campo selezionato non ha un formato prezzo standard")){ drawAttention(field); return false; } } if (error){ alert("Il campo selezionato non ha un formato prezzo valido"); drawAttention(field); return false; } field.value = tempvalue; if( maxlength && precision ){ return checkPriceLengths( field, maxlength, precision ); } else { return true; } } function checkMaxLength(field, maxlength) { if ( field.value.length > maxlength ) { alert("Il campo selezionato non può avere più di " + maxlength + " caratteri.\n Sono presenti al momento " + field.value.length + " caratteri."); drawAttention(field); return false; } return true; } function validateForm (form) { var checkedDate = new Array(); var ok = true; for (i=0; (i < form.length) && ok; i++) { var field = form.elements[i]; //alert("------------>>>>>>" + field.name ); if( isFlag(field) ) continue; if( !isEnabled (form, field) ) continue; if (field.getAttribute("trim") != null) trim(field); if ( field.getAttribute("validate") != null ) { var t = field.getAttribute("validate").toLowerCase(); if (t == "nonempty") { ok = checkNonEmpty(field); } else if (t == "stringid") { ok = checkStringID(field); } else if (t == "integer") { ok = checkInteger(field); } else if (t == "float") { ok = checkFloat(field); } else if (t == "hhmmamount") { ok = checkHHMMAmount(field); } else if (t == "mailaddress") { ok = checkMailAddress(field); } else if (t == "nonemptymailaddress") { ok = checkNonEmptyMailAddress(field); } else if (t == "mailaddresses") { ok = checkMailAddresses(field); } else if (t == "europrice") { if( field.getAttribute("numlength") && field.getAttribute("precision")){ maxlength = field.getAttribute("numlength").toLowerCase(); precision = field.getAttribute("precision").toLowerCase(); ok = checkPrice(field, maxlength, precision); } else { ok = checkPrice(field); } } else if (t == "numericipaddress") { ok = checkNumericIPAddress(field); } else if (t == "checkgroup") { ok = checkCheckGroup(field); } else if (t == "date") { var name = getRealName( field.name ); var j; for(j=0; j < checkedDate.length; ++j ) if( checkedDate[j] == name ) break; if( (checkedDate.length > 0) && (j < checkedDate.length) ) continue; ok = checkDate(form, name); checkedDate[ checkedDate.length ] = name; } else if ( t == "nonemptymaxlength" ) { var maxlength = field.getAttribute("maxlength").toLowerCase(); ok = nonEmptyMaxLength(field, maxlength); } else if ( t == "checkmaxlength" ) { var maxlength = field.getAttribute("maxlength").toLowerCase(); ok = checkMaxLength(field, maxlength); } } } return ok; } function confirmForm (form) { return confirm( form.elements["confirmText"].value ); } function confirmURL (message, url){ if (confirm(message)){ location.href=url; } } function clearLoading(imgname) { document.images[imgname].src = "images/empty.gif"; } function openPopup(theURL,winName,features) { window.open(theURL,winName,features); }