//
// intriv.js
// gestione gioco interattivo 'Intrusioni rivelatrici'
//

// **********************************************
//                   DATI LOCALI
// **********************************************
MAX_COLONNE = 11; // numero massimo colonne INTERO schema
MAX_RIGHE   = 12; // numero massimo righe schema

var salva   = new Array(MAX_RIGHE), // protezione da clic su piu' lettere
    scelte,                         // lettere spostate colonna soluzione
    lunghezze = new Array(alfabeto.length),
                                   // parole disponibili per carattere
    NumeroRighe,                   // lunghezza effettiva schema attuale
    NumeroColonne=7,               // larghezza effettiva schema attuale
    indici = new Array(alfabeto.length),
                                   // indici parole scelte
    SchemaGiocato = new Array(MAX_RIGHE),
    // schema giocato da utente (caratteri in colonna soluzione)
    parole = new Array(MAX_RIGHE); // parole da inserire nello schema

Dim=35;

// **********************************************
// FUNZIONI COMUNI, ADATTATE AL SINGOLO GIOCO
// **********************************************
function reset_schema()
// imposta strutture dati per (ri)partire col gioco
{
// CODICE COMUNE
  if (Risolto || SoluzioneVista || VediSoluzione || VediInfo)
    return;

// CODICE DIPENDENTE DAL SINGOLO GIOCO
  for (i=0;i<MAX_RIGHE;i++)
    SchemaGiocato[i]='';

// CODICE COMUNE
  vedi_schema();
}

function nuovo_schema()
// calcola parametri schema scelto e lo visualizza
{
// CODICE DIPENDENTE DAL SINGOLO GIOCO
  scegliparole();
}

function vedi_schema()
// mostra schema
{
// CODICE DIPENDENTE DAL SINGOLO GIOCO
  var i, j, limj=rifugi[0][0].length, temp;

  NumeroRighe=Esposto.length;

  ss='<table align="center" cellspacing="0" border="0">';
  // tabella contenente schema

  for (i=0;i<NumeroRighe;i++) // per ogni riga schema
  {
    ss+='<tr>';         // inizio riga
    for (j=0;j<MAX_COLONNE;j++)  // per ogni colonna schema
      if (j!=9)
        ss+='<td><div class="csl" onClick="cliccata('+(i*MAX_COLONNE+j)+
            '); return false;" id="'+eittag(i*MAX_COLONNE+j)+
            '"></div></td>';
      else
        ss+='<td><div class="csl" id="'+eittag(i*MAX_COLONNE+j)+
            '">&nbsp;&nbsp;</div></td>';
    ss+='</tr>';        // chiusura riga
  }
  // righe contenenti parole e casella soluzione

  ss+='</table>';
  // chiusura tabella

  document.getElementById('eitsk').innerHTML=ss;
  // inserisce codice html intero schema

  zooma_font(0);

  for (i=0;i<NumeroRighe;i++)
    for (j=0;j<MAX_COLONNE;j++)
      document.getElementById(eittag(j+i*MAX_COLONNE)).innerHTML='';
  // pulisce area visualizzazione schema

  for (i=0;i<NumeroRighe;i++)
  {
    salva[i]=0;
    // inizializza protezione contro clic su piu' lettere diverse stessa parola

    for (j=0;j<limj;j++)
      document.getElementById(eittag(j+i*MAX_COLONNE)).innerHTML=
        parole[i].charAt(j).toUpperCase();

    document.getElementById(eittag((i+1)*MAX_COLONNE-1)).innerHTML='';
    // inserisce caratteri parole e cancella colonna soluzione
  }

  scelte=0;
  // reimposta numero lettere spostate in colonna soluzione
}

