// Carrello della spesa Ver. 1.2
// Ultima modifica del 8-ottobre-2005 ore 12_40
// Codice By: <Quicker®> 2001  E-mail: quicker@supereva.it

// Identificazione del browser dell'utente

if (self != parent)
    top.location.href = "index.html";  // Per essere sicuri che la pagina non sia stata caricata in un frame
   var HM_DOM = (document.getElementById) ? true : false;  // Testo quale browser usa l'utente
   var HM_IE = (document.all) ? true : false;     // document.all e' un oggetto disponibile solo nel DOM di Explorer4+
   var isIE4 = HM_IE && !HM_DOM;
   var isIE5 = HM_IE && HM_DOM;
   var isNS4 = (document.layers) ? true : false;  // document.layers e' un oggetto disponibile solo nel DOM di Netscape4
   var isNS6 = navigator.vendor == "Netscape6";
   var isMoz = navigator.appCodeName == "Mozilla" && !(isIE4 || isIE5);
if(!(isNS4 || isNS6 || isIE4 || isIE5 || isMoz))
   alert("La versione del tuo browser puo\' essere inadatta all\'uso del carrello.\nDevi usare un browser compatibile quale: Explorer4+ o Netscape4+.");
if(isIE4 || isIE5) {
   self.moveTo(0,0);  // Adatto le dimensioni del browsers all'area visibile dello schermo
   self.resizeTo(screen.availWidth,screen.availHeight);
}

// Area di definizione delle variabili globali

var p = new Array();     // Questo e' l'array che usero' per memorizzare un reparto di articoli[]
var primo_caricamento = true;
var quale_reparto = 0;   // Posizione reparto
var costo_carrello = 0;  // Qui memorizzo il totale del costo degli articoli selezionati
var peso_carrello = 0;  // Qui memorizzo il totale del peso degli articoli selezionati
var num_pacchi = 0;  // Qui memorizzo il totale dei pacchi
var codice_ordine = "";
var omni;                // Variabile per usi temporanei in ogni funzione
var rep_costo = new Array();  // Costo totale parziale articoli selezionati per reparto
var rep_peso = new Array();  // Peso totale parziale articoli selezionati per reparto
for (var i = 0; i <= v; i++) rep_costo[i] = 0;  // Inizializzazione
for (var i = 0; i <= v; i++) rep_peso[i] = 0;  // Inizializzazione
var str_c, str_p; // Stringhe che contiengono il codice HTML per la Intro (variabili che deve essere accessibile dalla finestra figlia)
var l_vettore;    // Numero articoli nel vettore
var bassa_risol = screen.width < 820 || screen.height < 640 ? true : false;
var risol_tab = bassa_risol ? '\"dime2\"' : '\"dime1\"';
var risol_tr = bassa_risol ? '\"dime4\"' : '\"dime3\"';
var font_sizeA, font_sizeB;  // Per adattare le dimensioni dei font in Netscape
  if(bassa_risol) { font_sizeA = '<SPAN class=\"fl_ns\">'; font_sizeB = '<SPAN class=\"fl_sb\">'; }
  else            { font_sizeA = '<SPAN class=\"fh_ns\">'; font_sizeB = '<SPAN class=\"fh_sb\">'; }
var a_html = '<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD HTML 4.0 Transitional\/\/EN\">';
var a_meta = '<META http-equiv=\"Content-Type\" content=\"text\/html; charset=iso-8859-1\">';
a_meta += '<META http-equiv=\"Content-Script-Type\" content=\"text\/javascript\">';
a_meta += '<META http-equiv=\"Content-Style-Type\" content=\"text\/css\">';
var a_stile = '<LINK href=\"stile.css\" rel=\"stylesheet\" type=\"text\/css\">';
var a_testa = '<HTML lang=\"it\" dir=\"ltr\"><HEAD><TITLE><\/TITLE>';
var a_doc = a_html + a_testa + a_meta + a_stile + '<\/HEAD><BODY bgcolor=\"' + col_f[0] + '\" vlink=\"#BF0000\">';
var c_doc = '<\/BODY><\/HTML>';
var framevuoto = isIE4 || isIE5 ? a_doc + c_doc : '<HTML><\/HTML>'; // Da usare nella index.html per i frame primo - secondo - terzo
var a_tab = '<TABLE summary=\"Carrello\" cellpadding=\"3\" cellspacing=\"0\" align=\"center\" border=\"1\" borderColorLight=\"#F5FFFA\" borderColorDark=\"#000000\" class=' + risol_tab + '>';
var table_nav = '<TABLE align=\"center\" border=\"0\" cellspacing=\"1\" cellpadding=\"0\" summary=\"NO_comment\"><TR>';
var c_tab = '<\/TABLE>';
var th_a = isIE4 || isIE5 ? "" : '<FONT color=\"#00FFFF\" size=\"2\">';
var th_b = isIE4 || isIE5 ? "" : '<\/FONT>';
var a_intestazione = '<TR bgcolor=\"#000000\" class=' + risol_tr  + '><TH>' + th_a + 'Codice articolo' + th_b + '<\/TH><TH>' + th_a + 'Articolo' +th_b + '<\/TH><TH>' +
th_a + 'Prezzo in Euro' + th_b + '<\/TH><TH>' + th_a + 'Metti nel carrello' + th_b + '<\/TH><TH>' + th_a + 'Quantit&agrave;' + th_b + '<\/TH><\/TR>';
var a_td = '<TR bgcolor=\"#AAAAAA\"><TD align=\"left\">';
var a1_td = '<TR bgcolor=\"#DDDDDD\"><TD align=\"left\">';
var c_td = '<\/TD><\/TR>';
var ab_td = '<TD align=\"left\">';
var ac_td = '<TD align=\"center\">';
var ar_td = '<TD align=\"right\">';
var cb_td = '<\/TD>';
var a_form = '<FORM>';
var c_form = '<\/FORM>';
var form_R = bassa_risol ? '\"bian_l\"' : '\"bian_h\"';
var a_input_box = '<INPUT class=' + form_R + ' type=\"checkbox\" name=\"';
var c_input_box = '\" onClick=\"parent.valuta_check(this);\">';
var a_select = '<SELECT class=' + form_R + ' onChange=\"parent.valuta_opt(this);\" name=\"';
var a_opzioni = '<OPTION selected>1<\/OPTION>' + '<OPTION>2<\/OPTION><OPTION>3<\/OPTION>' +
                '<OPTION>4<\/OPTION><OPTION>5<\/OPTION>' + '<OPTION>6<\/OPTION><OPTION>7<\/OPTION>' +
                '<OPTION>8<\/OPTION><OPTION>9<\/OPTION><\/SELECT>';   // Chiudo anche il tag SELECT

// Variabili in uso solo dalla funzione traccia_celle()
var t_tab_start = '<TABLE border=\"1\" cellpadding=\"2\" bordercolor=\"#000000\" summary=\"Articoli_selezionati\">';
var t_start = '<TR><TD>';
var t_mid = '<\/TD><TD align=\"center\">';
var t_end = '<\/TD><\/TR>';
var t_tab_end = '<\/TABLE>';

// ++++++ Secondo frame definizioni delle stringhe di output +++++++++++++++++++++++++++++++++++

var xa_doc = a_html + '<HTML lang=\"it\" dir=\"ltr\"><HEAD><TITLE>Resoconto<\/TITLE>' + a_meta +
a_stile + '<\/HEAD><BODY bgcolor=\"' + col_f[2] + '\" leftmargin=\"0\" topmargin=\"0\" marginwidth=\"0\" marginheight=\"0\">';
var xa1_doc = a_doc.substring(0,a_doc.indexOf("<BODY")) + '<BODY bgcolor=\"' + col_f[3] + '\">';
var xa_intestazione = '<TR><TH class="f">Articolo<\/TH><TH class="f">Quantit&agrave;<\/TH>' +
                      '<TH class=\"f\">Costo (Euro)<\/TH><\/TR>';
