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