//
// Javascript library
//

//
// La funzione Open_Window apre una nuova finestra del browser attivando l'URL selezionato
//
function Open_Window(url,name,w,h)
  {
  var mode="height="+h+",width="+w+",scrollbars=0,resizable=0,toolbar=0";
  open (url,name,mode);
  }

//
// La funzione Pause e' l'equivalente della sleep del php. Il tempo e'
// espresso in millisecondi.
//
function Pause(millisecondi)
  {
  var now = new Date();
  var exitTime = now.getTime() + millisecondi;

  while(true)
    {
    now = new Date();
    if(now.getTime() > exitTime) return;
    }
  }

//
// Trim: toglie i caratteri blank iniziali e finali dalla stringa in input
//
function Trim(stringa)
   {
   reTrim=/\s+$|^\s+/g;
   return stringa.replace(reTrim,"");
   }

//
// La funzione Distendi visualizza un elemento ( tipicamente un div ) con effetto
// di srotolamento fino ad una dimensione fissa. Alla fine, in caso l'elemento e'
// piu' lungo, viene predisposto un meccanismo di scrolling.
//
function Distendi(sID,iDim,iMax)
  {
  //
  vElem = document.getElementById(sID);
  //
  if(iDim>iMax)
    {
    vElem.style.overflow = 'auto';   // visualizzo lo scroll se necessario
    return;   // fine distensione
    }
  //
  vElem.style.height   = iDim+'px';
  vElem.style.overflow = 'hidden';
  vElem.style.display  = '';
  iDim+=20;

  // Reinnesco la funzione per srotolare ulteriormente l'elemento
  setTimeout("Distendi('"+sID+"',"+iDim+","+iMax+")",40);
  }


//
// La funzione Avvolgi visualizza un elemento ( tipicamente un div ) con effetto
// di avvolgimento fino a 0 ( hidden ).
//
function Avvolgi(sID,iDim,iStart)
  {
  //
  vElem = document.getElementById(sID);
  //
  if(iDim>iStart)
    {
    vElem.style.display  = 'none';
    return;   // fine avvolgimento
    }
  //
  vElem.style.height   = iStart-iDim+'px';
  vElem.style.overflow = 'hidden';
  iDim+=20;

  // Reinnesco la funzione per srotolare ulteriormente l'elemento
  setTimeout("Avvolgi('"+sID+"',"+iDim+","+iStart+")",40);
  }

//
// FUNZIONE  : Check_Value
//
// PROTOTIPO : function Check_Value(sName,sValue,sType,sFlagNull,iLen,sCharSet);
// 
// La funzione Check_Value controlla e valida un valore in accordo alla tipologia 
// e alle regole in ingresso.
//
// I parametri di ingresso sono:
//  - sName     : stringa che identifica il valore (es. 'Nome del contatto' )
//  - sValue    : valore da controllare
//  - sType     : tipologia del valore. La tipologia puo' essere scelta
//                fra i valori:
//				  "GENERIC"     : il campo puo' ricevere ogni carattere
//                "ALNUM"       : il campo e' alfanumerico
//				  "ALPHA"       : il campo e' alfabetico ( no numeri )
//				  "DIGIT"       : il campo e' numerico
//				  "EMAIL"       : il campo e' una email
//				  "URL"         : il campo e' un url
//				  "CHARSET"     : il campo puo' contenere solo caratteri ben precisi
//				  "CHARSET_NEG" : il campo non deve contenere un set di caratteri ben preciso
//  - sFlagNull : segnala se il campo puo' essere non valorizzato, o se invece
//                deve esserlo. Puo' assumere i valori:
//				  "VALUE_NULL"     : il campo puo' essere vuoto
//				  "VALUE_NOT_NULL" : il campo deve essere valorizzato
//  - iLen      : lunghezza massima consentita per il valore in bytes. Se pari a 0 non 
//                viene effettuato il controllo di lunghezza. Se pari ad un valore negativo,
//                la lunghezza viene interpretata come lunghezza effettiva del valore,
//                espressa in valore assoluto ( i.e. -16 significa che il campo deve essere
//                lungo esattamente 16 bytes ).
//  - sCharSet  : definisce un insieme di caratteri preciso per il valore. Se sType 
//                e' pari a CHARSET, questo insieme determina i soli caratteri accettati
//                per il valore. Se sType e' pari a CHARSET_NEG, questo insieme determina i 
//                caratteri che non possono essere contenuti nel valore. 
//                La sua forma e' 'xyz', dove xyz sono i singoli caratteri 
//                consentiti. 
//                N.B. : la stringa viene inserita in una regular expression all'interno delle
//                       parentesi quadre [...], dunque sono possibili tutte le sintassi 
//                       riconosciute dalle ERE all'interno delle parentesi quadre 
//						( i.e. 'a-c' ).
//
// La funzione ritorna 'true' se il valore e' stato validato. In caso di validazione
// negativa, la funzione emette un alert di segnalazione e ritorna 'false'.