var xa_td = '<TR bgcolor=\"#CCCCCC\"><TD align=\"left\">';
var xa1_td = '<TR bgcolor="#EEEEEE"><TD align=\"left\">';
var no_articoli = '<BR><H2 align=\"center\">Non ci sono nel carrello<\/H2>' +
                  '<H2 align=\"center\">articoli di questo reparto.<\/H2>';
var xfa_form = '<FORM name=\"form_2\" action=\"\">';
var xfa_hidden = '<INPUT type=\"hidden\" name=\"';
var xfb_hidden = '\" value=\"';
var xfc_hidden = '\">';
var xf_event = ' onMouseOver=\"this.style.backgroundColor=\'red\';\" OnMouseOut=\"this.style.backgroundColor=\'yellow\';\" ';
var xfa_event = ' onMouseOver=\"this.style.backgroundColor=\'red\';\" OnMouseOut=\"this.style.backgroundColor=\'#CCCCCC\';\" ';
var xf_reset = '<BR><INPUT type=\"button\" value=\"Svuota il carrello del reparto\"';
var xf_svuota = '<INPUT type=\"button\" value=\"Svuota il carrello\" onClick=\"javascript:parent.svuota_carrello();\"';
var xf_modulo = '<INPUT type=\"button\" value=\"Compila il modulo d\'ordine\" onClick=\"javascript:parent.modulo_ordine();\"'; 
var xf_invia =  '<INPUT type=\"button\" value=\"I N V I A   L\' O R D I N E\" onClick=\"javascript:parent.invia();\"';
var xf_stampa = '<INPUT type=\"button\" value=\"Stampa l\'ordine\" onClick=\"javascript:parent.stampa_modulo();\"';
var xf_riepilogo = '<INPUT type=\"button\" value=\"Riepilogo e conferma ordine\" onClick=\"javascript:parent.riepilogo();\"';
var xf_riep = '<INPUT type=\"button\" value=\"Torna al riepilogo\" onClick=\"javascript:parent.riepilogo();\"';

  if (!(isIE4 || isIE5)) {  // Non utilizzo gli eventi OnMouseOver e OnMouseOut per Netscape4+
      omni = ' class=\"bttnns\">';
      xf_reset     += omni;
      xf_svuota    += omni;
      xf_invia     += omni;
      xf_stampa    += omni;
      xf_modulo    += omni;
      xf_riep      += omni;
      xf_riepilogo += omni;
  }
  else {                    // MSIE
      omni = ' class=\"bttn\"' + xfa_event + '>';
      xf_reset     += omni;
      xf_svuota    += omni;
      xf_invia     += omni;
      xf_modulo    += omni;
      xf_stampa    += omni;
      xf_riep      += omni;
      xf_riepilogo += ' class=\"bttp\"' + xf_event + '>';
  }

var h_form;  // Stringa che contiene l'output per il secondo frame della form nascosta di invio dell'ordine
var f_avviso = '<P class=\"s\">Si consiglia la stampa del documento per promemoria ed ' +
'al fine di avere un riscontro scritto degli estremi dell\'ordine in caso di successive comunicazioni ad esso relative.' +
' Se non lo potete o volete stampare, per gli stessi motivi conservate il codice ordine e l\'importo totale.<\/P>';
var f_vuoto = '<BR><P class=\"flb\" align=\"center\">Il carrello &egrave; vuoto.<\/P>';
var campi_forzati = '<BR><BR>(*)&nbsp;Questo campo deve essere obbligatoriamente compilato.<BR>(**)Tutti i prezzi sono iva inclusa.<BR><BR> Le indicazioni riguardanti il peso ed il numero di pacchi <BR> sono puramente indicative e potranno subire variazioni.';
var demo_ART = '<HTML><HEAD><TITLE>Descrizione_DEMO<\/TITLE><\/HEAD><BODY bgcolor=\"#FFFFFF\"><BR><H3 align=\"center\">Pagina descrizione dell\'articolo.<\/H3>' +
               '<H5>Inserite nel file dati.js i links alle pagine di descrizione dei vostri articoli.<\/H5>' + 
               '<BR><CENTER><BUTTON onClick=\"window.opener.bottone_utente();\">Inserisci il prodotto nel carrello<\/BUTTON><\/CENTER><\/BODY><\/HTML>';
var r_input = new Array("Nome:1","Cognome:1","Cod.&nbsp;Fiscale/P.IVA:","Indirizzo:1","CAP:1","Citt&agrave;:1","Provincia:1","Stato:1","Indirizzo&nbsp;E-mail:1","Telefono:");
var r_input_name = new Array("user_name","user_cognome","user_fiscale","user_indirizzo","user_cap","user_citta","user_prov","user_stato","user_email","user_telefono");
var r_input_val = new Array();  // Conservo qui i dati immessi dall'utente nel modulo ordine
    for(i = 0; i < r_input_name.length; i++)
        r_input_val[r_input_name[i]] = "";       // Inizializzazione a stringa vuota
var m_input_a = '<input type=\"text\" name=\"';  // Campo testo del modulo ordine
var m_input_b1 = '\" size=\"24\" value=\"';
var m_input_b2 = '\" maxlength=\"100\" class=' + form_R + ' onKeyUp=\"parent.r_input_mem(this);\">';
var vedi_nav = '<DIV align=\"center\" id=\"t_div\" style=\"position:absolute;border:solid;padding:2px;visibility:hidden;top:200px;left:16px;background-color:#FFFA14;';
    vedi_nav += bassa_risol ? "" : "height:92px;width:460px"; // A bassa risoluzione il riquadro si adatta alle dimensioni della scritta interna
    vedi_nav += '\"><BR><SPAN class=\"sbbd\">Clicca sul bottone per andare al:<\/SPAN><BR><SPAN id=\"innav\" class=\"swb\">&nbsp;<\/SPAN><\/DIV>';

// ++++++ Fine secondo frame definizione stringhe output ++++++++++++++++++++++++++++++++++++++++

var x_str;           // Stringa di scrittura per il secondo frame
var str;             // Stringa di scrittura in primo.html (primo frame)
var swap = true;     // Boolean variabile per l'alternanza dei colori nelle righe delle tabelle
var id_win;          // ID della finestra di Intro
var my_win;          // ID della finestra di presentazione degli articoli

// Fine area definizione variabili globali

// Inizio funzioni del carrello

function totale_carrello() {  // Ricalcolo il totale nel carrello per il riepilogo
var i, j, k;                  // Per maggiore sicurezza nel caso in cui l'utente abbia usato
costo_carrello = 0;           // i pulsanti di avanti o indietro del browser
peso_carrello = 0;

 for(i = 0; i < articoli.length; i++) {
     j = articoli[i].length - 1;

     for(k = 0; k < j; k += 8)
         if(articoli[i][6 + k])  // Se l'articolo e' selezionato lo computo nel costo_totale
            costo_carrello += articoli[i][5 + k] * articoli[i][2 + k];
                            // Quantita          X           Prezzo unitario
 //} // End for
 
      for(k = 0; k < j; k += 8)
         if(articoli[i][6 + k])  // Se l'articolo e' selezionato lo computo nel peso_totale
            peso_carrello += articoli[i][5 + k] * articoli[i][7 + k];
                            // Quantita          X           Prezzo unitario
 } // End for

return true;
} // Fine funzione totale_carrello()


function svuota_carrello() {  // Svuoto il carrello a seguito dell'azione di reset
var i, j, k;
  for(i = 0; i < articoli.length; i++) {
      j = articoli[i].length -1;             // Numero degli articoli nel reparto
            for(k = 0; k < j; k += 8) {
                articoli[i][6 + k] = false;  // Selezione articolo
                articoli[i][5 + k] = 1;      // Quantita
            }
  }
  for(i=0; i < articoli.length; i++) rep_costo[i] = 0;   // Riduco a zero il costo parziale di ogni reparto
  for(i=0; i < articoli.length; i++) rep_peso[i] = 0;   // Riduco a zero il costo parziale di ogni reparto
  costo_carrello = 0;
  peso_carrello = 0;
  riepilogo();     // Richiama la funzione riepilogo per riscrivere la situazione nel frame primo
return true;
} // Fine funzione svuota_carrello()


