﻿// JScript File

//  
// gloval variables
//
var Box1 = new Array(9);
var Box2 = new Array(9);
var Box3 = new Array(9);
var Box4 = new Array(9);
var Box5 = new Array(9);
var Box6 = new Array(9);
var Box7 = new Array(9);
var Box8 = new Array(9);
var Box9 = new Array(9);

var Row1 = new Array(9);
var Row2 = new Array(9);
var Row3 = new Array(9);
var Row4 = new Array(9);
var Row5 = new Array(9);
var Row6 = new Array(9);
var Row7 = new Array(9);
var Row8 = new Array(9);
var Row9 = new Array(9);

var Col1 = new Array(9);
var Col2 = new Array(9);
var Col3 = new Array(9);
var Col4 = new Array(9);
var Col5 = new Array(9);
var Col6 = new Array(9);
var Col7 = new Array(9);
var Col8 = new Array(9);
var Col9 = new Array(9);

var firstMove = false;
var imgFrom = 0, imgTo = 0;
var OrgBorderT = "", OrgBorderB = "", OrgBorderR = "", OrgBorderL = "";
var colorChg = true;

var dt1, dt2, hr1, hr2, mt1, mt2, sd1, sd2;

Box1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box3 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box4 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box5 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box6 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box7 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box8 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box9 = [1, 2, 3, 4, 5, 6, 7, 8, 9];

row1 = [1, 2, 3, 1, 2, 3, 1, 2, 3];
row2 = [4, 5, 6, 4, 5, 6, 4, 5, 6];
row3 = [7, 8, 9, 7, 8, 9, 7, 8, 9];
row4 = [1, 2, 3, 1, 2, 3, 1, 2, 3];
row5 = [4, 5, 6, 4, 5, 6, 4, 5, 6];
row6 = [7, 8, 9, 7, 8, 9, 7, 8, 9];
row7 = [1, 2, 3, 1, 2, 3, 1, 2, 3];
row8 = [4, 5, 6, 4, 5, 6, 4, 5, 6];
row9 = [7, 8, 9, 7, 8, 9, 7, 8, 9];

col1 = [1, 4, 7, 1, 4, 7, 1, 4, 7];
col2 = [2, 5, 8, 2, 5, 8, 2, 5, 8];
col3 = [3, 6, 9, 3, 6, 9, 3, 6, 9];
col4 = [1, 4, 7, 1, 4, 7, 1, 4, 7];
col5 = [2, 5, 8, 2, 5, 8, 2, 5, 8];
col6 = [3, 6, 9, 3, 6, 9, 3, 6, 9];
col7 = [1, 4, 7, 1, 4, 7, 1, 4, 7];
col8 = [2, 5, 8, 2, 5, 8, 2, 5, 8];
col9 = [3, 6, 9, 3, 6, 9, 3, 6, 9];


