// variabili globali
var vgCampoErrore = "";

function Esegui(Comando) {
    pForm = document.forms["mailing_list"];   
     
    with (pForm) {
        COMANDO.value = Comando;
        switch (Comando) {
        case "iscriviti":
            // Controllo i campi obbligatori
            if (!VerificaCampi("MailDMail", "E-Mail"))
                return;

            // verifico l'indirizzo email
            if (!VerificaMail("MailDMail"))
                 return;

            // controllo che venga selezionata almeno un tema
            var selezionato=false;

            for (i=0;i< pForm.elements.length;i++)
                if (pForm.elements[i].name.substring(0,9)=="MailFTemi")
                    if (pForm.elements[i].checked)
                        selezionato=true;

            if (!selezionato) {
                alert('non è stato specificato alcun tema');
                pForm["MailFTemi[0]"].focus();
                return;
            }
            document.forms[0].submit();
        break;

        case "iscriviti_ext":
            // Controllo i campi obbligatori
            if (!VerificaCampi("MailDNome:MailDCognome:MailDMail:MailTDataNascita", "Nome:Cognome:E-Mail:Data Nascita"))
                return;

            // verifico data di nascita
            
            if (!VerificaData(MailTDataNascita.value)){
                 alert("Formato di data non valido\n[gg/mm/aaaa]");
                 return;
            }
                
                
            // verifico l'indirizzo email
            if (!VerificaMail("MailDMail"))
                 return;

            // verifico il cap
            if (MailDCAP.value != "")
                if (!VerificaCAP("MailDCAP"))
                     return;

            // verifico il telefono
            if (MailDTelefono.value != "")
                if (!VerificaTelefono("MailDTelefono"))
                     return;

            // verifico il fax
            if (MailDFax.value != "")
                if (!VerificaTelefono("MailDFax"))
                     return;

            // controllo che venga selezionata almeno un tema
            var selezionato=false;

            for (i=0;i < pForm.elements.length;i++)
                if (pForm.elements[i].name.substring(0,9)=="MailFTemi")
                    if (pForm.elements[i].checked)
                        selezionato=true;

            if (!selezionato) {
                alert('non è stato specificato alcun tema');
                //pForm["MailFTemi[0]"].focus();
                return;
            }
            pForm.submit();
        break;

        case "salva":
            // Controllo i campi obbligatori
            if (!VerificaCampi("MailDMail", "E-Mail"))
                return;

            // verifico l'indirizzo email
            if (!VerificaMail("MailDMail"))
                 return;

            // controllo che venga selezionata almeno un tema
            var selezionato=false;

            for (i=0;i < pForm.elements.length;i++)
                if (pForm.elements[i].name.substring(0,9)=="MailFTemi")
                    if (pForm.elements[i].checked)
                        selezionato=true;

            if (!selezionato) {
                alert('non è stato specificato alcun tema');
                pForm["MailFTemi[0]"].focus();
                return;
            }
             pForm.submit();
        break;
        }
    }
}


/*================================================
 * FUNZIONE: VerificaCampo
 * INGRESSO: campo da testare, stringa con cui
 * fare il match, stringa in caso di errore.
 * USCITA: vero se il campo rispetta la sintassi
 * della prima stringa passata, falso altrimenti.
 * VARIABILI GLOBALI USATE: vgCampoErrore.
 * VARIABILI GLOBALI MODIFICATE: vgCampoErrore.
 * DESCRIZIONE: verifica che il formato del campo
 * passato corrisponda alla stringa passata. Se il
 * formato non corrisponde viene visualizzato il
 * messaggio di errore passato
 *================================================*/
function VerificaCampo(Campo, MatchStr, ErrorMsg) {
         pForm = document.forms["mailing_list"];
         pText = pForm[Campo];
         sText = pText.value;
         if (sText.search(MatchStr) == -1) {
          alert(ErrorMsg);
          pText.focus();
          return false;
         }
         return true;
}


/*================================================
 * FUNZIONE: VerificaTelefono
 * INGRESSO: campo da testare.
 * USCITA: vero se il campo contiene un numero di
 * telefono.
 * VARIABILI GLOBALI USATE: nessuna.
 * VARIABILI GLOBALI MODIFICATE: nessuna.
 * DESCRIZIONE: verifica che il campo passato
 * contenga un numero di telefono valido.
 *================================================*/
