
var moves0 = new Array(51,35,6,21,50,34,14,22,54,46,5,14,61,54,4,6,71,5,62,45,11,19,60,62,127,61,10,26,35,27,9,25,34,25,8,16,25,16,2,16,57,42,1,11,55,47,11,17,61,60,3,10,52,36,21,11,58,30,17,34,59,50,5,1,49,41,34,40,50,51,11,28,45,28,14,28,56,58,1,33,30,44,10,24,53,37,28,35,36,28,16,9,62,55,35,42,58,42,40,25,42,50,25,35,50,49,24,40,51,53,0,3,28,19,3,19,44,35,33,35,60,12,9,27,54,27,35,27,49,50,40,33,12,52,15,31,47,39,33,25,50,34,27,35,34,50,35,27,53,44,19,20,44,45,20,19,45,42,25,11,42,44,11,29,44,53,6,15,52,28,29,11,50,52,27,28,37,28,19,27,48,32,27,59,28,20,13,20,53,26,11,9,52,54,59,57,26,28,57,41,54,50,15,6,28,20,6,15,20,28,15,6,28,19,41,45,19,22,6,5,22,31 );
var names0 = new Array();
var base0 = -1;
var pieces = "KQNBR ";

var moves1 = new Array(51,35,6,21,62,45,14,22,54,46,5,14,61,54,4,6,71,5,50,34,10,26,35,27,9,25,34,25,11,19,57,42,8,16,25,16,2,16,60,62,127,61,1,11,59,50,3,10,61,59,5,1,55,47,11,17,45,51,21,11,56,57,17,2,49,41,10,24,58,49,26,34,49,56,34,41,51,41,24,10,41,35,1,57,50,57,0,1,57,58,14,35,59,35,16,52,62,55,52,16,58,23,11,5,35,32,10,17,42,36,13,21,56,21,12,21,36,21,6,13,32,37 );
var names1 = new Array();
var base1 = -1;
var pieces = "KQNBR ";

var moves2 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,34,25,8,16,52,44,11,19,57,42,14,22,48,32,5,14,59,41,16,25,61,25,2,11,56,40,4,6,71,5,62,52,1,16,60,62,127,61,16,10,25,34,0,1,41,50,11,2,49,41,2,16,58,51,3,2,50,43,2,9,44,36,21,11,53,37,11,17,42,25,16,25,32,25,1,0,40,0,5,0,51,42,14,42,52,42,0,40,36,28,9,0,28,19,12,19,42,36,10,4,55,47,40,56,61,56,0,56,62,53,13,29,36,30,4,10,30,20,56,8,53,46,8,9,20,3,9,0,3,20,0,9,20,10,9,10,43,44,6,13,44,60,15,31,46,55,13,14,60,24,10,9,24,42,14,15,42,21,9,11,21,5,17,2,55,46,2,17,46,55,17,2,55,62,2,17,62,63,11,10,63,55,10,11,5,1,17,2,25,17,11,4,34,61,4,60,1,10,2,12,17,9,60,61,10,12 );
var names2 = new Array();
var base2 = -1;
var pieces = "KQNBR ";

var moves3 = new Array(51,35,6,21,50,34,10,26,35,27,11,19,54,46,14,22,61,54,5,14,62,45,9,25,34,25,8,16,25,16,4,6,71,5,57,42,2,16,60,62,127,61,1,11,59,50,3,17,56,57,5,1,49,41,21,4,45,51,17,24,58,49,26,34,61,58,11,28,49,56,1,33,41,34,28,34,57,33,24,33,51,34,16,34,54,47,4,10,52,36,14,35,47,11,10,16,11,18,0,8,58,57,33,24,42,25,35,56,50,34 );
var names3 = new Array();
var base3 = -1;
var pieces = "KQNBR ";

var moves4 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,34,25,8,16,53,45,14,22,52,36,11,19,48,32,5,14,32,24,16,25,61,25,21,11,59,32,4,6,71,5,62,52,1,16,60,62,127,61,16,10,25,34,0,1,57,51,11,28,32,50,1,33,56,48,10,16,48,32,3,4,32,33,16,33,50,41,4,11,45,37,28,34,51,34,2,16,58,51,5,1,61,58,11,3,41,40,12,20,27,20,13,20,40,47,3,12,47,44,33,48,58,50,48,33,50,58,33,48,58,50,48,33,51,33,1,33,49,41,12,10,44,47,6,13,37,29,16,34,50,34,33,34,29,20,13,12,41,34,10,24,62,53,15,31,47,43,24,48,53,45,22,30,54,38,31,39,43,44,14,21,36,28,48,0,45,53,21,28,44,30,12,20,52,37,28,37,30,37,0,48,53,45,48,41,45,54,39,47,54,53,41,50,53,46,50,43 );
var names4 = new Array();
var base4 = -1;
var pieces = "KQNBR ";

