

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

var names0 = new Array();

var base0 = -1;

var pieces = "KQNBR ";



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

var names1 = new Array();

var base1 = -1;

var pieces = "KQNBR ";



var moves2 = new Array(52,36,6,21,36,28,21,27,51,35,11,19,62,45,14,22,61,34,27,17,34,41,5,14,59,52,4,6,71,5,55,47,1,18,57,42,19,28,35,28,18,35,45,35,3,35,53,37,2,20,58,44,35,11,60,62,127,61,11,18,52,25,18,25,42,25,20,41,48,41,17,27,44,8,9,17,50,34,27,44,25,10,44,61,10,0,5,0,62,61,22,30,56,32,30,37,8,17,0,1,17,35,1,41,32,0,14,5,34,26,41,33,35,42,33,34,0,2,12,20,26,18 );

var names2 = new Array();

var base2 = -1;

var pieces = "KQNBR ";



var moves3 = new Array(52,36,6,21,36,28,21,27,51,35,11,19,62,45,14,22,61,34,27,17,34,41,5,14,59,52,19,27,60,62,127,61,4,6,71,5,48,32,8,24,50,42,12,20,58,30,13,21,28,21,14,21,30,23,5,4,45,28,1,18,53,37,2,11,57,51,3,12,51,45,0,3,28,38,21,14,23,30,12,5,30,3,18,3,38,28,3,13,45,30,13,3,41,50,14,28,37,28,5,14,61,21,4,12,56,61,11,4,21,5,14,5,61,5,6,5,52,53,5,6,53,21,17,2,55,39 );

var names3 = new Array();

var base3 = -1;

var pieces = "KQNBR ";



var moves4 = new Array(52,36,6,21,36,28,21,27,51,35,11,19,62,45,2,38,61,52,1,18,28,20,13,20,50,42,3,11,60,62,127,61,27,21,61,60,38,29,57,40,15,23,45,39,4,2,64,3,39,29,20,29,35,27,18,28,53,37,28,13,52,25,10,18,27,18,9,18,25,16,2,10,59,41,19,27,41,9,10,19,9,33,19,10,58,44,12,28,33,9,10,19,37,28,13,28,44,37,21,36,40,34,19,20,34,28,11,9,16,9,5,26,62,61,14,30,28,43,30,37,43,26,20,19 );

var names4 = new Array();

var base4 = -1;

var pieces = "KQNBR ";



var moves5 = new Array(52,36,6,21,36,28,21,27,51,35,11,19,62,45,19,28,45,28,1,11,28,13,4,13,59,31,13,20,50,34,27,21,35,27,20,19,31,13,11,17,57,42,3,4,58,37,19,11,13,20,11,3,20,28,4,11,60,58,120,59,21,38,28,60,11,29,37,46,14,22,61,43,5,23,58,57,29,21,55,47,23,14,47,38,2,38,59,51,38,29,63,39,22,30,39,36,0,2,60,52,15,23,36,28,29,43,52,43,17,11,28,20,11,26,43,50,26,20,27,20,3,4,42,27,21,20,51,52,20,13,52,12,13,12,27,12,4,12,50,36,12,13,36,27,13,22,27,36,22,13,36,9,7,4,46,10,13,6,34,26,4,60,57,50,2,5,10,46,60,52,50,43,52,49,9,27,6,7,26,18,49,57,27,20,5,3,43,50,3,59,20,44,59,60,18,10,57,49,50,43,60,59,43,36,49,50,44,8,59,58,36,29,50,18,48,32,7,15,32,24,18,34,8,17,14,42,46,19,42,35,17,9,35,14,29,20 );

var names5 = new Array();

var base5 = -1;

var pieces = "KQNBR ";



var moves6 = new Array(52,36,6,21,36,28,21,27,50,34,27,17,51,35,11,19,53,37,19,28,37,28,1,18,58,44,2,29,57,42,12,20,61,52,3,11,62,45,4,2,64,3,59,51,18,24,49,41,5,33,60,62,127,61,10,26,56,59,26,35,45,35,24,18,35,18,9,18,51,58,11,12,34,26,33,26,42,32,17,32,41,32,3,59,61,59,26,44,58,44,12,10,62,63,2,1,52,45,7,3,44,41,1,2,59,58,3,43,41,33,13,21,28,21,14,21,45,18,43,19,33,26,29,36,18,9 );

var names6 = new Array();

var base6 = -1;

var pieces = "KQNBR ";



var moves7 = new Array(52,36,6,21,36,28,21,27,51,35,11,19,62,45,2,38,61,52,12,20,60,62,127,61,5,12,50,34,27,17,57,42,4,6,71,5,58,44,19,27,34,26,38,45,54,45,17,2,45,37,12,39,52,43,14,22,37,29,20,29,59,45,10,18,62,63,6,7,61,62,1,16,43,29,2,12,29,50,12,6,45,47,16,10,62,38,39,12,56,62,3,11,53,37,0,4,37,29,12,3,42,52,9,17,52,37,22,30,47,15,7,15,29,21,15,23,38,39,30,39,37,20,23,31,50,59 );

var names7 = new Array();

var base7 = -1;

var pieces = "KQNBR ";



var moves8 = new Array(52,36,6,21,36,28,21,27,51,35,11,19,62,45,2,38,61,52,12,20,60,62,127,61,5,12,50,34,27,17,57,42,4,6,71,5,58,44,1,18,28,19,10,19,35,27,20,27,42,27,17,27,59,27,12,21,56,59,21,49,27,25,49,21,34,26,19,27,25,9,0,2,44,37,5,4,52,16,4,36,37,46,36,33,16,25,38,45,54,45,18,35,59,35,21,35,26,18,35,17,25,16,2,10,46,10,3,10,9,0,10,3,0,3,17,3,61,59,27,35,48,40,33,32,16,25,32,40,59,60 );

var names8 = new Array();

var base8 = -1;

var pieces = "KQNBR ";



var moves9 = new Array(52,36,6,21,36,28,21,27,51,35,11,19,62,45,10,18,61,52,19,28,45,28,1,11,28,45,14,22,60,62,127,61,5,14,50,34,27,10,57,42,4,6,71,5,55,47,12,28,58,30,3,4,35,28,10,20,30,39,11,28,42,36,28,45,52,45,13,29,36,19,4,11,61,60,14,49,56,57,49,21,39,21,5,21,19,9,11,10,9,19,2,16,34,26,6,5,59,51,0,3,51,42,10,14,42,24,14,10,24,42,10,14,42,24,14,10,24,16,20,26,16,40,10,19,60,59,26,43,59,43 );

var names9 = new Array();

var base9 = -1;

var pieces = "KQNBR ";

var nMoves = new Array(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 "";

}


