var m0 = new Array(52,36,11,19,51,35,6,21,57,42,14,22,58,44,5,14,59,51,10,18,53,45,9,25,62,52,1,11,44,23,14,23,51,23,2,9,48,40,12,28,60,58,120,59,3,12,58,57,8,16,52,58,4,2,64,3,58,41,28,35,59,35,18,26,35,59,11,17,54,46,2,1,41,24,9,0,61,47,19,27,23,37,1,8,63,60,27,35,42,27,17,27,36,27,12,19,59,35,26,35,60,12,8,17,37,35,17,24,49,33,24,32,35,42,19,27,12,8,0,9,8,9,27,34,42,21,32,40,21,16,40,33,50,42,33,42,16,56,42,51,56,49,51,59,47,61,3,51,9,11,51,11,61,34,25,34,49,7,11,43,7,0,34,42,0,32,59,60,45,37,13,29,57,58,43,51,32,8 );

var n0 = new Array();
var b0 = -1;
var pieces = "KQNBR ";
function MB50()
{b0=MB5(m0,n0,0,b0,'kastopg0.htm'); ikastop0.value=GMS(m0,n0,0,b0,'kastopg0.htm');}
function MB0()
{b0=MB(m0,n0,0,b0,'kastopg0.htm'); ikastop0.value=GMS(m0,n0,0,b0,'kastopg0.htm');}
function MF50()
{b0=MF5(m0,n0,0,b0,'kastopg0.htm'); ikastop0.value=GMS(m0,n0,0,b0,'kastopg0.htm');}
function MF0()
{b0=MF(m0,n0,0,b0,'kastopg0.htm'); GMS(m0,n0,0,b0,'kastopg0.htm');}
var nMoves = new Array(0,0);
var EmptyWhitePath = "gif/w.gif";
var EmptyBlackPath = "gif/b.gif";

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 MF5( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	for ( i=0; nMoves[nm] < moves.length / 2 && i < 10; i++ )
	MF( moves, names, nm, base );
	return base;
}
function MB5( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	for ( i=0; nMoves[nm] > 0 && i < 10; i++ )
	MB( moves, names, nm, base );
	return base;
}
function GoStart( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	while ( nMoves[nm] > 0 )
	MB( moves, names, nm, base );
	return base;
}
function GoEnd( moves, names, nm, base, basename )
{	base = SyncPicture( base, basename );
	while ( nMoves[nm] < moves.length / 2 )
	MF( moves, names, nm, base );
	return base;
}
function MF( 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 )
		MF( moves, names, nm, base );
	}
	return base
}
function MB( 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 )
		MB( moves, names, nm, base );
	}
	return base;
}
function GMS( 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 "";
}