var W=0;
var body;
var win;
var IMG=ce('img');
var A=ce('a');
var _pre=Array();
var _elm=Array();
var _lin=Array();

function pre(X)
	{
	var l=_pre.length;
	_pre[l]=new Image();
	_pre[l].src=X+'.gif';
	_elm[l]=IMG.cloneNode(0);
	_elm[l].setAttribute('alt',X);
	_elm[l].src=_pre[l].src;
	}

for(var i=0;i<16;i++)
	{
	pre(i);
	}
pre('win');

var main=ce('div');

for(i=0;i<16;i++)
	{
	_lin[i]=A.cloneNode(0);
	_lin[i].href='javascript:go('+i+')';
	_lin[i].appendChild(_elm[_ord[i]]);
	main.appendChild(_lin[i]);
	}

for(i=0;i<16;i++)
	{
	if(_ord[i]==15)
		{
		var E=i;
		}
	}

function go(X)
	{
	sweep(X);
	check();
	}

function sweep(X)
	{
	var Z=E-X;
	if(Math.floor(X/4)==Math.floor(E/4))
		{
		if(Z<0){for(i=E;i<X;i++){swap(E+1);}}
		if(Z>0){for(i=E;i>X;i--){swap(E-1);}}
		}
	if(!(Math.abs(Z)&3))
		{
		if(Z<0){for(i=E;i<X;i+=4){swap(E+4);}}
		if(Z>0){for(i=E;i>X;i-=4){swap(E-4);}}
		}
	}

function swap(X)
	{
	TempE=main.childNodes[E].firstChild.cloneNode(0);
	TempX=main.childNodes[X].replaceChild(TempE,main.childNodes[X].firstChild);
	main.childNodes[E].replaceChild(TempX,main.childNodes[E].firstChild);
	E=X;
	}

function check()
	{
	for(i=0;i<16;i++){if(!(main.childNodes[i].firstChild.src==_pre[i].src)){return;}}
	var X=gid('cap');
	X.replaceChild(ctn('You Win!'),X.firstChild);
	W=1;
	win=IMG.cloneNode(0);
	win.src=_pre[16].src;
	X=gid('con');
	body=X.firstChild.cloneNode(1);
	X.replaceChild(win,gtni(X,'div',0));
	}

function shuffle()
	{
	if(!(window.XMLHttpRequest)){window.location=window.location;}
	if(W==1)
		{
		X=gid('cap');
		X.replaceChild(ctn('Tails Sliding Puzzle'),X.firstChild);
		X=gid('con');
		X.replaceChild(body,win);
		}
	Req=new XMLHttpRequest();
	Req.open('POST','../xml.php',true);
	Req.onreadystatechange=function()
		{
		if(Req.readyState==4)
			{
			Res=Req.responseXML;
			for(i=0;i<16;i++)
				{
				gtni('img',i).src=_pre[gtni(Res,'piece',i).getAttribute('index')].src;
				}
			Req.abort();
			}
		}
	Req.send(null);
	E=15;
	W=0;
	}