function InitSudoku(){

var i=0, j=0, k=0, t=0, numOfTbl=0, f=0;
var temp = "";
var tblN = "";

imgFrom = 0;
imgTo = 0;
dt1 = 0;
dt2 = 0;
hr1 = 0;
hr2 = 0;
mt1 = 0;
mt2 = 0;
sd1 = 0;
sd2 = 0;
firstMove = false;

document.getElementById('time1').innerHTML = "";
document.getElementById('time2').innerHTML = "";
document.getElementById('time3').innerHTML = "";

Box1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box2 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box3 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box4 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box5 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box6 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box7 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box8 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
Box9 = [1, 2, 3, 4, 5, 6, 7, 8, 9];

row1 = [1, 2, 3, 1, 2, 3, 1, 2, 3];
row2 = [4, 5, 6, 4, 5, 6, 4, 5, 6];
row3 = [7, 8, 9, 7, 8, 9, 7, 8, 9];
row4 = [1, 2, 3, 1, 2, 3, 1, 2, 3];
row5 = [4, 5, 6, 4, 5, 6, 4, 5, 6];
row6 = [7, 8, 9, 7, 8, 9, 7, 8, 9];
row7 = [1, 2, 3, 1, 2, 3, 1, 2, 3];
row8 = [4, 5, 6, 4, 5, 6, 4, 5, 6];
row9 = [7, 8, 9, 7, 8, 9, 7, 8, 9];

col1 = [1, 4, 7, 1, 4, 7, 1, 4, 7];
col2 = [2, 5, 8, 2, 5, 8, 2, 5, 8];
col3 = [3, 6, 9, 3, 6, 9, 3, 6, 9];
col4 = [1, 4, 7, 1, 4, 7, 1, 4, 7];
col5 = [2, 5, 8, 2, 5, 8, 2, 5, 8];
col6 = [3, 6, 9, 3, 6, 9, 3, 6, 9];
col7 = [1, 4, 7, 1, 4, 7, 1, 4, 7];
col8 = [2, 5, 8, 2, 5, 8, 2, 5, 8];
col9 = [3, 6, 9, 3, 6, 9, 3, 6, 9];


colorChg = true;
numOfTbl = 0;

for(f=0;f<9;f++){
  numOfTbl++;
  k = 0;
  t = 0;
  for(i=0;i<3;i++){
    for(j=0;j<3;j++){
      k++;
      if (numOfTbl == 1)
        temp = "a" + k;
      if (numOfTbl == 2)
        temp = "b" + k;
      if (numOfTbl == 3)
        temp = "c" + k;
      if (numOfTbl == 4)
        temp = "d" + k;
      if (numOfTbl == 5)
        temp = "e" + k;
      if (numOfTbl == 6)
        temp = "f" + k;
      if (numOfTbl == 7)
        temp = "g" + k;
      if (numOfTbl == 8)
        temp = "h" + k;
      if (numOfTbl == 9)
        temp = "i" + k;

      document.getElementById(temp).src = "../Images/num" + k + ".png";
      document.getElementById(temp).style.border = "solid thin #ffee88";    
        
      t++;
    }
  }
}


}


function findR123Values(){

var i, j, k;

k = 0;
for(j=0;j<3;j++){
  row1[k]=Box1[j];
  k++;
}
for(j=0;j<3;j++){
  row1[k]=Box2[j];
  k++;
}
for(j=0;j<3;j++){
  row1[k]=Box3[j];
  k++;
}

k = 0;
for(j=3;j<6;j++){
  row2[k]=Box1[j];
  k++;
}
for(j=3;j<6;j++){
  row2[k]=Box2[j];
  k++;
}
for(j=3;j<6;j++){
  row2[k]=Box3[j];
  k++;
}

k = 0;
for(j=6;j<9;j++){
  row3[k]=Box1[j];
  k++;
}
for(j=6;j<9;j++){
  row3[k]=Box2[j];
  k++;
}
for(j=6;j<9;j++){
  row3[k]=Box3[j];
  k++;
}

}


function findR456Values(){

var i, j, k;

k = 0;
for(j=0;j<3;j++){
  row4[k]=Box4[j];
  k++;
}
for(j=0;j<3;j++){
  row4[k]=Box5[j];
  k++;
}
for(j=0;j<3;j++){
  row4[k]=Box6[j];
  k++;
}

k = 0;
for(j=3;j<6;j++){
  row5[k]=Box4[j];
  k++;
}
for(j=3;j<6;j++){
  row5[k]=Box5[j];
  k++;
}
for(j=3;j<6;j++){
  row5[k]=Box6[j];
  k++;
}

k = 0;
for(j=6;j<9;j++){
  row6[k]=Box4[j];
  k++;
}
for(j=6;j<9;j++){
  row6[k]=Box5[j];
  k++;
}
for(j=6;j<9;j++){
  row6[k]=Box6[j];
  k++;
}

}