function Trim_lire(lire) { // Funzione per l'aggiunta dei punti separatori delle migliaia e del simbolo L.
var res = "", i, k;
lire += "";                // Mi assicuro di manipolare un tipo di dato stringa

 while((i = lire.length - 3) > 0) {
         res = "." + lire.substr(i,3) + res;
         lire = lire.substr(0,i);
 }

 lire += res;
 k = 11 - lire.length;            // Campo fisso di 13 caratteri
     for(i = 0; i < k; i++)
         lire = '&nbsp;' + lire;  // Bisogna pero' avere un font a spaziatura fissa

return lire.fixed();              // .fixed() e' un metodo di javascript
} // Fine funzione Trim_lire()


function Trim_euro(euro) { // Funzione per l'aggiunta dei punti separatori delle migliaia e del simbolo L.
var res = "", i, k;
 euro += "";               // Mi assicuro di manipolare un tipo di dato stringa

  if(/\.[1-9]$/.test(euro))
     euro += "0";
  else
     euro += -1 == euro.indexOf(".") ? ".00" : "";
var decimali = euro.substr(euro.length - 2, euro.length);  // e con i decimali per l'euro
 euro = euro.substr(0, euro.indexOf("."));

 while((i = euro.length - 3) > 0) {
         res = "." + euro.substr(i, 3) + res;
         euro = euro.substr(0, i);
 }

 euro += res;
 k = 8 - euro.length;            // Campo fisso di 13 caratteri
     for(i = 0; i < k; i++)
         euro = '&nbsp;' + euro;  // Bisogna pero' avere un font a spaziatura fissa

euro += "," + decimali;
return ("€" + euro);     // Aggiungo € e ritorno la stringa
} // Fine funzione Trim_euro()


function bottone_utente() {  // Viene richiamata bottone cliccato nel popup aperto cliccando sul prodotto
  omni = primo.document.forms[0].elements[omni]; 
  if(!omni.checked) {
      omni.checked = true;  // selezione del prdotto
      valuta_check(omni);
  }    
my_win.close();  // Chiudo in ogni caso la finestra utente
}  // Fine bottone utente


function m_a(descri,codice) {   //  Apre una finestra descrittiva del prodotto - viene eseguita sul click 
omni = codice;  // identificativo del prodotto che viene conservato per uso futuro
var win_param = 'toolbar=no,location=no,scrollbars=yes,directories=no,status=no,menubar=no,' +
'resizable=yes,width=' + 600 + ',height=' + 400 + ',top=' +
(screen.availHeight - 400)/2  + ',left=' + (screen.availWidth - 600)/2 + '';
   if(my_win != null && !my_win.closed) my_win.close();   // Altrimenti non si aprono nuove finestre.
   if(descri == "Q.html") {   // Indicazione della ragione della pagina di descrizione
      my_win = window.open("about:blank","Cover",win_param);  // Apro la mia finestra demo
      scrittura(my_win,demo_ART);
   }
   else my_win = window.open(descri,"Cover",win_param);  // Apro la finestra articoli dell'utente
} // Fine function m_a


function scrittura() {  // Funzione scrittura

 if(!(isIE4 || isIE5 || isNS6) || arguments.length < 3)  // Con i browsers non MSIE4+ o Netscape6 scrivo la stringa intera
      with (arguments[0].document) {
            open("text/html","replace");
            write(arguments[1]);
            close();
      }
        // con innerHTML di MSIE e Netscape6 posso evitare che l'utente usando i tasti back o
 else { // forward del browser scompigli il corretto abbinamento dei frames
     omni = arguments[1];   // Contiene la stringa da scrivere
     // Inserisco solo la parte della stringa contenuta tra i tags <BODY></BODY>
     omni = omni.substring((omni.indexOf(">",omni.indexOf("<BODY")) + 1),omni.indexOf("<\/BODY>"));
     arguments[0].document.body.innerHTML = omni;
     arguments[0].document.body.style.backgroundColor = arguments[2];
 }   // Il terzo argomento ricevuto e' il colore di fondo del body che va impostato

return true;
} // Fine funzione scrittura


function check_codice() { // La funzione controlla se i codici immessi sono unici per ogni prodotto
var J = new Array();      // Un po' come la chiave primaria di MS-Access
var i, j, k = 0;

   for(i = 0; i < articoli.length; i++) {
       if((articoli[i].length - 1) % 8) { // Nel caso in cui i campi degli articoli non fossero multipli di 8
                                          // Significherebbe che l'utente ha inserito i campi scorrettamente
          alert("I campi degli articoli non sono stati riempiti correttamente.\nIl carrello non e\' utilizzabile.");
          return false;
       }
       for(j = 0; j < articoli[i].length -1; j += 8)
           J[k++] = articoli[i][j].toUpperCase();  // Copio i codici articoli utente
   }

 J.sort(); // Sort e' un metodo JavaScript per l'ordinamento degli Array

   for(i = 0; i < J.length; i++)  // Verifica se ci sono codici uguali
       if(J[i] == J[i + 1]) {     // E' stato trovato un codice duplicato
          alert("Uno o piu\' codici degli articoli sono uguali.\nIl codice duplicato e\': " + J[i]);
          return false;  // Fermo ulteriori verifiche, il carrello non e' utilizzabile
       }

   for(i = 0; i < articoli.length; i++)  // Controllo la presenza della parola REPARTO
       if(articoli[i][articoli[i].length - 1].toUpperCase().substring(0,7) != "REPARTO") {
          alert("Manca la parola \"REPARTO\" all\'inizio del campo descrizione Reparto");
          return false;  // Il carrello non e' utilizzabile
       }

   for(i = 0; i < articoli.length; i++)  // Controllo che non ci siano spazi vuoti nei campi stringa dei prezzi
       for(j = 0; j < articoli[i].length -1; j += 8) { // Cancellazione dello spazio vuoto e verifica se il dato e' numerico. replace() e' un metodo JavaScript
           articoli[i][2 + j] = articoli[i][2 + j].replace(/\x20/g,"");
           if(articoli[i][2 + j].indexOf(".") == -1) // Se non ci sono
              articoli[i][2 + j] += ".00";           // aggiungo le due cifre decimali necessarie per l'euro 
              omni = articoli[i][2 + j].substr(articoli[i][2 + j].indexOf("."),articoli[i][2 + j].length).length; 
           if(omni > 3)
              articoli[i][2 + j] = articoli[i][2 + j].substring(0,articoli[i][2 + j].indexOf(".")) + articoli[i][2 + j].substr(articoli[i][2 + j].indexOf("."),2);  
           if(omni == 2)
              articoli[i][2 + j] += "0";  // Aggiungo lo zero per l'arrotondamento a due cifre
           if(omni == 1)
              articoli[i][2 + j] += "00";  
           if(!/^[0-9]+\.[0-9]{2}$/.test(articoli[i][2 + j])) {
               alert("Il prezzo corrispondente al codice articolo:\n" + articoli[i][j] + " non e\' un dato numerico.");
               return false;  // Il carrello non e' utilizzabile
           }

           if(1 !== articoli[i][5 + j]) {  // Controllo che il campo quantita' sia numerico e pari a 1
               alert("Controllare che nel secondo campo riservato del:\n" + articoli[i][articoli[i].length - 1] +
                     "\ni valori siano tutti numerici ed uguali a 1");
               return false;  // Il carrello non e' utilizzabile
           }
              // Controllo che i codici articolo immessi dall'utente siano validi
           if((articoli[i][j] = articoli[i][j].replace(/\x20/g,"")) != escape(articoli[i][j])) {
               alert("Il codice articolo: " + articoli[i][j] +
                     "\ncontiene carattere non valido.");
               return false;  // Il carrello non e' utilizzabile
           }

           articoli[i][6 + j] = false;  // Imposto su false i campi selezione articoli
       }

return true;  // La verifica dei dati del carrello e' andata a buon fine
} // Fine funzione check_codice()


