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