var gameX=new Array(81) ;
var squares=new Array(81);
var playedMoves=new Array(81);
var testSq1 = new Array(2);
var testSq2 = new Array(2);
var rtnStr = "";
var pauses =0;
//var movesLeft= 0;
var isGrey = new Array( 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,1 ,1 ,1 ,0 ,0 ,1 ,1 ,1 ,0 ,1 ,1 ,1 ,0 ,0 ,1 ,1 ,1 ,0 ,1 ,1 ,1 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,1 ,1 ,1 ,0 ,1 ,1 ,1 ,0 ,0 ,1 ,1 ,1 , 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) ;
var selected=0;
//vars for clock
var c=0;
var m =0;
var t;
var time = "00:00";
var running = 0;
var gameOver = 0;
var clue = 0;
var sorted = 0;   // test end game.
var checker =0;
var ending1 = 0;
var TTT;
var finalSelection = new Array();

function finishedG()
{ 
    checker = sorted;
     help();
    y1= document.getElementById("helpButton"); 
    if(y1.innerHTML == "Clear")
   { return;}
   else
   {
      startTimer();
      gameOver = 1;
      setDateX()
      ML = document.getElementById("moveCount").value;

     MSG( "Well played. Your time was "+ time);
     ending(); 
     var randomnumber=Math.floor(Math.random()*5)
     if(randomnumber == 0)
        alert("Excellent work!!");
     if(randomnumber == 1)
        alert("Excellent Game!!");
     if(randomnumber == 2)
        alert("One more game for fun?");
     if(randomnumber == 3)
        alert("Your on a roll!!");
     if(randomnumber == 4)
        alert("Brilliant effort!!");

   }
}
function MSG(msg)
{
     TROUBLE = document.getElementById("trouble");
     TROUBLE.value = msg;  
      return;   
}

function clue2()
{

var2 = document.getElementById("cluesUsed");
temp1 = var2.value;
 var2.value =  temp1 * 1 + 1;


  arrx = new Array(0); 
       ii2=0;
     if((running==0) && (gameOver==0))
           startTimer();
     for(ii1 =0 ;ii1 <81 ; ii1++)
   {
       if(!((playedMoves[ii1] >0)&&(playedMoves[ii1] <10)))
       {
          arrx[ii2++] = ii1;
        }
   }

       arrx = shuffle(arrx); 
      index1 = arrx[0];
              squares[index1].value =gameX[index1];   
              playedMoves[index1] = gameX[index1];

  movesLeft();
unset(arrx);
setDateX();
}

function help()
{
    errors=0;
    checker = 0;
    var3 = document.getElementById("help");
    temp2 = var3.value;
    var3.value =  temp2 * 1 + 1;
    y1= document.getElementById("helpButton"); 
    if(y1.innerHTML == "Clear")
    {
          for(var x=0;x<81;x++)
          {
                       var d = "T" + (x+1) ;
                      y= document.getElementById(d);

                      if(y.style.backgroundImage == "url(RedD.gif)")
                       {
                             playedMoves[x]="";
                             y.value="";
                             MSG("Back on track");
                         }
          }
     y1.innerHTML = "Help";
     clearTested();
    }
   else
   {
       for(x=0;x<81;x++)
       {

           if(!(gameX[x] == playedMoves[x]) && !(playedMoves[x]==""))
           {


                       
                      var d = "T" + (x+1) ;
                      y= document.getElementById(d);
                      y.style.backgroundImage = "url(RedD.gif)";

                      y1.innerHTML = "Clear";
                      errors++;
                      checker++;
                  
           }
           if(errors <1)
             {  MSG("Looks good at this stage");}
          else
             {  MSG("Red squares denote an error");}
       }
   }
   errors=0;
}

function checkSquare(squareOffset)
{
      var next = 0;
    var line = new Array(9);   
   line[next++] = playedMoves[squareOffset];
   line[next++] = playedMoves[squareOffset+1];
   line[next++] = playedMoves[squareOffset+2];
   line[next++] = playedMoves[squareOffset+9];
   line[next++] = playedMoves[squareOffset+10];
   line[next++] = playedMoves[squareOffset+11];
   line[next++] = playedMoves[squareOffset+18];
   line[next++] = playedMoves[squareOffset+19];
   line[next++] = playedMoves[squareOffset+20];
   sortShit(line, "SqOs", squareOffset);
   
}

