
function displayCommentedPGN(){ 
	var pgn = document.getElementById('PGN').value; 
	var pgnArr=new Array();
	pgnArr=pgn.split(/[\n\r]{1,2}/);	
	
	var head="";
	var content="";
	var pgn=new Array();pgn["PGN"]="";
	
	for (var i=0;i<pgnArr.length;i++) {
		if (pgnArr[i].search(/^ {0,}\[.*\" {0,}] {0,}$/)==-1) pgn["PGN"]+=pgnArr[i]+" "; else {
			head=pgnArr[i].match(/^ {0,}\[[a-z,0-9,A-Z]{1,} /);
			if (head) {
				head=head[0].replace(/(\[| )/g,"");
				head=head.toLowerCase();
				content=pgnArr[i].match(/ \".*\] {0,}$/);
				if (content) {
					content=content[0].slice(2);content=content.replace(/\" {0,}\] {0,}$/,"");
					pgn[head]=content;
				}
			}
		}
	}

	if (pgn["fen"]) pgn["fen"]=pgn["fen"].replace(/-/g,"_");
	else pgn["fen"]="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq _ 0 1";
	
	content=recPGNHTML(new Array("",pgn["fen"],1,""),preparePGNStr(pgn["PGN"]));
	pgn["PGN"]=content[3];
	
	if (pgn["white"]&&pgn["black"]) {
		var year="";if (pgn["date"]) year=" ("+pgn["date"].slice(0,4)+")";
		pgn["PGN"]="<b>"+pgn["white"]+" - "+pgn["black"]+ year +"</b> "+pgn["PGN"];
	}
	
	pgn["PGN"]="<a href=\"javascript:dspBrd('"+pgn["fen"]+"')\"><img border=0 src=\"../imgs/main/miniboard.gif\"></A> "+pgn["PGN"];
	
	document.write(pgn["PGN"]);
}

function getGameMoveString(sMoveNum) {
	var html="";
	for (var i=1;i<FEN.length;i++) {
		var move=moveArray[i];
		color="w";if ((i+sMoveNum)%2==0) color="b";
		if ((i+sMoveNum-1)%2==0) moveNumber="<b>"+Math.ceil((i-1+sMoveNum)/2)+".</b> "; else moveNumber="";
		html+=" "+moveNumber+"<a href=\"javascript:dspBrd('"+FEN[i]+"')\">"+replaceEnglish(move)+"</a>";
	}
	return html+" ";
}

function getBracketContent(bracket,pgnStr) {
	if (bracket=="(") var endBracket=")";
	if (bracket=="{") var endBracket="}";
	var bracketNum=0;
	var endBracketNum=0;
	var bracketContent="";
	var curChar="";
	for (var i=0;i<pgnStr.length;i++) {
		curChar=pgnStr.charAt(i);
		bracketContent+=curChar;
		if (curChar==bracket) bracketNum++;			
		if (curChar==endBracket) endBracketNum++;
		if (bracketNum==endBracketNum) break;		
	}
	return bracketContent;
}

function PGN2HTML(HTMLFEN,pgnStr) {
	eFEN=new extendedFEN(HTMLFEN[HTMLFEN[2]]);
	var sMoveNum=eFEN.fullMoveNumber*2;if (eFEN.activeColor=="b") sMoveNum++;
	
	pgnStr=pgnStr.replace(/(^ | $)/g,"");
	pgnStr=pgnStr.replace(/\. /g,".");
	pgnStr=pgnStr.replace(/[0-9]{1,}\.{1,}/g,"");
	
	var moveArr=pgnStr.split(" ");
	
	var result=" ";
	if (moveArr[moveArr.length-1].search(/(1-0|0-1|1\/2-1\/2|\*)/)!=-1) result+=moveArr.pop();
	
	pgnStr=moveArr.join(".");
	
	if (pgnStr!="") {
		analyzePGN(HTMLFEN[HTMLFEN[2]],pgnStr);
		HTMLFEN[3]+=getGameMoveString(sMoveNum);
		HTMLFEN[1]=FEN[FEN.length-1];
		HTMLFEN[0]=FEN[FEN.length-2];
		if (HTMLFEN[2]==0) HTMLFEN[2]=1;
	}
	
	HTMLFEN[3]+=result;
	
	return HTMLFEN;
}

function recPGNHTML(HTMLFEN,pgnStr) {
	var mBracketPos=pgnStr.indexOf("(");
	var cBracketPos=pgnStr.indexOf("{");
	var bracket="";var bracketPos=-1;
	if (mBracketPos!=-1) {bracket="(";bracketPos=mBracketPos;}
	if (cBracketPos!=-1&&(mBracketPos==-1||cBracketPos<mBracketPos)) {bracket="{";bracketPos=cBracketPos;}
	
	if (bracket=="") {
		HTMLFEN=PGN2HTML(HTMLFEN,pgnStr);
	} else {
	
		if (bracketPos-1>=1) {
			HTMLFEN=PGN2HTML(HTMLFEN,pgnStr.slice(0,bracketPos-1));
		}
		
		pgnStr=pgnStr.slice(bracketPos);
		var bracketContent=getBracketContent(bracket,pgnStr);
		
		pgnStr=pgnStr.replace(bracketContent,"");
		bracketContent=bracketContent.slice(1,bracketContent.length-1);
		
		if (bracket=="{") {
			HTMLFEN[3]+=''+bracketContent+'';
			//recursive
			HTMLFEN=recPGNHTML(HTMLFEN,pgnStr);
		}
		
		if (bracket=="(") {				
			var oldHTMLFEN=new Array(HTMLFEN[0],HTMLFEN[1],HTMLFEN[2],HTMLFEN[3]);
			HTMLFEN[2]=0;
			HTMLFEN[3]+="<blockquote>[";
			HTMLFEN=recPGNHTML(HTMLFEN,bracketContent);
			oldHTMLFEN[3]=HTMLFEN[3]+"]</blockquote>";
			oldHTMLFEN[2]=1;
			HTMLFEN=recPGNHTML(oldHTMLFEN,pgnStr);
		}
	}
	return HTMLFEN;
}
function preparePGNStr(pgnStr) {
	pgnStr=pgnStr.replace(/\)/g," )");

	for (i=0;i<arrNAG.length;i++) pgnStr=pgnStr.replace(eval("/ {0,}\\$"+i+" {1,}/g")," {"+arrNAG[i]+"} ");
	
	pgnStr=pgnStr.replace(/\$[0-9]{1,}/g,"");	

	pgnStr=pgnStr.replace(/[\n\r]{1,2}/g," ");
	pgnStr=pgnStr.replace(/ {1,}/g," ");
	return pgnStr;
}