function fill_nome()  {  // Genera il campo name per ogni articolo che verra' poi usato
                         // negli elementi interattivi dello script
 if (articoli.length > 25) {
     alert("Non sono ammessi piu\' di 25\nreparti di articoli.");
     return false;       // Il carrello non e' utilizzabile
 }

var f_alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";   // Massimo 25 reparti.
var i, j;

  for(i = 0; i < articoli.length; i++)
      for(j = 0; j < (articoli[i].length -1) / 8; j++)
          articoli[i][4 + j*8] = f_alpha.charAt(i) + (j < 9 ? "00" + (j + 1) : j < 99 ? "0" + (j + 1) : j + 1);
                                // Lettera progressiva per i vari articoli
return true;
} // Fine funzione fill_nome()


function scrivi_frames(reparto) {
 if(reparto != quale_reparto) assegna(reparto); // Conservo le scelte fatte nel reparto precedente prima di cambiare reparto
   // perche' e' stato rilevato un cambio di reparto.
   // La variabile reparto assumera dopo la funzione assegna() il valore del reparto corrente
 p = articoli[reparto];  // Assegnazione del reparto articoli selezionato p

  l_vettore = p.length -1;   // Numero articoli nel vettore
  var a_titolo = '<P class=\"sb\" align=\"center\">&nbsp;&nbsp;' + p[p.length - 1] + '&nbsp;&nbsp;<\/P>';  // p[p.length-1] e' l'ultimo elemento del vettore p

  str = a_doc;     // Intestazione documento <HTML>
  str += a_titolo; // Nome del reparto visitato
  str += a_form;   // Apre la form (il tag <FORM> va messo prima del tag <TABLE> in cui ci sono campi di input)
  str += a_tab;    // Apre la tabella
  str += a_intestazione;

  for(var i = 0; i < l_vettore; i += 8) {
      str += swap ? a_td : a1_td; // Apre la riga e la colonna
      swap = !swap;               // ma di colore diverso per ogni riga

      str += cara(p[i].bold(),true);  // Codice articolo. bold() e' un metodo di javascript per il grassetto dei font
      str += cb_td;               // chiude la colonna codice articolo
      str += ab_td;               // apre la colonna nome articolo
      omni = p[3 + i];            // Precalcolo, in p[3 + i] c'e' l'eventuale link alla descrizione dell'articolo
           if(omni != "0")
              str += '<A href=\"javascript:parent.m_a(\'' + omni + '\',\'' + p[4 + i] + '\');\">';  // Mette il link
      str += cara(p[1 + i],true); // Mette il nome dell'articolo
           if(omni != "0")
              str += '<\/A>';     // Chiude l'eventuale link
      str += cb_td;               // chiude la colonna nome articolo
      str += ab_td;               // apre la colonna prezzo
      str += Trim_euro(p[2 + i]); // mette il prezzo
      str += cb_td;               // chiude la colonna prezzo
      str += ac_td;               // apre la colonna input_checkbox
      str += a_input_box;         // Casella checkbox
      str += p[4 + i];            // mette il nome codice identificativo
      str += c_input_box;         // Completa il tag <INPUT>
      str += cb_td;               // chiude la colonna input_box
      str += ab_td + '&nbsp;&nbsp;'; // apre la colonna select
      str += a_select;            // Apre il tag <SELECT>
      str += "B" + p[4 + i] + '\">';     // mette il nome al tag <SELECT>
      str += a_opzioni;           // mette le opzioni <OPTION>
      str += c_td;                // Chiude la riga e la colonna SELECT
  } // Fine del ciclo di scrittura della tabella

   str += c_tab;   // Chiude la tabella
   str += c_form;  // Chiude la form
     if(isIE4 || isIE5)
        str += vedi_nav;  // Messaggi informativi su eventi onMouseOver nei pulsanti della barra di navigazione
   str += c_doc;   // Chiude il documento

 scrittura(primo,str,col_f[0]);  // Scrive nel frame primo
 secondo_scrivi(); // Dopo aver scritto il frame primo passo a scrivere il
                   // secondo richiamando l'appostita funzione
if(!primo_caricamento)                   
    set_opzioni();   // Dopo la scrittura dei frame imposto gli elementi interattivi del primo frame
                     // ai valori indicati nel vettore p relativo agli articoli del reparto corrente - non  e' necessario farlo se e' il primo caricamento eseguito
return true;
}   // Chiusura funzione scrivi_frames (primo e secondo)


function valuta_opt(opt_nome) {  // Da onChange del <SELECT - nome nella forma A000 o B000
  // In questa funzione se il valore di checkbox relativo non
  // non e' true si ha solo il cambio della quantita dell'articolo
var opt_id = opt_nome.name.substring(2,5) - 1;                 // -1 per l'array che parte da 0

  p[5 + 8*opt_id] = parseInt((opt_nome.selectedIndex + 1),10); // Quantita articolo nel vettore p
  if(primo.document.forms[0].elements[opt_nome.name.substring(1,5)].checked)
     //  Display in secondo.html  --   ID del checkbox BA0XX
     secondo_scrivi();
// Si ha output sul secondo frame se la quantita' dell'articolo e' stata modificata
// e se l'articolo e' selezionato nel checkbox

return true;
}   // Fine funzione valuta cambio opzione


function valuta_check(check_nome) {  // Reagisce agli input dell'utente nelle <INPUT> checkbox
// Questa funzione comporta sempre la riscrittura del secondo frame
// perche l'evento checkbox altera sempre lo stato della selezione dell'articolo si alterna
// tra i due soli valori TRUE  (== articolo selezionato) e FALSE (==articolo non selezionato)

 var num_id = 6 + 8 * (check_nome.name.substring(1,4) - 1);  // Nella forma numerica
 p[num_id] = check_nome.checked; 
 secondo_scrivi();  //  Display in secondo.html
return true;
}  // Fine funzione valuta_check()


function secondo_clear() { // Funzione di scrittura nel secondo frame - Avviata nel caso in cui
   x_str =  xa_doc;        // non vi siano articoli selezionati nel carrello
   x_str += '<BR><DIV align=\"center\">';
   x_str += xfa_form;      // Apertura della form
   x_str += xf_riepilogo;  // Rimane in vista il solo pulsante di riepilogo
   x_str += c_form + '<\/DIV><BR><BR>';
   x_str += no_articoli;
   x_str += t_carrello();  // Ritorna il totale in euro/lire nel carrello complessivo di tutti i reparti
   x_str += dammi_data();  // Ritorna data e ora dell'ultima modifica al documento
   x_str += c_doc;         // Chiusura dei TAG </BODY> e </HTML>

  scrittura(secondo,x_str,col_f[2]);  // Scrive nel frame secondo

return true;
}  // Fine funzione secondo_clear()