function checkCol(colNo)
{

    var next = 0;
    var line = new Array(9);   
   line[next++] = playedMoves[colNo];
   line[next++] = playedMoves[colNo+9];
   line[next++] = playedMoves[colNo+18];
   line[next++] = playedMoves[colNo+27];
   line[next++] = playedMoves[colNo+36];
   line[next++] = playedMoves[colNo+45];
   line[next++] = playedMoves[colNo+54];
   line[next++] = playedMoves[colNo+63];
   line[next++] = playedMoves[colNo+72];
   sortShit(line, "Col", colNo);
}

function checkLine(L_Offset)
{
    var line = new Array(9);
    newCell=0;
    for(ii=0;ii<9;ii++)
    {
         var XX = L_Offset + ii ;
         var g = playedMoves[XX]
         if((g > 0) && (g < 10))
         {
              line[newCell++] = g;
          }
    }
    sortShit(line, "Line", L_Offset);
}

function sortShit( line, typex, L_Offset)
{
      line.sort(sortNumber);
     for(inc=0;inc < 8;inc++)
     {
          if(line[inc] > 0)
          {
                if(line[inc] == line[inc+1])
                {
                      highLight(L_Offset, line[inc], typex);
                 } 
          }
      } 
      return;
}

function highLight(offset, value, type_x)
{
     if(type_x == "Line")
     {
         for(V2=0;V2<9;V2++)
         {
              var d = "T" + (offset + V2 + 1) ;
              y= document.getElementById(d);
              if(y.value==value)
                  { y.style.backgroundImage = "url(RedD.gif)";}
              else 
                  { y.style.backgroundImage = "url(RedL.gif)";}

         } 
    } 
    if(type_x == "Col")
    {
          for(V2=0;V2<81;V2+=9)
         {
              var d = "T" + (offset + V2 + 1) ;
              y= document.getElementById(d);
              if(y.value==value)
                  { y.style.backgroundImage = "url(RedD.gif)";}
              else 
                  { y.style.backgroundImage = "url(RedL.gif)";}
         } 
    }
    if(type_x == "SqOs")
    {
         for(V2=0;V2<21;V2++)
         {
              var d = "T" + (offset + V2 + 1) ;
              y= document.getElementById(d);
              if(y.value==value)
                  { y.style.backgroundImage = "url(RedD.gif)";}
              else 
                  { y.style.backgroundImage = "url(RedL.gif)";}
              if((V2==2) || (V2== 11))
                 V2+= 6;
         } 
    }

sorted++;
MSG("You seem to have an extra "+value+" in there.");
return;
}

function clearTested()
{
   for(i=0;i<81;i++)
   { 
        var d = "T" + (i + 1) ;
        y= document.getElementById(d);      
        y.style.backgroundImage = "none";
        y1= document.getElementById("helpButton"); 
        y1.innerHTML = 'Help';
    }
    setDateX()
}

function timedCount()
{
document.getElementById('timer1').value=time
c=c+1
if(c>59)
{
 c=0;
 m++;
}
if(c<10)
 sec = "0"+c
else
  sec = c
if(m<10)
min = "0"+m
else
min = m
time = min+":"+sec
x = document.getElementById("timerB")
x.value="Pause"
t=setTimeout("timedCount()",1000)
}
function stopCount()
{
clearTimeout(t)
x = document.getElementById("timerB")
x.value="Restart";
pauses++;
x2 = document.getElementById("NoPs");
x2.value=pauses;
}

function startTimer()
{
if(running==0)
  {
   c=0;
    m=0;
  }
  running++;
if((running%2==1) && (gameOver==0))
    timedCount()
else
   stopCount()
}

