// version : 22/08/2006
//======================
// 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;
// Génération de la grille
//-------------------------
function gen_grille(){
// Grille vierge
//---------------
for(i=0; i<81; i++) grille[i] = 0;
// 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){
// Suppression d'un chiffre
//--------------------------
if(document.frm.mode.value==4){
if(grille[num_case]>0){
grille[num_case] = 0;
clignote(num_case);
setTimeout("actu_aff_case("+num_case+")",300);
maj_suite_chiffres();
}
}
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){
menu_sudoku.style.visibility = 'hidden';
if(grille[num_case]!=num_sel){
grille[num_case] = num_sel;
clignote(num_case);
setTimeout("actu_aff_case("+num_case+")",300);
maj_suite_chiffres();
}
}
// Actualiser l'affichage d'une case
//-----------------------------------
function actu_aff_case(num_case){
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\";");
}
}
// Mise à jour de l'input suite de chiffres
//------------------------------------------
function maj_suite_chiffres(){
var texte_input = "";
for(i=0; i<81; i++){
if(i==9 || i==18 || i==27 || i==36 || i==45 || i==54 || i==63 || i==72) texte_input = texte_input + "\n";
texte_input = texte_input + "" + grille[i];
}
document.frm.gri.value = texte_input;
}
// Mise à jour de la grille à partir de l'input
//----------------------------------------------
function maj_grille(){
var x = document.frm.gri.value;
var i = 0;
var num_case = 0;
var texte_input = "";
while(i=0){
grille[num_case] = y*1;
actu_aff_case(num_case);
if(num_case==9 || num_case==18 || num_case==27 || num_case==36 || num_case==45 || num_case==54 || num_case==63 || num_case==72) texte_input = texte_input + "\n";
texte_input = texte_input + "" + grille[num_case];
num_case++;
}
i++;
}
document.frm.gri.value = texte_input;
}
// Validation
//------------
function validation(){
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){
document.frm.ok.value = txjs[6];
document.frm.ok.disabled = true;
document.frm.submit();
}
}