	//// config
	
	// 部分図最大数
	var BOARD_MAX = 50;
	// 手順再生時、最終手にマークを表示するか
	var ShowLastMove = 0;
	// 碁盤画像URL
	var GoBoardURL = "goimg/";
	//// end config


	var BoardNo   = 1;
	var FirstData ="";

	var InitData  = new Array(BOARD_MAX);
	var Moves     = new Array(BOARD_MAX);
	var Moveno  = new Array(BOARD_MAX);
	var MoveFirst = new Array(BOARD_MAX);
	var FirstPlay = new Array(BOARD_MAX);
//	var DelStones = new Array(BOARD_MAX);
//	var Marks = new Array(BOARD_MAX);
//	var BoardPos = new Array(BOARD_MAX);
	var BoardSize     = new Array(BOARD_MAX);

	var BoardHeadX    = 1;
	var BoardHeadY    = 1;
	var BoardTailX;
	var BoardTailY;
	var BoardData;
	
	var AlphaStr = "ABCDEFGHIJKLMNOPQRS";
	var Captured = new Array( 0, 0 );
	var idTimer=0, idTimer2=0, RefreshCnter = 0;
	var ImgBoard = new Array(14);
	var ImgBoardPng = new Array(14);
	var ImgStonePng = new Array(4);
	var ImgDir = GoBoardURL+"12/";
	var CmMarks = "";
	var ActiveBtn="";
	var i, x, y;
	
	var StarPos = "DD,DJ,DP,JD,JJ,JP,PD,PJ,PP";
	var ImgSize =  12;
	
	// Initialize Part
	for(i=0;i<BOARD_MAX;i++){
		InitData[i]="";
		Moves[i]="";
		Moveno[i]=0;
		MoveFirst[i]=0;
		FirstPlay[i]=0;
	//	DelStones[i]="";
	//	Marks[i]="";
	//	BoardPos[i]="";
		BoardSize[i]=19;
	}
	
	ImgBoardPng[0] = "13.png";
	ImgBoardPng[1] = "23.png";
	ImgBoardPng[2] = "33.png";
	ImgBoardPng[3] = "12.png";
	ImgBoardPng[4] = "22.png";
	ImgBoardPng[5] = "32.png";
	ImgBoardPng[6] = "11.png";
	ImgBoardPng[7] = "21.png";
	ImgBoardPng[8] = "31.png";
	ImgBoardPng[9] = "22a.png";
	
	ImgStonePng[0] = "b.png";
	ImgStonePng[1] = "w.png";
	ImgStonePng[2] = "bmk00.png";
	ImgStonePng[3] = "wmk00.png";
	
	function SetBoardInfo(BSize){
		if (BSize == 9){
			StarPos = "EE";
			ImgSize     = 26;
		}
		if (BSize == 19){
			StarPos = "DD,DJ,DP,JD,JJ,JP,PD,PJ,PP";
			ImgSize     =  13;
		}
		ImgDir = GoBoardURL+ImgSize+"/";
	}
	
	function Init(BoardNo,BSize,BoardData,MoveData) {
		Init_Main(BoardNo,BSize,0,1,BoardData,MoveData);
	}
	function Init2(BoardNo,BSize,BoardData,MoveData) {
		Init_Main(BoardNo,BSize,1,1,BoardData,MoveData);
	}
	function InitTn(BoardNo,BSize,FirstTurn,BoardData,MoveData) {
		Init_Main(BoardNo,BSize,FirstTurn,1,BoardData,MoveData);
	}
	function InitMv(BoardNo,BSize,FirstTurn,MoveNumber,BoardData,MoveData) {
		Init_Main(BoardNo,BSize,FirstTurn,MoveNumber,BoardData,MoveData);
	}
	
	function Init_Main(BoardNo,BSize,FirstTurn,MoveNumber,BoardData,MoveData) {
		var s1, s2,s3, v,idx,jdx;
		var BoardSizeX;
		var BoardSizeY;
		var tmpBoard = BoardData.split(",");

		InitData[BoardNo]=BoardData;
		Moves[BoardNo]=MoveData;
		Moveno[BoardNo]=0;
		MoveFirst[BoardNo]=MoveNumber;
		FirstPlay[BoardNo]=FirstTurn;
	//	DelStones[BoardNo]="";
	//	Marks[BoardNo]="";
	//	BoardPos[BoardNo]="";
		BoardSize[BoardNo]=BSize;
		
		BoardTailX = BSize;
		BoardTailY = BSize;
		BoardSizeX = BoardTailX;
		BoardSizeY = BoardTailY;
		SetBoardInfo(BSize);

		with (document) {
			write("<table id=board2 border=0 cellpadding=0 cellspacing=0 background=\"/goban19.png\">");
			for (y = BSize; y >= 1; y--) {
				v = "<tr height="+ImgSize+" align=center><td width="+(4*ImgSize*BoardSizeX + 4)+" colspan="+BoardSizeX+">";
				for (x = 1; x <= BSize; x++) {
					s1 = ((x == 1)? "1": ((x == BSize)? "3": "2")) + 
					     ((y == 1)? "3": ((y == BSize)? "1": "2"));
					s2 = AlphaStr.charAt(x-1)+AlphaStr.charAt(BSize-y);
					if (StarPos.indexOf(s2) != -1)
						s1 = s1 + "a";
					if (BoardData != ""){
					    for(jdx=0;jdx<tmpBoard.length;jdx++){
						if(tmpBoard[jdx]==s2){
							s1="b";
							}
						s3=s2.toLowerCase();
						if(tmpBoard[jdx]==s3){
							s1="w";
							}
						
					    }
					}
					v = v + "<img id='"+BoardNo+s2+"' src="+ImgDir+s1+".png width=" + ImgSize + " height=" + ImgSize + ">";
				}
				v = v + "</td></tr>";
				write( v  );
			}
			write("</table>");
		}
	}

	function MoveForward(BoardNo,n) {
		var s, v, idx,jdx,jdx2, org_sp,cnt;
		var TmpBoard = Moves[BoardNo].split(",");
		
		SetBoardInfo(BoardSize[BoardNo]);
		
		RemoveMarks();
		if (Moveno[BoardNo] + n >= TmpBoard.length)
			n = TmpBoard.length - Moveno[BoardNo] - 1;
		if (n <= 0) 
			return false;
		
		cnt=FirstPlay[BoardNo] ;
		
		if (Moveno[BoardNo] > 0) {
			mv = Moveno[BoardNo]+MoveFirst[BoardNo]-1;
			document.getElementById(BoardNo+TmpBoard[Moveno[BoardNo]]).src = GetStoneImg((((Moveno[BoardNo]+cnt) % 2) == 1)? 0 : 1,mv,0);
		}
		while (n-- > 0) {
			Moveno[BoardNo]++;
			mv = Moveno[BoardNo]+MoveFirst[BoardNo]-1;
			document.getElementById(BoardNo+TmpBoard[Moveno[BoardNo]]).src = GetStoneImg((((Moveno[BoardNo]+cnt) % 2) == 1)? 0 : 1,mv,(n == 0)? 1: 0);
			
	//		s = DelStones[Moveno[BoardNo]];
	//		for (i = 0; i < s.length; i += 2) {
	//			v = s.substr( i, 2 );
	//			document.getElementById(v).src = GetBoardImg(v,BoardSize[BoardNo]);
	//		}
	//		Captured[1-idx] = Captured[1-idx] + (s.length / 2);
		}
		
		return false;
	}

	function MoveBackward(BoardNo,n) {
		var s, v, idx,jdx,jdx2,cnt,mv;
		var TmpBoard = Moves[BoardNo].split(",");
		
		
		SetBoardInfo(BoardSize[BoardNo]);
		RemoveMarks();
		if (n > Moveno[BoardNo])
			n = Moveno[BoardNo];
		if (n <= 0) 
			return false;
			
		cnt=FirstPlay[BoardNo];
			
		while (n-- > 0) {
			s = BoardNo+TmpBoard[Moveno[BoardNo]];
			document.getElementById(s).src = GetBoardImg(s,BoardSize[BoardNo]);

	//		s = DelStones[Moveno[BoardNo]];
	//		idx = (((Moveno[BoardNo]+cnt) % 2) == 0)? 0 : 1;
	//		for (i = 0; i < s.length; i += 2) {
	//			v = s.substr( i, 2 );
	//			document.getElementById(v).src = ImgDir+ImgStonePng[idx];
	//		}
	//		Captured[idx] = Captured[idx] - (s.length / 2);
			Moveno[BoardNo]--;
		}
		if (Moveno[BoardNo] > 0) {
			mv = Moveno[BoardNo]+MoveFirst[BoardNo]-1;
			document.getElementById(BoardNo+TmpBoard[Moveno[BoardNo]]).src = GetStoneImg((((Moveno[BoardNo]+cnt) % 2) == 1)? 0 : 1,mv,1);
		}
		return false;
	}
	

	function RemoveMarks() {
		var mk, i;
		if (CmMarks == "")
			return false;
		mk = CmMarks.split(",");
		CmMarks = "";
		for (i = 0; i < mk.length-1; i += 2){
			document.getElementById(mk[i]).src = mk[i+1];
			alert("RemoveMarks: " + mk[i+1]);
		}
	}
	function GetBoardImg(s,sz) {
		var ix, iy;
		var szch = AlphaStr.charAt(sz-1);
		var ss;
		var c1, c2;
		c1 = s.length-2;
		c2=c1+1;

		ss=s.charAt(c1)+s.charAt(c2);
		if (StarPos.indexOf(ss) != -1) {
			ix = 9;
			iy = 0;
		} else {
			if      (s.charAt(c1) == "A")  ix = 0;
			else if (s.charAt(c1) == szch) ix = 2;
			else                          ix = 1;
			if      (s.charAt(c2) == "A")  iy = 2;
			else if (s.charAt(c2) == szch) iy = 0;
			else                          iy = 1;
		}
		return ImgDir+ImgBoardPng[ix+iy*3];
	}
	function GetStoneImg(tn,mno,last) {
		if( mno<=0) {
			if( (tn=="B") || (tn=="b") || (tn=="0")){
				return ImgDir+ImgStonePng[0];
			}
			else{
				return ImgDir+ImgStonePng[1];
			}
		}
		else if( (last==1) && (ShowLastMove==1) ){
			if( (tn=="B") || (tn=="b") || (tn=="0")){
				return ImgDir+ImgStonePng[2];
			}
			else{
				return ImgDir+ImgStonePng[3];
			}
		}
		else{
			if( (tn=="B") || (tn=="b") || (tn=="0")){
				return ImgDir+"b_n"+ mno +".png"
			}
			else{
				return ImgDir+"w_n"+ mno+".png"
			}
		}
	}

