
var moves0 = new Array(52,36,12,28,61,34,5,26,50,42,3,12,62,45,11,19,51,43,6,21,59,52,4,6,71,5,58,30,15,23,30,39,2,20,34,41,20,41,48,41,1,18,57,51,12,20,41,33,26,17,39,21,20,21,51,34,21,20,45,39,18,12,54,38,12,22,39,22,13,22,60,62,127,61,5,37,55,47,0,5,34,17,8,17,53,45,20,21,62,54,10,18,61,53,17,25,52,44,23,31,54,46,21,30,56,60,6,15,44,52,5,7,52,44,15,6,53,55,31,38,47,38,37,45,46,45,30,44,45,44,7,55,60,56,55,47,44,52,47,55,52,44,55,47 );
var names0 = new Array();
var base0 = -1;
var pieces = "KQNBR ";

var moves1 = new Array(52,36,12,28,62,45,1,18,51,35,28,35,61,34,5,26,50,42,3,12,60,62,127,61,35,42,57,42,11,19,42,27,12,11,49,33,18,33,27,33,26,33,45,30,6,23,58,49,4,5,59,41,11,12,30,13,23,13,41,33,13,28,53,37,28,34,33,34,12,13,34,42,2,20,37,29,20,34,61,37,9,25,36,28,19,28,42,28,15,23,56,60,7,15,29,21,14,30,37,29,8,24,28,26,5,6,29,30,23,30,26,30,6,5,49,35,34,20,30,26,5,6,26,30,6,5,35,26,5,4,30,27,0,16,27,9,13,31,21,13,4,13,60,61,13,22,9,36,20,29,36,4,15,13,4,6,22,21,54,38,16,0,6,0,31,38,62,63,13,11,26,40,21,13,0,18,11,59,18,25,38,36,63,62,13,22,25,49,36,38,49,54,38,54,62,54,29,47,54,47,59,61,40,12,24,32,48,40,61,29 );
var names1 = new Array();
var base1 = -1;
var pieces = "KQNBR ";

var moves2 = new Array(52,36,12,28,62,45,1,18,51,35,28,35,61,34,5,33,50,42,35,42,60,62,127,61,11,19,48,40,33,26,49,33,26,17,59,41,3,21,57,42,2,20,42,27,20,27,34,27,6,12,58,30,21,22,30,12,4,12,40,32,8,24,33,25,0,1,45,39,22,21,39,29,12,5,56,58,18,28,62,63,15,31,54,46,14,22,29,39,28,38,55,47,22,30,39,45,10,18,27,34,7,15,63,54,5,14,34,52,38,28,45,30,21,30,53,37,30,22,37,28,22,36,52,45,36,44,41,57,14,7,58,60,44,30,47,39,30,14,45,36,15,23,61,29,19,28,29,30,14,5,57,58,17,3,30,28,3,21,28,29,1,4,25,18,9,18,29,24,7,14,24,26,4,20,58,34,5,12,60,44,12,8,44,52,20,19,32,24,19,59,36,45,21,35,26,30,23,22,34,18,35,21,30,22,13,22,18,17,8,13,52,50,59,11,45,18,13,20,54,55,11,35,17,8,14,23,18,45,20,44,8,13,35,51,50,51,44,51,55,47,51,53,45,54,21,35,13,37,23,14,54,36,35,8,36,43,8,35,43,34,14,15,24,16,15,14,37,36,53,21,36,37,35,17,47,54,17,35,34,43,35,8,54,55,21,49,55,47,49,21,37,36,8,35,36,27,35,8,43,34,8,35,27,6,14,23,34,43,35,8,43,36,8,35,6,2,23,14,2,11,14,23,36,54,21,53,11,25,23,14,54,36,53,21,25,43,21,20,47,55,20,48,36,54,48,53,55,47,53,21,54,45,21,20,47,55,20,44,43,59,44,53,45,54,35,28,59,43,53,35,43,36,35,36,54,36,28,1,55,54,14,21,54,45,1,8,36,18,8,17,18,4,17,8,45,36,8,17 );
var names2 = new Array();
var base2 = -1;
var pieces = "KQNBR ";

var moves3 = new Array(52,36,12,28,61,34,5,26,50,42,3,12,51,43,11,19,62,45,26,17,60,62,127,61,2,38,58,44,1,11,57,51,6,21,55,47,38,31,59,50,31,45,51,45,21,31,48,32,8,24,34,48,15,23,44,17,11,17,62,55,14,30,54,46,17,11,45,62,12,21,43,35,21,22,62,45,31,21,45,51,23,31,55,54,9,17,50,43,4,6,71,5,54,55,6,7,56,60,19,27,48,57,0,4,43,25,10,18,25,41,27,36,35,28,11,28,53,37,30,37,61,37,4,3,51,61,3,43,41,17,28,45,37,45,43,45,17,35,7,15,55,54,5,4,35,62,31,39,46,38,21,27,62,35,27,37,54,63,37,47,61,55,47,53,63,62,39,47,62,61,53,43,61,52,18,26,35,62,45,53,62,53,43,53,52,53,22,19,55,45,19,37,60,36,4,36,57,36,15,14,36,18,47,55,53,54,37,23,45,55,23,18,55,45,18,32,54,46,32,41,45,35,26,35 );
var names3 = new Array();
var base3 = -1;
var pieces = "KQNBR ";

var moves4 = new Array(52,36,12,28,62,45,1,18,51,35,18,35,45,35,28,35,59,35,6,12,61,34,12,18,35,27,3,21,57,42,5,33,58,51,11,19,34,25,2,11,27,34,33,26,60,62,127,61,4,6,71,5,34,43,18,28,43,46,11,25,42,25,10,18,25,42,28,34,51,30,21,22,49,41,13,21,30,58,22,46,55,46,26,35,41,34,35,42,56,57,9,17,61,59,0,4,57,41,42,24,53,45,21,29,36,29,4,52,46,38,52,50,58,37,50,34,37,19,5,4,41,40,15,23,19,10,4,12,59,3,6,15,3,2,34,58,62,55,12,60,55,47,60,63,10,55,24,42,45,37,42,51,54,46,51,24,40,44,58,50,38,30,63,55,47,38,23,31,38,45,55,53,45,36,14,22,2,10,15,6,36,28,50,26,28,21,26,29,21,22,29,5,10,14,6,7,22,23,24,33,44,20,5,29,14,15,7,6,20,22,6,5,22,18,29,26,18,21,5,4,30,22,26,42,46,38,33,5,21,5,4,5,22,14,5,13,15,7,42,18,23,15 );
var names4 = new Array();
var base4 = -1;
var pieces = "KQNBR ";
var nMoves = new Array(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 == basename )
			return i;
	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++ )
			if (( moves[i] & 0x40 ) == 0x40 )
				off = off+1;
		var result = (Math.floor((nMoves[nm]-off)/2)+1).toString() + ". ";
		if ( (nMoves[nm]-off+1)%2 == 0 ) 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 "";
}
