
	var gField
	var onHold
	var diff
	
	doubleQuotes = String.fromCharCode(34,34)
	state = 0;
	diff = Math.round(Math.random()) + 1;
	onHold = 0;
	
	function clear_all(form) {
		state = 0;
		for (i=0; i<9; ++i) {
			eval("document."+form.name+".a"+i+".value=" + doubleQuotes)
			eval("document.i"+i+".src=imageBlank.src")
		}
	}
	function computer_turn(field) {
		position=get_move(field.form);
		position=position.substring(1,2,1);
		positionName="a"+position
		field.form.output.value='computer moves to ' + position
		if (position=="") {
			field.form.output.value="No Winner."; 
			window.setTimeout('gameOver(\'tie\')', 1000)
			//alert("Cat's game.")
			state = -1;
			return;
		}
		field.form[positionName].value="O";
		eval("document.i"+position+".src = imageO.src")
			
		if (evaluate(field.form)) {
			field.form.output.value="I win!";
			window.setTimeout('gameOver(\'lose\')', 1000)
			//alert("I win!")
			state = -1;
		}
		onHold = 0;
	}

	function clickit(field) {
		if (!onHold){
			if (state == -1) 
				{alert("Reset to play again"); return;}
				position=field.name.substring(1,2,1);
				positionName = 'a'+position;
			if (field.form[positionName].value !="") return;
				field.form[positionName].value="X";
				eval("document.i"+position+".src = imageX.src")
			if (evaluate(field.form)) {
				field.form.output.value="You Win!"; 
				window.setTimeout('gameOver(\'win\')', 1000)
				//alert("You Win!")
				state = -1;
				return;
			}
			gField= field
			iTimerID = window.setTimeout('computer_turn(gField)',1000);
			onHold=1;
		}
	}

	function evaluate(form) {
		if ((form.a0.value!="" && form.a0.value==form.a3.value && form.a0.value==form.a6.value)||
			(form.a0.value!="" && form.a0.value==form.a1.value && form.a0.value==form.a2.value) ||
			(form.a0.value!="" && form.a0.value==form.a4.value && form.a0.value==form.a8.value) ||
			(form.a1.value!="" && form.a1.value==form.a4.value && form.a1.value==form.a7.value) ||
			(form.a2.value!="" && form.a2.value==form.a5.value && form.a2.value==form.a8.value) ||
			(form.a2.value!="" && form.a2.value==form.a4.value && form.a2.value==form.a6.value) ||
			(form.a3.value!="" && form.a3.value==form.a4.value && form.a3.value==form.a5.value) ||
			(form.a6.value!="" && form.a6.value==form.a7.value && form.a6.value==form.a8.value))
			return true;
		else    
			return false;
	}



	function computer_move(form,player,weight,depth) {
		var cost;
		var bestcost=-2;
		var position;
		var newplayer;

		if (player=="X") newplayer="O"; else newplayer="X";
		if (depth==diff) return 0;
		if (evaluate(form)) return 1;
		for (var i=0; i<9; ++i) {
			position='a'+i;
			if (form[position].value != "")
				continue;
			form[position].value=player;
			cost = computer_move(form,newplayer, -weight, depth+1);
			if (cost > bestcost) {
				bestcost=cost;
				if (cost==1) i=9;
			}
			form[position].value="";
		}
		if (bestcost==-2) bestcost=0;
		return(-bestcost);
	}
	
	function get_move(form) {
		var cost;
		var bestcost=-2;
		bestmove="";
		if (state++ == 0)
		if (form.a4.value=="") 
			return "a4";
		else 
			if (form.a0.value=="") 
				return "a0";
		for (var i=0; i<9; ++i) {
			localposition='a'+i;
			if (form[localposition].value != "")
				continue;
			form[localposition].value="O";
			cost=computer_move(form,"X", -1, 0);
			if (cost > bestcost) {
				if (cost==1) i=9;
				bestmove=localposition;
				bestcost=cost;
			}
			form[localposition].value="";
		}
		return bestmove;
	}	



	function computerFirst() {
		if (!state++) {
			document.i4.src=imageO.src;
			document.form1.a4.value='O';
		}
	}
