//
// calcolo.js
// by Federico Curcio - versione 0.1 - 16 dic 2008
// gestione e interazione gioco calcolo crittato
//

var Attuale,            // simbolo attualmente scelto
    SchemaGiocato = new Array(10),
                        // schema giocato da utente
    Associa = new Array(10),
                        // posizione i = nome icona da associare a cifra i

Dim=40;

function reset_schema()
// imposta strutture dati per (ri)partire col gioco
{
  if (Risolto || SoluzioneVista || VediSoluzione || VediInfo)
    return;

  Attuale=-1;

  for (i=0;i<10;i++)
    SchemaGiocato[i]=i;
  // inizializzazione schema giocato da utente

  vedi_schema();
}

function nuovo_schema()
// calcola parametri schema scelto e lo visualizza
{
  Esposto=Esposto.split(',');

  // carica icone, se ancora non l'ha fatto

  associa();
  // associa cifre a icone

  return(false);
}

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

  ss+='<table align="center" cellspacing="1" cellpadding="0"'+
      'bgcolor="#ffffff">';
  // inizio casella

  for (i=0;i<4;i++)   // per ogni riga schema
  {
    ss+='<tr>';                 // inizio riga
    for (j=0;j<11;j++)  // per ogni colonna schema
      ss+='<td bgcolor="#ffffff" align="center"><div '+
          ((cifre.indexOf(Esposto[i].charAt(j))!=-1)?
          'class="brdtr centertxt" ':'')         +
          'onClick="cliccata('+(i*11+j)+'); return false;" '+
          'id="'+eittag(i*11+j)+'"></div></td>';
    if (i==2)
      ss+='</tr><tr><td colspan="11"><hr noshade></td>';
    ss+='</tr>';                // chiusura riga
  }

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

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

  for (i=0;i<4;i++)
    for (j=0;j<11;j++)
      if ((ic=cifre.indexOf(c=Esposto[i].charAt(j)))==-1)
        document.getElementById(eittag(i*11+j)).innerHTML=c;
      else
      {
        t='<img src="'+Associa[ic]+'big.gif" width="'+Dim+'" '+
          'height="'+Dim+'">';
        document.getElementById(eittag(i*11+j)).innerHTML=t;
        SchemaGiocato[ic]=-1;
      }

  zooma_font(0);

  //cliccata(Primacasella);
}

function cliccata(c)
// cliccato su casella
{
  riga=Math.floor(c/11);
  colonna=c%11;

  Attuale=cifre.indexOf(Esposto[riga].charAt(colonna));
  // acquisisce (indice) cifra corrispondente a simbolo cliccato
  // !! Se NON trova cifra, Attuale=-1 quindi ha cliccato lo schema ma
  // fuori dai simboli e allora il ciclo seguente sbianca tutto e
  // va bene perche' toglie evidenziatura indesiderata se lo si vuole

  for (i=0;i<4;i++)
    for (j=0;j<11;j++)
      if (Esposto[i].charAt(j)==Attuale &&
          Esposto[i].charAt(j)!=' ')
        colora((i*11+j),'#999999');
      else
        colora((i*11+j),'#ffffff');
  // evidenzia caselle con medesimo simbolo
}

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 (Attuale==-1)
    return false;
  // se nessuna casella selezionata, fa nulla

  if (e.keyCode==13)
  // invio = torna al simbolo
  {
    for (i=0;i<4;i++)
      for (j=0;j<11;j++)
      if (Esposto[i].charAt(j)==Attuale &&
          Esposto[i].charAt(j)!=' ')

        document.getElementById(eittag(i*11+j)).innerHTML=
          '<img src="'+Associa[Attuale]+'big.gif" width="'+Dim+'" '+
          'height="'+Dim+'">';
    // risostituisce tutti i numeri
    SchemaGiocato[Attuale]=-1;
  }

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

  for (i=0;i<4;i++)
    for (j=0;j<11;j++)
    if (Esposto[i].charAt(j)==Attuale &&
        Esposto[i].charAt(j)!=' ')
      document.getElementById(eittag(i*11+j)).innerHTML=c;
  // inserisce cifra in tutte le caselle che contengono medesimo simbolo

  SchemaGiocato[Attuale]=parseInt(c);
  // acquisisce cifra scelta da utente

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

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

  if (i==10)
  // se cifre corrispondono tutte
  {
    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<4;i++)
    for (j=0;j<11;j++)
    {
      if (VediSoluzione)
        c=Esposto[i].charAt(j);
      else
        if ((ic=cifre.indexOf(c=Esposto[i].charAt(j)))!=-1)
          if ((c=SchemaGiocato[ic])==-1)
            c='<img src="'+Associa[ic]+'big.gif" width="'+Dim+'" '+
            'height="'+Dim+'">';
      // !! Sgamotto: qui per evitare assegnamenti ridondanti, la variabile c
      // viene valorizzata gia' al momento dei confronti, che sono articolati
      // in modo da avere alla fine comunque c = valore giusto
      document.getElementById(eittag(i*11+j)).innerHTML=c;
    }

  stopTimer();
}

// -------------------------------
// INIZIO CODICE LOCALE AGGIUNTIVO
// -------------------------------

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

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

function associa()
// associa cifre a icone
{
  var presenze = new Array(10);

  for(i=0;i<10;i++)
    presenze[i]=false;

  for(i=0;i<10;i++)
  {
    while (presenze[c=Math.floor(Math.random()*10)])
      ;
    Associa[i]=c;
    presenze[c]=true;
  }
}