
var moves0 = new Array(54,46,11,27,61,54,6,21,62,45,10,18,49,41,2,38,58,49,12,20,51,43,1,11,60,62,127,61,5,19,57,51,4,6,71,5,50,34,8,24,48,40,5,4,55,47,38,31,59,50,20,28,52,36,27,36,43,36,3,17,49,42,19,26,50,49,31,45,54,45 );
var names0 = new Array();
var base0 = -1;
var pieces = "KQNBR ";

var moves1 = new Array(50,34,12,20,51,35,11,27,57,42,6,21,62,45,27,34,52,36,5,33,58,30,10,26,61,34,26,35,45,35,33,42,49,42,3,24,34,25,2,11,30,21,14,21,59,41,8,16,25,52,1,18,60,62,127,61,24,10,56,57,18,24,41,40,0,2,61,59,10,26,40,26,2,26,42,34,26,10,35,41,24,34,52,34,10,34,41,24,34,10,57,9,10,9,24,9,4,12,9,26,11,25,48,32,7,2 );
var names1 = new Array();
var base1 = -1;
var pieces = "KQNBR ";

var moves2 = new Array(52,36,10,18,51,35,11,27,57,51,27,36,51,36,2,29,36,46,29,22,55,39,15,23,62,45,6,21,45,28,22,15,61,43,15,43,59,43,1,11,53,37,12,20,58,51,5,19,60,58,120,59,4,6,71,5,58,57,3,10,43,45,0,3,50,34,18,26,28,11,3,11,35,27,20,27,34,27,5,4,51,42,19,37,46,29,37,28,27,19,10,17,42,28,4,28,29,14,11,19,45,46,21,38,46,38,19,22,38,2,6,14,59,3,17,21,54,38,28,52 );
var names2 = new Array();
var base2 = -1;
var pieces = "KQNBR ";

var moves3 = new Array(50,34,12,20,51,35,11,27,57,42,6,21,34,27,20,27,58,30,5,12,52,44,4,6,71,5,61,43,1,11,62,45,5,4,60,62,127,61,11,5,55,47,10,18,59,50,21,31,30,12,3,12,56,57,2,20,49,33,0,2,61,58,14,22,33,25,18,26,35,26,2,26,50,32,4,2,42,52,26,58,52,58,2,42,32,59,5,11,59,51,12,40,58,41,42,2,45,35,11,28,43,52,31,21,51,24,40,24,41,24,2,10,25,17,8,17,57,17,10,58,62,55,58,56,17,49,9,17,35,50,56,48,49,48,17,24,48,24,21,36,55,62,6,14,50,35,36,42,52,61,14,21,54,38,28,11,53,45,42,59,24,40,59,49,62,53,15,31,40,8,31,38,47,38,11,28,38,30 );
var names3 = new Array();
var base3 = -1;
var pieces = "KQNBR ";

var moves4 = new Array(52,36,12,20,51,35,11,27,36,28,10,26,50,42,1,18,62,45,3,17,61,52,26,35,42,35,6,23,57,42,23,29,42,32,17,24,58,51,5,33,51,42,8,16,54,38,29,12,60,62,127,61,33,42,32,42,13,21,59,51,4,6,71,5,52,43,2,11,56,60,21,28,45,28,18,28,60,28,5,13,61,59,12,18,28,31,14,22,31,47,24,3,43,52,3,5,51,44,0,4,47,45,20,28,45,13,5,13,35,28,4,28,44,46,13,20,52,45,27,35,42,32,9,25,32,17,11,4,48,32,6,14,62,54,18,33,59,35,33,50,35,59,50,60,59,60,28,60,46,10,20,12,10,2,25,32,17,27,12,20,2,9,4,13,27,44,20,21,9,10,15,23,55,39,60,44,53,44,21,49,54,46,49,41,10,28,14,6,39,31,22,31,28,35,41,1,46,47,31,39 );
var names4 = new Array();
var base4 = -1;
var pieces = "KQNBR ";

var moves5 = new Array(51,35,11,27,50,34,27,34,52,36,6,21,36,28,21,27,61,34,27,17,34,41,1,18,62,52,2,29,57,42,12,20,60,62,127,61,3,11,48,40,4,2,64,3,58,44,15,31,41,48,31,39,49,33,13,21,28,21,14,21,52,37,5,23,35,27,23,37,44,37,20,27,56,58,18,28,59,35,29,47,53,45,7,6,58,50,11,29,50,52,28,18,35,51,17,34,51,58,18,35,52,53,35,20,42,27,3,27,48,34,20,37,34,27,6,54,53,54,47,54,61,60,29,30,27,20,2,1,20,38,37,52,62,54,39,47,54,53,30,58,60,58,52,58,38,47,8,24,47,29,24,33,40,33,58,48,55,39,48,33,39,31,33,18,31,23,18,28,23,15,28,13,29,20,13,7,53,44,10,26,44,36,1,10,36,29,10,19,29,21,9,25,20,48,26,34,21,14,19,12,14,7,12,5,45,37,5,13,48,57,13,5,57,36,25,33,36,27,33,41,27,34,41,49,34,48 );
var names5 = new Array();
var base5 = -1;
var pieces = "KQNBR ";