function findR789Values(){

var i, j, k;

k = 0;
for(j=0;j<3;j++){
  row7[k]=Box7[j];
  k++;
}
for(j=0;j<3;j++){
  row7[k]=Box8[j];
  k++;
}
for(j=0;j<3;j++){
  row7[k]=Box9[j];
  k++;
}

k = 0;
for(j=3;j<6;j++){
  row8[k]=Box7[j];
  k++;
}
for(j=3;j<6;j++){
  row8[k]=Box8[j];
  k++;
}
for(j=3;j<6;j++){
  row8[k]=Box9[j];
  k++;
}

k = 0;
for(j=6;j<9;j++){
  row9[k]=Box7[j];
  k++;
}
for(j=6;j<9;j++){
  row9[k]=Box8[j];
  k++;
}
for(j=6;j<9;j++){
  row9[k]=Box9[j];
  k++;
}

}


function findC123Values(){

var i, j, k;

k = 0;
for(i=0;i<9;i=i+3){
  col1[k]=Box1[i];
  k++;
}
for(i=0;i<9;i=i+3){
  col1[k]=Box4[i];
  k++;
}
for(i=0;i<9;i=i+3){
  col1[k]=Box7[i];
  k++;
}

k = 0;
for(i=1;i<9;i=i+3){
  col2[k]=Box1[i];
  k++;
}
for(i=1;i<9;i=i+3){
  col2[k]=Box4[i];
  k++;
}
for(i=1;i<9;i=i+3){
  col2[k]=Box7[i];
  k++;
}

k = 0;
for(i=2;i<9;i=i+3){
  col3[k]=Box1[i];
  k++;
}
for(i=2;i<9;i=i+3){
  col3[k]=Box4[i];
  k++;
}
for(i=2;i<9;i=i+3){
  col3[k]=Box7[i];
  k++;
}


}


function findC456Values(){

var i, j, k;

k = 0;
for(i=0;i<9;i=i+3){
  col4[k]=Box2[i];
  k++;
}
for(i=0;i<9;i=i+3){
  col4[k]=Box5[i];
  k++;
}
for(i=0;i<9;i=i+3){
  col4[k]=Box8[i];
  k++;
}

k = 0;
for(i=1;i<9;i=i+3){
  col5[k]=Box2[i];
  k++;
}
for(i=1;i<9;i=i+3){
  col5[k]=Box5[i];
  k++;
}
for(i=1;i<9;i=i+3){
  col5[k]=Box8[i];
  k++;
}

k = 0;
for(i=2;i<9;i=i+3){
  col6[k]=Box2[i];
  k++;
}
for(i=2;i<9;i=i+3){
  col6[k]=Box5[i];
  k++;
}
for(i=2;i<9;i=i+3){
  col6[k]=Box8[i];
  k++;
}

}


function findC789Values(){

var i, j, k;

k = 0;
for(i=0;i<9;i=i+3){
  col7[k]=Box3[i];
  k++;
}
for(i=0;i<9;i=i+3){
  col7[k]=Box6[i];
  k++;
}
for(i=0;i<9;i=i+3){
  col7[k]=Box9[i];
  k++;
}

k = 0;
for(i=1;i<9;i=i+3){
  col8[k]=Box3[i];
  k++;
}
for(i=1;i<9;i=i+3){
  col8[k]=Box6[i];
  k++;
}
for(i=1;i<9;i=i+3){
  col8[k]=Box9[i];
  k++;
}

k = 0;
for(i=2;i<9;i=i+3){
  col9[k]=Box3[i];
  k++;
}
for(i=2;i<9;i=i+3){
  col9[k]=Box6[i];
  k++;
}
for(i=2;i<9;i=i+3){
  col9[k]=Box9[i];
  k++;
}

}



