
var moves0 = new Array(20,12,43,44,32,42,25,18,42,36,18,11,36,21,11,12,21,27 );
var names0 = new Array();
var base0 = -1;
var pieces = "KQNBR ";

var moves1 = new Array(14,22,20,13,23,15,57,49,54,46,49,41,46,38,41,33,38,30,33,25,30,23,25,57,22,14,13,21,14,62,57,62,143,7,21,29,7,0 );
var names1 = new Array();
var base1 = -1;
var pieces = "KQNBR ";

var moves2 = new Array(50,59,51,59,5,12,59,60,12,19,60,59,19,20,59,60,20,29,60,61,29,30,61,62,30,31,62,6,141,6,7,6,31,22,6,5,21,13,5,12,22,14 );
var names2 = new Array();
var base2 = -1;
var pieces = "KQNBR ";

var moves3 = new Array(3,7,41,49,56,57,40,41,139,3,32,40,3,6 );
var names3 = new Array();
var base3 = -1;
var pieces = "KQNBR ";

var moves4 = new Array(27,0,24,32,10,19,46,54,19,27,54,30,27,34,30,54,35,53,22,30,34,43,30,38,43,52,38,46,52,61,46,53,0,54 );
var names4 = new Array();
var base4 = -1;
var pieces = "KQNBR ";

var moves5 = new Array(48,33,43,34,25,17,21,28,17,9,51,3,33,18,3,6,20,13,6,7,13,12,7,6,18,3,6,14,3,13,14,6,13,19,34,26,19,4 );
var names5 = new Array();
var base5 = -1;
var pieces = "KQNBR ";

var moves6 = new Array(28,31,55,46,31,25,54,62,60,52,57,42,52,51,42,25,19,11,25,42,139,3,62,59,51,44,59,3 );
var names6 = new Array();
var base6 = -1;
var pieces = "KQNBR ";

var moves7 = new Array(27,28,57,51,28,52,183,63,54,63,51,36,26,53,32,59,52,60,36,53,63,54,53,43,60,59,43,49,59,35 );
var names7 = new Array();
var base7 = -1;
var pieces = "KQNBR ";

var moves8 = new Array(53,36,19,28,36,30,6,13,30,13,28,21,13,3,49,25,31,23,25,24,4,5,21,28,3,18 );
var names8 = new Array();
var base8 = -1;
var pieces = "KQNBR ";

var moves9 = new Array(17,9,47,61,57,49,61,25,22,13,20,11,13,4,11,4,2,19 );
var names9 = new Array();
var base9 = -1;
var pieces = "KQNBR ";

var moves10 = new Array(18,28,36,29,3,20,29,20,7,15,23,31,28,22,20,22,15,22,31,39,22,15,39,47,15,7,47,55,6,15 );
var names10 = new Array();
var base10 = -1;
var pieces = "KQNBR ";

var moves11 = new Array(47,20,34,43,20,29,43,52,29,38,52,61,24,17,62,54,38,52,61,60,17,24,60,53,24,17 );
var names11 = new Array();
var base11 = -1;
var pieces = "KQNBR ";

var moves12 = new Array(0,4,36,27,4,20,18,34,20,36,34,18,51,43,18,21,36,28,27,18,28,20,21,20,25,35 );
var names12 = new Array();
var base12 = -1;
var pieces = "KQNBR ";

var moves13 = new Array(143,7,49,7,46,28,7,28,62,6,5,13,16,34,13,21,6,22,21,29,34,43,29,37,22,38,37,45,43,52 );
var names13 = new Array();
var base13 = -1;
var pieces = "KQNBR ";

var moves14 = new Array(21,13,28,13,22,13,6,7,525,5,7,15,4,31 );
var names14 = new Array();
var base14 = -1;
var pieces = "KQNBR ";

var moves15 = new Array(29,21,12,21,25,16,43,51,33,25,179,59,11,17,0,1,40,19,59,19 );
var names15 = new Array();
var base15 = -1;
var pieces = "KQNBR ";

var moves16 = new Array(11,4,15,6,4,31,6,15,58,2,14,6,31,28,15,14,28,55,14,15,55,49,15,14,2,42,6,5,49,55,7,6,42,46 );
var names16 = new Array();
var base16 = -1;
var pieces = "KQNBR ";

var moves17 = new Array(51,35,28,20,35,27,20,28,25,17,30,36,46,39,36,19,40,19,28,19,39,30,6,12,17,9,19,10,27,19,10,9,19,12 );
var names17 = new Array();
var base17 = -1;
var pieces = "KQNBR ";

var moves18 = new Array(29,21,14,21,39,31,52,46,31,23,46,29,23,15,29,19,34,33,19,13,5,20,16,9,20,3,13,3,143,7 );
var names18 = new Array();
var base18 = -1;
var pieces = "KQNBR ";

var moves19 = new Array(49,58,37,58,25,17,58,37,54,46,37,46,45,37,46,37,52,45,37,55,45,36 );
var names19 = new Array();
var base19 = -1;
var pieces = "KQNBR ";

var moves20 = new Array(44,37,23,15,37,30,15,7,30,23,7,6,23,22,6,5,21,13,5,12,22,14 );
var names20 = new Array();
var base20 = -1;
var pieces = "KQNBR ";

var moves21 = new Array(37,29,54,46,38,30,23,30,31,23,13,6,29,21,46,37,23,15,6,15,21,13 );
var names21 = new Array();
var base21 = -1;
var pieces = "KQNBR ";

var moves22 = new Array(36,21,17,0,21,27,18,11,1,9,11,3,27,17,0,10,9,18 );
var names22 = new Array();
var base22 = -1;
var pieces = "KQNBR ";

var moves23 = new Array(3,12,26,44,12,5,44,30,5,14,27,19,14,21,30,51,20,12 );
var names23 = new Array();
var base23 = -1;
var pieces = "KQNBR ";

var moves24 = new Array(1,6,38,45,6,7,45,38,56,49,31,39,49,50,39,47,50,51,38,46,51,52,46,54,7,6,54,63,52,45,47,55,45,46,63,62,46,47,62,63,6,3,63,62,3,59,62,53,47,55 );
var names24 = new Array();
var base24 = -1;
var pieces = "KQNBR ";

var moves25 = new Array(0,5,24,30,5,21,23,31,21,29,30,29,7,14,29,30,14,13,30,29,13,12,29,28,12,11,28,27,11,10,27,26,10,9,26,25,9,8 );
var names25 = new Array();
var base25 = -1;
var pieces = "KQNBR ";

var moves26 = new Array(17,9,42,50,137,1,178,58,1,28,58,23,20,38,12,3,28,1,3,12,1,10,12,21,10,17,21,30,17,44,30,22,44,12,23,37,12,14 );
var names26 = new Array();
var base26 = -1;
var pieces = "KQNBR ";

var moves27 = new Array(36,20,31,30,20,28,30,38,28,36,38,46,36,44,46,54,44,20,23,31,20,28,31,39,52,51,183,63,28,60,63,47,60,52,54,61,52,60,61,53,60,52 );
var names27 = new Array();
var base27 = -1;
var pieces = "KQNBR ";

var moves28 = new Array(25,8,1,11,8,18,16,43,57,40,43,36,0,8,36,18,40,50,44,51,50,33,48,33 );
var names28 = new Array();
var base28 = -1;
var pieces = "KQNBR ";

var moves29 = new Array(34,26,28,26,19,11,26,12,139,3,12,3,42,24,17,24,44,34,24,33,48,40,33,26,41,33,26,27,52,36 );
var names29 = new Array();
var base29 = -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,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 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 "";
}
