<!--
if (!document.images) {
document.write('<font color=red>Get a JavaScript 1.1 browser to use '
+'this script!!!</font>');
}
// -->

<!--

// script by Ben Reynolds at smallpox@yoyo.cc.monash.edu.au

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+"blank1.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";
}
// -->