
//
// aneddoto.js
// gestione gioco interattivo 'Aneddoto crittato'
//

// **********************************************
//                   DATI LOCALI
// **********************************************
var Attuale,            // indice casella attualmente in uso
    SchemaGiocato = new Array(Lunghezza),
                        // schema giocato da utente
    Protezione = new Array(Lunghezza),
                        // protezione parole in chiaro
    Lunghezza,          // lunghezza, in caratteri, schema attuale

Dim=20;

// **********************************************
// 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<Lunghezza;i++)
    if (Esposto.charAt(i)>='a' && Esposto.charAt(i)<='z')
      if (Protezione[i])
        SchemaGiocato[i]=Esposto[i];
      else
        SchemaGiocato[i]=(occorrenze.indexOf(Esposto.charAt(i))+1);
    else
      SchemaGiocato[i]=Esposto[i];
  // inizializzazione schema giocato da utente

// CODICE COMUNE
  vedi_schema();
}

function nuovo_schema()
// calcola parametri schema scelto e lo visualizza
{
  Esposto=Esposto.replace(/&(\w)((grave;)|(acute;))/gi,"$1");
  // elimina accenti su vocali
  Esposto=Esposto.toLowerCase();
  // tira giu' tutto a minuscole

  proteggi=false;
  j=0;
  occorrenze="";
  for (i=0;i<Esposto.length;i++)
  {
    if (Esposto.charAt(i)=='[')
      proteggi=true;
    else
      if (Esposto.charAt(i)==']')
        proteggi=false;
      else
      {
        if (Esposto.charAt(i)>='a' && Esposto.charAt(i)<='z')
        {
          Protezione[j]=proteggi;
          if (occorrenze.indexOf(Esposto.charAt(i))==-1)
            occorrenze+=Esposto.charAt(i);
        }
        j++;
      }
  }

  Esposto=Esposto.replace(/\[/gi,'');
  Esposto=Esposto.replace(/\]/gi,'');
  // toglie [ e ]

  Lunghezza=Esposto.length;
  // acquisisce lunghezza aneddoto attuale
}

function vedi_schema()
// visualizza schema scelto
{
  ss='<div class="centertxt" id="eitdef"></div>';
  // spazio definizione

  for (i=0;i<Lunghezza;i++)   // per ogni carattere aneddoto convertito
      ss+='<div class="cslntrn" '+
          'onClick="cliccata('+(i)+'); return false;" '+
          'id="'+eittag(i)+'"></div>';

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

  for (i=0;i<Lunghezza;i++)
    if (SchemaGiocato[i]>='a' && SchemaGiocato[i]<='z')
      if (Protezione[i])
        document.getElementById(eittag(i)).innerHTML=
          Esposto[i].toUpperCase();
      else
        document.getElementById(eittag(i)).innerHTML=
          SchemaGiocato[i].toUpperCase();
    else
      document.getElementById(eittag(i)).innerHTML=SchemaGiocato[i];

  zooma_font(0);
}

function cliccata(c)
// cliccato su casella
{
  if (occorrenze.indexOf(Esposto[c])==-1 ||
      Protezione[c])
    return;
  // se ha cliccato casella contenente qualcosa di diverso da carattere
  // o carattere di parola in chiaro

  Attuale=c;

  for (i=0;i<Esposto.length;i++)
    if (Esposto[Attuale]==Esposto[i]&&Attuale!=i&&!Protezione[i])
      colora(i,'#ccc');
    else
      colora(i,'#fff');
  // evidenzia caselle con medesimo contenuto

  colora(Attuale,'#ff0');
}

function inkeys(e)
// gestore pressione tasti
{
  if (Risolto || SoluzioneVista || VediSoluzione || VediInfo)
    return;

  if (!e)
    e=window.event;

  if (Risolto || VediSoluzione)
    return false;
  // non accetta altro input da tastiera se schema risolto o in visualizzazione

  if (e.keyCode==13)
  // invio = torna al numero
  {
    for (i=0;i<Esposto.length;i++)
      if (Esposto[Attuale]==Esposto[i]
          &&(isNaN(SchemaGiocato[i])))
      {
        SchemaGiocato[i]=(occorrenze.indexOf(Esposto[i])+1);
        document.getElementById(eittag(i)).innerHTML=SchemaGiocato[i];
      }
    // risostituisce tutti i numeri
  }

  c=String.fromCharCode(e.keyCode);
  if (c<'A'||c>'Z')
    return;
  // non accetta input da tastiera diversi da invio, escape (gia' visti)
  // e caratteri alfabetici

  c=c.toUpperCase();

  for (i=0;i<Esposto.length;i++)
    if (Esposto[Attuale]==Esposto[i])
    {
      SchemaGiocato[i]=c.toLowerCase();
      document.getElementById(eittag(i)).innerHTML=c;
    }
  // inserisce carattere in tutte le caselle che contengono medesimo numero

  controlla();
  // richiama controllo soluzione parziale costruita da utente
}

function controlla()
// controlla soluzione parziale costruita da utente
{
  i=0;
  while (i<Lunghezza && SchemaGiocato[i]==Esposto[i])
    i++;

  if (i==Lunghezza)
  // se caratteri corrispondono tutti
  {
    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<Lunghezza;i++)
    if (VediSoluzione)
      if (Esposto[i]>='a'&& Esposto[i]<='z')
        document.getElementById(eittag(i)).innerHTML=Esposto[i].toUpperCase();
      else
        document.getElementById(eittag(i)).innerHTML=Esposto[i];
    else
      if (SchemaGiocato[i]>='a' && SchemaGiocato[i]<='z')
        if (Protezione[i])
          document.getElementById(eittag(i)).innerHTML=
            Esposto[i].toUpperCase();
        else
          document.getElementById(eittag(i)).innerHTML=
            SchemaGiocato[i].toUpperCase();
      else
        document.getElementById(eittag(i)).innerHTML=SchemaGiocato[i];

  stopTimer();
}

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

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

function colora(d,s)
// colora d
{
  document.getElementById(eittag(d)).style.backgroundColor=s;
}