////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//                DICHIARAZIONE VARIABILI GLOBALI                             //    
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

//v_errori = variabile che contiene il testo alert di errori
var v_errori = "Mancano da compilare i seguenti campi:\n";

//v_form = variabile che contiene il nomer della form
var v_form;

//v_check = variabile utilizzata dal case 7 per stabilire se un campo chekbox e' stato selezionato
var v_check = 0;

////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//                      FUNZIONE PRINCIPALE                                   //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

//CONTROLLO_FORM
/*
La funzione controllo_form viene richiamata passando come parametro una stringa formattata nel seguente modo:

nome della form,campo-tipo di controllo-messaggio di errore,campo-tipo di controllo-messaggio di errore

Il primo passaggio della funzione e’ quello di scomporre la stringa passata come parametro, successivamente  per ogni "campo" esegue la funzione esterna per il "tipo di controllo" richiesto e aspetta il risultato del controllo.
Finiti tutti i controlli, se uno dei campi risulta errato restituisce un messaggio di errore, altrimenti permette l'esecuzione della form.
*/

function controllo_form(v_controll){
  //v_split = il parametro passato alla funzione
  //il primo valore si riferisce al nome del form
  //gli altri valori sono nel formato nome_campo-codice_controllo
  //v_split = parametro passato
  var v_split = v_controll;
  //v_controllo = variabile che controlla l'esito del controllo
  var v_controllo = 0;
  //a_split = array che conterra' ogni riga del parametro, ovvero ogni campo con il relativo controllo
  var a_split = new Array();
  //divisione del parametro passato in micro parametri da controllare
  a_split = v_split.split(",");
  //assegno il nome della form alla variabile globale v_form
  v_form = a_split[0];
  //for per controllare se ogni campo risulta compilato o corretto
  //il ciclo for inizia da 1 perche' il valore 0 e' il nome della form
  for (i=1;i<a_split.length;i++){
    //a_split2 = array che conterra' il campo da controllare ed il codice di controllo
    var a_split2 = new Array();
    //divisione del parametro passato in nome_campo e codice_controllo
    a_split2 = a_split[i].split("-");
    //lunghezza_split = numeri di campi da controllare
    var lunghezza_split = a_split2.length/5;
    for(i2=0;i2<lunghezza_split;i2++){
      nome_campo = document.forms[a_split[0]].elements[a_split2[0]];
      //ricavo il tipo di controllo da eseguire
      codice_controllo = a_split2[1];
      //eseguo il controllo in base al codice ricavato
      controllo_return = elenco_controlli(codice_controllo,nome_campo,a_split2[2],a_split2[3],a_split2[4]);
      v_controllo = v_controllo + controllo_return;
    }//close for
  }//close for
  //controllo esito controlli
  if(v_controllo == 0){
    return true;
  }//close if
  else{
    alert(v_errori);
    v_errori = "Mancano da compilare i seguenti campi obbligatori:\n";
    return false;
  }//close else
}//close function controllo_form

////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//                   FUNZIONE ELENCO DEI CONTROLLI                            //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

function elenco_controlli(codice_controllo,parametro1,parametro2,parametro3,parametro4,parametro5){
  switch(codice_controllo){
    case "1":
      //case "1": controllo se il campo indicato e' vuoto o meno
      controllo = controllo_text_vuoto(parametro1,parametro2);
    break;
    case "2":
      //case "2": controllo email e valitida' email
      controllo = controllo_email(parametro1,parametro2);
    break;
    case "3":
      //case "3": controllo campo radio (nome_campo, testo errore, paramentro da controllare)
      controllo = controllo_radio(parametro1,parametro2,parametro3);
    break;
    case "4":
      //case "4": controllo campi checkbox (nome_campo, testo errore, minimo selezionabili, massimo selezionabili)
      controllo = controllo_checkbox(parametro1,parametro2,parametro3,parametro4);
    break;
    case "5":
      //case "5": controllo campo radio senza parametro da controllare 
      //(nome_campo, testo errore)
      controllo = controllo_radio_scnd(parametro1,parametro2);
    break;
    case "6":
      //case "6": controllo Metodo di Pagamento e nel caso viene scelta il pagamento tramite Carte di Credito controlla i dati di quest'ultima
      //parametri da passare: nome del campo da controllare, testo errore, parametro da controllare
      controllo = controllo_ccredito(parametro1,parametro2,parametro3,parametro4);
    break;
    case "7":
      //case "7": controllo checkbox dichiarati come array (Passaggio Paramentro al PHP)
      controllo = controllo_checkboxarray(parametro1,parametro2);
  }//close switch
  return controllo;
}//close elenco_controlli