function secondo_scrivi() { // Scrittura nel frame secondo.html
// Ci sono tre colonne in tabella:  MODELLO - QUANTITA - COSTO
var quantita;          // Numero degli articoli ordinati con l'opzione casella <OPTION>
costo_carrello = costo_carrello - rep_costo[quale_reparto]; // Sottraggo il precendente costo del reparto
rep_costo[quale_reparto] = 0;   // Se vi sono articoli sezionati (serve per resettare secondo.html)
                       // E per il totale del costo degli articoli

peso_carrello = peso_carrello - rep_peso[quale_reparto]; // Sottraggo il precendente peso del reparto
rep_peso[quale_reparto] = 0;   // Se vi sono articoli sezionati (serve per resettare secondo.html)
                       // E per il totale del peso degli articoli

 x_str = xa_doc;        // Per il secondo frame tag d' intestazione
 x_str += '<DIV align=\"center\">' + xfa_form;   // Apro la form con i bottoni di svuotamento del carrello e di riepilogo
 x_str += xf_riepilogo + '<BR><BR>'; // Pulsante di rimando al riepilogo e invio ordine
 x_str += a_tab;        // Apertura tabella
 x_str += xa_intestazione;   // Titoli della tabella

 for(var i = 0; i < l_vettore; i += 8) {  // Inizio ciclo for composizione tabella
     quantita = p[5 + i];

      if(p[6 + i]) {  // Se l'articolo e' stato selezionato procedo con il calcolo
         x_str += swap ? xa_td : xa1_td; // Apre la riga e la colonna
         swap = !swap;                   // alternando colori diversi per ogni riga
         x_str += cara(p[1 + i],true);   // Scrivo il modello
         x_str += cb_td;             // Chiudo la colonna modello
         x_str += ac_td;             // Apro la colonna quantita'
         x_str += quantita;          // Scrivo la quantita'
         x_str += cb_td;             // Chiudo la colonna quantita'
         x_str += ab_td;             // Apro la colonna costo
      	 x_str += Trim_euro(quantita * p[2 + i]); // Scrivo il costo
         x_str += c_td;              // Chiudo colonna e riga
         rep_costo[quale_reparto] += quantita * p[2 + i]; // Totale listino articoli
         rep_peso[quale_reparto] += quantita * p[7 + i]; // Totale listino articoli
      }  // Chiusura if quantita'
 }  // Chiusura ciclo for composizione tabella

 if(!rep_costo[quale_reparto]) {
     secondo_clear();   // Non ci sono articoli selezionati percio' cancello
     return true;       // i precedenti dati indicati nel secondo frame ed interrrompo l'esecuzione
 }

// Scrittura della riga del rep_costo e del totale complessivo del carrello
  x_str += '<TR bgcolor=\"#FFFFFF\"><TD align=\"right\" colspan=\"3\">';  // Tre colonne
  x_str += "Totale reparto&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".bold();
  x_str += Trim_euro(rep_costo[quale_reparto]).fontcolor("blue").big();  // Aumento il font ( .big() e fontcolor() sono metodi di javascript )
  x_str += c_td;        // Chiusura riga e colonna
  x_str += c_tab;       // Chiusura tabella
  costo_carrello += rep_costo[quale_reparto];
  peso_carrello += rep_peso[quale_reparto];
  x_str += t_carrello();
// Fine scrittura riga rep_costo e costo_carrello;

// Gestione form con i pulsanti di reset carrello e riepiliogo per l'invio dell'ordine

x_str += xf_reset;
x_str += c_form + '<\/DIV>';  // Chiudo la form pulsanti riepilogo e reset

// Fine gestione form pulsanti di riepilogo e reset carello del reparto
  x_str += dammi_data();      // Data ultima modifica del documento
  x_str += c_doc;             // Chiusura documento HTML

  scrittura(secondo,x_str,col_f[2]);   // Scrittura nel frame secondo
  secondo.document.forms[0].elements[1].onclick = parent.resetta;    // Su click funzione resetta()

 terzo.focus();  // Perche' se si mantiene il focus sul primo frame nella casella con le opzioni
               // e si usa un intellimouse per cambiare rapidamente opzione ne esce un disastro
return true;
}  // Fine funzione secondo_scrivi()


function resetta() { // Completo azzeramento di entrambi i frame primo.html e secondo.html
 primo.document.forms[0].reset();   // reset() e' un metodo JavaScript
    for(var i = 0; i < l_vettore; i += 8) {
        p[5 + i] = 1;      // Quantita' articolo a 1
        p[6 + i] = false;  // Selezione articolo == non selezionato
    }
 costo_carrello = costo_carrello - rep_costo[quale_reparto];
 rep_costo[quale_reparto] = 0;   // Tolgo il valore di tutti gli articoli selezionati

 peso_carrello = peso_carrello - rep_peso[quale_reparto];
 rep_peso[quale_reparto] = 0;   // Tolgo il peso di tutti gli articoli selezionati
 secondo_clear();       // Quantita 1 e selezione = false per gli elementi del vettore del reparto corrente

return true;
}  // Fine funzione resetta()


function invia() { // La action della form nel secondo frame con i campi nascosti
                   // deve essere indirizzata ad un CGI sul lato server. Tipicamente una FORMMAIL
                   valido=false;
  for(var i = 0; i < r_input.length; i++)   // Verifico che i campi obbligatori siano stati riempiti
      if(r_input[i].indexOf("1") != -1) {    // 1 indica nell'elemento stringa dell'array l'obbligatorieta' del campo
         if (r_input[i].indexOf("E-mail") != -1 && /\S/.test(primo.document.forms[0].elements[i].value) && valido === valid_mail(primo.document.forms[0].elements[i].value)) {
            alert("l\'indirizzo E-mail inserito non e\'valido.");
            primo.document.forms[0].elements[i].focus();   // Assegno il focus per il riempimento
            return true;
            }            
         if(!/\S/.test(primo.document.forms[0].elements[i].value)) {
            if(r_input[i].indexOf("E-mail") != -1) {
                 if(confirm("Attenzione! \nIl campo obbligatorio E-mail e\'vuoto! \n \nE\' possibile proseguire ma non verra\' inviata conferma dell\'ordine. \nNon sara\' possibile ricevere comunicazioni circa la disponibilita\' \nimmediata dell\'articolo o i tempi di consegna, ne indicazioni \nsulle modalita\' di pagamento. \nSe si prosegue sara\' comunque necessario chiedere \nulteriori informazioni al numero telefonico 0744432033 \n \nProseguire?")) { // Per sicurezza chiedo la conferma
                  }else{
                  primo.document.forms[0].elements[i].focus();   // Assegno il focus per il riempimento
                  return true;
                  }
            } else {
            alert("Il campo obbligatorio [ " + r_input[i].substring(0,r_input[i].indexOf("1") - 1) + " ] e\'vuoto.");
            primo.document.forms[0].elements[i].focus();   // Assegno il focus per il riempimento
            return true;
            }
         }
      }
  if(confirm("Confermi l'ordine ?"))     // Per sicurezza chiedo la conferma dell'ordine
     primo.document.forms[0].submit();   // submit() e' un metodo JavaScript

return true; // Non e' stato confermato l'invio del modulo
}  // Fine funzione invia


function initData() { // Utilizzata solo dalla successiva funzione dammi_data()
  this.length = arguments.length;
  for(var i = 0; i < this.length; i++)
       this[i+1] = arguments[i];
}  // Fine funzione initData()


function dammi_data() {  // Restituisce data e ora dell'ultima modifica al documento
 var NS_anno = "";
 var d_str = "";
 var UModifica = new Date();
 var DData = new initData("Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato");
 var MData = new initData("gennaio","febbraio","marzo","aprile","maggio","giugno","luglio","agosto","settembre","ottobre","novembre","dicembre");

  d_str += DData[(UModifica.getDay() + 1)] + ',&nbsp;';
  d_str += UModifica.getDate() + '&nbsp;';
  d_str += MData[(UModifica.getMonth() + 1)] + '&nbsp;';
    if(isIE4 || isIE5)
       d_str += '-&nbsp;' + UModifica.getYear();
    else {  // Browser Netscape ed altri
          NS_anno = escape(UModifica.getYear());
          d_str += '-&nbsp;' + NS_anno.substring((NS_anno.length - 2), NS_anno.length);
    }
  d_str += '&nbsp;&nbsp;Ore&nbsp;' + UModifica.getHours() + ':';
  d_str += (escape(UModifica.getMinutes())).length == 1 ? "0" + UModifica.getMinutes() : UModifica.getMinutes();
  d_str = '<H4 align=\"right\">&nbsp;&nbsp;' + d_str + '&nbsp;<\/H4>';  // Data modifica

return d_str;  // Restituisce la data corrente
}    // Fine funzione dammi_data()


