var MAX=10;
var size=10;
var xArray;
var yArray;
var ansArray;
var startTime;
var miss;
var isStarted=false;

createBoard();

function init()
{
	resetBoard();

	xArray=new Array(MAX);
	yArray=new Array(MAX);
	ansArray=new Array(size);

	for(var i=0;i<MAX;i++)
		xArray[i]=yArray[i]=i;
}

function randamize()
{
	for(var i=0;i<size;i++)
	{
		var rand=Math.floor(Math.random()*(MAX-1));
		var tmp=xArray[i];
		xArray[i]=xArray[rand];
		xArray[rand]=tmp;

		rand=Math.floor(Math.random()*(MAX-1));
		tmp=yArray[i];
		yArray[i]=yArray[rand];
		yArray[rand]=tmp;
	}
}

function s()
{
	size=Number(getElem("size").value);

	init();
	createBoard();
	randamize();
	for(var i=0;i<size;i++)
	{
		getElem("x"+i).innerHTML=xArray[i];
		getElem("y"+i).innerHTML="&nbsp;&nbsp;"+yArray[i];
	}

	getElem("00").focus();
	getElem("00").focus();
	getElem("00").style.backgroundColor="#f6ffa6";
	miss=0;
	startTime=new Date().getTime();
	isStarted=true;
}

function getElem(identifier)
{
	return document.getElementById(identifier);
}

function ans(elem)
{
	if(!isStarted)
		return;
		
	var y=Number(elem.id.charAt(0));
	var x=Number(elem.id.charAt(1));

	var resultStr=elem.value.replace(" ","");
	elem.value=resultStr;
	if(resultStr.length==0)
		return;
	result=Number(resultStr);
	
	var calcValue=calc(yArray[y],xArray[x]);
	if((calcValue>=10 && result<10)
	|| (calcValue<0 && resultStr=='-'))
		return;
	
	if(result==calcValue)
	{
		elem.style.backgroundColor="#bdcfff";

		recordResult(y,x,true);

		if(!checkComplete())
		{
			x++;
			if(x==size)
			{
				x=0;
				y++;
			}

			if(y<size)
			{
				getElem(y+""+x).focus();
				getElem(y+""+x).style.backgroundColor="#f6ffa6";
			}
		}
		else
			getElem(y+""+x).blur();
	}
	else
	{
		elem.style.backgroundColor="#ffbdcc";
		miss++;
		recordResult(y,x,false);
	}
}

function recordResult(y,x,result)
{
	if(ansArray[y]==undefined)
		ansArray[y]=new Array(size);

	ansArray[y][x]=result;
}

function checkComplete()
{
	var isComplete=true;
	root:
	for(var i=0;i<size;i++)
	{
		if(ansArray[i]!=undefined)
		{
			for(var j=0;j<size;j++)
			{
				if(!ansArray[i][j])
				{
					isComplete=false;
					break root;
				}
			}
		}
		else
			isComplete=false;
	}

	if(isComplete)
	{
		var time=(new Date().getTime()-startTime)/1000;
		var min=Math.floor(time/60);
		var sec=Math.floor(time%60);
		var mil=Math.floor((time-Math.floor(time))*10);

		getElem("time").innerHTML="&nbsp;"+(min>0?min+"\u5206 ":"")+sec+"."+mil+"\u79d2";
		getElem("miss").innerHTML="&nbsp;"+miss+"\u56de";

		alert("\u7d42\u4e86");
		isStarted=false;
	}

	return isComplete;
}

function calc(value1,value2)
{
	var type=getElem("type").value;

	if("+"==type)
		return value1+value2;
	if("-"==type)
		return value1-value2;
	if("*"==type)
		return value1*value2;
}

function resetBoard()
{
	isStarted=false;
	if(ansArray==undefined)
		return;

	var currentSize=ansArray.length;

	for(var i=0;i<currentSize;i++)
	{
		getElem("x"+i).innerHTML="&nbsp;-&nbsp;";
		getElem("y"+i).innerHTML="&nbsp;-&nbsp;";
		for(var j=0;j<currentSize;j++)
		{
			getElem(i+""+j).value="";
			getElem(i+""+j).style.backgroundColor="white";
		}
	}
}

function createBoard()
{
	var lines=new String();
	lines+='<table border="1" cellspacing="0" bordercolor="silver"><tr><td>&nbsp;</td>';

	for(var i=0;i<size;i++)
		lines+='<th align="right" id="x'+i+'">&nbsp;-&nbsp;</th>';
	lines+='</tr>';

	for(var i=0;i<size;i++)
	{
		lines+='<tr><th align="right" id="y'+i+'">&nbsp;-&nbsp;</td>';

		for(var j=0;j<size;j++)
			lines+='<td><input type="text" id="'+i+''+j+'" onkeyup="ans(this)" size="2" style="text-align:right;ime-mode:disabled"></td>';
		lines+='</tr>';
	}
	lines+='</table>';

	getElem("board").innerHTML=lines;
}

