//
// cmn.js
// by Federico Curcio - versione 0.1 - 17 nov 2008
// funzionalita' di base per gestione e interazione giochi online
//

var Schema,                // indice schema scelto da utente
    Esposto,               // esposto (schema visualizzato a utente)
    Arretrati=false,       // presenza o assenza arretrati (select)
    Risolto=false,         // schema risolto o ancora da risolvere
    alfabeto='abcdefghijklmnopqrstuvwxyz',
                           // alfabeto latino
    cifre='0123456789',    // cifre 0-9
    Secs, Mins, Ores,      // dati per timer
    TimerId=null,          // timer
    VediTimer=true,        // flag visibilitas timer
    VediInfo=false,        // flag visibilitas info e credit
    VediSoluzione=false,   // flag visibilitas soluzione
    SoluzioneVista=false,  // flag soluzione comunque vista su richiesta utente
    VediApplauso=false,    // flag visualizzazione applauso
    HtmlSchema='',         // codice schema (visualizzazione info e credit)
    Applauso= new Image(); // Kidi che applaude

Applauso.src='kidiapplaude.gif';

InfoEtCrediti=
'<table align="center"><tr><td>'+
'<img src="soluzione.png" width="40" height="40" align="middle"> '+
'Mostra / nasconde soluzione<br>'+
'<img src="reset.png" width="40" height="40" align="middle"> '+
'Reset schema (ricomincia dall\'inizio)<br>'+
'<img src="zoomp.png" width="40" height="40" align="middle"> '+
'Aumenta zoom schema<br>'+
'<img src="zoomm.png" width="40" height="40" align="middle"> '+
'Diminuisce zoom schema<br>'+
'<img src="info.png" width="40" height="40" align="middle"> '+
'Mostra / nasconde info e crediti<br>'+
'<img src="crono.png" width="40" height="40" align="middle"> '+
'Mostra / nasconde timer<br><br><br>'+
'&copy; 1999-2009 by Enigmistica.it'+
'</td></tr></table>';

function eittag(n)
// costruisce tag per elemento contenente layout schemi o altro
{
  return('eit'+n);
}

function inizia()
// inserisce html per
//   titolo e descrizione
//   pulsanti funzioni
//   caricamento in background di Kidi che applaude
//   lista opzioni schemi disponibili
{
  a='<table border="0" cellspacing="0" cellpadding="10"><tr><td '+
    'bgcolor="#ffffff">';
  a+='<center><h2>'+titolo+'</h2></center>';
  a+='<p><i>'+istruzioni+'</i></p>';
  a+='</td></tr></table>';
  document.getElementById('eitcap').innerHTML=a;
  // titolo e descrizione

  a='<table border="0" cellspacing="0" cellpadding="0"><tr>';
  a+='<td><a href="#" onClick="soluzione(); return false;"'+
     ' alt="Soluzione" title="Soluzione"><img src="soluzione.png"'+
     ' width="40" height="40"></a></td>';
  a+='<td><a href="#" onClick="reset_schema(); return false;"'+
     ' alt="Reset" title="Reset"><img src="reset.png"'+
     ' width="40" height="40"></a></td>';
  a+='<td><a href="#" onClick="zooma_font(2); return false;"'+
     ' alt="Zoom +" title="Zoom +"><img src="zoomp.png" width="40"'+
     ' height="40"></a><a href="#"'+
     ' onClick="zooma_font(-2); return false;" alt="Zoom -"'+
     ' title="Zoom -"><img src="zoomm.png" width="40" height="40">'+
     '</a></td>';
  a+='<td><a href="#" onClick="vedi_info(); return false;"'+
     ' alt="Info e credit" title="Info e credit"><img src="info.png"'+
     ' width="40" height="40"></a></td>';
  a+='<td><a href="#" onClick="vediNonVediTimer(); return false;"'+
     ' alt="Mostra / nascondi timer" title="Mostra / nascondi timer">'+
     ' <img src="crono.png" width="40" height="40"></a></td>';
  a+='<td><input type="text" id="timer" size="8" readonly></td>';
  a+='</tr></table>';
  document.getElementById('eitfun').innerHTML=a;
  // pulsanti funzioni

  VediApplauso=false;
  document.getElementById('eitkidi').innerHTML=
  '<table align="center"><tr><td>'+
  '<img src="kidiapplaude.gif" width="1" height="1" id="applauso"'+
  ' onClick="vediApplauso();return false;"><center>'+
  '<div id="eitmsg"></div></center></td></tr></table>';
  // Kidi che applaude

  lista_opzioni();
  // lista opzioni schemi disponibili

  scegli_schema();
  // sceglie comunque uno schema da visualizzare
}

function get_data(n)
// estrae data da record schema gioco
{
  return(Schemi[n].slice(0,1));
}

function get_titolo(n)
// estrae titolo da record schema gioco
{
  return(Schemi[n].slice(1,2));
}

function get_crediti(n)
// estrae crediti da record schema gioco
{
  return(Schemi[n].slice(2,3));
}