function apri() { // Apertura della finestra di Intro
 if(!flag_intro) return true;        // Non apro la finestra di Intro perche' l'utente ha modificato flag_intro
 if(id_win != null) chiudi_figlia(); // Per essere sicuro che la finestra sia realmente chiusa
 x_str = "toolbar=no,location=no,scrollbars=no,directories=no,status=no,menubar=no,resizable=no,width=460,height=220,top=100,left=100";
 id_win = window.open("about:blank","Cover",x_str);
 str_c = a_html + '<HTML lang=\"it\" dir=\"ltr\"><HEAD><TITLE>Intro Quicker<\/TITLE>' + a_meta + a_stile +
 '<\/HEAD><BODY bgcolor=\"#FFFFFF\" onLoad=\"resizeTo(470,254);moveTo(100,100);\"' +
 ' onResize=\"resizeTo(470,253);moveTo(100,100);\" onBlur=\"self.focus();\">';
 str_c += '<BR><CENTER><H1>QUICKER</H1><\/CENTER>';  // Dentro la seconda finestra
 str_c += '<P class=\"bnu\">&nbsp;Carrello della spesa INTRO&nbsp;<\/P>';
 str_c += '<H3 class=\"sb\" align=\"center\">&nbsp;E-mail:&nbsp;staff@mediarama.com&nbsp;<\/H3>';
 str_c += c_doc;  // Chiusura documento HTML pagina

 str_p = a_doc;   // Intestazioni finestra Intro
 str_p += '<HR size=\"2\"><BR><H1 class=\"swnub\" align=\"center\">By Quicker &copy; 2005<\/H1><BR>';
 str_p += '<H3 class=\"sw\" align=\"center\">E-mail:&nbsp;staff@mediarama.com<\/H3><HR size=\"2\">';
 str_p += '<SCR' + 'IPT language=\"JavaScript\" type=\"text\/javascript\">' +
        'function apri_c(){document.open();document.write(window.opener.str_c);document.close();}' +
        'setTimeout(\"apri_c();\",1300);<\/SCR' + 'IPT>';
 str_p += c_doc;

// Devo prevedere che ci puo' essere il blocco delle popup nel browser
if(id_win) {
 setTimeout("scrittura(id_win,str_p);",50); // Scrittura nella finestra di intro
 setTimeout("if(!id_win.closed) id_win.close();",2800); // Chiusura della finestra di intro dopo 2,5 secondi
}

return true;
} // Fine funzione apri()


function chiudi_figlia() {   // Chiusura della finestra dei comandi
  if(my_win != null && !my_win.closed)
     my_win.close();  // Chiudo la finestra descrizione articolo
  if(id_win != null && !id_win.closed)
     id_win.close();  // Chiudo finestra Intro quando si chiude la principale

return true;                 // Nel caso in cui cio' avvenga subito dopo il caricamento del carrello
} // Fine funzione chiudi_figlia()


function assegna(rep) {  // Devo copiare i valori scelti in p nel array reparto articoli
 articoli[quale_reparto] = p;
 quale_reparto = rep;

return true;
}  // Fine funzione assegna()


function set_opzioni() {  // Reimposta le selezioni degli elementi interattivi del frame
// primo.html dopo un cambio di reparto articoli al nuovo reparto assegnato in p
// Il setTimeOut con funzione recursiva sotto implementato serve per risolvere alcuni
// problemi di ritardo con Netscape che sembra non trovare gli elements della form del frame
// primo pur essendo gia' stato disegnato dalla funzione scrivi_frames()
 if(primo.document.forms[0].elements.length != (l_vettore / 8) * 2) {
    setTimeout("set_opzioni();",160);
 }else {
   for(var i = 0; i < l_vettore; i += 8) {
       if(p[6 + i])   // Se la casella checkbox e' selezionata
          primo.document.forms[0].elements[p[4 + i]].checked = true;  // Imposto
       primo.document.forms[0].elements["B" + p[4 + i]].options[p[5 + i] -1].selected = true;
       // p[5 + i] -1 e' la quantita' diminuita di -1 per options[] che conta da zero
   }
 return true;
 } // Fine else

}  // Fine funzione set_opzioni() reimpostazioni nel frame degli elementi interattivi


function riepilogo() {  // Riepilogo dei risultati e inoltro dell'ordine di acquisto
 // Schema dell'output HTML nel frame <primo> del riepilogo degli acquisti fatti nei reparti
 /*
 ______<TABLE>____________________________________
|                    <TR>     @<------------------|----Tabella contenitore (una riga, due colonne)
|                                                 |
|     _<TABLE>_______        _<TABLE>_______      |
|    |               |      |               |     |
|    |  <TR><TD>     |      |  <TR><TD>  @<-|-----|----Tabella della seconda colonna dei reparti
|    |  _<TABLE>___  |      |  _<TABLE>___  |     |
|    | |           | |      | |           | |     |
|    | |Articoli   | |      | |      @<---|-|-----|----Tabella del reparto restituita dalla funzione traccia_celle()
|    | |           | |      | |           | |     |
|<TD>| |___________| |</TD> | |___________| |     |
|    |   </TABLE>    |      |   </TABLE>    |     |   Le funzioni riepilogo() e traccia_celle()
|    |  </TD></TR>   | <TD> |  </TD></TR>   |</TD>|   generano questo schema esempificativo nel caso
|    |               |      |               |     |   in cui ci siano quattro reparti di diversi articoli
|    |  <TR><TD>     |      |  <TR><TD>     |     |
|    |  _<TABLE>___  |      |  _<TABLE>___  |     |
|    | |           | |      | |           | |     |
|    | |           | |      | |           | |     |
|    | |           | |      | |           | |     |
|    | |___________| |      | |___________| |     |
|    |   </TABLE>    |      |   </TABLE>    |     |
|    |  </TD></TR>   |      |  </TD></TR>   |     |
|    |_______________|      |_______________|     |
|      </TABLE>               </TABLE>            |
|                                                 |
|_____________________</TR>_______________________|
      </TABLE>
*/

 h_form = "";  // Azzeramento - Nel caso di ordini multipli evito la ripetizione dell'ordine precedente
 var n_reparti = articoli.length % 2;  // Numero dei reparti di resto definiti
 var ct_1 = n_reparti ? articoli.length / 2 : Math.floor(articoli.length / 2) + n_reparti; // Reparti da mettere nella prima colonna
 var vuoto ='<TR><TD><TABLE><TR><TD>&nbsp;&nbsp;<\/TD><\/TR><\/TABLE><\/TD><\/TR>';  // Tabella vuota c'e' un solo reparto

 str = a_doc.substring(0,a_doc.indexOf("<BODY")) + '<BODY bgcolor=\"' + col_f[4] + '\">';  // Sfondo giallino
 str += '<TABLE align=\"center\" cellspacing=\"3\" cellpadding=\"1\" border=\"0\" summary=\"Riepilogo\">';
 str += '<TR><TD valign=\"top\"><TABLE>';   // Tabella principale da una riga e due colonne

 // ct_1 corrisponde al numero di righe nella tabella di riepilogo nella colonna sinistra
 for(var i_cell = 0; i_cell < ct_1; i_cell++) {  // Traccia del riepilogo prima colonna
     str += '<TR><TD valign=\"top\">';
     str += traccia_celle(i_cell) + '<\/TD><\/TR>';
 } // Chiusura for

 str +='<\/TABLE><\/TD><TD valign=\"top\"><TABLE>';

 for(; i_cell < articoli.length; i_cell++) {  // Traccia del riepilogo seconda colonna (colonna di destra)
     str += '<TR><TD valign=\"top\">';
     str += traccia_celle(i_cell) + '<\/TD><\/TR>';
 } // Chiusura for

 if(1 == articoli.length)
    str += vuoto;                   // Nel caso in cui ci sia un solo articolo mi assicuro
 str += '<\/TABLE><\/TD><\/TR>';    // di mettere nella colonna almeno una riga vuota
                                    // Ricordarsi di gestire il caso di errore se articoli.length==0
 str += '<\/TABLE>';  // Chiudo la tabella principale
 if(isIE4 || isIE5)
    str += vedi_nav;  // Messaggi informativi
 str += c_doc;        // Chiudo il documento HTML

 scrittura(primo,str,col_f[4]);          // Scrittura nel frame primo
 totale_carrello();                      // Ottengo il totale complessivo
 riepilogo_secondo(true);                // Scrivo nel secondo frame per l'inoltro del modulo

return true;
} // Chiusura della funzione riepilogo