function VerificaTelefono(Campo) {
    return VerificaCampo(Campo, /^\d\d+[\-\\\/ ]?\d+$/,
        "Il numero deve essere composto da sole cifre seaprate\n" +
        "al piu' dal carattere '-', '/', ' ' o '\\'.");
}

/*================================================
 * FUNZIONE: VerificaMail
 * INGRESSO: campo da testare.
 * USCITA: vero se il campo contiene un indirizzo
 * e-mail.
 * VARIABILI GLOBALI USATE: nessuna.
 * VARIABILI GLOBALI MODIFICATE: nessuna.
 * DESCRIZIONE: verifica che il campo passato
 * contenga un indirizzo e-mail.
 *================================================*/
function VerificaMail(Campo) {
        return VerificaCampo(Campo, /^\w+([\.\-]\w+)*@\w+([\.\-]\w+)*\.\w+$/,
                "L'indirizzo di e-mail deve essere nel formato nome@dominio.");
}

/*================================================
 * FUNZIONE: VerificaCAP
 * INGRESSO: campo da testare.
 * USCITA: vero se il campo contiene un numero.
 * VARIABILI GLOBALI USATE: nessuna.
 * VARIABILI GLOBALI MODIFICATE: nessuna.
 * DESCRIZIONE: verifica che il campo passato
 * contenga un numero valido.
 *================================================*/
function VerificaCAP(Campo) {
        return VerificaCampo(Campo, /^\d{5}$/,
                "Il CAP deve essere composto da cinque cifre.");
}


/*================================================
 * FUNZIONE: VerificaData
 * INGRESSO: valore.
 * USCITA: true se la data e' corretta.
 * VARIABILI GLOBALI USATE: nessuna.
 * VARIABILI GLOBALI MODIFICATE: nessuna.
 * DESCRIZIONE: controlla che la data passata sia
 * corretta.
 *================================================*/
function VerificaData(Valore) {
        var     ValoriData;
        var Giorni = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

        // verifica la validita' della data
        if (Valore.search(/^([12]\d|3[01]|0?[1-9])\/(1[0-2]|0?[1-9])\/(19|20|)\d\d$/) != -1) {
                // imposta il vettore dei valori
                ValoriData = Valore.split("/");

                // verifica se l'anno e' bisestile
                if (ValoriData[2] % 4 == 0) Giorni[1]++;
                return (ValoriData[0] <= Giorni[ValoriData[1] - 1]);
        }

        // in caso di errore ritorna false
        return false;
}

/*================================================
 * FUNZIONE: VerificaCampi
 * INGRESSO: nome del campo.
 * USCITA: true se esiste una selezione, false
 * altrimenti.
 * VARIABILI GLOBALI USATE: nessuna.
 * VARIABILI GLOBALI MODIFICATE: nessuna.
 * DESCRIZIONE: verifica che il campo passato abbia
 * almeno una selezione.
 *================================================*/
function VerificaCampi(ListaCampi, ListaDescrizioni) {
    var CampiOb;

    // crea il vettore dei campi da controllare
    CampiOb = ListaCampi.split(":");
    NomeCampi = ListaDescrizioni.split(":");

    NomeForm = document.forms["mailing_list"];

    // se uno dei campi e' vuoto visualizza l'errore
    // e restituisce falso
    for (i=0; i < CampiOb.length; i++) {
        if (NomeForm[CampiOb[i]].value == "" &&
           NomeForm[CampiOb[i]].type != "submit" &&
           NomeForm[CampiOb[i]].type != "reset" &&
           NomeForm[CampiOb[i]].type != "button" &&
           NomeForm[CampiOb[i]].type != "hidden" &&
           NomeForm[CampiOb[i]].type != "select") {

            alert("Il campo " + NomeCampi[i] + " è vuoto!");
            NomeForm[CampiOb[i]].focus();
            return false;
        }

        if (NomeForm[CampiOb[i]].type == "select")
            if (NomeForm[CampiOb[i]].options.selectedIndex == "" ||
               NomeForm[CampiOb[i]].options.selectedIndex == -1) {

                alert("Il campo " + NomeCampi[i] + " è vuoto!");
                NomeForm[CampiOb[i]].focus();
                return false;
            }
        }
        // i campi richiesti sono ok!
        return true;
}