// version : 20/12/2007
//======================
// Variables communes
//--------------------
grille = new Array ();
repons = new Array ();
histor = new Array ();
var nb_histor = 0;
var nb_ope_sui = 0;
var overout_case_menu = 0;
var nb_clignote = 0;
var coul_clignote = 0;
var chrono_onoff = 1;
var chrono_inc = 0;
// Onload
//--------
function onl(){
chrono_timeout();
}
// Chrono
//--------
function chrono_timeout(){
if(chrono_onoff==1){
chrono_inc++;
var x = Math.floor(chrono_inc/60);
var y = chrono_inc - x*60;
document.frm2.chrono.value = " "+x+"m"+y+"s";
setTimeout("chrono_timeout()",1000);
}
}
// Actualisation de la page
//--------------------------
function actu_page(){
var adresse_page = "visite.php?pag=cid505&idf="+idf;
if(document.frm1.jou.value>0) adresse_page += "&idd="+document.frm1.jou.value;
if(document.frm1.dif.value>0) adresse_page += "&idm="+document.frm1.dif.value;
if(document.frm1.num.value>0) adresse_page += "&ids="+document.frm1.num.value;
location.href = adresse_page;
}
// Génération de la grille
//------------------------
function gen_grille(){
document.frm2.ope_sui.disabled = true;
document.frm2.ope_pre.disabled = true;
// Lecture de la chaine de base
//------------------------------
for(i=0; i<81; i++){
grille[i] = chaine_base.substring(i,i+1);
grille[i] = grille[i]*1;
}
// Boucle d'affichage de la grille
//---------------------------------
var code_html = "";
code_html += "
";
for(y=0; y<3; y++){
for(x=0; x<3; x++){
code_html += "";
for(j=0; j<3; j++){
for(i=0; i<3; i++){
var num_case = y*27 + x*3 + j*9 + i;
code_html += "| ";
if(grille[num_case]==0) code_html += "";
else code_html += "";
code_html += " | ";
}
if(j<2) code_html += " ";
}
code_html += " ";
if(x<2) code_html += " | ";
}
if(y<2) code_html += " |
| ";
}
code_html += " |
";
sudoku.innerHTML = code_html;
}
// Click sur une case
//--------------------
function clicsur(num_case){
if(chrono_onoff==1){
// Suppression d'un chiffre
//--------------------------
if(document.frm2.mode.value==4){
if(grille[num_case]>0){
nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false;
nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_0"; document.frm2.num_ope.value = nb_histor;
grille[num_case] = 0;
clignote(num_case);
setTimeout("actu_aff_case("+num_case+")",300);
}
}
else{
var x_case = 0;
var y_case = 0;
eval("x_case = pox(divcas_"+num_case+")-30; y_case = poy(divcas_"+num_case+")-30;");
var code_html = "";
code_html += "";
for(i=1; i<=9; i++){
code_html += "
";
if(i==3 || i==6 || i==9) code_html += "
";
}
code_html += " ";
menu_sudoku.innerHTML = code_html;
menu_sudoku.style.left = x_case + 'px';
menu_sudoku.style.top = y_case + 'px';
menu_sudoku.style.visibility = 'visible';
}
}
}
// Cacher le menu
//----------------
function over_case_menu(){
overout_case_menu = 1;
}
function out_case_menu(){
overout_case_menu = 0;
setTimeout("verif_case_menu()",200);
}
function verif_case_menu(){
if(overout_case_menu==0) menu_sudoku.style.visibility = 'hidden';
}
// Modification d'une case
//-------------------------
function selnum(num_case,num_sel){
// Sélecion d'un chiffre seul
//----------------------------
if(document.frm2.mode.value==1){
menu_sudoku.style.visibility = 'hidden';
if(grille[num_case]!=num_sel){
nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false;
nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_"+num_sel; document.frm2.num_ope.value = nb_histor;
grille[num_case] = num_sel;
clignote(num_case);
setTimeout("actu_aff_case("+num_case+")",300);
// Voir si la grille est pleine
//------------------------------
var grille_pleine = 1;
for(i=0; i<81; i++) if(grille[i]==0 || grille[i]>9) grille_pleine = 0;
if(grille_pleine==1) setTimeout("detecter_err()",1000);
}
}
else{
menu_sudoku.style.visibility = 'hidden';
if(grille[num_case]<10){
if(document.frm2.mode.value==2){
var x = num_sel*10;
nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false;
nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_"+x; document.frm2.num_ope.value = nb_histor;
grille[num_case] = x;
clignote(num_case);
setTimeout("actu_aff_case("+num_case+")",300);
}
else{
var x = "123456789_";
x = x.replace(num_sel,"");
x = x.replace("_","0");
x = x*1;
nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false;
nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_"+x; document.frm2.num_ope.value = nb_histor;
grille[num_case] = x;
clignote(num_case);
setTimeout("actu_aff_case("+num_case+")",300);
}
}
else{
var x = "_"+grille[num_case];
if(x.indexOf(num_sel,0)>0){
x = x.replace(num_sel,"");
x = x.replace("_","");
x = x*1;
}
else{
x = x.replace("_",num_sel);
x = x*1;
}
nb_ope_sui = 0; document.frm2.ope_sui.disabled = true; document.frm2.ope_pre.disabled = false;
nb_histor++; histor[nb_histor] = num_case+"_"+grille[num_case]+"_"+x; document.frm2.num_ope.value = nb_histor;
grille[num_case] = x;
clignote(num_case);
setTimeout("actu_aff_case("+num_case+")",300);
}
}
}
// Remise à zero totale
//----------------------
function raz_total(){
nb_histor = 0; document.frm2.num_ope.value = nb_histor;
nb_ope_sui = 0;
overout_case_menu = 0;
nb_clignote = 0;
coul_clignote = 0;
document.frm2.ope_sui.disabled = true;
document.frm2.ope_pre.disabled = true;
// Boucle sur toutes les cases
//-----------------------------
for(i=0; i<81; i++){
// Lecture de la chaine de base
//------------------------------
grille[i] = chaine_base.substring(i,i+1);
grille[i] = grille[i]*1;
if(grille[i]>0) eval("divcas_"+i+".innerHTML = \"
\";");
else eval("divcas_"+i+".innerHTML = \"
\";");
}
}
// Opération précédente
//----------------------
function operation_preced(){
if(nb_histor>0){
var x = histor[nb_histor];
var pos1 = x.indexOf("_",0);
var pos2 = x.indexOf("_",pos1+1);
var num_case = x.substring(0,pos1);
var avant = x.substring(pos1+1,pos2);
grille[num_case] = avant;
clignote(num_case);
setTimeout("actu_aff_case("+num_case+")",500);
nb_histor--; if(nb_histor==0) document.frm2.ope_pre.disabled = true; document.frm2.num_ope.value = nb_histor;
nb_ope_sui++; document.frm2.ope_sui.disabled = false;
}
}
// Opération précédente
//----------------------
function operation_suivante(){
if(nb_ope_sui>0){
var x = histor[nb_histor+1];
var pos1 = x.indexOf("_",0);
var pos2 = x.indexOf("_",pos1+1);
var num_case = x.substring(0,pos1);
var apres = x.substring(pos2+1,x.length);
grille[num_case] = apres;
clignote(num_case);
setTimeout("actu_aff_case("+num_case+")",500);
nb_ope_sui--; if(nb_ope_sui==0) document.frm2.ope_sui.disabled = true;
nb_histor++; document.frm2.ope_pre.disabled = false; document.frm2.num_ope.value = nb_histor;
}
}
// Actualiser l'affichage d'une case
//-----------------------------------
function actu_aff_case(num_case){
if(grille[num_case]>9){
var code_html = "";
var x = "_"+grille[num_case];
code_html += "";
for(i=1; i<=9; i++){
if(x.indexOf(i,0)>0) code_html += "
";
else code_html += "
";
if(i==3 || i==6) code_html += "
";
}
code_html += "";
eval("divcas_"+num_case+".innerHTML = \""+code_html+"\";");
}
else{
if(grille[num_case]==0) eval("divcas_"+num_case+".innerHTML = \"
\";");
else eval("divcas_"+num_case+".innerHTML = \"
\";");
}
}
// Faire clignoter une case
//--------------------------
function clignote(num_case){
nb_clignote = 5;
coul_clignote = 0;
clignote_timeout(num_case);
}
function clignote_timeout(num_case){
if(nb_clignote>0){
nb_clignote--
if(coul_clignote==0){
coul_clignote = 1;
eval("divcas_"+num_case+".style.border = \"rgb(255,50,50) 1px solid\";");
}
else{
coul_clignote = 0;
eval("divcas_"+num_case+".style.border = \"rgb(200,200,255) 1px solid\";");
}
setTimeout("clignote_timeout("+num_case+")",100);
}
else{
coul_clignote = 0;
eval("divcas_"+num_case+".style.border = \"rgb(200,200,255) 1px solid\";");
}
}
// Détecter les erreurs
//----------------------
function detecter_err(){
var nb_erreur = 0
// Boucle sur chaque ligne
//-------------------------
for(i=0; i<9; i++){
comp_chif = new Array (0,0,0,0,0,0,0,0,0,0);
for(j=0; j<9; j++){
comp_chif[grille[i*9+j]]++;
}
for(j=1; j<10; j++){
if(comp_chif[j]>1){
nb_erreur++;
for(k=(i*9); k<(i*9+9); k++) eval("divcas_"+k+".style.border = \"rgb(255,0,0) 1px solid\";");
var x = i+1; alert(txjs[0]+nb_erreur+" : "+txjs[1]+" "+comp_chif[j]+" "+txjs[2]+" "+j+" "+txjs[3]+" "+x);
for(k=(i*9); k<(i*9+9); k++) eval("divcas_"+k+".style.border = \"rgb(200,200,255) 1px solid\";");
}
}
}
// Boucle sur chaque collone
//---------------------------
for(i=0; i<9; i++){
comp_chif = new Array (0,0,0,0,0,0,0,0,0,0);
for(j=0; j<9; j++){
comp_chif[grille[j*9+i]]++;
}
for(j=1; j<10; j++){
if(comp_chif[j]>1){
nb_erreur++;
for(k=0; k<9; k++){ var x = k*9+i; eval("divcas_"+x+".style.border = \"rgb(255,0,0) 1px solid\";"); }
var x = i+1; alert(txjs[0]+nb_erreur+" : "+txjs[1]+" "+comp_chif[j]+" "+txjs[2]+" "+j+" "+txjs[4]+" "+x);
for(k=0; k<9; k++){ var x = k*9+i; eval("divcas_"+x+".style.border = \"rgb(200,200,255) 1px solid\";"); }
}
}
}
// Boucle sur chaque carré
//-------------------------
for(i=0; i<3; i++){
for(j=0; j<3; j++){
comp_chif = new Array (0,0,0,0,0,0,0,0,0,0);
for(k=0; k<3; k++){
for(l=0; l<3; l++){
comp_chif[grille[i*27+j*3+l*9+k]]++;
}
}
for(k=1; k<10; k++){
if(comp_chif[k]>1){
nb_erreur++;
for(l=0; l<3; l++){ for(m=0; m<3; m++){ var x = i*27+j*3+m*9+l; eval("divcas_"+x+".style.border = \"rgb(255,0,0) 1px solid\";"); } }
var y = j+1; var x = i+1; alert(txjs[0]+nb_erreur+" : "+txjs[1]+" "+comp_chif[k]+" "+txjs[2]+" "+k+" "+txjs[5]+" "+y+"/"+x);
for(l=0; l<3; l++){ for(m=0; m<3; m++){ var x = i*27+j*3+m*9+l; eval("divcas_"+x+".style.border = \"rgb(200,200,255) 1px solid\";"); } }
}
}
}
}
// Aucune erreur
//---------------
if(nb_erreur==0){
// Voir si la grille est pleine
//------------------------------
var grille_pleine = 1;
for(i=0; i<81; i++) if(grille[i]==0 || grille[i]>9) grille_pleine = 0;
if(grille_pleine==1){
chrono_onoff = 0;
document.frm2.ope_sui.disabled = true;
document.frm2.ope_pre.disabled = true;
document.frm2.det_err.disabled = true;
document.frm2.rem_zer.disabled = true;
document.frm2.mode.disabled = true;
message_sudoku.innerHTML = "
";
message_sudoku.style.visibility = 'visible';
//alert(txjs[6]);
}
else{
alert(txjs[7]);
}
}
}
// Fermer le message
//-------------------
function ferme_mess(){
message_sudoku.innerHTML = "";
message_sudoku.style.visibility = 'hidden';
}