var iMoves, bmvs, emvs, timerID, iTime;
var mvs = new Array(1000);
var hs = new Array(8);
var vs = new Array(8);
var ts = new Array(8);
var hs1 = new Array(8);
var vs1 = new Array(8);
var ts1 = new Array(8);
var hs5 = new Array(1, 2, 3, 4, 5, 6,  7, 8);
var vs5 = new Array(1, 0, 0, 0, 5, 0, 10, 0);
var ts5 = new Array(3, 0, 0, 0, 7, 0, 10, 0);
var fe = new Array(1,2,3,1,2,3,1,2,3,1,2,3,5,3,1,2,5,5,1,2,5,3,6,5,2,5,7,1,1,1);

document.oncontextmenu = disableRightClick;

function disableRightClick()
{
  alert('Source code is COPYRIGHTED. Please, do not reproduce.');
  return false;
}

function doLoad()
{
	var i;

	for (i=0; i<8; i++)
 	{
		hs[i] = hs5[i];
		vs[i] = vs5[i];
		ts[i] = ts5[i];
 	}
 	bmvs = 0;
	emvs = 0;
	iTime = 1;
	iMoves = 0;
	gmvs = 0;

	for (i = 1; i < 9; i++) 
	{
	  document.getElementById("P" + i).src = "images/" + hs[i - 1] + ".gif";
	}
	document.getElementById("P10").src = "images/" + vs[6] + ".gif";
}

function check()
{
	for (var i=0; i<8; i++)
		if (hs[i] != hs5[i])
			return 0;
	return 1;
}

function savePosition()
{
	for (var i=0; i<8; i++)
	{
		hs1[i] = hs[i];
		vs1[i] = vs[i];
		ts1[i] = ts[i];
	}
}

function restorePosition()
{
	for (var i=0; i<8; i++)
	{
		hs[i] = hs1[i];
		vs[i] = vs1[i];
		ts[i] = ts1[i];
	}
}

function doSubmit(action)
{
	bmvs = 0;
	pmove1(action);
	Movement();
  emvs = 0;
}

function doStart()
{
	if (check())
	{
		doLoad();
		savePosition();
		Mixed();
		restorePosition();
		ShowMoves();
	}
}

function doStep()
{
	if (!check())
	{
		if (bmvs)
		{
			pmove1(mvs[bmvs]);
			Movement();
			bmvs++;
		}
		else
		{
			emvs = 0;
			savePosition();
			while (!check())
				auto21();
			restorePosition();
			pmove1(mvs[0]);
			Movement();
			bmvs = 1;
		}
	}
}

function doAuto()
{
	bmvs = 0;
	emvs = 0;
	savePosition();
	while (!check())
		auto21();
	restorePosition();
	ShowMoves();
}


function ShowMoves()
{
	if (iMoves < emvs)
	{
		pmove1(mvs[iMoves]);
		for(var i=0; i<8; i++)
		  document.all["P" + (i + 1)].src = "images/" + hs[i] + ".gif";
		document.all["P10"].src = "images/" + vs[6] + ".gif";
		iMoves++;
		timerID = window.setTimeout('ShowMoves()',50);
	}
	else
	{
		iMoves = 0;
		emvs = 0;
	}
}

function Movement()
{
	if (iTime < 9)
	{
	  document.all["P" + iTime].src = "images/" + hs[iTime - 1] + ".gif";
		iTime++;
		timerID = window.setTimeout('Movement()',50);
	}
	else
	{
	  document.all["P10"].src = "images/" + vs[6] + ".gif";
		window.clearTimeout(timerID);
		iTime = 1;
	}
}

function rand()
{
	return Math.round(100 * Math.random());
}