function ShuffleValues(){

imgFrom = 0;
imgTo = 0;
firstMove = false;

document.getElementById('time1').innerHTML = "";
document.getElementById('time2').innerHTML = "";
document.getElementById('time3').innerHTML = "";

dt1 = 0;
dt2 = 0;
hr1 = 0;
hr2 = 0;
mt1 = 0;
mt2 = 0;
sd1 = 0;
sd2 = 0;



ShuffleTable("a");
ShuffleTable("b");
ShuffleTable("c");
ShuffleTable("d");
ShuffleTable("e");
ShuffleTable("f");
ShuffleTable("g");
ShuffleTable("h");
ShuffleTable("i");

findR123Values();
findR456Values();
findR789Values();

findC123Values();
findC456Values();
findC789Values();

colorChg = true;
}


function ShuffleTable(tblID){

var tempT = new Array(9);
var i, j, count;
var alreadyIn = false;


colorChg = true;

for(i=0;i<9;i++)
  tempT[i] = 0;
  
count = 0;  
while (count < 9){
  rdm = Math.floor(Math.random()*10);
  alreadyIn = false;
  for(j=0;j<9;j++){
    if (tempT[j] == rdm)
      alreadyIn = true;
  }
  if (alreadyIn == false){
    tempT[count] = rdm;
    count++;
  }
}

ShuffleImage(tempT, tblID);

}


function ShuffleImage(newTbl, tblID){

var newImgT = new Array(9);
var i, j, n, k, t;
var tblN = tblID;

newImgT = newTbl;


k = 0;
t = 0;
for(i=0;i<3;i++){
  for(j=0;j<3;j++){
    n = newImgT[k];
    temp = tblN + (t+1);
    document.getElementById(temp).src = "../Images/num" + n + ".png";
    document.getElementById(temp).style.border = "solid thin #ffee88";  
    if (tblN == "a")  
      Box1[t] = n;
    if (tblN == "b")
      Box2[t] = n;
    if (tblN == "c")      
      Box3[t] = n;
    if (tblN == "d")      
      Box4[t] = n;
    if (tblN == "e")      
      Box5[t] = n;
    if (tblN == "f")      
      Box6[t] = n;
    if (tblN == "g")      
      Box7[t] = n;
    if (tblN == "h")      
      Box8[t] = n;
    if (tblN == "i")      
      Box9[t] = n;
    
    t++;
    k++;
  }
}

}


//
// how to move images - K: which box, T: which square
//
function MoveImg(K, T){

var tempT = T;
var tempK = K;
var i = 0, j = 0, t = 0;
var temp1 = "", temp2 = "";

if (firstMove == false)
  startTiming();
  
if (colorChg == false)
  return;
  
if (imgFrom == 0){
  imgFrom = tempT;
  if (imgTo == 0)
    return;
}
else
  imgTo = tempT;

if (inBlock() == true) {
  SwapImg(tempK);
  if ((EvaluateColTbl() == true) && (EvaluateRowTbl() == true)){ 
    colorChg = false;  
    endTiming();
    alert("Congratuations! You've completed a Sudoku puzzle game!");
    showSudokuBoxes();
    return;
  }
}
else {
  imgFrom = 0;
  imgTo = 0;
  return
}

}


function startTiming(){

var d = new Date();
var s = "";

dt1 = d.getDate();
hr1 = d.getHours();
mt1 = d.getMinutes();
sd1 = d.getSeconds();

if (hr1 == 0)
  s = "00" + hr1 + ":";
else if ((hr1 > 0) && (hr1 < 10))
  s = "0" + hr1 + ":";
else
  s = hr1 + ":";
 
if (mt1 == 0)
  s = s + "00" + mt1 + ":";
else if ((mt1 > 0) && (mt1 < 10))
  s = s + "0" + mt1 + ":";
else
  s = s + mt1 + ":";

if (sd1 == 0)
  s = s + "00" + sd1;
else if ((sd1 > 0) && (sd1 < 10))
  s = s + "0" + sd1;
else
  s = s + sd1;
 

document.getElementById('time1').innerHTML = "Game Started:  " + s;
  
firstMove = true;

}



