var good,gp1,gp2,pname,b1,b2; //globalposition, piecename, boardsource/target
var showstat=1; //show status flag
var shuf=0; // shuffling flag
var ps=0;  // number of pieces selected
var dimx=6; //board dimensions
var dimy=3;
var pieces=eval(dimx*dimy); //total number of pieces
var base_href=location.href.substring(0,location.href.lastIndexOf("/")+1);
var blank=base_href+"blank.jpg";
var puzzpath=base_href+"p";
var spuzzpath=base_href;

var img1 = new Image();
var img2 = new Image();
var img3 = new Image();
var img4 = new Image();
var img5 = new Image();
img1.src = "complete.jpg";
img2.src = "reset.jpg";
img3.src = "shuffle.jpg";
img4.src = "nope.jpg";
img5.src = "waitplac.jpg";

function count()
{
  if (b1!=b2) // swap made
  {
    if ((b2==1)&&(document[gp1].src==blank)) pieces++;
    if ((b2==2)&&(document[gp1].src==blank)) pieces--;
  }
  if (!pieces) return 1; // no pieces left to fit
  else return 0;
}

function valid(posx,posy)
{
  if (b2==2) // if placed on board 2
  {
    good=1; //assume good placement
    var piece=document[gp2].src;
    var len=piece.length
    var imgx=piece.charAt(len-6); //piece name variables
    var imgy=piece.charAt(len-5);
    posx=posx-dimx;
    imgx=parseFloat(imgx); //convert to floating numbers
    imgy=parseFloat(imgy);
    if (posx>1) //left
    {
      var check="p"+eval(posx-1+dimx)+posy;
      var expect=puzzpath+eval(imgx-1)+imgy+".jpg";
      if ((document[check].src==blank)||(document[check].src==expect)) good=1;
      else good=0;
    }

    if ((good)&&(posx<dimx)) //right
    {
      var check="p"+eval(posx+1+dimx)+posy;
      var expect=puzzpath+eval(imgx+1)+imgy+".jpg";
      if ((document[check].src==blank)||(document[check].src==expect)) good=1;
      else good=0;
    }

    if ((good)&&(posy>1)) //above
    {
      var check="p"+eval(posx+dimx)+eval(posy-1);
      var expect=puzzpath+imgx+eval(imgy-1)+".jpg";
      if ((document[check].src==blank)||(document[check].src==expect)) good=1;
      else good=0;
    }
    if ((good)&&(posy<dimy)) //below
    {
      var check="p"+eval(posx+dimx)+eval(posy+1);
      var expect=puzzpath+imgx+eval(imgy+1)+".jpg";
      if ((document[check].src==blank)||(document[check].src==expect)) good=1;
      else good=0;
    }
    if (!good) //returned good=0 swaps back.
    {
      pname=document[gp1].src;
      document[gp1].src=document[gp2].src;
      document[gp2].src=pname;
      document["status"].src="nope.jpg";
      pieces
      return
    }
    if (count()) document["status"].src="complete.jpg"; //pieces left
    else document['status'].src="waitsel.jpg";
  }

  if (b2==1)
  {
    document['status'].src="waitsel.jpg";
    count();
  }
}

function makeboard(numx,numy,offset,type)
{
  var wid=eval(50*dimx+2); //surrounding box size
  document.write("<img src='pixel.gif' height=1 width="+wid+"><br>");
  for (var i=1; i <=numy; i++) //number of rows down
  {
  document.write("<img src='pixel.gif' height=50 width=1>");
    for (var j=1; j <=numx; j++) //draw across number of columns
    {
      var name="p"+(eval(j+offset))+i;
      var imgname=spuzzpath+name;
      if (type==1) document.write("<a href=javascript:swap("+j+","+i+","+type
       +")><img border src="+imgname+".jpg width=50 height=50 name='"+name+"'></a>");
      if (type==2) document.write("<a href=javascript:swap("+eval(j+offset)+","+i+","
       +type+")><img border src='"+blank+"' width=50 height=50 name='"+name+"'></a>");
      if (type==3)
      {
        imgname=puzzpath+j+i;
        document.write("<img src="+imgname+".jpg width=50 height=50>");
      }
    }
    document.writeln("<img src='pixel.gif' height=50 width=1><br>");
  }
  document.write("<img src='pixel.gif' height=1 width="+wid+"><br>");
}

function swap(posx,posy,board)
{
  if (ps==0)
  {
    gp1="p"+posx+posy; //set global position to first piece
    ps=1; // 1 piece selected
    b1=board; //from board
    if (document[gp1].src==blank) //don't select if blank
    {
      ps=0;
      showstat=0;
    }
    if ((showstat)&&(!shuf)) document['status'].src="waitplac.jpg";
    showstat=1;
  }
  else
  {
    b2=board; //to board
    gp2="p"+posx+posy; //set global position to second piece
    pname=document[gp1].src; //temp position
    document[gp1].src=document[gp2].src; //swap
    document[gp2].src=pname;
    if (!shuf) valid(posx,posy); //validity test if not shuffling
    gp1=gp2=pname=''; //reset variables
    ps=0;
    showstat=1;
  }
}

function shuffle()
{
  if (pieces) //if sb still has pieces
  {
    shuf=1; //set shuffle flag
    document['status'].src="shuffle.jpg";
    var i=1;
    var loop=eval(dimx*dimy+10); //number of times to shuffle
    while (i<loop)
    {
      ps=1; //skip first swap test
      x = eval(Math.floor(Math.random() * dimx)+1);
      y = eval(Math.floor(Math.random() * dimy)+1);
      gp1="p"+x+y;
      x = eval(Math.floor(Math.random() * dimx)+1);
      y = eval(Math.floor(Math.random() * dimy)+1);
      swap(x,y);
      i++;
    }
    b1=b2=0; //reset variables
    shuf=0;
    document['status'].src="waitsel.jpg";
  }
}

function resetx(j,off)
{
  var i=1;
  while (i<=dimx)
  {
    if (!off) //if scrap board
    {
    pos="p"+i+j;
    pname=pos;
    document[pos].src=spuzzpath+pos+".jpg"; //set place to piece
    }
    if (off) //if the finished product board
    {
      pos="p"+eval(i+off)+j;
      document[pos].src=blank; //clear
    }
  i++;
  }
}
function reset(off)
{
  pieces=eval(dimx*dimy); //reset total number of pieces
  document['status'].src="reset.jpg";
  for (var j=1; j<=dimy; j++) //loop over puzzle
  {
    resetx(j,0); //reset sb
    resetx(j,dimx); //reset tfp
  }
  document['status'].src="waitsel.jpg";
}
// -->