function selectX(event, num)
{
   // alert("In selectX");
   var DOIT = 0;
   myStr = document.getElementById("Start").value;
   finalSelection =  myStr.split(',');

  for(var varX=0;varX<finalSelection.length && DOIT <1;varX++)
  {
     var given = finalSelection[varX];
     given = (given *1 )+1;
     //alert("given = "+given+" num = "+num);
     if(num==given)
         DOIT= 1;
   }
 // alert("doIt = "+DOIT+" num="+num+ " finalSelection = "+finalSelection[varX]);
 if(DOIT==0)
 {
        selected = num;
        chooser1 = document.getElementById("chooser");
        chooser1.className = "visible";
         x=event.clientX;
         y=event.clientY;
         //chooser1.style.top = y - 125;
         //chooser1.style.left = x - 175;
         chooser1.style.top = y - 100;
         chooser1.style.left = x - 190;
  }

   return;
}

function crap(x)
{
    clearTested();
    j=selected - 1;


    if(x=="1")
    {
        squares[j].value = 1;   
        playedMoves[j] = 1;     
    }
    if(x=="2")
    {
        squares[j].value = 2;
        playedMoves[j] = 2;     
    }
    if(x=="3")
    {
        squares[j].value = 3;
        playedMoves[j] = 3;     
    }
    if(x=="4")
    {
        squares[j].value = 4;
        playedMoves[j] = 4;     
    }
    if(x=="5")
    {
        squares[j].value = 5;
        playedMoves[j] = 5;     
    }
    if(x=="6")
    {
        squares[j].value = 6;
        playedMoves[j] = 6;     
    }
    if(x=="7")
    {
        squares[j].value = 7;
        playedMoves[j] = 7;     
    }
    if(x=="8")
    {
        squares[j].value = 8;
        playedMoves[j] = 8;     
    }
    if(x=="9")
    {
        squares[j].value = 9;
        playedMoves[j] = 9;     
    }
    if(x=="10")
    {
      squares[j].value = "" ;
      playedMoves[j] = "";   
    } 

  chooser1 = document.getElementById("chooser");
  chooser1.className = "invisible";
  movesLeft();
setDateX()
  if((running==0) && (gameOver == 0))
  startTimer();
x1 = document.getElementById("timerB")
if(x1.value=="Restart") 
startTimer()
  return;
}

function movesLeft()
{
 var movesLeft= 0;   
  for(i=0;i<81;i++)
  {
     if(playedMoves[i] == "")
        movesLeft++;   
  
  }
x = document.getElementById("moveCount")
x.value = movesLeft ;
setDateX()
if(movesLeft==0)
  finishedG();
}

function keep()
{
   chooser1 = document.getElementById("chooser");
  chooser1.className = "visible";
}

function hide(x)
{
   x.className = "invisible";
}
function noNumbers(e)
{
    var keynum
    var keychar
    var numcheck

    if(window.event) // IE
    {
        keynum = e.keyCode
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
         keynum = e.which
    }
    keychar = String.fromCharCode(keynum)
    numcheck = /\d{1,}/ 
             return numcheck.test(keychar);
}


function makeGame()
{
//alert("In function makeGame");

   for(i=0;i<81;i++)
   { 
          var1 = "T" + (i+1) ;
         squares[i]=document.getElementById(var1);         
         gameX[i]=document.getElementById(var1).value;
    }
    gameY = gameX;

myStr = document.getElementById("Start").value;

finalSelection =  myStr.split(',');
finalSelection.sort(sortNumber);
//alert("Still in function makeGame");
j=0;
   for(i=0;i<81;i++)
   { 
      if(i==finalSelection[j])
      {
           squares[i].className ="given" ;

           squares[i].value =gameY[i];
          playedMoves[i] = gameY[i];
//alert("playedMoves[i] = "+playedMoves[i]);
          j++;
      }
       else
      {
           squares[i].value = "";  
           playedMoves[i] = ""; 
      }
      squares[i].style.visibility = "visible";
      squares[i].style.textAlign = "center";
   }
   //straightenTop();
movesLeft();
//alert("Final selection = x" + myStr + "x");
return;
}

