// Parse.js
//
// Utile funzione per il parsing della query string,
// usata  per  rendere  dinamico il comportamento di
// alcune pagine del sito, che vengono costruite "on
// the fly" a seconda  delle  richieste dell'utente.
// Codice  originale  tratto  dalla  Webmonkey  Code
// Library.
//
// Autore: Patrick Corcoran
// Email: patrick@taylor.org

function getParams() {

  // Il posto (Object, ovvero un vettore) dove saranno memorizzati i dati
  coppieNomeValore = new Object();

  // Il carattere usato per separare i dati provenienti da input di tipo multiselect
  separatore = ',';

  // Si prende l'URL corrente da cui estrarre i dati.
  // Aggiungendo una stringa nulla '', si forza un casting
  // implicito del tipo da "proprietario" a stringa vera e
  // propria, per mantenere la compatibilita' con NS2
  query = '' + this.location;

  // Dalla URL possiamo eliminare la prima parte contenente
  // l'indirizzo del server ed il nome della pagina, o in altre
  // parole tutto cio' che precede il punto interrogativo
  query = query.substring((query.indexOf('?')) + 1);

  // Potrebbe accadere che non ci sia una query string nell'URL
  // in esame (per qualche motivo). In questo caso la funzione si
  // ferma restituendo semplicemente il valore "false"
  if (query.length < 1) { return false; }
  
  // Variabili locali alla funzione usate per conservare e tenere
  // traccia delle coppie nome/valore man mano che si analizza la
  // query string
  coppie = new Object();
  numCoppie = 1;

  // Qui inizia la scansione vera e propria, che si arrestera' quando
  // avremo "consumato" tutta la query string    
  while (query.indexOf('&') > -1) {

    // Ogni coppia finisce quando si incontra il simbolo '&',
    // quindi si memorizza in coppie[i] la i-esima coppia e la
    // si cancella dalla query string
    coppie[numCoppie] = query.substring(0,query.indexOf('&'));
    query = query.substring((query.indexOf('&')) + 1);
    numCoppie++;
  }

  // Memorizza l'ultima coppia (non terminata da un '&')
  coppie[numCoppie] = query;

  // Adesso non rimane che spezzare a sua volte le singole coppie
  // campo=valore memorizzando le informazioni nel vettore coppieNomeValore
  for (i in coppie) {

    // A sinistra dell'uguale si trova il nome del campo
    nomeCampo = coppie[i].substring(0,coppie[i].indexOf('='));

    // A destra dell'uguale si trova il valore del campo
    valoreCampo = coppie[i].substring((coppie[i].indexOf('=')) + 1);

    // I valori dei campi potrebbero contenere degli spazi, che nella
    // codifica standard sono sostituiti da simboli '+'; bisogna allora
    // fare la sostituzione inversa
    while (valoreCampo.indexOf('+') > -1)
      valoreCampo = valoreCampo.substring(0,valoreCampo.indexOf('+')) + ' ' + valoreCampo.substring(valoreCampo.indexOf('+') + 1);

    // Anche gli altri valori alfanumerici vanno convertiti    
    valoreCampo = unescape(valoreCampo);
      
    if (coppieNomeValore[nomeCampo]) {

      // Potrebbe darsi che l'oggetto gia' esista per via di un input di
      // tipo multiselect; bisogna appendere i valori nuovi a quelli gia'
      // esistenti
      coppieNomeValore[nomeCampo] = coppieNomeValore[nomeCampo] + separatore + valoreCampo;

    } else {
      // Caso normale
      coppieNomeValore[nomeCampo] = valoreCampo;
    }
  }

  return coppieNomeValore;
}