////////////////////////////////////////////////////////////////////////////////
//                                                                            //
//                     FUNZIONI CONTROLLO FORM                                //
//                                                                            //
////////////////////////////////////////////////////////////////////////////////

/*
La funzione controllo_text_vuoto viene richiamata nel caso si e’ scelto un tipo di controllo “1”, ovvero un controllo generico sulla compilazione o meno di un campo text.
Se il controllo è andato a buon fine restituisce un valore 0, altrimenti aggiunge il messaggio di errore alla variabile globale v_errori e restituisce il valore 1.
*/

function controllo_text_vuoto(nome_campo,testo_errore){
  if((nome_campo.value == "")||(nome_campo.value == " ")){
    v_errori = v_errori+"\n*"+testo_errore;
    return 1;
  }//close if
  else{
    return 0;
  }
}//close controllo_text_vuoto

/*
La funzione controllo_email viene richiamata nel caso si e’ scelto un tipo di controllo “2”.
Se il controllo è andato a buon fine restituisce un valore 0, altrimenti aggiunge il messaggio di errore alla variabile globale v_errori e restituisce il valore 1.
*/

function controllo_email(nome_campo,testo_errore){
  var regexp = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
  if(regexp.test(nome_campo.value)){
    return 0;
  }//close if
  else{
    v_errori = v_errori+"\n*"+testo_errore;
    return 1;
  }//close else
}//close controllo_email

/*
La funzione controllo_radio viene richiamata nel caso si e’ scelto un tipo di controllo “3”.
Vengono passati tre paramentri: uno relativo al nome del campo, uno il messaggio di errore da visualizzare, il terzo il valore da controllare.
Se il controllo è andato a buon fine restituisce un valore 0, altrimenti aggiunge il messaggio di errore alla variabile globale v_errori e restituisce il valore 1.
*/

function controllo_radio(nome_campo,testo_errore,controllo){
  var check_ctrl = 0;
  //ciclo for per scorrere tutti i campi radio per verificare quello selezionato ed il valore
  for(i3=0;i3<nome_campo.length;i3++){
    //controllo_check = variabile che contiene se il campo da controllare e' stato selezionato
    controllo_check = eval(nome_campo[i3]); 
    //controllo se il campo in questione e' stato selezionato
    if((controllo_check.value == controllo)&&(controllo_check.checked == true)){
      //se e' stato selezionato cambio il valore della variabile
      check_ctrl = 1;
    }//close if
  }//close for
  //controllo il valore di check_ctrl
  if(check_ctrl != 1){
    v_errori = v_errori+"\n*"+testo_errore;
    return 1;
  }//close if
  else{
    return 0;
  }//close else
}//close controllo_radio

/*
La funzione controllo_checkbox viene richiamata nel caso si e’ scelto un tipo di controllo “4”.
Vengono passati quattro paramentri: uno relativo al nome del campo, uno il messaggio di errore da visualizzare, il terzo il valore minimo di campi selezionabili e quello massimo.
Se il controllo è andato a buon fine restituisce un valore 0, altrimenti aggiunge il messaggio di errore alla variabile globale v_errori e restituisce il valore 1.
*/