function endTiming(){

var d = new Date();
var s = "";

dt2 = d.getDate();
hr2 = d.getHours();
mt2 = d.getMinutes();
sd2 = d.getSeconds();

if (hr2 == 0)
  s = "00" + hr2 + ":";
else if ((hr2 > 0) && (hr2 < 10))
  s = "0" + hr2 + ":";
else
  s = hr2 + ":";
 
if (mt2 == 0)
  s = s + "00" + mt2 + ":";
else if ((mt2 > 0) && (mt2 < 10))
  s = s + "0" + mt2 + ":";
else
  s = s + mt2 + ":";

if (sd2 == 0)
  s = s + "00" + sd2;
else if ((sd2 > 0) && (sd2 < 10))
  s = s + "0" + sd2;
else
  s = s + sd2;
 

document.getElementById('time2').innerHTML = "Game Ended:  " + s;

computeTime();  

}


function computeTime(){

var s, m, h;
var timeDif = 0;
var st = "";

if (sd2 >= sd1)
  s = sd2 - sd1;
else {
  mt2 = mt2 - 1;
  s = 60 + sd2 - sd1;
}

if (mt2 >= mt1)
  m = mt2 - mt1;
else {
  hr2 = hr2 - 1;
  m = 60 + mt2 - mt1;
}

if (hr2 >= hr1)
  h = hr2 - hr1;
else {
  dt2 = dt2 - 1;
  h = 24 + hr2 - hr1;
}
  
if (h > 0)
  st = h + " hour ";
if (m > 0)
  st = st + m + " minutes ";
if (s > 0)
  st = st + s + " seconds ";
  
document.getElementById('time3').innerHTML = "It took " + st + " to finish the game!";



}



function showSudokuBoxes(){

var i, j, temp1, temp2, temp3;

for(i=0;i<9;i++){
  temp1 = "a" + (i+1);
  document.getElementById(temp1).style.border = "solid thin red";  
  temp2 = "b" + (i+1);
  document.getElementById(temp2).style.border = "solid thin red";  
  temp3 = "c" + (i+1);
  document.getElementById(temp3).style.border = "solid thin red"; 
  
  temp1 = "d" + (i+1);
  document.getElementById(temp1).style.border = "solid thin red";  
  temp2 = "e" + (i+1);
  document.getElementById(temp2).style.border = "solid thin red";  
  temp3 = "f" + (i+1);
  document.getElementById(temp3).style.border = "solid thin red"; 
  
  temp1 = "g" + (i+1);
  document.getElementById(temp1).style.border = "solid thin red";  
  temp2 = "h" + (i+1);
  document.getElementById(temp2).style.border = "solid thin red";  
  temp3 = "i" + (i+1);
  document.getElementById(temp3).style.border = "solid thin red"; 
}


colorChg = false;

}



function inBlock(){

var isB = false;

if (imgTo == (imgFrom - 1)){
  if ((imgFrom % 3) == 1)
    isB = false;
  else
    isB = true;
}

if (imgTo == (imgFrom + 1)){
  if ((imgTo % 3) == 1)
    isB = false;
  else 
    isB = true;
}

if (imgTo == (imgFrom + 3)){
  isB = true;
}

if (imgTo == (imgFrom - 3)){
  isB = true;
}

return isB;

}