var moves5 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,62,45,14,22,34,25,8,16,52,44,5,14,57,42,4,6,71,5,48,32,11,19,56,40,16,25,61,25,1,16,60,62,127,61,16,33,45,51,2,9,44,36,12,20,27,20,13,20,25,52,19,27,36,27,20,27,42,25,3,17,40,46,0,4,49,41,4,12,58,40,5,4,52,45,9,16,40,33,26,33,46,30,16,25,32,25,14,23,30,27,21,27,45,27,6,7,51,34,17,26,27,45,23,14,59,19,26,19,34,19,4,1,25,17,1,17,19,2,17,20,2,12,20,12,61,59,14,42,62,61,7,14,54,46,14,21,55,39,15,23,45,52,12,36,59,19,36,20,19,11,20,12,11,3,12,20,52,34,21,12,3,6,20,19,53,37,42,49,61,52,49,35,52,45,35,42,46,38,42,60,38,30,23,30,39,30,60,51,6,14,12,5,14,13,5,4,13,8,4,5,45,36,51,42,34,27,5,4,8,24,4,5,36,43,5,4,24,0,4,12,0,8,12,5,43,34,42,51,34,35,51,60,35,28,19,17,27,20,60,53,8,13,5,4,13,21 );
var names5 = new Array();
var base5 = -1;
var pieces = "KQNBR ";

var moves6 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,62,45,25,34,57,42,14,22,52,36,11,19,61,34,5,14,36,28,19,28,45,28,4,6,71,5,60,62,127,61,2,9,59,41,3,17,61,60,1,16,58,30,17,41,34,41,0,2,28,34,21,27,42,27,9,27,30,12,5,4,34,19,26,34,19,4,2,4,41,32,4,1,12,19,1,3,19,28,16,26,28,14,6,14,32,50,27,20,56,59,3,1,59,57,14,21,60,44,8,24,62,61,24,32,61,60,1,3,53,37,26,16,50,32,16,33,57,59,3,0,48,40,0,32,40,33,32,33,59,51,21,29,44,45,33,25,51,52,29,21,45,44,20,29,44,40,29,43,52,53,21,29,60,59,29,36,59,58,25,31,55,47,31,29,40,8,22,30,54,38,29,37,8,12,36,35,53,37,30,37,58,51,13,21,12,20,43,61,20,21,35,36,21,23 );
var names6 = new Array();
var base6 = -1;
var pieces = "KQNBR ";

var moves7 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,62,45,2,9,59,41,3,17,57,42,25,34,41,17,8,17,52,36,12,20,45,28,20,27,36,27,21,27,61,34,27,42,34,13,4,3,49,42,11,19,28,34,9,54,63,62,54,18,58,37,0,8,13,20,3,12,20,47,12,13,34,17,1,11,17,2,8,40,62,46,11,28,37,28,19,28,56,57,14,22,57,17,18,36,46,44,36,57,17,57 );
var names7 = new Array();
var base7 = -1;
var pieces = "KQNBR ";

var moves8 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,62,45,14,22,34,25,8,16,25,16,2,16,54,46,11,19,61,54,5,14,60,62,127,61,1,11,57,42,11,17,61,60,4,6,71,5,45,51,3,10,51,41,17,34,55,47,5,1,59,50,10,17,56,57,21,11,58,37,11,28,60,58,16,2,52,36,2,11,62,63,11,32,42,32,0,32,41,26,32,48,26,11,28,11,50,34,48,49,57,49,17,49,34,10,1,9,10,2,14,5,63,55,11,28,58,50,9,1,2,10,49,41,37,28,1,9,10,2,19,28,50,42,41,17,42,45,9,1,2,18,5,14,54,61,14,21,61,34,6,14,55,54,17,35,34,43,1,41,18,16,41,42,47,39,15,31,45,44 );
var names8 = new Array();
var base8 = -1;
var pieces = "KQNBR ";