function controllo_checkbox(nome_campo,testo_errore,min,max){
  //variabile che contiene il numero di checkbox selezionati
  var check_slct = 0; 
  //ciclo for per scorrere tutti i campi radio per verificare se u no e' stato selezionato
  for(i4=0;i4<nome_campo.length;i4++){
    //controllo_check4 = variabile che contiene il campo da controllare
    controllo_check = eval(nome_campo[i4]);
    //controllo se il campo in questione e' stato selezionato
    if(controllo_check.checked == true){
      //se e' stato selezionato cambio il valore della variabile
      check_slct = check_slct + 1;
    }//close for*/
  }//close for
  //controllo se e' stato rispettato il minimo numero di campi selezionabili
  if(check_slct < min){
    v_errori = v_errori+"\n*"+testo_errore;
    return 1;
  }//close if
  //controllo se e' stato rispettato il numoero massimo di campi selezionabili
  else if(check_slct > max){
    v_errori = v_errori+"\n*"+testo_errore;
    return 1;
  }//close else if
  else{
    return 0;
  }//close else
}//close controllo_checkbox

/*
La funzione controllo_radio_scnd viene richiamata nel caso si e’ scelto un tipo di controllo “5”.
Vengono passati due paramentri: uno relativo al nome del campo, uno il messaggio di errore da visualizzare. 
Si differenzia da controllo_radio perche' non verifica se e' stato selezionato uno specifico campo radio.
Se il controllo è andato a buon fine restituisce un valore 0, altrimenti aggiunge il messaggio di errore alla variabile globale v_errori e restituisce il valore 1.
*/

function controllo_radio_scnd(nome_campo,testo_errore){
  var check_ctrl = 0;
  //ciclo for per scorrere tutti i campi radio per verificare quello selezionato ed il valore
  for(i5=0;i5<nome_campo.length;i5++){
    //controllo_check = variabile che contiene se il campo da controllare e' stato selezionato
    controllo_check = eval(nome_campo[i5]); 
    //controllo se il campo in questione e' stato selezionato
    if(controllo_check.checked == true){
      //se e' stato selezionato cambio il valore della variabile
      check_ctrl = 1;
    }//close if
  }//close for
  //controllo il valore di check_ctrl
  if(check_ctrl != 1){
    v_errori = v_errori+"\n*"+testo_errore;
    return 1;
  }//close if
  else{
    return 0;
  }//close else
}//close controllo_radio

/*
La funzione ca_controllo_ccredito e' un tipo di controllo specifico per il modo di pagamento ed i dati delle carte di credito
Il funzionamento base e' quello di controllare se viene selezionato almeno un tipo di pagamento.
Nel caso il tipo di pagamento scelto sia quello da controllare esegue ulteriori controlli per l'inserimento dei dati della stessa.
Se il controllo è andato a buon fine restituisce un valore 0, altrimenti aggiunge il messaggio di errore alla variabile globale v_errori e restituisce il valore 1.
*/

function controllo_ccredito(nome_campo,testo_errore,controllo,controlli_associati){
  var check_ctrl = 0;
  //ciclo for per scorrere tutti i campi radio per verificare quello selezionato ed il valore
  for(i6=0;i6<nome_campo.length;i6++){
    //controllo_check = variabile che contiene se il campo da controllare e' stato selezionato
    controllo_check = eval(nome_campo[i6]); 
    //controllo se il campo in questione e' stato selezionato
    if(controllo_check.checked == true){
      //se e' stato selezionato cambio il valore della variabile
      check_ctrl = 1;
      valore = controllo_check.value;
    }//close if
  }//close for
  //controllo il valore di check_ctrl
  if(check_ctrl != 1){
    v_errori = v_errori+"\n*"+testo_errore;
    return 1;
  }//close if
  else{
    if(valore == controllo){
      //a_split6 = array che conterra' i controlli associati
      var a_split6 = new Array();
      //divisione del parametro passato in nome_campo e codice_controllo
      a_split6 = controlli_associati.split("#");
      //lunghezza_split3 = numeri di campi da controllare
      var lunghezza_split6 = a_split6.length;
      //v_controll6 = variabile in cui viene memorizzato il risultato di ogni controllo
      var v_controll6 = 0;
      for(i6b=0;i6b<lunghezza_split6;i6b=i6b+3){
        nome_campo6 = eval(document.forms[v_form].elements[a_split6[i6b]]);
        controllo_return6 = elenco_controlli(a_split6[i6b+1],nome_campo6,a_split6[i6b+2]);
        v_controll6 = v_controll6 + controllo_return6; 
      }//close for
      return v_controll6;
    }//close if
    else{
      return 0;
    }//close else
  }//close else
}//close controllo_ccredito

