// DisplayDB.js
//
// Questo file contiene le funzioni che si occupano di visualizzare
// la  tabella che ottieniamo  come risultato di una interrogazione
// sulla base  di dati.  Va richiamata  all'interno del  file  HTML
// passandogli l'array che contiene, codificata, la tabella.
//
// L'unica  funziona  che  eventualmente  va  modificata e' proprio
// quella che ha cablato in se il layout della tabella (DisplayDB),
// che  in questo esempio e' semplicemente  un elenco preformattato
// del contenuto del database. 
//
///////////////////////////////////////////////////////////////////

// Per la formattazione dei vari campi si usano queste funzioni qui
// definite

function resize(Stringa, MaxLunghezza, Blanks) {
  var resizedString = "";

  if (Stringa.length>MaxLunghezza)
    resizedString = Stringa.substring(0, MaxLunghezza-Blanks)+makeSpaces(Blanks);
  else
    resizedString = Stringa + makeSpaces(MaxLunghezza-Stringa.length);

  return resizedString;
}

function makeSpaces(numeroSpazi) {
  var spaceString = "";

  for(var i=0; i<numeroSpazi; i++)
    spaceString += " ";

  return spaceString;
 }

function DisplayDB(dbMatrix) {

  // Dichiarazione della lunghezza dei campi (per la formattazione)
  // E' stato previsto che se il valore del campo supera quello qui
  // di seguito definito, viene troncato per rientrare nei limiti.
  
  // Ricordiamo che i campi sono legati agli indici della tabella nel
  // modo seguente:
  //
  // CODICE: 0 - DESCRIZIONE: 1 - PREZZO: 2 - MAGAZZINO: 3
  // Nome: 0 - UFFICIO: 1 - TELEFONO: 2 - EMAIL: 3
  //

  NOME = 0;
  UFFICIO = 1;
  TELEFONO = 2;
  EMAIL = 3;

  MaxLen = new Array();
  MaxLen[NOME] = 25;
  MaxLen[UFFICIO] = 70;
  MaxLen[TELEFONO] = 30;
  MaxLen[EMAIL] = 15;

  // Spazi vuoti tra una colonna e l'altra
  blankSpace = 2;

  document.write("<br><hr>");
  document.writeln("<table border='0'>");
  
  // Inizializzazione dei vari campi da stampare
  for (i=0; i<dbMatrix.length; i++) {
    cod = dbMatrix[i][NOME];
    des = dbMatrix[i][UFFICIO];
    pre = dbMatrix[i][TELEFONO];
    mag = dbMatrix[i][EMAIL];

    // Se il valore supera la lunghezza c2onsentita, viene troncato
   // cod = resize(cod, MaxLen[NOME], blankSpace);
  //  des = resize(des, MaxLen[UFFICIO], blankSpace);
    val = resize(pre, MaxLen[TELEFONO], blankSpace);
  //  mag = resize(mag, MaxLen[EMAIL], blankSpace);

    document.write("<tr>");
    document.write("<td width='200'> <font size='2' face='verdana'>"+cod+"</font></td>");
    document.write("<td width='200'> <font size='2' face='verdana'>"+val+"</font></td>");
    document.write("<td> <font size='1' face='verdana'>"+mag+"</font>");
    if (mag.substring(0,4)!='  --') 
        document.write("<img border='0' src='http://www.ismaa.it/UploadImgs/149_ATdominio.jpg'>");
    else;
    
    document.write("</td>");
    document.writeln("</tr><tr>");
    document.write("<td  colspan='3' > <font size='1' face='verdana'>&nbsp&nbsp&nbsp"+des+"</font></td>");
    //document.write("<td></td>");
    //document.write("<td></td>");
    document.writeln("</tr>");

  }  // Fine del for
  document.write("</table>");
  document.write("<br><hr>");
}

// Una variante consiste nell'inserire dei tag HTML per dare un
// aspetto piu' efficace alla lista visualizzata. Ad esempio si
// puo' pensare di usare una tabella (tag <TABLE>) oppure di inserire
// dei link, in modo tale che cliccando sulla descrizione, viene
// richiamato un file che mostra una foto del prodotto, corredata
// della descrizione e di altre caratteristiche, estraibili 
// ancora una volta dalla base di dati. Supponiamo per chiarire le
// idee che in una directory images siano contenute le foto degli
// articoli disponibili, nominati in base al codice: TAV01561R.jpg
// sara' quindi l'immagine dell'articolo con quel codice. Allora
// la tabella puo' prevedere un link a tali foto:
//
// document.write(cod);
// document.write("<A HREF=images/'"+cod+".jpg'>"+des+"</A>");
// document.write(val);
// document.writeln(mag);
//
// Ovviamente questa non e' che una delle infinite possibilita'
// messe a disposizione dalla possibilita' di poter gestire a
// piacimento i dati contenuti nel database. Esistono, per esempio,
// implementazioni JavaScript di piccoli carrelli elettronici,
// venuti alla ribalta con l'esplosione del commercio elettronico,
// che non hanno nulla da invidiare ai "fratelli maggiori" realizzati
// tramite applicazioni server-side. La loro combinazione con
// l'esempio descritto in questa sede puo' essere sfruttata per
// realizzare un piccolo sito web di commercio elettronico interattivo
// pur non avendo a disposizione da parte del provider ospitante
// alcun meccanismo server-side (asp, cgi-bin, servlet...).