function SwapImg(whichBox) {

var temp1 = "", temp2 = "", temp = "";
var i = 0;
var k = whichBox;

// swap images
temp1 = k + imgFrom;
temp2 = k + imgTo;

temp = document.getElementById(temp1).src;
document.getElementById(temp1).src = document.getElementById(temp2).src;
document.getElementById(temp2).src = temp;

if (k == "a"){ 
// swap table values
  i = Box1[imgFrom-1];
  Box1[imgFrom-1] = Box1[imgTo-1];
  Box1[imgTo-1] = i;
  findR123Values();
  findC123Values();
}

if (k == "b"){ 
// swap table values
  i = Box2[imgFrom-1];
  Box2[imgFrom-1] = Box2[imgTo-1];
  Box2[imgTo-1] = i;
  findR123Values();
  findC456Values();
}

if (k == "c"){ 
// swap table values
  i = Box3[imgFrom-1];
  Box3[imgFrom-1] = Box3[imgTo-1];
  Box3[imgTo-1] = i;
  findR123Values();
  findC789Values();
}

if (k == "d"){ 
// swap table values
  i = Box4[imgFrom-1];
  Box4[imgFrom-1] = Box4[imgTo-1];
  Box4[imgTo-1] = i;
  findR456Values();
  findC123Values();
}

if (k == "e"){ 
// swap table values
  i = Box5[imgFrom-1];
  Box5[imgFrom-1] = Box5[imgTo-1];
  Box5[imgTo-1] = i;
  findR456Values();
  findC456Values();
}

if (k == "f"){ 
// swap table values
  i = Box6[imgFrom-1];
  Box6[imgFrom-1] = Box6[imgTo-1];
  Box6[imgTo-1] = i;
  findR456Values();
  findC789Values();
}

if (k == "g"){ 
// swap table values
  i = Box7[imgFrom-1];
  Box7[imgFrom-1] = Box7[imgTo-1];
  Box7[imgTo-1] = i;
  findR789Values();
  findC123Values();
}

if (k == "h"){ 
// swap table values
  i = Box8[imgFrom-1];
  Box8[imgFrom-1] = Box8[imgTo-1];
  Box8[imgTo-1] = i;
  findR789Values();
  findC456Values();
}

if (k == "i"){ 
// swap table values
  i = Box9[imgFrom-1];
  Box9[imgFrom-1] = Box9[imgTo-1];
  Box9[imgTo-1] = i;
  findR789Values();
  findC789Values();
}

imgFrom = 0;
imgTo = 0;

}



