// JavaScript Document

cMAXLENGTHTEXT = 1200;          // numero massimo di caratteri inseribili nel testo

//
// La funzione Check_Numcar viene invocata per controllare in fase di inserimento il numero di
// caratteri inseriti nel campo testo, ed evitare che vengano varcati i caratteri di confine.
// Il numero di caratteri rimasti disponibili per l'inserimento e' visualizzato come contenuto
// dell'elemento HTML avente id=sID
//
function Check_NumCar(sID)
  {
  //
  var frm   = document.forms['mailform'];
  var vElem = document.getElementById(sID);
  
  //
  iNumCar=frm.testo.value.length;

  // Controllo di confine
  if(iNumCar>cMAXLENGTHTEXT) 
    {
    iNumCar=cMAXLENGTHTEXT;
    frm.testo.value=frm.testo.value.slice(0,cMAXLENGTHTEXT);
    }
  vElem.innerHTML=cMAXLENGTHTEXT-iNumCar;
  //
  }

//
// La funzione Submit_Data_Mail viene invocata al submit della form di inserimento
// per controllare i dati inseriti e la loro congruenza semantica.
//
function Submit_Data_Mail() 
    {
    //
    var frm=document.forms['mailform'];

    // Check campo nome
    iStatus=Check_Value('Nome',frm.nome.value,"GENERIC","VALUE_NOT_NULL",frm.nome.maxLength,'');
    if(iStatus==false) 
        {
        frm.nome.focus();
        return false;
        }

    // Questo controllo serve a fare in modo che non si inseriscano indirizzi email nel nome
    iStatus=Check_Value('Nome',frm.nome.value,"CHARSET_NEG","VALUE_NOT_NULL",0,'@');
    if(iStatus==false)
        {
        frm.nome.focus();
        return false;
        }

    // Check campo email
    iStatus=Check_Value('E-mail',frm.email.value,"EMAIL","VALUE_NOT_NULL",frm.email.maxLength,'');
    if(iStatus==false) 
        {
        frm.email.focus();
        return false;
        }

    // Questo controllo serve a fare in modo che non si inseriscano multipli indirizzi email
    iStatus=Check_Value('E-mail',frm.email.value,"CHARSET_NEG","VALUE_NOT_NULL",0,',');
    if(iStatus==false)
        {
        frm.email.focus();
        return false;
        }

    // Check campo testo
    iStatus=Check_Value('Testo',frm.testo.value,"GENERIC","VALUE_NOT_NULL",cMAXLENGTHTEXT,'');
    if(iStatus==false) 
        {
        frm.testo.focus();
        return false;
        }

    // Check campo codice
    iStatus=Check_Value("Codice",frm.code.value,"DIGIT","VALUE_NOT_NULL",(-1*frm.code.maxLength),'');
    if(iStatus==false) 
        {
        frm.code.focus();
        return false;
        }

    // Check campo autorizzazione privacy
    if(frm.autorizzo.checked==false)
        {
        alert("Impossibile inviare il messaggio al Centro MareNectaris senza dare il consenso al trattamento dei propri dati personali.");
        return false;
        }
    return true;
}

//
// 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
    }

//