/*
scopo funzione
*/

function controllo_checkboxarray(nome_campo,testo_errore){
  if(stringa_settori != " "){
    //ricavo il numero di elementi selezionati
    elem_selezionati7 = scorri_selezionati(stringa_settori);
    //controllo se il numero massimo di elementi selezionati e' stato raggiunto
    //in caso negativo aggiunto il nuovo elemento
    //altrimenti con un messaggio di alert avverto l'utente
    if(elem_selezionati7 == 0){
      v_errori = v_errori+"\n*Selezionare almeno un Settore";
      return 1;
    }//close if
    else if(elem_selezionati7 > 7){
      v_errori = v_errori+"\n*Selezionare al massimo 7 Settori";
      return 1;
    }//close else if
    else{
      return 0;
    }//close else
  }//close if
  else{
    v_errori = v_errori+"\n*"+testo_errore;
    return 1;
  }//close else
}//close function controllo_checkboxarray


////////////////////////////////////////////////////////////////////////////////
//FUNZIONI EXTRA PER LA GESTIONE DI UNA FORM
////////////////////////////////////////////////////////////////////////////////
var stringa_settori = " ";
function checkbox_selezionato(parametro){
  if(stringa_settori == " "){
    stringa_settori= parametro;
  }//close if
  else{
    //Controllo se l'elemento che e' stato passato come parametro e' già presente.
    //Se non e' presente viene aggiunto
    //Se e' presente viene eliminati
    if(stringa_settori.find(parametro)){
      //Se e' presente
      //Elimino da stringa_settori il settore passato come parametro
      stringa_settori = stringa_settori.replace(parametro,"");
    }
    else{
      //Se non e' presente
      //ricavo il numero di elementi selezionati
      elem_selezionati = scorri_selezionati(stringa_settori);
      //controllo se il numero massimo di elementi selezionati e' stato raggiunto
      //in caso negativo aggiunto il nuovo elemento
      //altrimenti con un messaggio di alert avverto l'utente
      if(elem_selezionati < 7){
        stringa_settori=stringa_settori + "," + parametro;
      }//close if
      else{
        stringa_settori=stringa_settori + "," + parametro;
        alert("E' possibile selezionare al massimo 7 Settori Merceologici.");
      }//close else
    }//close else
  }//close else
}//close checkbox_selezionato

function scorri_selezionati(selezionati){
  if(selezionati != " "){
    //variabile che contiene il numero di elementi selezionati
    selezionati_s = 0;
    //trasformo la stringa in un array
    //ogni riga del vettore contiene un elemento selezionato o non
    var a_s = selezionati.split(",");
    //scorro l'array
    for(is=0;is<a_s.length;is++){
      //controllo se e' un elemento o un campo vuoto
      if(a_s[is] != ""){
        selezionati_s++;
      }//close if
    }//close for
    return selezionati_s;
  }//close if
  else{
    return 0;
  }//close else
}//close scorri_selezionati

//restituisce se un numero e' pari o dispari
function IsNotUneven(numero){
  if (isNaN(numero) == false){
    return (numero %2 == 1 ?  true : false);
  }
  else{
    return null;
  }
}//close IsNotUneven

function attiva_consenso(){
  document.getElementById("consenso").checked = true;
}//close attiva_consenso

//funzione aggiuntiva al JavaScript che sostituisce indexOf
//prelevata da HTML.IT
String.prototype.find=function(what){
  return(this.indexOf(what)>=0 ? true : false);
}

