
// Copyright 2007, iphone-sudoku.com
// All rights reserved.

//Tableaux de jeu
var initialTab = SudokuTab();	//Tableau initial
var tableau = SudokuTab();		//Tableau en cours
var reponses = SudokuTab();		//Tableau des rponses

var caseSelect = '';	//Num?ro de la case du tableau s?lectionn?e

var enJeu = false;		//Si le jeu est actif ou non

var centi=0; 	//initialise les dixi?mes
var secon=0; 	//initialise les secondes
var minu=0; 	//initialise les minutes

var isChrono = false;

function iphoneSudokuStart()
{  
	isChrono = getCookie();
	
	if ( isChrono==null)
	{
		setCookie('1');
		isChrono = 1;
	}
	
	if ( isChrono==1 ) chrono();
	
	initData();			//Remplit les donn?es ? partir des champs hidden
	remplirTableau();	//Remplit la grille ? partir des donn?es
	
	enJeu = true;
}

//Initialise un tableau de 9 par 9
function SudokuTab()
{
	var tableau = new Array(9);

	for (var m=0; m < 9; m++)
	{
		tableau[m] = new Array(9);

		for (var n=0; n < 9; n++)
		{
			tableau[m][n] = '';
		}
	}
	return tableau;
}

function initData()
{
	var jeu = document.forms[0].elements['jeu'].value;
	var tab = new Array();
	for (var i=0;i<9;i++)
	{
		var a=new Array();
		var b=new Array();
		for (var j=0;j<9;j++)
		{
			var valeur = jeu.substr(j + (i*9),1);
			if (  valeur=='.' )
			{
				a[j] = "0";
				b[j] = "0";
			}
			else
			{
				a[j] = valeur;	
				b[j] = valeur;
			}
		}
		initialTab[i]=a;
		tableau[i]=b;
	}
		
	var solution = document.forms[0].elements['solution'].value;
	var tab = new Array();
	for (var i=0;i<9;i++)
	{
		var a=new Array();
		for (var j=0;j<9;j++)
		{
			a[j]= solution.substr(j + (i*9),1);
		}
		reponses[i]=a;
	}	
}

function remplirTableau()
{
    for(i=0;i<9;i++)
    {
        for(j=0;j<9;j++)
        {
            var uneCase = document.getElementById(i.toString() + j.toString() );
                
            contenu = tableau[i][j].toString();
            if ( contenu == '0' )
            {
                contenu = '&nbsp;';
            }
            else
            {
                contenu = '<b>' + contenu + '</b>';
            }
                
            uneCase.innerHTML = contenu;
        }
    }
}

//Fonction ex?cut?e lorsque l'on click sur une cellule de la grille
function cellclick(cell)
{
	if ( enJeu==false ) return;
	
	var r = String(cell).substring(0,1);
    var c = String(cell).substring(2,1);
		
	//Teste si la case ?ditable
    if ( initialTab[r][c] != '0' ) return false;

	var thisCell = document.getElementById(cell); 
	thisCell.bgColor ="#cecece";
	if (caseSelect != '')
	{
		var ancienneCase = document.getElementById(caseSelect);
		ancienneCase.bgColor = '';
	}
	caseSelect = cell;

	
	return true;
}

//Fonction ex?cut?e lorsque l'on click sur un nombre
function clickNombre(numCase)
{
	if ( enJeu==false ) return;
	
	//Si aucune case n'est s?lectionn?e, on sort
	if (caseSelect == '') return;
	
	var thisCell = document.getElementById(caseSelect); 
	
	var i = String(caseSelect).substring(0,1);
    var j = String(caseSelect).substring(2,1);
	
    n = parseInt(numCase);
    s = n.toString();
    if(n == 10)
    {
        n = 0;
        s = "&nbsp;";
    }
    tableau[i][j] = n;
    
    thisCell.innerHTML = s;
    thisCell.style.color = "#5CB85C";
    
	if ( testGagne() )
    {
        alert('Congratulations !');
    }

	var obj = document.getElementById("plateMenu");
	obj.style.visibility = "hidden";
	
}

//Teste si le jeu est finit
function testGagne()
{
	var retour = true;
	
	//On parcours le tableau
    for (var m = 0; m < 9; m++)
    {
        for (var n=0; n < 9; n++)
        {
            if ( tableau[m][n] != reponses[m][n] ) retour = false;
        }
    }
	
	return retour;
}

function afficherReponses()
{   
    for( m=0; m<9; m++ )
    {
        for( n=0; n<9; n++ )
        {
            var uneCase = document.getElementById(m.toString() + n.toString() );
                
            if (reponses[m][n] == initialTab[m][n])
            {
                texte = '<b>' + reponses[m][n].toString() + '</b>';
            }
            else if (reponses[m][n] == tableau[m][n])
            {
                texte = '<font color=green><b>' + reponses[m][n].toString() + '</b></font>';
            }
            else
                texte = '<font color=red><b>' + reponses[m][n].toString() + '</b></font>';
            
            uneCase.innerHTML = texte;
        }
    }
    
}

function setCookie(valeur) 
{
	var nom = "iphone-sudoku";	//Nom du cookie
	var jours = 1000;			//nombre de jours avant expiration du cookie;
	var expDate = new Date()
	expDate.setTime(expDate.getTime() + (jours * 24 * 3600 * 1000))
	document.cookie = nom + "=" + escape(valeur)
	+ ";expires=" + expDate.toGMTString()
}

function getCookie() 
{
	var nom = "iphone-sudoku";
	deb = document.cookie.indexOf(nom + "=");
	if (deb >= 0) 
	{
		deb += nom.length + 1;
		fin = document.cookie.indexOf(";",deb);
		if (fin < 0) fin = document.cookie.length;
		return unescape(document.cookie.substring(deb,fin));
	}
	else return null;
}
	
function chrono()
{
	centi++; //incr?mentation des dixi?mes de 1
	
	//si les dixi?mes > 9, on les r?initialise ? 0 et on incr?mente les secondes de 1
	if (centi>9)
	{
		centi=0;
		secon++;
	}

	//si les secondes > 59, on les r?initialise ? 0 et on incr?mente les minutes de 1			
	if (secon>59)
	{
		secon=0;
		minu++;
	}
	
	if (minu>59) minu=0;
	
	if (minu<10)
		document.getElementById('chrono').innerHTML = '0' + minu + ':';
	else
		document.getElementById('chrono').innerHTML = minu + ':';
		
	if (secon<10)
		document.getElementById('chrono2').innerHTML =  '0' + secon + ':';
	else
		document.getElementById('chrono2').innerHTML =  secon + ':';
									
	if (centi<10)
		document.getElementById('chrono3').innerHTML = '0' + centi;
	else
		document.getElementById('chrono3').innerHTML = centi;
	
	if (isChrono=='1')
	{
		compte=setTimeout('chrono()',100) //la fonction est relanc?e tous les 10? de secondes
	}
	else if (isChrono=='0')
	{
		centi=0;
		secon=0;
		minu=0;

		document.getElementById('chrono').innerHTML = '00:';
		document.getElementById('chrono2').innerHTML = '00:';
		document.getElementById('chrono3').innerHTML = '00';		
	}
}



