numMoves=0;
imgNum=0;
compArray=new Array(16);
fileArray=new Array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
tileArray=new Array(16);

function buildBoard()
{
	document.writeln("<table border='1'>");
	for(i=0; i<4; i++)
	{
		document.writeln("<tr>");
		for(j=0; j<4; j++)
		{
			fileNum=Math.floor(Math.random()*fileArray.length);

			document.write("<td><a href='' onClick='move(");
			document.write(imgNum);
			document.write(");return false'><img src='");
			document.write("/old2/"+fileArray[fileNum]+".gif'");
			document.writeln(" border='0'></a></td>");

			tileArray[imgNum]=fileArray[fileNum];

			if(fileNum==0)
	    {
	      fileArray=fileArray.slice(1);
      }
      else
      {
	      if(fileArray==fileArray.length-1)
	      {
	        fileArray.slice(fileArray.length-1);
	      }
        else
	      {
		      temp1=fileArray.slice(0,fileNum);
	        temp2=fileArray.slice(fileNum+1);
	        fileArray=temp1.concat(temp2);
	      }
      }

	    imgNum++;
    }
    document.writeln("</tr>");
  }

document.writeln("</table>");
}

function move(tileNum)
{
	row=Math.floor(tileNum/4);
	col=(tileNum-(row*4));

	if(row==0 && col==0)
	{
		if(tileArray[tileNum+1]==0)
		{
		  updateNum=tileNum+1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum+4]==0)
    {
		  updateNum=tileNum+4;
		  swap(tileNum,updateNum);
    }
  }
  if(row==0 && col==1 || col==2)
  {
	  if(tileArray[tileNum+1]==0)
	  {
		  updateNum=tileNum+1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum+4]==0)
    {
		  updateNum=tileNum+4;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum-1]==0)
    {
		  updateNum=tileNum-1;
		  swap(tileNum,updateNum);
    }
  }
  if(row==0 && col==3)
  {
	  if(tileArray[tileNum-1]==0)
	  {
		  updateNum=tileNum-1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum+4]==0)
    {
		  updateNum=tileNum+4;
		  swap(tileNum,updateNum);
    }
  }
  if(row==1 || row==2 && col==1 || col==2)
  {
	  if(tileArray[tileNum+1]==0)
	  {
		  updateNum=tileNum+1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum-1]==0)
    {
		  updateNum=tileNum-1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum+4]==0)
    {
		  updateNum=tileNum+4;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum-4]==0)
    {
		  updateNum=tileNum-4;
		  swap(tileNum,updateNum);
    }
  }
	if(row==1 || row==2 && col==0)
	{
		if(tileArray[tileNum+1]==0)
		{
		  updateNum=tileNum+1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum+4]==0)
    {
		  updateNum=tileNum+4;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum-4]==0)
    {
		  updateNum=tileNum-4;
		  swap(tileNum,updateNum);
    }
  }
	if(row==1 || row==2 && col==3)
	{
		if(tileArray[tileNum-1]==0)
		{
		  updateNum=tileNum-1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum+4]==0)
    {
		  newNum=tileNum+4;
		  swap(tileNum,newNum);
    }
    if(tileArray[tileNum-4]==0)
    {
		  updateNum=tileNum-4;
		  swap(tileNum,updateNum);
    }
  }
	if(row==3 && col==0)
	{
		if(tileArray[tileNum+1]==0)
		{
		  updateNum=tileNum+1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum-4]==0)
    {
		  updateNum=tileNum-4;
		  swap(tileNum,updateNum);
    }
  }
	if(row==3 && col==1 || col==2)
	{
		if(tileArray[tileNum+1]==0)
		{
		  updateNum=tileNum+1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum-1]==0)
    {
		  updateNum=tileNum-1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum-4]==0)
    {
		  updateNum=tileNum-4;
		  swap(tileNum,updateNum);
    }
  }
  if(row==3 && col==3)
  {
	  if(tileArray[tileNum-1]==0)
	  {
		  updateNum=tileNum-1;
		  swap(tileNum,updateNum);
    }
    if(tileArray[tileNum-4]==0)
    {
		  updateNum=tileNum-4;
		  swap(tileNum,updateNum);
    }
  }
}

function swap(oldNum,newNum)
{
	numMoves++;
	x=document.images[oldNum].src;
	document.images[oldNum].src=document.images[newNum].src;
	document.images[newNum].src=x;

	y=tileArray[oldNum];
	tileArray[oldNum]=tileArray[newNum];
  tileArray[newNum]=y;

  for(m=0; m<16; m++)
  {
	  compArray[m]=tileArray[m];
  }

  if(compArray[0]==1 && compArray[1]==2 && compArray[2]==3 && compArray[3]==4 && compArray[4]==5 && compArray[5]==6 &&compArray[6]==7 && compArray[7]==8 && compArray[8]==9 && compArray[9]==10 && compArray[11]==12 && compArray[12]==13 && compArray[13]==14 && compArray[14]==15 && compArray[15]==0)
  {
	  if(numMoves<25)
	  {
		  alert("WOW! Did it with only "+numMoves+" moves! You are very,very good!");
    }
    if(numMoves>50 && numMoves<50)
    {
	    alert("Pretty good . . . you needed only "+numMoves+" moves to finish!");
    }
    if(numMoves>50)
    {
	    alert("Not so good . . . you finished, but you needed "+numMoves+" moves to do it!");
    }
  }
}

function startOver()
{
	newGame=new Array(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
	source=new String;
	for(h=0; h<16; h++)
	{
		randomNum=Math.floor(Math.random()*newGame.length);
		source="/old2/"+newGame[randomNum].toString();
		source=source.concat(".gif")
		document.images[h].src=source;
		tileArray[h]=newGame[randomNum];

		if(randomNum==0)
    {
	    newGame=newGame.slice(1);
    }
    else
    {
	    if(newGame==newGame.length-1)
	    {
	      newGame.slice(newGame.length-1);
	    }
      else
	    {
		    temp1=newGame.slice(0,randomNum);
	      temp2=newGame.slice(randomNum+1);
	      newGame=temp1.concat(temp2);
	    }
    }
  }
  numMoves=0;
}

