function dspBrd(FEN){displayBoardPos(FEN)}
function initPos(FEN){displayBoardPos(FEN);dd.elements.wait.hide()}
function posBoard(){var cBoard=dd.elements.commentBoard;cBoard.moveTo(cBoard.defx,dd.getWndH()/2+dd.getScrollY()-cBoard.defh/2);}
var imgsrc="../imgs/";var chatSendOnReturn=false;var spacer=imgsrc+"main/spacer.gif";var dragSquare,dropSquare,cps;var curMove=0,lastMove=0;var commentTool="field";var result="";var boardRotated=1;var userMode="playDrag";var variantFEN="empty";function my_PickFunc(){if(dd.obj.name!="turnToQueenBox"&&userMode!="diagramMode"){dragSquare=onSquare(dd.obj.x,dd.obj.y);if(userMode=="playDrag"||userMode=="solutionDrag"){if(dragSquare!="notOnBoard"){cps=possibleSquares(rotateSquare(dragSquare),true);showPossibleMoves(true);}}}
if(userMode=="diagramMode"){dragSquare=onSquare(dd.obj.x,dd.obj.y);paintDiagram(onSquare(dd.obj.x,dd.obj.y));}}
function my_DragFunc(){}
function my_ResizeFunc(){}
function my_DropFunc(){if(dd.obj.name!="turnToQueenBox"&&userMode!="diagramMode"){dropSquare=onSquare(dd.obj.x,dd.obj.y);var dropPiece=eFEN.boardPiece[rotateSquare(dropSquare)];var dragPiece=dd.obj.name;if(dragPiece.charAt(0)=="w")dragPiece=dragPiece.charAt(1);else dragPiece=dragPiece.charAt(1).toLowerCase();if(userMode=="playDrag"||userMode=="solutionDrag"){if(dragSquare!="notOnBoard")showPossibleMoves(false);if(dragSquare!="notOnBoard"&&dropSquare!="notOnBoard"&&cps.search(rotateSquare(dropSquare))>=0){movePieceTo(dd.obj,dropSquare);if(dragPiece.toUpperCase()=="P"&&(dropSquare.charAt(1)=="1"||dropSquare.charAt(1)=="8"))askForNewPiece();else moveFENwithCoords(rotateSquare(dragSquare),rotateSquare(dropSquare),"",true);}else if(dragSquare!="notOnBoard")movePieceTo(dd.obj,dragSquare);else dd.obj.moveTo(dd.obj.defx,dd.obj.defy);}else checkPosDrag(dragPiece,dropPiece);}
if(userMode=="diagramMode")movePieceTo(dd.obj,dragSquare);}
function changeDiagramMode(diagramModeOn){if(diagramModeOn==true){userMode="diagramMode";displayBoardPos(eFENtoFEN());}else{userMode="solutionDrag";clearDiagram();}}
function insertDiagram(){var text=document.getElementById("diagramText").value;if(text.length==0)text="Dia0";editor.focusEditor();editor.insertHTML(" <A style=\"color:green\" href=\"javascript:dspBrd('"+eFENtoFEN()+"')\">"+text+"</A> ");}
function clearDiagram(){eFEN.markedFields="";eFEN.markedLines="";eFEN.markedField="";displayBoardPos(eFENtoFEN());}
function displayPieceWay(from,to,target){target.clear();if(from!="_"){addDiagram(from,to,"arrow",target);target.paint();}}
function addDiagram(from,to,mode,target){from=rotateSquare(from);to=rotateSquare(to);var xs=0
var ys=0;var sw=squareWidth;if(mode=="arrow"){xs+=Math.floor(sw/2);ys+=Math.floor(sw/2)}
var row1=from.charCodeAt(0)-97;var x1=xs+row1*sw;var col1=parseInt(8-from.charAt(1));var y1=ys+col1*sw;if(mode=="field")target.drawEllipse(x1,y1,sw-1,sw-1);if(mode=="arrow"){var row2=to.charCodeAt(0)-97;var x2=xs+row2*sw;var col2=parseInt(8-to.charAt(1));var y2=ys+col2*sw;var tempangle=Math.atan2((y2-y1),(x2-x1));var headsize=5;var headx1=x2-Math.cos(tempangle)*headsize*2+Math.cos(tempangle-90)*headsize;var heady1=y2-Math.sin(tempangle)*headsize*2+Math.sin(tempangle-90)*headsize;var headx2=x2-Math.cos(tempangle)*headsize*2+Math.cos(tempangle+90)*headsize;var heady2=y2-Math.sin(tempangle)*headsize*2+Math.sin(tempangle+90)*headsize;target.drawLine(x1,y1,x2,y2);target.fillPolygon(new Array(headx1,headx2,x2),new Array(heady1,heady2,y2));}
if(mode=="square")target.drawRect(x1,y1,sw-1,sw-1);}
function displayDiagram(mF,mL,target){mF=mF.split(".");mL=mL.split(".");target.clear();for(var i=0;i<mF.length;i++)if(mF[i]!="")addDiagram(mF[i],"","field",target);for(var i=0;i<mL.length;i++)if(mL[i]!=""){var lC=mL[i].split(",");addDiagram(lC[0],lC[1],"arrow",target);}
if(eFEN.markedField!="")addDiagram(eFEN.markedField,"","square",target);target.paint();}
function paintDiagram(square){square=rotateSquare(square);if(userMode=="diagramMode"){if(commentTool=="field"){if(eFEN.markedFields.search(square)==-1)eFEN.markedFields+="."+square;else eFEN.markedFields=eFEN.markedFields.replace("."+square,"");}
if(commentTool=="arrow"){if(eFEN.markedField==square)eFEN.markedField="";else{if(eFEN.markedField=="")eFEN.markedField=square;else{var newArrow="."+eFEN.markedField+","+square;eFEN.markedField="";if(eFEN.markedLines.search(newArrow)==-1)eFEN.markedLines+=newArrow;else eFEN.markedLines=eFEN.markedLines.replace(newArrow,"");}}}
displayDiagram(eFEN.markedFields,eFEN.markedLines,vboard);}}
function showPossibleMoves(display){var color="lightgreen",pS,squareHTML="";pS=cps;if(pS=="")color="red";if(display)squareHTML=color;else squareHTML="";if(pS!=""){pS=pS.split("/");for(var n=0;n<pS.length;n++){if(pS[n].search(/x/)>=0)pS[n]=pS[n].substr(2,2);document.getElementById(rotateSquare(pS[n])).style.backgroundColor=squareHTML;}}else document.getElementById(dragSquare).style.backgroundColor=squareHTML;}
function movePieceTo(pieceObj,square){var x=dd.elements.vboard0.x+1;var y=dd.elements.vboard0.y+1;x+=(square.charCodeAt(0)-97)*squareWidth;y+=(8-parseInt(square.charAt(1)))*squareWidth;pieceObj.moveTo(x,y);if(!pieceObj.visible)pieceObj.show();}
function onSquare(x,y){x+=Math.round(squareWidth/2)-(dd.elements.vboard0.x+1);y+=Math.round(squareWidth/2)-(dd.elements.vboard0.y+1);if(x<0||y<0||x>squareWidth*8||y>squareWidth*8)return"notOnBoard";return String.fromCharCode(97+Math.floor(x/squareWidth))+(8-Math.floor(y/squareWidth));}
function rotateCoords(){add=0;if(boardRotated==-1)add=9;if(document.getElementById("leftCoord1"))for(var i=1;i<=8;i++){var line=Math.abs(add-i);document.getElementById("leftCoord"+i).innerHTML=line;document.getElementById("downCoord"+i).innerHTML=String.fromCharCode(64+line);}}
function rotateBoard(){boardRotated*=-1;var add=0;if(boardRotated==-1)add=1;rotateCoords();var topPlayer=document.getElementById("topPlayer");if(topPlayer){topPlayer=topPlayer.innerHTML;document.getElementById("topPlayer").innerHTML=document.getElementById("bottomPlayer").innerHTML;document.getElementById("bottomPlayer").innerHTML=topPlayer;}
displayBoardPos(eFENtoFEN());}
function newQueen(p){dd.elements.turnToQueenBox.setDraggable(false);dd.elements.turnToQueenBox.hide();if(eFEN.activeColor=="b")p=p.toLowerCase();for(var row=0;row<=7;row++)for(var col=0;col<=7;col++){var img=eFEN.boardPiece["img_"+boardSquare("a1",col,row)];if(img!="_")dd.elements[img].setDraggable(true);}
moveFENwithCoords(rotateSquare(dragSquare),rotateSquare(dropSquare),p,true);}
function askForNewPiece(){var c=eFEN.activeColor;document.getElementById("QinBOX").src=pieceSrc+c+"q.gif";document.getElementById("RinBOX").src=pieceSrc+c+"r.gif";document.getElementById("BinBOX").src=pieceSrc+c+"b.gif";document.getElementById("NinBOX").src=pieceSrc+c+"n.gif";for(var row=0;row<=7;row++)for(var col=0;col<=7;col++){var img=eFEN.boardPiece["img_"+boardSquare("a1",col,row)];if(img!="_")if(boardSquare("a1",col,row)==dropSquare)dd.elements[img].hide();else dd.elements[img].setDraggable(false);}
dd.elements.turnToQueenBox.maximizeZ();dd.elements.turnToQueenBox.show();dd.elements.turnToQueenBox.setDraggable(true);}
function rotateSquare(square){if(boardRotated==-1){var row=square.charCodeAt(0)-97;row=String.fromCharCode(97+(7-row));var col=parseInt(square.charAt(1)-1);col=8-col;square=row+col;}
return square;}
function displayBoardPos(FEN){if(!dd.elements.commentBoard.visible){if(board=document.getElementById("completeBoard"))board.style.display="block";dd.elements.commentBoard.show();dd.elements.turnToQueenBox.hide();dd.elements.wait.hide();}
for(var row=0;row<=7;row++)for(var col=0;col<=7;col++){var curImg=eFEN.boardPiece["img_"+boardSquare("a1",col,row)];if(dd.elements[curImg])dd.elements[curImg].hide();}
eFEN=new extendedFEN(FEN);var moveIndicator=document.getElementById("moveIndicator").style;if(eFEN.activeColor=="w")moveIndicator.backgroundColor="white";else moveIndicator.backgroundColor="black";for(var row=0;row<=7;row++)for(var col=0;col<=7;col++){var curImg=eFEN.boardPiece["img_"+boardSquare("a1",col,row)];if(curImg!="_"){if(!dd.elements[curImg]){piece=eFEN.boardPiece[boardSquare("a1",col,row)];piece=pieceColor(piece)+piece.toUpperCase();dd.elements[piece].copy(1);curImg=piece+dd.elements[piece].copies.length;}
movePieceTo(dd.elements[curImg],rotateSquare(boardSquare("a1",col,row)));dd.elements[curImg].show();}}
if(eFEN.markedLines==""&&eFEN.markedFields==""&&userMode!="diagramMode")displayPieceWay(eFEN.fromSquare,eFEN.toSquare,vboard);else displayDiagram(eFEN.markedFields,eFEN.markedLines,vboard);}
function getPiece(SAN){var p=SAN.charAt(0);if(p.toUpperCase()!=p)return"p";else
if(p=="O")return"rochade";else return p.toLowerCase();}
function displayMove(n){var delcolor="white";if(n<FEN.length){if(curMove>0){document.getElementById("move"+curMove).style.backgroundColor=delcolor;document.getElementById("move"+curMove).style.border="1px solid #f0f0f0";}
if(n>0){document.getElementById("move"+n).style.backgroundColor="lightyellow";document.getElementById("move"+n).style.border="1px solid black";}
if(n>=0){displayBoardPos(FEN[n]);curMove=n;}}}
function initTurnToQueenBox(){document.write('<table ID="turnToQueenBox" cellspacing=0 cellpadding=0 style="visibility:hidden;border:1px solid #663300;position:absolute;color:white">'+'<tr><td align=center bgcolor="#663300"><b>Bauernumwandlung</b></td></tr><tr><td style="background-color:#f0f0f0">'+'<a href=JavaScript:newQueen("Q")><img id="QinBOX" border=0 width='+pieceSize+' height='+pieceSize+' src="'+pieceSrc+'wq.gif"></a>'+'<a href=JavaScript:newQueen("R")><img id="RinBOX" border=0 width='+pieceSize+' height='+pieceSize+' src="'+pieceSrc+'wr.gif"></a>'+'<a href=JavaScript:newQueen("B")><img id="BinBOX" border=0 width='+pieceSize+' height='+pieceSize+' src="'+pieceSrc+'wb.gif"></a>'+'<a href=JavaScript:newQueen("N")><img id="NinBOX" border=0 width='+pieceSize+' height='+pieceSize+' src="'+pieceSrc+'wn.gif"></a>'+'</td></tr></table>');}
function defineBoardLayout(brdPieces,brdSize,brdLightField,brdDarkField,brdSideColor,brdSideLineColor,brdCoordsColor,brdDisplayCoords){pieces=brdPieces;squareWidth=parseInt(brdSize);pieceSize=squareWidth;lightField=brdLightField;darkField=brdDarkField;boardSideColor=brdSideColor;coordsColor=brdCoordsColor;sideLineColor=brdSideLineColor;pieceSrc="../imgs/brdimgs/pieces/"+pieces+"/"+pieceSize+"/"+pieces+pieceSize;boardSideWidth=Math.round(squareWidth/3);displayCoords=brdDisplayCoords;}
function initBoard(FEN){document.write(getBoardHTML(FEN,"hidden"));initTurnToQueenBox();}
function getBoardHTML(FEN,visibility){var boardHTML='';var position="position:absolute;";var margin=2;if(visibility=="visible"){position="";margin=0}
else boardHTML+='<img name="wait" style="position:absolute" src="../database/imgs/wait.gif">';var boardId=0;if(getBoardHTML.arguments[2])boardId+=getBoardHTML.arguments[2];eFEN=new extendedFEN(FEN);var sideBackground=' style="background-color:#'+boardSideColor+'"';if(boardSideColor.search(/[a-f,A-F,0-9]{6}/)==-1)sideBackground=' background="../community/imgs/userbrdside/'+boardSideColor+'.jpg"';boardHTML+='<TABLE id="commentBoard" cellspacing=0 cellpadding=0 border=0'+sideBackground+'><TR><TD align="right">'+'<a href="javascript:closeBoard()"><img id="closeBoard" style="visibility:hidden" border="0" src="../imgs/main/closeboard.gif" width="'+boardSideWidth+'" height="'+boardSideWidth+'"></a><br>'+'<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0><TR>'+'<TD><img src='+spacer+' height="1" width="'+boardSideWidth+'">';if(displayCoords=="true"){boardHTML+='<table width="100%" cellspacing=0 cellpadding=0 border=0 style="color:#'+coordsColor+';font-weight:bold">';for(var i=8;i>=1;i--)boardHTML+='<tr><td align="center" id=leftCoord'+i+' style="padding:3px;font-size:'+(boardSideWidth-2)+'px;height:'+squareWidth+'">'+i+'</td></tr>';boardHTML+='</table>';}
boardHTML+='</TD>'+'<TD bgcolor="#'+sideLineColor+'" style="padding:1px">'+'<DIV id="vboard'+boardId+'" style="position:relative"><TABLE style="height:'+(squareWidth*8)+'px;width:'+(squareWidth*8)+'px" BORDER=0 CELLPADDING=0 CELLSPACING=0>';for(var row=0;row>=-7;row--){boardHTML+='<TR>';for(col=0;col<=7;col++){var bgColor=lightField;if((col+row)%2!=0)bgColor=darkField;var bS=boardSquare("a8",col,row);var bP=eFEN.boardPiece[rotateSquare(bS)];var borderColor="";if(bS==rotateSquare(eFEN.fromSquare)||bS==rotateSquare(eFEN.toSquare))borderColor="border:1px solid #00AA00;";img="";if(bP!="_"){var img="<img border=0 style=\""+position+"visibility:"+visibility+"\" name="+eFEN.boardPiece["img_"+bS]+" width="+squareWidth+" height="+squareWidth+" src=\""+pieceSrc+pieceColor(bP)+bP.toLowerCase()+".gif\">";}
img='<DIV id="'+bS+'" style="width:'+(squareWidth-margin*2)+';height:'+(squareWidth-margin*2)+'">'+img+'</DIV>';boardHTML+='<TD NOWRAP align="center" onclick="javascript:paintDiagram(\''+bS+'\')" style="'+borderColor+'background-color:#'+bgColor+'">'+img+'</TD>';}
boardHTML+='</TR>';}
boardHTML+='</TABLE></DIV>'+'</TD>'+'<TD><img src='+spacer+' height="1" width="'+boardSideWidth+'"></TD>'+'</TR></TABLE>';if(displayCoords=="true"){boardHTML+='<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 width=100%><TR><TD>';boardHTML+='<table width="100%" cellspacing=0 cellpadding=0 border=0 style="line-height:normal;color:#'+coordsColor+';padding-bottom:1px;font-weight:bold;font-size:'+(boardSideWidth-2)+'px"><tr><td align=center style="width:'+(boardSideWidth+1)+'"><div style="width:6px;height:6px;background-color:#f0f0f0;padding:1px"><div id="moveIndicator" style="width:100%;height:100%;font-size:1px;background-color:white">&nbsp;</div></div></td>';for(var i=1;i<=8;i++)boardHTML+='<td align=center id=downCoord'+i+' style="width:'+(squareWidth)+'">'+String.fromCharCode(64+i)+'</td>';boardHTML+='<td style="width:'+(boardSideWidth)+'">&nbsp;</td></tr></table></TD></TR></TABLE>';}else boardHTML+='<img src='+spacer+' width="1" height="'+boardSideWidth+'"><div id="moveIndicator" style="display:none">';boardHTML+='</TD></TR></TABLE>';if(visibility=="visible"&&(eFEN.markedFields!=""||eFEN.markedLines!="")){var color="#66FF99";if(getBoardHTML.arguments[3])color=getBoardHTML.arguments[3];boardHTML+='<script>var vboard = new jsGraphics("vboard'+boardId+'");';if(eFEN.markedFields!=""||eFEN.markedLines!="")boardHTML+='vboard.setColor("'+color+'");displayDiagram("'+eFEN.markedFields+'","'+eFEN.markedLines+'",vboard);';else boardHTML+='displayPieceWay("'+eFEN.fromSquare+'","'+eFEN.toSquare+'",vboard);';boardHTML+='</script>';}
return boardHTML;}
function filterChecks(sourceSquare,squareString){var filteredSquareString="";if(squareString!=""){squareString=squareString.split("/");if(eFEN.activeColor=="b")kingPos=kingPosition("k");else kingPos=kingPosition("K");for(var i=0;i<squareString.length;i++){var kingMoves=false;if(eFEN.boardPiece[sourceSquare].toUpperCase()=="K")kingMoves=true;var sourcePiece=eFEN.boardPiece[sourceSquare];var targetSquare=squareString[i];if(targetSquare.search(/x/)>=0)targetSquare=targetSquare.substr(2,2);var capturedPiece=eFEN.boardPiece[targetSquare];var wrongRochade=false;if((kingMoves)&&(sourceSquare=="e1"||sourceSquare=="e8")&&(targetSquare=="g1"||targetSquare=="c1"||targetSquare=="g8"||targetSquare=="c8")){if(fieldChecked(sourceSquare))wrongRochade=true;else{if(sourceSquare=="e1"&&targetSquare=="c1"&&fieldChecked("d1"))wrongRochade=true;if(sourceSquare=="e1"&&targetSquare=="g1"&&fieldChecked("f1"))wrongRochade=true;if(sourceSquare=="e8"&&targetSquare=="c8"&&fieldChecked("d8"))wrongRochade=true;if(sourceSquare=="e8"&&targetSquare=="g8"&&fieldChecked("f8"))wrongRochade=true;}}
var enpassant="";if(eFEN.enPassant!="_"&&eFEN.boardPiece[sourceSquare].toUpperCase()=="P"&&eFEN.enPassant.charAt(0)==targetSquare.charAt(0)&&eFEN.enPassant.charAt(1)==sourceSquare.charAt(1)){enpassant=eFEN.boardPiece[eFEN.enPassant];eFEN.boardPiece[eFEN.enPassant]="_";}
eFEN.boardPiece[targetSquare]=sourcePiece;eFEN.boardPiece[sourceSquare]="_";if(kingMoves)kingPos=targetSquare;if(!wrongRochade&&!fieldChecked(kingPos))filteredSquareString+=targetSquare+"/";eFEN.boardPiece[targetSquare]=capturedPiece;eFEN.boardPiece[sourceSquare]=sourcePiece;if(enpassant!="")eFEN.boardPiece[eFEN.enPassant]=enpassant;}}
if(filteredSquareString!="")filteredSquareString=filteredSquareString.substr(0,filteredSquareString.length-1);return filteredSquareString;}
function fieldChecked(square){var king="K",queen="Q",bishop="B",rock="R",knight="N",checkString="",checked=false;if(eFEN.activeColor=="b"){king="k";queen="q";bishop="b";rock="r";knight="n"}
oldPiece=eFEN.boardPiece[square];eFEN.boardPiece[square]=rock;checkString=possibleSquares(square,false);if(checkString.search(/xr/i)>=0||checkString.search(/xq/i)>=0)checked=true;eFEN.boardPiece[square]=bishop;checkString=possibleSquares(square,false);if(checkString.search(/xb/i)>=0||checkString.search(/xq/i)>=0)checked=true;eFEN.boardPiece[square]=knight;checkString=possibleSquares(square,false);if(checkString.search(/xn/i)>=0)checked=true;eFEN.boardPiece[square]=king;checkString=possibleSquares(square,false);if(checkString.search(/xk/i)>=0)checked=true;var addRow=1;if(eFEN.activeColor=="b")addRow=-1;var bP=eFEN.boardPiece[boardSquare(square,-1,addRow)];if(bP.toUpperCase()=="P"&&pieceColor(bP)!=eFEN.activeColor)checked=true;bP=eFEN.boardPiece[boardSquare(square,1,addRow)];if(bP.toUpperCase()=="P"&&pieceColor(bP)!=eFEN.activeColor)checked=true;eFEN.boardPiece[square]=oldPiece;return checked;}
function boardSquare(square,x,y){var colCharCodeNum=square.charAt(0).charCodeAt(0)+x;if(colCharCodeNum>=97&&colCharCodeNum<=104)var col=String.fromCharCode(colCharCodeNum);else return"notOnBoard";var row=parseInt(square.charAt(1))+y;if(row<1||row>8)return"notOnBoard";return col+row;}
function pieceColor(p){if(p.toUpperCase()!=p)return"b";else return"w";}
function capturable(sourcePiece,targetPiece,targetSquare){if(targetPiece!="notOnBoard"&&targetPiece!="_"&&pieceColor(sourcePiece)!=pieceColor(targetPiece))return"x"+targetPiece+targetSquare+"/";else if(targetPiece=="_")return targetSquare+"/";else return"";}
function freeSquares(sourceSquare,addX,addY){var i=1;var rangeLimit=8;if(eFEN.boardPiece[sourceSquare].toUpperCase()=="K")rangeLimit=1;var squareString="";while(eFEN.boardPiece[boardSquare(sourceSquare,addX*i,addY*i)]=="_"&&i<=rangeLimit){squareString+=boardSquare(sourceSquare,addX*i,addY*i)+"/";i++;}
if(i<=rangeLimit)squareString+=capturable(eFEN.boardPiece[sourceSquare],eFEN.boardPiece[boardSquare(sourceSquare,addX*i,addY*i)],boardSquare(sourceSquare,addX*i,addY*i));return squareString;}
function kingPosition(king){for(var row=0;row<=7;row++)for(var col=0;col<=7;col++)if(eFEN.boardPiece[boardSquare("a1",row,col)]==king)return boardSquare("a1",row,col);}
function possibleSquares(square,checkFilter,targetSquare){var squareString="",tS="",bP="",piece=eFEN.boardPiece[square];if(eFEN.activeColor!=pieceColor(piece))return"";var p=piece.toUpperCase();if(p=="P"){var addToRow=0;if(pieceColor(piece)=="w")addToRow=1;else addToRow=-1;tS=boardSquare(square,0,addToRow);tP=eFEN.boardPiece[tS];if(tP=="_"){squareString+=tS+"/";tS=boardSquare(square,0,addToRow*2);tP=eFEN.boardPiece[tS];if(tP=="_"&&(square.charAt(1)=="2"||square.charAt(1)=="7"))squareString+=tS+"/";}
tS=boardSquare(square,-1,addToRow);tP=eFEN.boardPiece[tS];if(tP!="_")squareString+=capturable(piece,tP,tS);if(tP=="_"&&tS==boardSquare(eFEN.enPassant,0,addToRow))squareString+=tS+"/";tS=boardSquare(square,1,addToRow);tP=eFEN.boardPiece[tS];if(tP!="_")squareString+=capturable(piece,tP,tS);if(tP=="_"&&tS==boardSquare(eFEN.enPassant,0,addToRow))squareString+=tS+"/";}
if(p=="N"){tS=boardSquare(square,1,2);tP=eFEN.boardPiece[tS];squareString+=capturable(piece,tP,tS);tS=boardSquare(square,2,1);tP=eFEN.boardPiece[tS];squareString+=capturable(piece,tP,tS);tS=boardSquare(square,1,-2);tP=eFEN.boardPiece[tS];squareString+=capturable(piece,tP,tS);tS=boardSquare(square,-2,1);tP=eFEN.boardPiece[tS];squareString+=capturable(piece,tP,tS);tS=boardSquare(square,-2,-1);tP=eFEN.boardPiece[tS];squareString+=capturable(piece,tP,tS);tS=boardSquare(square,-1,-2);tP=eFEN.boardPiece[tS];squareString+=capturable(piece,tP,tS);tS=boardSquare(square,-1,2);tP=eFEN.boardPiece[tS];squareString+=capturable(piece,tP,tS);tS=boardSquare(square,2,-1);tP=eFEN.boardPiece[tS];squareString+=capturable(piece,tP,tS);}
if(p=="R"||p=="Q"||p=="K"){squareString+=freeSquares(square,0,1);squareString+=freeSquares(square,1,0);squareString+=freeSquares(square,0,-1);squareString+=freeSquares(square,-1,0);}
if(p=="B"||p=="Q"||p=="K"){squareString+=freeSquares(square,1,1);squareString+=freeSquares(square,1,-1);squareString+=freeSquares(square,-1,1);squareString+=freeSquares(square,-1,-1);}
if(p=="K"){if(square=="e1"){if(eFEN.boardPiece["d1"]=="_"&&eFEN.boardPiece["c1"]=="_"&&eFEN.boardPiece["b1"]=="_"&&eFEN.castling.whiteQueenside)squareString+="c1/";if(eFEN.boardPiece["f1"]=="_"&&eFEN.boardPiece["g1"]=="_"&&eFEN.castling.whiteKingside)squareString+="g1/";}
if(square=="e8"){if(eFEN.boardPiece["d8"]=="_"&&eFEN.boardPiece["c8"]=="_"&&eFEN.boardPiece["b8"]=="_"&&eFEN.castling.blackQueenside)squareString+="c8/";if(eFEN.boardPiece["f8"]=="_"&&eFEN.boardPiece["g8"]=="_"&&eFEN.castling.blackKingside)squareString+="g8/";}}
if(squareString!=""){squareString=squareString.substr(0,squareString.length-1);if(targetSquare&&squareString.search(targetSquare)>=0)squareString=targetSquare;}
if(checkFilter){squareString=filterChecks(square,squareString);cps=squareString;}
return squareString;}
function replaceEnglish(move){if(language=="GER"){move=move.replace(/R/,"T");move=move.replace(/N/,"S");move=move.replace(/B/,"L");move=move.replace(/Q/,"D");move=move.replace(/K/,"K");}
return move;}
function getMoveNum(eFEN,movelength){var moveNum="";if(eFEN.activeColor=="b")moveNum=eFEN.fullMoveNumber+". ";if(eFEN.activeColor=="w")if(movelength<10)moveNum=(eFEN.fullMoveNumber-1)+"...";return moveNum;}
function moveFENwithCoords(sourceSquare,targetSquare,replacePawn,display){var endPosition=false,varPosition=false;if(eFENtoFEN()==FEN[FEN.length-1])endPosition=true;if(eFENtoFEN()==variantFEN)varPosition=true;eFEN.fromSquare=sourceSquare;eFEN.toSquare=targetSquare;if(display)displayPieceWay(sourceSquare,targetSquare,vboard);var move="";var piece=eFEN.boardPiece[sourceSquare];if(userMode=="solutionDrag"){if(eFEN.boardPiece[targetSquare]!="_")move+="x";if(piece.toUpperCase()!="P"&&piece.toUpperCase()!="K")for(row=0;row<=7;row++)for(col=0;col<=7;col++){var bS=boardSquare("a1",col,row);if(eFEN.boardPiece[bS]==piece&&rotateSquare(sourceSquare)!=bS){if(possibleSquares(bS,true).search(rotateSquare(targetSquare))>=0){if(bS.charAt(0)==rotateSquare(sourceSquare).charAt(0))move=rotateSquare(sourceSquare).charAt(1)+move;else move=rotateSquare(sourceSquare).charAt(0)+move;}}}
if(piece.toUpperCase()=="P"){if(move=="x")move=sourceSquare.charAt(0)+move;}else
move=piece.toUpperCase()+move;move+=targetSquare;}
if(piece.toLowerCase()=="p"||eFEN.boardPiece[targetSquare]!="_")eFEN.halfMoveClock=0;else eFEN.halfMoveClock++;if(display)var moveIndicator=document.getElementById("moveIndicator").style;if(eFEN.activeColor=="w"){eFEN.activeColor="b";if(display)moveIndicator.backgroundColor="black"}else{eFEN.activeColor="w";eFEN.fullMoveNumber++;if(display)moveIndicator.backgroundColor="white";}
eFEN.boardPiece[targetSquare]=eFEN.boardPiece[sourceSquare];var imgID=eFEN.boardPiece["img_"+targetSquare];if(imgID!="_"&&display)dd.elements[imgID].hide();eFEN.boardPiece["img_"+targetSquare]=eFEN.boardPiece["img_"+sourceSquare];eFEN.boardPiece[sourceSquare]="_";eFEN.boardPiece["img_"+sourceSquare]="_";if(replacePawn!=""){eFEN.boardPiece[targetSquare]=replacePawn;if(display)displayBoardPos(eFENtoFEN());move+="="+replacePawn.toUpperCase();}
if(eFEN.enPassant!="_"&&eFEN.boardPiece[targetSquare].toUpperCase()=="P"&&eFEN.enPassant.charAt(0)==targetSquare.charAt(0)&&eFEN.enPassant.charAt(1)==sourceSquare.charAt(1)){eFEN.boardPiece[eFEN.enPassant]="_";if(display)dd.elements[eFEN.boardPiece["img_"+eFEN.enPassant]].hide();eFEN.boardPiece["img_"+eFEN.enPassant]="_";}
eFEN.enPassant="_";if(eFEN.boardPiece[targetSquare].toUpperCase()=="P"&&Math.abs(parseInt(targetSquare.charAt(1))-parseInt(sourceSquare.charAt(1)))==2)eFEN.enPassant=targetSquare;var p=eFEN.boardPiece[targetSquare].toUpperCase();if(sourceSquare=="e1"&&targetSquare=="g1"&&p=="K"){move="O-O";if(display)movePieceTo(dd.elements[eFEN.boardPiece["img_h1"]],rotateSquare("f1"));eFEN.boardPiece["f1"]="R";eFEN.boardPiece["img_f1"]=eFEN.boardPiece["img_h1"];eFEN.boardPiece["h1"]="_";eFEN.boardPiece["img_h1"]="_";}
if(sourceSquare=="e1"&&targetSquare=="c1"&&p=="K"){move="O-O-O";if(display)movePieceTo(dd.elements[eFEN.boardPiece["img_a1"]],rotateSquare("d1"));eFEN.boardPiece["d1"]="R";eFEN.boardPiece["img_d1"]=eFEN.boardPiece["img_a1"];eFEN.boardPiece["a1"]="_";eFEN.boardPiece["img_a1"]="_";}
if(sourceSquare=="e8"&&targetSquare=="g8"&&p=="K"){move="O-O";if(display)movePieceTo(dd.elements[eFEN.boardPiece["img_h8"]],rotateSquare("f8"));eFEN.boardPiece["f8"]="r";eFEN.boardPiece["img_f8"]=eFEN.boardPiece["img_h8"];eFEN.boardPiece["h8"]="_";eFEN.boardPiece["img_h8"]="_";}
if(sourceSquare=="e8"&&targetSquare=="c8"&&p=="K"){move="O-O-O";if(display)movePieceTo(dd.elements[eFEN.boardPiece["img_a8"]],rotateSquare("d8"));eFEN.boardPiece["d8"]="r";eFEN.boardPiece["img_d8"]=eFEN.boardPiece["img_a8"];eFEN.boardPiece["a8"]="_";eFEN.boardPiece["img_a8"]="_";}
if(sourceSquare=="e1"){eFEN.castling.whiteKingside=false;eFEN.castling.whiteQueenside=false;}
if(sourceSquare=="e8"){eFEN.castling.blackKingside=false;eFEN.castling.blackQueenside=false;}
if(sourceSquare=="a1"||targetSquare=="a1")eFEN.castling.whiteQueenside=false;if(sourceSquare=="h1"||targetSquare=="h1")eFEN.castling.whiteKingside=false;if(sourceSquare=="a8"||targetSquare=="a8")eFEN.castling.blackQueenside=false;if(sourceSquare=="h8"||targetSquare=="h8")eFEN.castling.blackKingside=false;if(userMode=="solutionDrag"){if(eFEN.activeColor=="b")king="k";else king="K";if(fieldChecked(kingPosition(king))){var checkSign="#";for(row=0;row<=7;row++)for(col=0;col<=7;col++){piece=eFEN.boardPiece[boardSquare("a1",col,row)];if(pieceColor(piece)==eFEN.activeColor)if(possibleSquares(boardSquare("a1",col,row),true)!=""){checkSign="+";row=8;col=8}}
move+=checkSign;}
var mymove,myvariant
if(endPosition==true)if(mymove=document.getElementById("mymove")){mymove.innerHTML="<b>"+getMoveNum(eFEN,0)+"<a href=\"javascript:dspBrd('"+eFENtoFEN()+"')\">"+replaceEnglish(move)+"</a></b>";document.move.coords.value=sourceSquare+"."+targetSquare+replacePawn.toUpperCase();if(myvariant=document.getElementById("myvariant")){variantFEN=eFENtoFEN();myvariant.innerHTML="";document.move.variantcoords.value="";}}
if(varPosition==true)if(myvariant=document.getElementById("myvariant")){variantFEN=eFENtoFEN();myvariant.innerHTML+="<b>"+getMoveNum(eFEN,myvariant.innerHTML.length)+"<a href=\"javascript:dspBrd('"+eFENtoFEN()+"')\">"+replaceEnglish(move)+"</a></b>&nbsp;";document.move.variantcoords.value+=","+sourceSquare+"."+targetSquare+replacePawn.toUpperCase();}
var altMovesObj;if(altMovesObj=document.getElementById("alternateMoves")){var moveNum="";altMovesObj.innerHTML+=getMoveNum(eFEN,altMovesObj.innerHTML.length)+"<A href=\"javascript:dspBrd('"+eFENtoFEN()+"')\">"+replaceEnglish(move)+"</A>&nbsp;";}
if(document.getElementById("solutionBox")){var newSolId=getMoveId(curSol,1);var parentId=curSol;var leftBracket="",rightBracket="",altAmount=0;if(document.getElementById("sol"+getMoveId(curSol,1))){while(document.getElementById("sol"+getMoveId(curSol,1)+"_"+altAmount+"_1"))altAmount++;parentId=getMoveId(curSol,1)+"_0_0";newSolId=getMoveId(curSol,1)+"_"+altAmount+"_1";leftBracket='<DIV class="alternateMoves">[ ';rightBracket="]</DIV>";}
FEN[newSolId]=eFENtoFEN();var moveNum="";if(eFEN.activeColor=="b")moveNum='<SPAN class="moveNumSize">'+eFEN.fullMoveNumber+'. </SPAN>';if(eFEN.activeColor=="w"&&newSolId.charAt(newSolId.length-1)=="1")moveNum='<SPAN  class="moveNumSize">'+(eFEN.fullMoveNumber-1)+'...</SPAN>';var endBracket="";var temp=document.getElementById("sol"+parentId).innerHTML;if(temp.substr(temp.length-7,7).toLowerCase()=="]</div>"){temp=temp.substring(0,temp.length-7);endBracket="]</div>"}
document.getElementById("sol"+parentId).innerHTML=temp+'<SPAN id="sol'+newSolId+'">'+leftBracket+moveNum+'<a href=\'javascript:exercisePos("'+newSolId+'","'+FEN[newSolId]+'")\'><SPAN id="move'+newSolId+'" class="moveSize">'+replaceEnglish(move)+'</SPAN></a> <SPAN id="com'+newSolId+'"></SPAN><SPAN id="sol'+newSolId+"_"+altAmount+'_0"></SPAN>'+rightBracket+'</SPAN>'+endBracket+"\n";exercisePos(newSolId,FEN[newSolId]);}
if(fenSpanObj=document.getElementById("fenSpan")){var f=eFENtoFEN();f=f.split(" ");f[3]=f[3].replace("4","3");f[3]=f[3].replace("5","6");fenSpanObj.innerHTML=f[0]+" "+f[1]+" "+f[2]+" "+f[3]+" "+f[4]+" "+f[5];}}}
function moveFENwithSAN(move){if(move.charAt(0)=="O"){if(eFEN.activeColor=="w"){sourceSquare="e1";if(move.search(/O-O-O/)>=0)targetSquare="c1";else targetSquare="g1";}else{sourceSquare="e8";if(move.search(/O-O-O/)>=0)targetSquare="c8";else targetSquare="g8";}}
else{var sourceXorY="";var piece=move.charAt(0);if(piece.toUpperCase()!=piece){piece="P";sourceXorY=move.charAt(0);}
else if(move.charAt(1)!="x"&&isNaN(move.charAt(2)))sourceXorY=move.charAt(1);if(eFEN.activeColor=="b")piece=piece.toLowerCase();var targetSquare="";if(move.search(/x/)>=0)targetSquare=move.substr(move.indexOf("x")+1,2);else if(piece.toUpperCase()=="P")targetSquare=move.substr(0,2);else{targetSquare=move.substr(1,2);if(isNaN(targetSquare.charAt(1)))targetSquare=move.substr(2,2);}
var sourceSquare="";if(eFEN.activeColor=="w"){var row=0;var rowadd=1}else{var row=7;var rowadd=-1}
while(row<=7&&row>=0&&!sourceSquare){for(var col=0;col<=7&&!sourceSquare;col++){var bS=boardSquare("a1",col,row);if(eFEN.boardPiece[bS]==piece){if(piece.toUpperCase()=="P"&&bS.charAt(0)!=targetSquare.charAt(0)&&move.charAt(1)!="x")continue;if(piece.toUpperCase()=="B"&&(-97+targetSquare.charCodeAt(0)+parseInt(targetSquare.charAt(1))-1)%2!=(col+row)%2)continue;if(piece.toUpperCase()=="R"&&-97+targetSquare.charCodeAt(0)!=col&&parseInt(targetSquare.charAt(1))-1!=row)continue;var squareString=possibleSquares(bS,true,targetSquare);if(squareString.search(targetSquare)>=0&&(sourceXorY==""||bS.search(sourceXorY)>=0))sourceSquare=bS;}}
row=row+rowadd;}}
var replacePawn="";if(move.search(/=/)>=0){replacePawn=move.charAt(move.indexOf("=")+1);if(eFEN.activeColor=="b")replacePawn=replacePawn.toLowerCase();}
moveFENwithCoords(sourceSquare,targetSquare,replacePawn,false);}
function extendedFEN(FEN){function castlingAvailability(castlingFEN){if(castlingFEN.search(/K/)>=0)this.whiteKingside=true;else this.whiteKingside=false;if(castlingFEN.search(/Q/)>=0)this.whiteQueenside=true;else this.whiteQueenside=false;if(castlingFEN.search(/k/)>=0)this.blackKingside=true;else this.blackKingside=false;if(castlingFEN.search(/q/)>=0)this.blackQueenside=true;else this.blackQueenside=false;}
function boardArray(boardFEN){var emptyFields="";for(var col=1;col<=8;col++){emptyFields+="_";while(boardFEN.search(col)>=0)boardFEN=boardFEN.replace(col,emptyFields);}
var boardRows=boardFEN.split("/");var boardPiece=new Array;var pCounter=new Array();for(var row=0;row<=7;row++){for(var col=0;col<=7;col++){var bS=String.fromCharCode(97+col)+(1+row);var piece=boardRows[7-row].charAt(col);boardPiece[bS]=piece;if(!isNaN(pCounter[piece]))pCounter[piece]++;else pCounter[piece]=0;var pieceNum=pCounter[piece];if(pieceNum==0)pieceNum="";var imgID=pieceColor(piece)+piece.toUpperCase()+pieceNum;if(piece=="_")imgID="_";boardPiece["img_"+bS]=imgID;}}
boardPiece["notOnBoard"]="notOnBoard";return boardPiece;}
var FENpart=FEN.split(" ");this.boardPiece=new boardArray(FENpart[0]);this.activeColor=FENpart[1];if(!FENpart[2])FENpart[2]="_";this.castling=new castlingAvailability(FENpart[2]);if(!FENpart[3])FENpart[3]="_";this.enPassant=FENpart[3];if(!FENpart[4])FENpart[4]="0";this.halfMoveClock=parseInt(FENpart[4]);if(!FENpart[5])FENpart[5]="1";this.fullMoveNumber=parseInt(FENpart[5]);if(!FENpart[6])FENpart[6]="_";this.fromSquare=FENpart[6];if(!FENpart[7])FENpart[7]="_";this.toSquare=FENpart[7];if(!FENpart[8])FENpart[8]="";this.markedFields=FENpart[8];if(!FENpart[9])FENpart[9]="";this.markedLines=FENpart[9];this.markedField="";}
function eFENtoFEN(){var FEN="";for(var row=0;row>=-7;row--){for(var col=0;col<=7;col++)FEN+=eFEN.boardPiece[boardSquare("a8",col,row)];FEN+="/";}
var emptySpace="________";for(var i=8;i>=1;i--){while(FEN.search(emptySpace)>=0)FEN=FEN.replace(emptySpace,i);emptySpace=emptySpace.substr(0,emptySpace.length-1);}
FEN=FEN.substr(0,FEN.length-1)+" "+eFEN.activeColor+" ";if(eFEN.castling.whiteKingside)FEN+="K";if(eFEN.castling.whiteQueenside)FEN+="Q";if(eFEN.castling.blackKingside)FEN+="k";if(eFEN.castling.blackQueenside)FEN+="q";if(!eFEN.castling.whiteKingside&&!eFEN.castling.whiteQueenside&&!eFEN.castling.blackKingside&&!eFEN.castling.blackQueenside)FEN+="_";FEN+=" "+eFEN.enPassant+" "+eFEN.halfMoveClock+" "+eFEN.fullMoveNumber+" "+eFEN.fromSquare+" "+eFEN.toSquare+" "+eFEN.markedFields+" "+eFEN.markedLines;return FEN;}
function autoMove(){if(curMove<FEN.length-1){displayMove(curMove+1);activeAutoMove=window.setTimeout("autoMove()",1000);}else{playing=false;document.getElementById("playButton").src=imgsrc+"brdimgs/nav/play.gif"}}
var playing=false;function play(){if(!playing){document.getElementById("playButton").src=imgsrc+"brdimgs/nav/stop.gif";playing=true;autoMove()}else{window.clearTimeout(activeAutoMove);playing=false;document.getElementById("playButton").src=imgsrc+"brdimgs/nav/play.gif"}}
function analyzePGN(pgn,moveStr){FEN=new Array;FEN[0]=pgn;eFEN=new extendedFEN(FEN[0]);moveArray=new Array;moveArray[0]="startingPosition";if(moveStr){var mA=moveStr.split(".");for(var i=0;(mA[i]);i++){moveArray[i+1]=mA[i];moveFENwithSAN(mA[i]);FEN[FEN.length]=eFENtoFEN();}}}
function initPieces(){SET_DHTML(CURSOR_MOVE,"bP","bR","bN","bB","bQ","bK","wR","wN","wB","wQ","wK","wP","wait"+NO_DRAG,"commentBoard"+NO_DRAG,"vboard0"+NO_DRAG,"closeBoard"+NO_DRAG,"turnToQueenBox"+NO_DRAG);var board=dd.elements.commentBoard;dd.elements.turnToQueenBox.moveTo(board.x+board.defw/2-70,board.y+board.defh/2-25);board.addChild(dd.elements.turnToQueenBox);dd.elements.wait.moveTo(board.x+board.defw/2-55,board.y+board.defh/2-15);board.addChild(dd.elements.wait);if(userMode!="posDrag")for(var i=0;i<dd.elements.length;i++)if(dd.elements[i].name.length<=3)dd.elements[i].hide();}
function closeBoard(){dspBrd("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq _ 0 1");dd.elements.commentBoard.hide();if(board=document.getElementById("completeBoard"))board.style.display="none";}