var moves6 = new Array(52,36,12,20,51,35,11,27,57,51,10,26,36,27,3,27,62,45,26,35,61,34,27,19,60,62,127,61,6,21,51,41,1,18,61,60,2,11,58,30,4,2,64,3,59,52,19,10,41,35,18,35,45,35,5,19,55,47,15,23,30,51,2,1,51,42,21,36,52,36,10,34,56,59,20,28,35,18,34,18,36,18,11,18,59,19,3,19,42,28,7,3,60,59,1,10,50,34,13,21,28,46,18,54,59,19,3,19,34,26,54,47,46,19,10,18,19,5,47,20,48,40,14,22 );
var names6 = new Array();
var base6 = -1;
var pieces = "KQNBR ";

var moves7 = new Array(52,36,12,20,51,35,11,27,57,42,6,21,58,30,5,33,36,28,15,23,28,21,23,30,21,14,7,6,55,39,1,18,39,31,6,14,31,23,14,15,59,43,13,29,60,58,120,59,3,21,54,38,33,42,49,42,15,23,63,23,21,23,38,29,30,38,58,57,20,29,59,60,2,20,43,29,4,11,29,43,0,5,53,45,38,46,61,54,20,29,43,52,8,16,57,49,18,24,52,12,11,2,54,61,46,54,61,54,24,34,49,56,29,11,54,47,11,47,62,47,2,1,47,30,5,2,56,57,23,39,30,13,39,37,13,28,34,28,35,28,37,45,12,26,9,17,26,35,10,26,35,51,2,4,28,20,45,29,51,55 );
var names7 = new Array();
var base7 = -1;
var pieces = "KQNBR ";