function findPairs(game)
{
   var txt =''
   // find pairs in vert1
    OS1 = 2
    OS2 = 3
    OS3 = 29
    OS4= 30
    while(OS2<49)
    {
        while(OS4<76)
        {
            if(testPair(game, OS1, OS2, OS3, OS4)==1)
              txt  += OS1+","+OS2+","+OS3+","+OS4+","
            OS3 +=9
            OS4 +=9
        }
        OS1+=9
        OS2 +=9
        if(OS1 <21)
        {
             OS3 = 29
             OS4 = 30
         }
         else
         {
             OS3 = 56
             OS4 = 57
         }
    }
    // find pairs in vert2
 OS1 = 7
    OS2 = 8
    OS3 = 34
    OS4= 35
    while(OS2<54)
    {
        while(OS4<81)
        {
            if(testPair(game, OS1, OS2, OS3, OS4)==1)
               txt  += OS1+","+OS2+","+OS3+","+OS4+","
            OS3 +=9
            OS4 +=9
        }
        OS1+=9
        OS2 +=9
        if(OS1 <27)
        {
             OS3 = 34
             OS4 = 35
         }
         else
         {
             OS3 = 61
             OS4 = 61
         }
    }

//check horizontal top 
 OS1 = 10
    OS2 = 19
    OS3 = 13
    OS4= 22
    while(OS2<25)
    {
        while(OS4<28)
        {
            if(testPair(game, OS1, OS2, OS3, OS4)==1)
                txt  += OS1 -1 +","+OS2 -1 +","+OS3 -1 +","+OS4 -1 +","
            OS3 +=1
            OS4 +=1
        }
        OS1+=1
        OS2 +=1
        if(OS1 <13)
        {
             OS3 = 13
             OS4 = 22
         }
         else
         {
             OS3 = 16
             OS4 = 25
         }
    }

//check horizontal bottom

 OS1 = 55
    OS2 = 64
    OS3 = 58
    OS4= 67
    while(OS2<70)
    {
        while(OS4<73)
        {
            if(testPair(game, OS1, OS2, OS3, OS4)==1)
                txt  += OS1+","+OS2+","+OS3+","+OS4+","
            OS3 +=1
            OS4 +=1
        }
        OS1+=1
        OS2 +=1
        if(OS2 <67)
        {
             OS3 = 58
             OS4 = 67
         }
         else
         {
             OS3 = 61
             OS4 = 70
         }
    }
    return txt
}

function testPair(game, offSet1, offSet2, offSet3, offSet4)
{
    testSq1[0] = game[offSet1 - 1];
    testSq1[1] = game[offSet2 - 1];
    testSq2[0] = game[offSet3 - 1];
    testSq2[1] = game[offSet4 - 1];
    testSq1.sort(sortNumber);
    testSq2.sort(sortNumber);

    if((testSq1[0]==testSq2[0]) && (testSq1[1] == testSq2[1]))
       return 1
    else
       return 0; 
}

function sortNumber(a, b)
{
return a - b
}

function copyShuffle(arr, len, num)
{
   ret = new Array(len);
   for(i=0;i<len;i++)
   {
       ret[i] = arr[num][i];
   }
   return shuffle(ret);    
}

shuffle = function(o)
{
    for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
    return o;
};

function makeArrays(num)
{
    myArray = new Array(0,0,0,0,0,0,0,0,0);
    for(i=0;i<9;i++)
    {
         if(num==4)
             myArray[i] = new Array(0,0,0,0);
         else
             myArray[i] = new Array(0,0,0,0,0);
    }
    return myArray;
}

function display()
{
    //document.write("Game = ");
    for(i=0;i<80;i++)
    {
        // document.write(gameX[i]+"<br /> ");
    }    
return; 
}

function random(num)
{
    x= (Math.random() * 1000) % num;
    y=     Math.round(x);
    return y;
}
function setDateX()
{
     UsT = document.getElementById("UT");     //Set user time and date for game
  STime = new Date()
  y=STime.getFullYear()
  m1=STime.getMonth()
  d=STime.getDay()
  H=STime.getHours()
  M=STime.getMinutes()
  S=STime.getSeconds()
  UsT.value = y+':'+m1+':'+d+':'+H+':'+M+':'+S; 
}

function ending()
{
     myTab = document.getElementById("Table1");
     if(ending1%15 == 0)
      { 
            myTab.style.border = "4px solid red";
            $interval=120;
     }
    else
     {
         myTab.style.border = "4px solid black";
         $interval=50;

     }
    ending1=ending1+1;
    TTT=setTimeout("ending()",$interval);

}