function traccia_celle(n) {   // Funzione che restituisce il quadro riepilogativo per reparto in formato HTML
var s_rit = "";         // Stringa di ritorno di traccia_celle inizializzata a stringa vuota
var costo_reparto = 0;  // valore complessivo degli articoli acquistati
var peso_reparto = 0;  // peso complessivo degli articoli acquistati
var v_tab = new Array();
v_tab = articoli[n];    // Copia del vettore articoli per il reparto n
// v_tab[1+i] = nome articolo --  v_tab[2+i] = prezzo  -- v_tab[6 + i] selezione (true o false)
// v_tab[5+i] = quantita -- v_tab[i] = codice articolo
l_vettore = v_tab.length -1;    // numero articoli nel vettore

s_rit += t_tab_start;  // Apro la tabella
s_rit += '<TR><TH class=\"btto\" align=\"center\" colspan=\"2\">' + v_tab[v_tab.length - 1] + '<\/TH><\/TR>';  // v_tab[v_tab.length-1] e' l'ultimo elemento
                                                                     // Nome del reparto
s_rit += t_start + cara('Articolo'.bold(),false) + t_mid + cara('Quantit&agrave;'.bold(),false) + t_end; // Intestazione

 for(var i = 0; i < l_vettore; i += 8)  // Calcolo il valore complessivo degli articoli selezionati nel reparto
      if(v_tab[6 + i]) {          // Se true l'articolo e' stato selezionato
         s_rit += t_start + cara(v_tab[1 + i],true) + t_mid + 'x' + v_tab[5 + i] + t_end;
         costo_reparto += v_tab[5 + i] * v_tab[2 + i]; // Quantita x Prezzo unitario
         peso_reparto += v_tab[5 + i] * v_tab[7 + i]; // Quantita x Peso unitario
         // Genero i campi hidden per la form di invio dell'ordine nel secondo frame
         h_form += xfa_hidden + v_tab[i] + xfb_hidden + v_tab[5 + i] + xfc_hidden;
      }  // Chiusura ciclo if selezione articolo e form campi hidden

s_rit += '<TR><TD class=\"swx\" align=\"right\" colspan=\"2\"> Totale Reparto&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' + Trim_euro(costo_reparto) + '<\/TD><\/TR>'; // Spesa totale fatta nel reparto
s_rit += t_tab_end;  // Chiudo la tabella

return s_rit;   // Ritorno la tabella disegnata del reparto richiesto
}  // Fine funzione traccia_celle

function show_nav(quale,giu_su) {  // Mostra messaggi per MSIE su eventi OnMouse sui bottoni della barra di navigazione
primo.scroll(0,0);  // Per posizionare in modo visibile il contenuto del DIV. scroll() e' un metodo JavaScript
omni = giu_su ? '[&nbsp;' + articoli[quale][articoli[quale].length -1] + '&nbsp;]' : '&nbsp;';
    if(HM_DOM) {      // MSIE 5+ NS6
       frames[0].document.getElementById("innav").innerHTML = omni;
       frames[0].document.getElementById("t_div").style.visibility = giu_su ? "visible" : "hidden";
      }
    else if(HM_IE) {  // MSIE4
       frames[0].document.all["innav"].innerHTML = omni;
       frames[0].document.all["t_div"].style.visibility = giu_su ? "visible" : "hidden";
    }

return true;
}  // Fine funzione show_nav

function scrivi_navbar() {   // Funzione di scrittura del frame terzo di navigazione
 var nome_rep;
  str =  a_html + a_testa + a_meta + a_stile + '<\/HEAD>';
  str += '<BODY bgcolor=\"' + col_f[1] + '\" leftmargin=\"0\" topmargin=\"2\" marginwidth=\"0\" marginheight=\"0\">';
  str += '<DIV align=\"center\"><FORM>';    // Devo forzare i bottoni dentro una tabella per averli allineati in Netscape
  str += table_nav;
    for(var i = 0; i < articoli.length; i++) {
        str += ac_td;
        nome_rep = articoli[i][articoli[i].length -1];
          if(isIE4 || isIE5)   // Visualizza messaggio informativo se MSIE quando si passa sopra ai pulsanti dei reparti
             str += '<A href=\"javascript:;\" onMouseOver=\"parent.show_nav(' + i + ',true);\" onMouseOut=\"parent.show_nav(' + i + ',false);\">';
        str += '<INPUT type=\"button\" onClick=\"parent.scrivi_frames(' + i + ');\" value=\"';
        str += nome_rep.substring(8,nome_rep.length + 1) + '\" ';  // Nome del reparto senza REPARTO
          if(!(isIE4 || isIE5))
             str += 'class=\"bttmns\"';            // No MSIE
          else
             str += xf_event + 'class=\"bttm\"';   // Gestione eventi onMouseOver-Out del pulsante se MSIE
        str += ' title=\"' + nome_rep + '\">';
          if(isIE4 || isIE5)  // Chiude il link messaggio informativo MSIE
             str += '<\/A>';
        str += cb_td;
    }
  str += '<\/TR>' + c_tab;
  str += '<\/FORM><\/DIV>' + c_doc;  // Chiusura form e document

  scrittura(terzo,str,col_f[1]);     // Scrittura nel frame terzo (nav_bar)

return true;
} // Fine funzione scrivi_navbar()


function riepilogo_secondo(n) { // E' richiamata alla fine della funzione riepilogo()
                                // Se n == true si stampa solo il pulsante riepilogo
                                // la data ed il pulsante di stampa
  dammi_codice();      // Assegna il codice alla variabile codice_ordine
  x_str =  xa1_doc;    // Intestazione del documento del frame secondo
    if(n)
       x_str += t_carrello() + '<BR>';   // Totale del carrello in testa
  x_str += '<BR><DIV align=\"center\">';
  x_str += xfab_form;                    // Apertura della form

    if(costo_carrello && n)  {           // Genero il campo nascosto associato al codice e data ordine solo se ci sono articoli selezionati
       x_str += xf_modulo + '<BR><BR>';  // Rimane in vista il pulsante di compilazione dell'ordine
       x_str += xf_svuota;               // e il pulsante di svuotamento completo del carrello
    }
    else if(!costo_carrello && n)
             x_str += f_vuoto;       // Messaggio di avviso di carrello vuoto

  x_str += '<BR>' + dammi_data();    // Data odierna in corso d'ordine
    if(costo_carrello && !n) {       // Output solo nel caso in cui ci siano articoli selezionati
       x_str += xf_invia + '<BR>';   // Pulsante di stampa ed inoltro del modulo ordine
       x_str += f_avviso;            // Messaggio che invita alla stampa del documento dell'ordine
          if(isNS4 || isNS6 || isIE5 || isMoz)  // Metodo JavaScript print() solo per Netscape4-6 / Explorer5 / Mozilla 
             x_str += xf_stampa + '<BR><BR>';  // Pulsante di stampa del modulo ordine
       x_str += xf_riep;                       // Pulsante di ritorno al riepilogo
    }

  x_str += c_form + '<\/DIV>';  // Chiusura form
    if(costo_carrello && !n)
       x_str += campi_forzati.small().fontcolor("#F01E8C");
  x_str += c_doc;      // Chiusura dei TAG </BODY> e </HTML>

    if(!n)
       h_form = "";    // Inizializzazione campi nascosti per un secondo riutilizzo della funzione traccia_celle()

  scrittura(secondo,x_str,col_f[3]);   // Scrittura nel frame secondo

return true;
}  // Fine funzione riepilogo_secondo()


function r_input_mem(n_c) {  // La funzione conserva i dati immessi dall'utente nel
  r_input_val[n_c.name] = n_c.value;   // modulo ordine in modo da restituirli in caso in cui
                                       // l'utente torna al modulo d'ordine dopo aver cambiato
return true;                           // schermata di visualizzazione.
}  // Fine funzione r_input_mem()