function Check_Value(sName,sValue,sType,sFlagNull,iLen,sCharSet)
    {

    if(sValue=='')      // controlli sul campo vuoto
      {
      if(sFlagNull=="VALUE_NOT_NULL") // il campo deve essere valorizzato
        {
        var $str="ATTENZIONE!\n\n";
        $str+="Il campo '"+sName+"' deve essere valorizzato!";
        alert($str);
        return false;
        }
      }

    else                // controlli sul campo valorizzato
      {

      if(iLen>0)        // controllo sulla lunghezza del campo
        {
        if(sValue.length>iLen) 
          {
          var $str="ATTENZIONE!\n\n";
          $str+="Il campo '"+sName+"' ha una lunghezza superiore a "+iLen+" caratteri!";
          alert($str);
          return false;
          }
        }
      if(iLen<0)        // controllo sulla lunghezza del campo in valore assoluto
        {
        if(sValue.length!=Math.abs(iLen))
          {
          var $str="ATTENZIONE!\n\n";
          $str+="Il campo '"+sName+"' deve essere di "+Math.abs(iLen)+" caratteri!";
          alert($str);
          return false;
          }
        }

      switch(sType)             // controlli sui caratteri del campo
            {
            case "GENERIC":       // passano tutti i caratteri
                 break;
            case "ALNUM":         // passano gli alfabetici + i numeri
                 re=/[^A-Za-z0-9]/;
                 if(sValue.search(re) != -1)
                   {
                   var $str="ATTENZIONE!\n\n";
                   $str+="Il campo '"+sName+"' contiene caratteri non alfanumerici!\n";
                   $str+="I caratteri consentiti sono nell'insieme da 'a' a 'z' e da '0' a '9',\n";
                   $str+="maiuscoli e minuscoli, senza spazi o punteggiatura."
                   alert($str);
                   return false;
                   }
                 break;
            case "ALPHA":         // passano gli alfabetici + i numeri
                 re=/[^A-Za-z]/;
                 if(sValue.search(re) != -1)
                   {
                   var $str="ATTENZIONE!\n\n";
                   $str+="Il campo '"+sName+"' contiene caratteri non alfabetici!\n";
                   $str+="I caratteri consentiti sono nell'insieme da 'a' a 'z',\n";
                   $str+="maiuscoli e minuscoli, senza spazi, numeri o punteggiatura."
                   alert($str);
                   return false;
                   }
                 break;
            case "DIGIT":         // passano i numeri
                 re=/[^0-9]/;
                 if(sValue.search(re) != -1)
                   {
                   var $str="ATTENZIONE!\n\n";
                   $str+="Il campo '"+sName+"' contiene caratteri non numerici!\n";
                   $str+="I caratteri consentiti sono nell'insieme da '0' a '9',\n";
                   $str+="senza lettere, spazi o punteggiatura."
                   alert($str);
                   return false;
                   }
                 break;
            case "EMAIL":         // controllo su un valore e-mail
                 var iNoEmail=0;
                 re=/@/;        // il carattere '@' non e' presente
                 if(sValue.search(re) == -1) iNoEmail=1;
                 re=/^@/;       // il carattere '@' non puo' stare a inizio stringa
                 if(sValue.search(re) != -1)  iNoEmail=1;
                 re=/@$/;       // il carattere '@' non puo' stare a fine stringa
                 if(sValue.search(re) != -1)  iNoEmail=1;
                 if(iNoEmail)
                   {
                   var $str="ATTENZIONE!\n\n";
                   $str+="Il campo '"+sName+"' non e' un indirizzo di posta elettronica valido!\n";
                   alert($str);
                   return false;
                   }
                 break;
            case "URL":         // controllo su un valore URL
                 var iNoURL=0;
                 re=/\.\./;       // la sequenza '..', ovunque sia, non e' valida in un URL
                 if(sValue.search(re) != -1) iNoURL=1;
                 if(iNoURL)
                   {
                   var $str="ATTENZIONE!\n\n";
                   $str+="Il campo '"+sName+"' non e' un URL valido!\n";
                   alert($str);
                   return false;
                   }
                 break;
            case "CHARSET":     // controllo sul set di caratteri impostato dall'utente 
                 eval("re=/[^"+sCharSet+"]/");     // imposto la RE sulla base del set in ingresso
                 if(sValue.search(re) != -1)
                   {
                   var $str="ATTENZIONE!\n\n";
                   $str+="Il campo '"+sName+"' contiene caratteri non validi!\n";
                   $str+="I caratteri consentiti sono -->'"+sCharSet+"'<--.\n";
                   alert($str);
                   return false;
                   }
                 break;

            case "CHARSET_NEG":     // controllo sul set di caratteri impostato dall'utente 
                 eval("re=/["+sCharSet+"]/");     // imposto la RE sulla base del set in ingresso
                 if(sValue.search(re) != -1)
                   {
                   var $str="ATTENZIONE!\n\n";
                   $str+="Il campo '"+sName+"' contiene caratteri non validi!\n";
                   $str+="I caratteri non consentiti sono -->"+sCharSet+"<--.\n";
                   alert($str);
                   return false;
                   }
                 break;

            }   // end of switch(sType)
      }     // if sValue != ''   

    return true;        // tutti i controlli sono passati correttamente
    }