function EvaluateRowTbl() {

var i = 0, n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0, n8 = 0, n9 = 0;
var sudokuDone = false;

var row1Done = false;
var row2Done = false;
var row3Done = false;
var row4Done = false;
var row5Done = false;
var row6Done = false;
var row7Done = false;
var row8Done = false;
var row9Done = false;

for(i=0;i<9;i++){
  if (row1[i] == 1)
    n1++;
  if (row1[i] == 2)
    n2++;
  if (row1[i] == 3)
    n3++;
  if (row1[i] == 4)
    n4++;
  if (row1[i] == 5)
    n5++;
  if (row1[i] == 6)
    n6++;
  if (row1[i] == 7)
    n7++;
  if (row1[i] == 8)
    n8++;
  if (row1[i] == 9)
    n9++; 
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  row1Done = true;
else
{ sudokuDone = false;
  return sudokuDone;
}
  
n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;

for(i=0;i<9;i++){
  if (row2[i] == 1)
    n1++;
  if (row2[i] == 2)
    n2++;
  if (row2[i] == 3)
    n3++;
  if (row2[i] == 4)
    n4++;
  if (row2[i] == 5)
    n5++;
  if (row2[i] == 6)
    n6++;
  if (row2[i] == 7)
    n7++;
  if (row2[i] == 8)
    n8++;
  if (row2[i] == 9)
    n9++;    
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  row2Done = true;  
else
{  sudokuDone = false;
   return sudokuDone;
}
  
n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (row3[i] == 1)
    n1++;
  if (row3[i] == 2)
    n2++;
  if (row3[i] == 3)
    n3++;
  if (row3[i] == 4)
    n4++;
  if (row3[i] == 5)
    n5++;
  if (row3[i] == 6)
    n6++;
  if (row3[i] == 7)
    n7++;
  if (row3[i] == 8)
    n8++;
  if (row3[i] == 9)
    n9++; 
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  row3Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}
 
n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (row4[i] == 1)
    n1++;
  if (row4[i] == 2)
    n2++;
  if (row4[i] == 3)
    n3++;
  if (row4[i] == 4)
    n4++;
  if (row4[i] == 5)
    n5++;
  if (row4[i] == 6)
    n6++;
  if (row4[i] == 7)
    n7++;
  if (row4[i] == 8)
    n8++;
  if (row4[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  row4Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}


n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (row5[i] == 1)
    n1++;
  if (row5[i] == 2)
    n2++;
  if (row5[i] == 3)
    n3++;
  if (row5[i] == 4)
    n4++;
  if (row5[i] == 5)
    n5++;
  if (row5[i] == 6)
    n6++;
  if (row5[i] == 7)
    n7++;
  if (row5[i] == 8)
    n8++;
  if (row5[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  row5Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}

n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (row6[i] == 1)
    n1++;
  if (row6[i] == 2)
    n2++;
  if (row6[i] == 3)
    n3++;
  if (row6[i] == 4)
    n4++;
  if (row6[i] == 5)
    n5++;
  if (row6[i] == 6)
    n6++;
  if (row6[i] == 7)
    n7++;
  if (row6[i] == 8)
    n8++;
  if (row6[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  row6Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}

n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (row7[i] == 1)
    n1++;
  if (row7[i] == 2)
    n2++;
  if (row7[i] == 3)
    n3++;
  if (row7[i] == 4)
    n4++;
  if (row7[i] == 5)
    n5++;
  if (row7[i] == 6)
    n6++;
  if (row7[i] == 7)
    n7++;
  if (row7[i] == 8)
    n8++;
  if (row7[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  row7Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}

n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (row8[i] == 1)
    n1++;
  if (row8[i] == 2)
    n2++;
  if (row8[i] == 3)
    n3++;
  if (row8[i] == 4)
    n4++;
  if (row8[i] == 5)
    n5++;
  if (row8[i] == 6)
    n6++;
  if (row8[i] == 7)
    n7++;
  if (row8[i] == 8)
    n8++;
  if (row8[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  row8Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}

n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (row9[i] == 1)
    n1++;
  if (row9[i] == 2)
    n2++;
  if (row9[i] == 3)
    n3++;
  if (row9[i] == 4)
    n4++;
  if (row9[i] == 5)
    n5++;
  if (row9[i] == 6)
    n6++;
  if (row9[i] == 7)
    n7++;
  if (row9[i] == 8)
    n8++;
  if (row9[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  row9Done = true;


if (row9Done == true)
  sudokuDone = true;

 return sudokuDone;

}


function EvaluateColTbl() {

var i = 0, n1 = 0, n2 = 0, n3 = 0, n4 = 0, n5 = 0, n6 = 0, n7 = 0, n8 = 0, n9 = 0;
var sudokuDone = false;

var col1Done = false;
var col2Done = false;
var col3Done = false;
var col4Done = false;
var col5Done = false;
var col6Done = false;
var col7Done = false;
var col8Done = false;
var col9Done = false;


for(i=0;i<9;i++){
  if (col1[i] == 1)
    n1++;
  if (col1[i] == 2)
    n2++;
  if (col1[i] == 3)
    n3++;
  if (col1[i] == 4)
    n4++;
  if (col1[i] == 5)
    n5++;
  if (col1[i] == 6)
    n6++;
  if (col1[i] == 7)
    n7++;
  if (col1[i] == 8)
    n8++;
  if (col1[i] == 9)
    n9++; 
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  col1Done = true;
else
{ sudokuDone = false;
  return sudokuDone;
}
  
n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;

for(i=0;i<9;i++){
  if (col2[i] == 1)
    n1++;
  if (col2[i] == 2)
    n2++;
  if (col2[i] == 3)
    n3++;
  if (col2[i] == 4)
    n4++;
  if (col2[i] == 5)
    n5++;
  if (col2[i] == 6)
    n6++;
  if (col2[i] == 7)
    n7++;
  if (col2[i] == 8)
    n8++;
  if (col2[i] == 9)
    n9++;    
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  col2Done = true;  
else
{  sudokuDone = false;
   return sudokuDone;
}
  
n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (col3[i] == 1)
    n1++;
  if (col3[i] == 2)
    n2++;
  if (col3[i] == 3)
    n3++;
  if (col3[i] == 4)
    n4++;
  if (col3[i] == 5)
    n5++;
  if (col3[i] == 6)
    n6++;
  if (col3[i] == 7)
    n7++;
  if (col3[i] == 8)
    n8++;
  if (col3[i] == 9)
    n9++; 
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  col3Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}
 
n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (col4[i] == 1)
    n1++;
  if (col4[i] == 2)
    n2++;
  if (col4[i] == 3)
    n3++;
  if (col4[i] == 4)
    n4++;
  if (col4[i] == 5)
    n5++;
  if (col4[i] == 6)
    n6++;
  if (col4[i] == 7)
    n7++;
  if (col4[i] == 8)
    n8++;
  if (col4[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  col4Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}


n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (col5[i] == 1)
    n1++;
  if (col5[i] == 2)
    n2++;
  if (col5[i] == 3)
    n3++;
  if (col5[i] == 4)
    n4++;
  if (col5[i] == 5)
    n5++;
  if (col5[i] == 6)
    n6++;
  if (col5[i] == 7)
    n7++;
  if (col5[i] == 8)
    n8++;
  if (col5[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  col5Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}

n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (col6[i] == 1)
    n1++;
  if (col6[i] == 2)
    n2++;
  if (col6[i] == 3)
    n3++;
  if (col6[i] == 4)
    n4++;
  if (col6[i] == 5)
    n5++;
  if (col6[i] == 6)
    n6++;
  if (col6[i] == 7)
    n7++;
  if (col6[i] == 8)
    n8++;
  if (col6[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  col6Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}

n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (col7[i] == 1)
    n1++;
  if (col7[i] == 2)
    n2++;
  if (col7[i] == 3)
    n3++;
  if (col7[i] == 4)
    n4++;
  if (col7[i] == 5)
    n5++;
  if (col7[i] == 6)
    n6++;
  if (col7[i] == 7)
    n7++;
  if (col7[i] == 8)
    n8++;
  if (col7[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  col7Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}

n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (col8[i] == 1)
    n1++;
  if (col8[i] == 2)
    n2++;
  if (col8[i] == 3)
    n3++;
  if (col8[i] == 4)
    n4++;
  if (col8[i] == 5)
    n5++;
  if (col8[i] == 6)
    n6++;
  if (col8[i] == 7)
    n7++;
  if (col8[i] == 8)
    n8++;
  if (col8[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  col8Done = true;
else
{  sudokuDone = false;
   return sudokuDone;
}

n1 = 0;
n2 = 0;
n3 = 0;
n4 = 0;
n5 = 0;
n6 = 0;
n7 = 0;
n8 = 0;
n9 = 0;
  
for(i=0;i<9;i++){
  if (col9[i] == 1)
    n1++;
  if (col9[i] == 2)
    n2++;
  if (col9[i] == 3)
    n3++;
  if (col9[i] == 4)
    n4++;
  if (col9[i] == 5)
    n5++;
  if (col9[i] == 6)
    n6++;
  if (col9[i] == 7)
    n7++;
  if (col9[i] == 8)
    n8++;
  if (col9[i] == 9)
    n9++;
}

if ((n1 == 1) && (n2 == 1) && (n3 == 1) && (n4 == 1) && (n5 == 1) && (n6 == 1) && (n7 == 1) && (n8 == 1) && (n9 == 1))
  col9Done = true;

if (col9Done == true)
  sudokuDone = true;

 return sudokuDone;

}


function ChgColor(T){

var tempT = T;
var temp = "";
var BId = tempT.slice(0,1);

if (colorChg != false)
  document.getElementById(tempT).style.border = "solid thin red";
else
  return;

}


function BackToNorm(T){

var tempT = T;
var temp = "";
var BId = tempT.slice(0,1);

if (colorChg != false)
  document.getElementById(tempT).style.border = "solid thin #ffee88";
else
  return;
  
}