function get_autore(n)
// estrae autore schema da record schema gioco
{
  return(((get_crediti(n).toString()).split(';')).slice(0,1));
}

function get_fonte(n)
// estrae fonte contenuto da record schema gioco
{
  return(((get_crediti(n).toString()).split(';')).slice(1,2));
}

function get_esposto(n)
// estrae esposto da record schema gioco
{
  return(Schemi[n].slice(3,4));
}

function get_complementare(n)
// estrae materiale complementare da record schema gioco
{
  return(Schemi[n].slice(4,5));
}

function get_soluzione(n)
// estrae soluzione da record schema gioco
{
  return(Schemi[n].slice(5,6));
}

function lista_opzioni()
// costruisce lista opzioni in spazio 'eitopt'
{
  a='<form name="scelta" onSubmit="return false;">'+
    '<select id="scelta_utente" onChange="scegli_schema();">';
  for (i=0;i<Schemi.length;i++)
    a+= '<option'+(i==0?' selected':'')+'>'+get_data(i)+' - '+get_fonte(i)+
        '</option>';
  a+= '</select></form>';
  document.getElementById('eitopt').innerHTML=a;
}

function scegli_schema()
// reagisce a scelta schema
{
  if (!document.scelta) // se non ci sono arretrati
  {
    Schema=0;           // indice = 0 (unico schema presente)
    Arretrati=false;    // assenza di arretrati
  }
  else                  // altrimenti
  {
    Schema=document.scelta.scelta_utente.selectedIndex;
                        // indice tratto da select
    Arretrati=true;     // presenza di arretrati
  }

  Esposto=(get_soluzione(Schema)).toString();
                        // acquisisce schema da risolvere

  VediApplauso=true;
  vediApplauso();       // aggiorna (nasconde) Kidi che applaude

  Risolto=false;	// comunque reinizializza stato soluzione
  VediSoluzione=false;
  SoluzioneVista=false;

  nuovo_schema();	// invoca inizializzazione schema scelto

  reset_schema();	// comunque reimposta schema e timer
  stopTimer();
  startTimer();
  return(false);
}

function vedi_info()
// mostra / nasconde schermata info e crediti
{
  if (!VediInfo) // se info non visualizzate
  {
    if (document.scelta)
      document.getElementById('scelta_utente').disabled=true;
    // blocca scelta schema, se c'e'
    VediInfo=true; // info visibili
    HtmlSchema=document.getElementById('eitsk').innerHTML;
    // salva schema giocato
    document.getElementById('eitsk').innerHTML=InfoEtCrediti;
    // visualizza schermata info
  }
  else
  {
    if (document.scelta)
      document.getElementById('scelta_utente').disabled=false;
    // sblocca scelta schema, se c'e'
    VediInfo=false; // info non visibili
    document.getElementById('eitsk').innerHTML=HtmlSchema;
    // recupera schema
  }
}

function vediApplauso()
// mostra / nasconde Kidi che applaude
{
  if (!VediApplauso)
  {
    VediApplauso=true;
    document.getElementById('applauso').width='120';
    document.getElementById('applauso').height='160';
    document.getElementById('eitmsg').innerHTML='<h2>OK!</h2>';
  }
  else
  {
    VediApplauso=false;
    document.getElementById('applauso').width='0';
    document.getElementById('applauso').height='0';
    document.getElementById('eitmsg').innerHTML='';
  }
}

function vediTimer()
// visualizza timer (se visualizzazione attiva)
{
  if (VediTimer)
    document.getElementById('timer').value=(Ores<10?'0':'')+Ores+':'+
      (Mins<10?'0':'')+Mins+':'+(Secs<10?'0':'')+Secs;
  else
    document.getElementById('timer').value='';
}

function vediNonVediTimer()
// commuta fra timer visibile e timer non visibile
{
  VediTimer=!VediTimer;

  vediTimer();
}

function aggiornaTimer()
// thread per aggiornamento sec, min e ore timer e visualizzazione
{
  Secs++;
  if (Secs==60)
  {
    Secs=0;
    Mins++;
  }
  if (Mins==60)
  {
    Mins=0;
    Ores++;
  }

  vediTimer();

  TimerId=setTimeout('aggiornaTimer()',1000);
}

function startTimer()
// partenza timer
{
  resetTimer();
  timerId=setTimeout('aggiornaTimer()',1000);
}

function stopTimer()
// fermata timer
{
  if (TimerId)
  {
    clearTimeout(TimerId);
    TimerId=null;
  }
}

function resetTimer()
// inizializzazione timer
{
  VediTimer=true;
  Secs=0;
  Mins=0;
  Ores=0;
}

function zooma_font(p)
// modifica dimensioni font a scelta utente
{
  if ((Dim+p)<0)
    return;

  Dim+=p;

  if (el=document.getElementById('eitdef'))
    el.style.fontSize=Math.floor(Dim/4*3)+'px';

  i=0;
  while (el=document.getElementById(eittag(i)))
  {
    el.style.width=Dim+'px';
    el.style.height=Dim+'px';
    el.style.fontSize=Math.floor(Dim/4*3)+'px';
    i++;
  }
}