var moves8 = new Array(52,36,14,22,51,35,5,14,57,42,11,19,58,44,8,16,59,51,1,11,53,45,12,28,55,39,15,31,61,34,6,21,62,47,9,25,34,41,28,35,51,35,4,6,71,5,35,51,10,26,48,32,26,34,41,48,25,33,42,52,33,41,50,41,34,41,48,41,0,1,41,48,21,36,45,36,1,49,51,59,11,28,47,53,2,38,44,51,14,21,60,62,127,61,21,39,53,38,28,38,51,42,39,30,52,37,30,37,61,37,49,54,62,54,38,44,54,55,44,59,56,59,3,10,59,43,19,27,36,28,27,35,37,35,10,28,55,47,6,15,48,27,28,52,43,46,13,29,27,45,52,20,47,55,5,2,35,43,31,39,46,47,22,30,45,54,29,37,43,27,15,22,47,43,2,42,43,42,30,38,54,36,20,36 );
var names8 = new Array();
var base8 = -1;
var pieces = "KQNBR ";
var nMoves = new Array(0,0,0,0,0,0,0,0,0);
var EmptyWhitePath = "../gif/w.gif";
var EmptyBlackPath = "../gif/b.gif";
// Copyright 98,99 by ChessBase GmbH, Germany
function SyncPicture( base, basename )
{	if ( base > -1 ) return base;
	for ( i=0; i < document.images.length; i++ )
	{	if ( document.images[i].name != "" )
			if ( document.images[i].name == basename )
				return i;
			else
				i+= 63;
	}
	return -1;
}
function MoveForward5( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	for ( i=0; nMoves[nm] < moves.length / 2 && i < 10; i++ )
		MoveForward( moves, names, nm, base );
	return base;
}
function MoveBack5( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	for ( i=0; nMoves[nm] > 0 && i < 10; i++ )
		MoveBack( moves, names, nm, base );
	return base;
}
function GoStart( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	while ( nMoves[nm] > 0 )
		MoveBack( moves, names, nm, base );
	return base;
}
function GoEnd( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	while ( nMoves[nm] < moves.length / 2 )
		MoveForward( moves, names, nm, base );
	return base;
}
function MoveForward( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	if ( nMoves[nm] < moves.length / 2 )
	{	var n = nMoves[nm]*2;
		var from = moves[ n ] & 0x3f;
		var to = moves[ n+1 ] & 0x3f;
		names[ n   ] = document.images[ base + from ].src;
		names[ n+1 ] = document.images[ base + to ].src;
		var len = names[n].length;
		var nn = (Math.floor(( to / 8 )) + ( to % 8 ));
		var dest = ( nn % 2 ) == 1 ? "b" : "w";
		var piece = names[n].substring(len-6,len-5);
		if (( moves[ n ] & 0x380 ) == 0x80 )
			piece = "q";
		else if (( moves[ n ] & 0x380 ) == 0x100 )
			piece = "n";
		else if (( moves[ n ] & 0x380 ) == 0x180 )
			piece = "b";
		else if (( moves[ n ] & 0x380 ) == 0x200 )
			piece = "r";
		document.images[ base + to ].src = names[n].substring(0,len-6) + piece + dest + names[n].substring(len-4,len);
		nn = (Math.floor(( from / 8 )) + ( from % 8 ));
		if (( nn % 2 ) == 1 )
			document.images[ base + from ].src = EmptyBlackPath;
		else
			document.images[ base + from ].src = EmptyWhitePath;
		nMoves[nm]++;
		if ( nMoves[nm] < moves.length / 2 && ( moves[ nMoves[nm]*2 ] & 0x40 ) == 0x40 )
			MoveForward( moves, names, nm, base );
	}
	return base
}
function MoveBack( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	if ( nMoves[nm] > 0 )
	{	nMoves[nm]--;
		var from = moves[ nMoves[nm]*2 ] & 0x3f;
		var to = moves[ nMoves[nm]*2+1 ] & 0x3f;
		document.images[ base + from ].src = names[ nMoves[nm]*2 ];
		document.images[ base + to ].src = names[ nMoves[nm]*2+1 ];
		if (( moves[ nMoves[nm]*2 ] & 0x40 ) == 0x40 )
			MoveBack( moves, names, nm, base );
	}
	return base;
}
function GetMoveString( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	if ( nMoves[nm] > 0 && nMoves[nm] <= moves.length / 2 )
	{	var n = (nMoves[nm]-1)*2;
		var from = moves[ n ] & 0x3f;
		var to = moves[ n+1 ] & 0x3f;
		var len = document.images[ base + to ].src.length;
		var piece = document.images[ base + to ].src.substring(len-6,len-5);
		if ( piece == "q" )
			piece = pieces.substring(1,2);
		else if ( piece == "r" )
			piece = pieces.substring(4,5);
		else if ( piece == "b" )
			piece = pieces.substring(3,4);
		else if ( piece == "n" )
			piece = pieces.substring(2,3);
		else if ( piece == "k" )
			piece = pieces.substring(0,1);
		else piece = pieces.substring(5,6);
		var piece2 = "";
		if (( moves[ n ] & 0x380 ) == 0x80 )
			piece2 = pieces.substring(1,2);
		else if (( moves[ n ] & 0x380 ) == 0x100 )
			piece2 = pieces.substring(2,3);
		else if (( moves[ n ] & 0x380 ) == 0x180 )
			piece2 = pieces.substring(3,4);
		else if (( moves[ n ] & 0x380 ) == 0x200 )
			piece2 = pieces.substring(4,5);
		var lines = "abcdefgh";
		var rows = "87654321";
		var fromLine = from%8;
		var fromRow = Math.floor(from/8);
		var toLine = to%8;
		var toRow = Math.floor(to/8);
		var off=1;
		for ( i=0; i <= n; i += 2 )
			if (( moves[i] & 0x40 ) == 0x40 )
				off = off+1;
		var result = (Math.floor((nMoves[nm]-off)/2)+1).toString() + ". ";
		if ( document.images[ base + to ].src.substring(len-7,len-6) == "b" )
			result = result + "... ";
		if ( n >= 2 && (( moves[n] & 0x40 ) == 0x40 ))
		{	if (( moves[n-1] == 62 ) || ( moves[n-1] == 6 ))
				result = result + "0-0"
			else if (( moves[n-1] == 2 + 7 * 8 ) || ( moves[n-1] == 2 + 0 * 8 ))
				result = result + "0-0-0"
			else
			{	var sep = "x";
				from = moves[ n-2 ] & 0x3f;
				to = moves[ n-1 ] & 0x3f;
				fromLine = from%8;
				fromRow = Math.floor(from/8);
				toLine = to%8;
				toRow = Math.floor(to/8);
				result = result	+ lines.substring( fromLine, fromLine+1 ) + rows.substring( fromRow, fromRow+1 )
										+ sep
										+ lines.substring( toLine, toLine+1 ) + rows.substring( toRow, toRow+1 )
										+ piece2 + " ep";
			}
		}
		else
		{	var len = names[ n+1 ].length;
			var substr = names[ n+1 ].substring( len-6, len );
			var sep = (( substr == "/w.gif" ) || ( substr == "\\w.gif" ) ||
						  ( substr == "/b.gif" ) || ( substr == "\\b.gif" )) ? "-" : "x";
			if ( piece2 != "" ) piece = "";
			result = result + piece.toUpperCase() + lines.substring( fromLine, fromLine+1 ) + rows.substring( fromRow, fromRow+1 )
				+ sep
				+ lines.substring( toLine, toLine+1 ) + rows.substring( toRow, toRow+1 )
				+ piece2;
		}
		return result;
	}
	return "";
}

