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

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

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

var moves4 = new Array(52,36,10,18,51,35,11,27,36,28,2,29,57,42,3,17,61,43,29,43,59,43,12,20,62,52,17,16,43,47,9,25,52,37,25,33,42,52,1,11 );
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 Init( path )
{ gifs = new Array(6);
	for ( var i=0; i< 26; i++)
		gifs[i]= new Image();
	gifs[0].src = path + "b.gif";
	gifs[1].src = path + "bbb.gif";
	gifs[2].src = path + "bbw.gif";
	gifs[3].src = path + "bkb.gif";
	gifs[4].src = path + "bkw.gif";
	gifs[5].src = path + "bqb.gif";
	gifs[6].src = path + "bqw.gif";
	gifs[7].src = path + "brb.gif";
	gifs[8].src = path + "brw.gif";
	gifs[9].src = path + "bnb.gif";
	gifs[10].src = path + "bnw.gif";
	gifs[11].src = path + "wbb.gif";
	gifs[12].src = path + "wbw.gif";
	gifs[13].src = path + "wrb.gif";
	gifs[14].src = path + "wrw.gif";
	gifs[15].src = path + "wqb.gif";
	gifs[16].src = path + "wqw.gif";
	gifs[17].src = path + "wkb.gif";
	gifs[18].src = path + "wkw.gif";
	gifs[19].src = path + "wnb.gif";
	gifs[20].src = path + "wnw.gif";
	gifs[21].src = path + "wpb.gif";
	gifs[22].src = path + "wpw.gif";
	gifs[23].src = path + "bpb.gif";
	gifs[24].src = path + "wpb.gif";
	gifs[25].src = path + "b.gif";
}
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 if ( document.images[i].name.substring(0,3) == basename.substring(0,3) )
				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 "";
}