var moves9 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,34,25,8,16,25,16,14,22,57,42,2,16,52,36,16,61,60,61,11,19,54,46,5,14,61,54,4,6,71,5,62,52,1,11,59,50,0,16,48,32,3,0,42,25,0,9,63,59,5,0,52,42,26,34,58,44,11,17,44,17,9,17,59,35,0,2,42,59,21,38,35,34,2,34,50,34,17,53,59,53,38,44,54,45,44,34,53,43,14,49,56,48,49,40,25,42,16,24,45,52,40,26,43,26,24,26,42,59,13,29,48,50,29,36,59,53,34,17,50,26,19,26,32,24,17,27,53,36,26,34,36,51,34,42,51,36,42,50,52,51,27,33,36,26,6,13,24,16,33,18,51,50,13,21,50,42,21,29,42,34,12,28,34,25,18,8,25,17,8,2,17,9,2,19,9,1,19,25 );
var names9 = new Array();
var base9 = -1;
var pieces = "KQNBR ";

var moves10 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,34,25,8,16,25,16,14,22,57,42,2,16,58,30,11,19,30,21,12,21,52,36,16,61,60,61,5,14,54,46,4,6,71,5,61,54,1,11,62,45,3,17,56,57,5,1,63,60,17,33,59,52,14,23,52,50,11,17,48,40,33,24,49,41,17,2,40,32,2,8,42,59,1,33,59,49,0,1,49,34,24,16,60,59,8,2,45,60,2,12,60,43,33,9,50,42,23,14,42,24,16,24,34,24,9,17,24,34,17,16,32,24,21,29,36,28,14,28,43,28,19,28,27,19,12,18,59,27,1,25,19,11,16,0,34,28,18,3,57,56,0,16,28,43,16,24,56,24,25,24,27,28 );
var names10 = new Array();
var base10 = -1;
var pieces = "KQNBR ";

var moves11 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,34,25,8,16,53,45,14,22,52,36,11,19,57,42,5,14,58,30,4,6,71,5,48,32,15,23,30,44,12,20,27,20,2,20,62,52,19,27,44,26,5,4,52,37,1,11,26,44,27,36,37,20,4,20,61,34,20,4,45,37,3,10,59,52,0,2,34,48,16,25,32,25,11,26,60,62,127,61,10,9,54,38,4,3,38,30,21,4,37,29,22,29,61,29,26,20,30,22,4,19,22,13,6,7,48,20,19,29,20,29,2,0,56,61 );
var names11 = new Array();
var base11 = -1;
var pieces = "KQNBR ";

var moves12 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,62,45,14,22,34,25,8,16,25,16,5,14,57,42,2,16,52,36,16,61,60,61,11,19,55,47,1,11,54,46,11,17,61,54,3,11,59,41,11,9,41,25,21,11,48,32,9,16,58,51,17,34,63,58,34,51,45,51,16,2,25,52,4,6,71,5,51,34,2,9,42,25,13,29,58,59,29,37,59,43,37,46,53,46,11,28,34,28,14,28,43,41,9,16,56,40,16,24,41,45,26,34,47,39,0,2,45,5,2,5,40,45,5,45,54,45,24,32,25,42,32,56,42,59,56,58,45,54,28,35,54,47,35,49,59,49,34,42,49,43,58,63,47,38,42,50,38,37 );
var names12 = new Array();
var base12 = -1;
var pieces = "KQNBR ";

var moves13 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,62,45,2,9,57,51,25,34,52,36,14,22,61,34,11,19,59,32,21,11,51,41,5,14,41,24,9,2,60,62,127,61,4,6,71,5,32,40,11,17,34,43,2,11,58,51,8,16,61,60,11,25,43,50,1,11,51,42,11,21,49,41,0,2,56,59,3,10,40,49,5,4,55,47,21,31,42,14,31,14,49,42,12,20,48,32,25,11,27,20,11,20,42,51,26,34,41,33,4,3,33,25,16,25,32,25,34,42,51,23,13,21,24,18,3,4,60,44,20,34,44,42,34,25,50,41,6,7,45,39 );
var names13 = new Array();
var base13 = -1;
var pieces = "KQNBR ";

var moves14 = new Array(51,35,6,21,50,34,10,26,35,27,9,25,57,51,25,34,52,36,34,42,49,42,14,22,42,34,11,19,61,43,5,14,56,57,4,6,71,5,62,45,12,28,51,41,21,31,60,62,127,61,31,37,58,37,28,37,59,51,22,30,54,46,2,38,62,54,1,11,46,37,38,45,54,45,3,21,37,29,11,28,45,54,30,38,43,52,14,23,51,42,23,37,55,47,15,31,47,38,31,38,61,63,6,14,57,62,5,7,41,58,7,63,62,63,0,7,63,7,14,7,58,43,21,23,43,37,23,37,42,44,37,44,53,44,7,14,54,46,13,21,52,38,28,34,46,53,34,28,38,52,14,5,53,60 );
var names14 = new Array();
var base14 = -1;
var pieces = "KQNBR ";
var nMoves = new Array(0,0,0,0,0,0,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 "";
}