function Mixed()
{
	var d, tscr, tmscr1, i, j, k, m;

	d = new Date();
	tscr = d.getSeconds();
	tmscr1 = d.getMilliseconds();

	tscr *= 100;
	tscr += tmscr1;
	k = tscr % 13;
	m = tscr %  9;
	for (i=0; i<=k; i++)
		rand();
	for (emvs=0; emvs<20; emvs++)
	{
		for (j=0; j<=m; j++)
			i = rand();
		i %= 8;
		if (i == 4 || i == 0) i++;
		if (emvs)
		{
			switch (i)
			{
				case 7:
					if (mvs[emvs-1] == 7)
					{
						emvs--;
						mvs[emvs] = 3;
					}
					break;
				case 3:
					if (mvs[emvs-1] == 3)
					{
						emvs--;
						mvs[emvs] = 7;
					}
					break;
				case 6:
					if (mvs[emvs-1] == 6)
					{
						emvs--;
						mvs[emvs] = 2;
					}
					break;
				case 2:
					if (mvs[emvs-1] == 2)
					{
						emvs--;
						mvs[emvs] = 6;
					}
					break;
				default:
					if ((i == 5 && mvs[emvs-1] == 1) ||
							(i == 1 && mvs[emvs-1] == 5) ||
							(i == 2 && mvs[emvs-1] == 6) ||
							(i == 6 && mvs[emvs-1] == 2) ||
							(i == 3 && mvs[emvs-1] == 7) ||
							(i == 7 && mvs[emvs-1] == 3))
						emvs--;
				}
		}
		mvs[emvs] = i;
		pmove1(i);
	}
}

function auto21()
{
	var i, j, k;

	center();
 	j = 0;
 	for (i = 0; i < 8; i++)
   	if (!(i&1))
     	if (hs[i]&1) j++;
 	if (j != 4)
	{
		if (j == 0)
			pmove(5,1);
    else
		{
			if (j == 3)	pmove(5,1);
			if (j == 2)
			{
				k = 0;
				while (!(hs[k]&1))
					k += 2;
				if (k == 0)	pmove(6,1);
				if (k == 2)	pmove(3,1);
				if (k == 4)	pmove(2,1);
				if (k == 6)	pmove(7,1);
				while (!(hs[1]&1))
					pmove(5,2);
				if (hs[3]&1)
				{
					pmove(1,1);
					pmove(2,1);
				}
				else
				{
					if (hs[5]&1)
					{
						pmove(1,1);
						pmove(7,1);
					}
					else
					{
						pmove(1,1);
						pmove(2,1);
					}
				}
				pmove(5,1);
				return;
			}
			for (i = 0; i < 8; i++)
				if ((!(i&1)) && (hs[i]&1))
					break;
			if (i) pmove(1,i);
			pmove(6,1);
			pmove(5,1);
			k = 0;
			while (hs[k]&1)
				k +=2;
			if (k == 0)	pmove(6,1);
			if (k == 2)	pmove(3,1);
			if (k == 4)	pmove(2,1);
			if (k == 6) pmove(7,1);
			return;
		}
	}
 	k = 0;
 	while (hs[0] != 1)
		pmove(5, 2);
	if (hs[2] != 3)
	{
		if (hs[4] == 3)
		{
			pmove(2,1);
			pmove(7,1);
			pmove(6,1);
		}
		else
		{
			pmove(2,1);
			pmove(3,1);
			pmove(6,1);
		}
	}
	if (hs[4] != 5)
	{
		pmove(6,1);
		pmove(3,1);
		pmove(2,1);
		pmove(5,2);
	}
	k = 1;
 	while (hs[k] != 2)
   	k += 2;
 	if (k != 1)
	{
    		if (k == 3)
		{
			pmove(5,1);
			pmove(2,1);
			pmove(7,1);
			pmove(6,1);
			pmove(1,1);
		}
		else
		{
			if (k == 5)
			{
				pmove(5,1);
				pmove(2,1);
				pmove(3,1);
				pmove(6,1);
				pmove(1,1);
			}
			else
			{
				pmove(5,1);
				pmove(6,1);
				pmove(7,1);
				pmove(2,1);
				pmove(1,1);
			}
		}
	}
	if (hs[3] != 4)
	{
		if (hs[5] == 4)
		{
			pmove(1,1);
			pmove(2,1);
			pmove(7,1);
			pmove(6,1);
			pmove(5,1);
		}
		else
		{
			pmove(1,1);
			pmove(2,1);
			pmove(3,1);
			pmove(6,1);
			pmove(5,1);
		}
	}
	if (hs[5] != 6)
		for (i=0; i<30; i++)
			pmove(fe[i],1);
	return(1);
}