function modulo_ordine() {    // La funzione scrive nel frame primo il modulo per la raccolta dei dati

 str = a_doc.substring(0,a_doc.indexOf("<BODY")) + '<BODY bgcolor=\"' + col_f[5] + '">'; // Sfondo giallino
 str += '<DIV id=\"mod1\" align=\"center\">&nbsp;Per ordinare compilare il modulo e premere INVIA&nbsp;L\'ORDINE.&nbsp;<\/DIV>';
 str += xfab_form;   // Apertura della form di invio dell'ordine
 str += a_tab;       // Apertura tabella

   for(var i = 0; i < r_input.length; i++) {   // Scrittura dei campi dati personali per l'ordine
        str += '<TR bgcolor=\"#909090\">' + ab_td;
            if(r_input[i].indexOf("1") == -1)
               str += r_input[i].bold();
            else
               str += "*".sup().fontcolor("#F01E8C") + r_input[i].substring(0,r_input[i].indexOf("1")).bold().fontcolor("#FFFFFF");
        str += cb_td;   // Chiudo la cella
        str += ab_td + m_input_a + r_input_name[i] + m_input_b1 + r_input_val[r_input_name[i]] + m_input_b2 + c_td;  // Campo testo di input per i dati dell'utente
   }

 str += c_tab;    // Chiusura tabella
 str += h_form;   // Scrittura dei campi nascosti          -  Converte gli spazi in "_"
 str += xfa_hidden + codice_ordine + xfb_hidden;
 str += escape((new Date).toUTCString().replace(/\x20/g,"_")) + xfc_hidden;  // Data dell'ordine
 str += xfa_hidden + 'Totale' + xfb_hidden;
 str += Trim_euro(costo_carrello + t_spedizione(peso_carrello))  + xfc_hidden; //Totale costo
 str += '<DIV align=\"center\">';

 str += table_nav + ac_td;  // Allineamento del codice ordine e totale carrello
 str += '<BR>' + '<H4>' + '&nbsp;Codice ordine:&nbsp;' + codice_ordine + '&nbsp;<\/H4>';
 str += cb_td + ar_td + '&nbsp;' + '(**)'.fontcolor("#F01E8C") + cb_td + ac_td + t_carrello() + c_td + c_tab + '<\/DIV>';
 str += c_form;      // Chiusura form
   if(isIE4 || isIE5)
      str += vedi_nav;    // Messaggi informativi
 str += c_doc;            // Chiusura dei TAG </BODY> e </HTML>

 scrittura(primo,str,col_f[5]);  // Scrittura nel frame primo
 riepilogo_secondo(false);       // Riscrivo il frame secondo per il modulo d'ordine

return true;
}  // Fine funzione modulo_ordine


function t_carrello() {  // Restituisce il totale del carrello in euro, le spese di spedizione, il numero di pacchi ed il peso del carrello
  var t_str = '<BR><TABLE align=\"center\" class=\"fnu\" border=\"0\" summary=\"Totale acquisti nel carrello in lire\" cellpadding=\"2\" cellspacing=\"0\"><TR>';
  t_str += ar_td + cara('Totale&nbsp;nel&nbsp;carrello&nbsp;=&nbsp;&nbsp;&nbsp;&nbsp;' + Trim_euro(costo_carrello),false) + c_td;
//  t_str += '<TR>' + ar_td + cara('In&nbsp;lire&nbsp;=&nbsp;&nbsp;' + Trim_lire(Math.round(costo_carrello * 1936.27)),false);
  t_str += '<TR>' + ar_td + cara('Spedizione&nbsp;in&nbsp;Italia=&nbsp;&nbsp;&nbsp;&nbsp;' + Trim_euro(t_spedizione(peso_carrello)),false) + c_td;
  t_str += '<TR>' + ar_td + cara('<font color=\"#0000A0\"><strong><u>TOTALE=&nbsp;&nbsp;&nbsp;&nbsp;' + Trim_euro(costo_carrello + t_spedizione(peso_carrello)),false) + '</font></strong></u>' + c_td;
  t_str += '<TR>' + ar_td + cara('Numero&nbsp;di&nbsp;pacchi:&nbsp;&nbsp;' + t_num_pacchi(peso_carrello),false) + c_td; // Numero di pacchi
  t_str += '<TR>' + ar_td + cara('Totale&nbsp;peso&nbsp;carrello Kg.:&nbsp;&nbsp;' + (peso_carrello / 1000)); // Peso dei pacchi
 c_td + c_tab; // Chiudo cella, riga e tabella
return t_str;
}  // Fine funzione t_carrello


function t_spedizione(peso_carrello) {  // Restituisce il totale delle spese di spedizione in base al peso in grammi
   var t_sped = 0;
   var moltiplicatore = 0;
   if(peso_carrello > 30000) {
   moltiplicatore = Math.floor(peso_carrello / 30000);
   peso_carrello = peso_carrello - (30000 * moltiplicatore);
   }
   if(peso_carrello > 0 && peso_carrello < 2000) {
   t_sped = 2.00;
   }else if(peso_carrello > 2000 && peso_carrello <= 5000){
   t_sped = 4.00;
   }else if(peso_carrello > 5000  && peso_carrello <= 7000){
   t_sped = 6.00;
   }else if(peso_carrello > 7000  && peso_carrello <= 20000){
   t_sped = 8.00;
   }else if(peso_carrello > 20000  && peso_carrello <= 30000){
   t_sped = 9.00;
   }
   if(moltiplicatore > 0) {
   t_sped = t_sped + (9 * moltiplicatore);
   }
return t_sped;
}  // Fine funzione t_spedizione


function t_num_pacchi(peso_carrello) {  // Restituisce il totale delle spese di spedizione in base al peso in grammi
   var t_pacchi = 0;
   var moltiplicatore = 0;
   if(peso_carrello > 30000) {
   moltiplicatore = Math.floor(peso_carrello / 30000);
   peso_carrello = peso_carrello - (30000 * moltiplicatore);
   }
   if(peso_carrello > 0 && peso_carrello < 2000) {
   t_pacchi = 1;
   }else if(peso_carrello > 2000 && peso_carrello <= 5000){
   t_pacchi = 1;
   }else if(peso_carrello > 5000  && peso_carrello <= 7000){
   t_pacchi = 2;
   }else if(peso_carrello > 7000  && peso_carrello <= 20000){
   t_pacchi = 1;
   }else if(peso_carrello > 20000  && peso_carrello <= 30000){
   t_pacchi = 1;
   }
   if(moltiplicatore > 0) {
   t_pacchi = t_pacchi + moltiplicatore;
   }
return t_pacchi;
}  // Fine funzione t_num_pacchi


function valid_mail(Mail)  {  // Verifica la validita' della email inserita
Mail=Mail.toLowerCase();
return (Mail.search(/^[a-zA-Z]+([_\.-]?[a-zA-Z0-9]+)*@[a-zA-Z0-9]+([\.-]?[a-zA-Z0-9]+)*(\.[a-zA-Z]{2,4})+$/) != -1);
}


function dammi_codice()  {  // Restituisce il codice associato all'ordine

    codice_ordine = 'COD_' + Math.floor(Math.random() * 1000);  // floor() e random() sono metodi JavaScript
    codice_ordine +=  '_' + Math.floor(Math.random() * 1000);   // dell'oggetto intrinseco Math

return true;
}  // Fine funzione dammi_codice;


function stampa_modulo() {  // Funzione di stampa del modulo d'ordine
    primo.focus();  // Seleziono il frame primo. focus() e' un metodo JavaScript
    primo.print();  // Stampa il frame primo

return true;
} // Fine funzione di stampa_ modulo d'ordine


function cara() {      // Per Netscape ed altri aggiunge i <FONT SIZE> alla stringa ricevuta
 if(!(isIE4 || isIE5)) // per adattare i caratteri alla risoluzione del video
    return cara.arguments[1] ? font_sizeA + cara.arguments[0] + '<\/SPAN>' : font_sizeB + cara.arguments[0] + '<\/SPAN>';
                                  // Tahoma                                        Arial
 else return cara.arguments[0];   // Explorer per cui nessuna modifica
} // Fine funzione cara


function inizia() {  // Questa funzione avvia il carrello
  if(check_codice() && fill_nome()) {  // Verifica la correttezza dei dati utente
                                       // e assegna il codice interno all'articolo per gli elementi interattivi
     apri();              // Apre la finestra figlia che contiene la Intro di presentazione
     scrivi_frames(0);    // Scrive i frames del carrello; 0 e il primo reparto
     scrivi_navbar();     // Scrive il frame terzo di navigazione tra i reparti
  }
  primo_caricamento = false;
return true;
}  // Fine funzione inizia

// FINE SCRIPT car.js