function cliccata(p)
// gestisce spostamento lettere, da parole a colonna e viceversa
{
// CODICE DIPENDENTE DAL SINGOLO GIOCO
  var i, l, limi, riga, temp;

  if (Risolto || VediSoluzione)
    return;

  temp=document.getElementById(eittag(p));
  // acquisisce casella cliccata

  if (temp.innerHTML!='')
  // se casella contiene lettera
  {
    riga=Math.floor(p/MAX_COLONNE);
    // acquisisce riga schema

    if ((p%MAX_COLONNE)==(MAX_COLONNE-1))
    // se e' stata cliccata lettera in colonna soluzione
    {
      i=0;
      limi=MAX_COLONNE-1;
      while ((i<limi) &&
        (document.getElementById(eittag(riga*MAX_COLONNE+i)).innerHTML!=''))
        i++;
      // cerca casella bianca in riga

      document.getElementById(eittag(riga*MAX_COLONNE+i)).innerHTML=
        temp.innerHTML;
      document.getElementById(eittag(p)).innerHTML='';
      // sposta lettera in parola e cancella lettera da colonna soluzione

      salva[riga]=0;
      // toglie protezione da clic su altre lettere

      scelte--;
      // decrementa numero lettere presenti in colonna soluzione
    }
    // rimette lettera in parola d'origine
    else
    // altrimenti sposta lettera in colonna soluzione
      if (salva[riga]==0)
      // se non vi sono lettere spostate in colonna soluzione
      {
        document.getElementById(eittag((riga+1)*MAX_COLONNE-1)).innerHTML=
          temp.innerHTML;
        SchemaGiocato[riga]=temp.innerHTML;
        temp.innerHTML='';
        // sposta riga in colonna soluzione, aggiorna soluzione utente
        // e cancella lettera da parola

        salva[riga]=10+p%MAX_COLONNE;
        // protegge parola da clic su altre lettere

        scelte++;
        // incrementa numero lettere presenti in colonna soluzione

        l=Esposto.length;
        // acquisisce lunghezza parola da indovinare

        if (scelte==l)
        // se scelta una lettera da ogni parola
          controlla();
      }
  }
}

function inkeys(e)
// gestore pressione tasti
{
// CODICE DIPENDENTE DAL SINGOLO GIOCO
  return false;
}

function controlla()
// controlla soluzione parziale costruita da utente
{
// CODICE DIPENDENTE DAL SINGOLO GIOCO
  l=Esposto.length;
  // acquisisce lunghezza parola da indovinare

  i=0;
  while ( (i<l) &&
          (Esposto.charAt(i).toLowerCase()==
           SchemaGiocato[i].toLowerCase())
        )
    i++;
  // controlla corrispondenza lettere parola da
  // indovinare e lettere in colonna soluzione

  if (i==l)
  // se parola da indovinare e lettere
  // spostate in colonna soluzione coincidono
  {
    Risolto=true;
    stopTimer();
    // gioco risolto
    vediApplauso();
    // richiama animazione sfinge Kidi che applaude
  }
}

function soluzione()
// visualizza soluzione
{
  if (VediInfo)
    return;

  SoluzioneVista=true;
  VediSoluzione=!VediSoluzione;

  for (i=0;i<NumeroRighe;i++)
  {
    for (j=0;j<NumeroColonne;j++)
    // scansione parola da cui estrarre lettera
    {
      if (VediSoluzione) // se deve mostrare soluzione corretta
        if (parole[i].charAt(j).toUpperCase()!=
            Esposto.charAt(i).toUpperCase())
        // se NON e' su lettera facente parte soluzione corretta
          c=parole[i].charAt(j).toUpperCase();
        else // altrimenti e' effettivamente su lettera parte soluzione
          c='';  // quindi NON inserisce lettera (e' in colonna soluzione)
      else // altrimenti deve mostrare soluzione utente
        if (salva[i]==0) // se utente NON ha agito su questa parola
          c=parole[i].charAt(j).toUpperCase();
        else // altrimenti utente ha agito su questa parola
          if (j!=(salva[i]-10))
          // quindi se NON siamo su lettera spostata da utente
            c=parole[i].charAt(j).toUpperCase();
          else // altrimenti ha spostato lettera
            c=''; // quindi carattere vuoto
      document.getElementById(eittag(j+i*MAX_COLONNE)).innerHTML=c;
    }

    // da qui scansione colonna soluzione
    if (VediSoluzione)
      c=Esposto.charAt(i).toUpperCase();
    else
      if (salva[i]!=0)
        c=parole[i].charAt(salva[i]-10).toUpperCase();
      else
        c='';
    document.getElementById(eittag(i*MAX_COLONNE+MAX_COLONNE-1)).innerHTML=c;
  }

  stopTimer();
}

// -------------------------------
// INIZIO CODICE LOCALE AGGIUNTIVO
// -------------------------------
// CODICE DIPENDENTE DAL SINGOLO GIOCO

document.onkeydown=inkeys;
// aggancia gestore pressione tasti alla pagina

function scegliparole()
// sceglie parole da usare
{
  limi=Esposto.length;

  for (i=0;i<alfabeto.length;i++)
  {
    lunghezze[i]=rifugi[i].length;
    indici[i]=Math.floor(Math.random()*lunghezze[i]);
  }

  for (i=0;i<limi;i++)
  {
    temp=alfabeto.indexOf(Esposto.charAt(i).toLowerCase())
    parole[i]=rifugi[temp][indici[temp]];
    indici[temp]=(indici[temp]+1)%lunghezze[temp];
  }
  // acquisisce parole da inserire in schema
}