function j5move1(n)
{
	var i,j,k;

	k=n;
	while(k)
	{
		j=hs[0];
		for(i=0;i<7;i++)
			hs[i]=hs[i+1];
		hs[7]=j;
		vs[0]=hs[0];
		vs[4]=hs[4];
		ts[0]=hs[2];
		ts[4]=hs[6];
		k -=1;
	}
	document.all["P1"].focus();
}

function j5move5(n)
{
	var i,j,k;

	k=n;
	while(k)
	{
		j=hs[7];
		for(i=7;i>0;i--)
		  hs[i]=hs[i-1];
		hs[0]=j;
		vs[0]=hs[0];
		vs[4]=hs[4];
		ts[0]=hs[2];
		ts[4]=hs[6];
		k -=1;
	}
	document.all["P5"].focus();
}

function j5move2(n)
{
	var i,j,k;

	k=n;
	while(k)
	{
		j=vs[0];
		vs[0] = vs[6];
		vs[6] = vs[4];
		vs[4] = j;
		hs[0] = vs[0];
		hs[4] = vs[4];
		ts[6] = vs[6];
		k -=1;
	}
	document.all["P2"].focus();
}

function j5move6(n)
{
	var i,j,k;

	k=n;
	while(k)
	{
		j=vs[4];
		vs[4] = vs[6];
		vs[6] = vs[0];
		vs[0] = j;
		hs[0] = vs[0];
		hs[4] = vs[4];
		ts[6] = vs[6];
		k -=1;
	}
	document.all["P6"].focus();
}

function j5move3(n)
{
	var i,j,k;

	k=n;
	while(k)
	{
		j = ts[4];
		ts[4] = ts[6];
		ts[6] = ts[0];
		ts[0] = j;
		hs[2] = ts[0];
		hs[6] = ts[4];
		vs[6] = ts[6];
		k -=1;
	}
	document.all["P3"].focus();
}

function j5move7(n)
{
	var i,j,k;

	k=n;
	while(k)
	{
		j=ts[0];
		ts[0] = ts[6];
		ts[6] = ts[4];
		ts[4] = j;
		hs[2] = ts[0];
		hs[6] = ts[4];
		vs[6] = ts[6];
		k -=1;
	}
	document.all["P7"].focus();
}

function pmove(i, n)
{
	var bSkip = false;
	eval("j5move" + i + "(" + n + ")");

  	for (var m=0; m<n; m++)
	{
		bSkip = false;
		if (emvs)
		{
			switch(i)
			{
				case 7:
					if (mvs[emvs-1] == 7)
					{
						mvs[emvs-1] = 3;
						bSkip = true;
					}
					break;
				case 3:
					if (mvs[emvs-1] == 3)
					{
						mvs[emvs-1] = 7;
						bSkip = true;
					}
					break;
				case 6:
					if (mvs[emvs-1] == 6)
					{
						mvs[emvs-1] = 2;
						bSkip = true;
					}
					break;
				case 2:
					if (mvs[emvs-1] == 2)
					{
						mvs[emvs-1] = 6;
						bSkip = true;
					}
					break;
				default:
					if ((i == 5 && mvs[emvs-1] == 1) ||
							(i == 1 && mvs[emvs-1] == 5) ||
							(i == 2 && mvs[emvs-1] == 6) ||
							(i == 6 && mvs[emvs-1] == 2) ||
							(i == 3 && mvs[emvs-1] == 7) ||
							(i == 7 && mvs[emvs-1] == 3))
					{
						emvs--;
						bSkip = true;
					}
			}
		}

		if (!bSkip)
		{
			mvs[emvs] = i;
			emvs++;
		}
	}
}

function center()
{
  var i, j;

  if (vs[6] != 10)
  {
		for (i = 0; i < 8; i++)
			if (hs[i] == 10)
				break;
		j = i;
		if (i&1)
		{
			pmove(5,1);
			i++;
			if (i == 8)	i = 0;
		}
		switch(i)
		{
			case 0:
				pmove(6,1);
				break;
			case 2:
				pmove(3,1);
				break;
			case 4:
				pmove(2,1);
				break;
			case 6:
				pmove(7,1);
				break;
		}
   	if (j&1) pmove(1,1);
	}
	return(1);
}

function pmove1(i)
{
	eval("j5move" + i + "(1)");
}
