var isDown = true;
var gameIsOver = false;
var lastState = '0';
var img0;
var img1;
var img2;

function init(){
	document.onmouseup = u;
	document.ondragstart = function() {return false};
	document.getElementById("board").onselectstart = function() {return false};
	var blocks = document.getElementsByName('block');
	var max = blocks.length;
	var block;
	for (var i = 0; i < max; i++){
		block = blocks.item(i);
		block.onmousedown = function() {return d(this);};
		block.onmouseover = function() {return m(this);};
		block.onmouseout = function() {return o(this);};
		block.ondragstart = function() {return false};
	}
	img0 = new Image();
	img0.src = '0.png';
	img1 = new Image();
	img1.src = '1.png';
	img2 = new Image();
	img2.src = '2.png';
	gameIsOver = false;
}

function d(el){
	if (gameIsOver) return false;
	isDown = true;
	var st = getState(el);
	lastState = nextState(st);
	setState(el, lastState);
	if (checkDone()) gameOver();
	return false;
}

function m(el){
	if (gameIsOver) return false;
	el.parentNode.parentNode.style.backgroundColor = "#e0ffe0";
	
	var c = el.id.split('_');
	document.getElementById('c_' + c[1]).style.backgroundColor = "#e0ffe0";
	
	if (!isDown) return ;
	setState(el, lastState);
	if (checkDone()) gameOver();
	return false;
}

function o(el){
	if (gameIsOver) return false;
	el.parentNode.parentNode.style.backgroundColor = "";
	
	var c = el.id.split('_');
	document.getElementById('c_' + c[1]).style.backgroundColor = "";
	
	return false;
}

function u(el){
	if (gameIsOver) return false;
	isDown = false;
	return false;
}

function getState(el){
	var ar = el.src.split('/');
	return ar[ar.length-1].charAt(0);
}

function setState(el, state){
	el.src = state + '.png';
}

function nextState(st){
	st++;
	if (st > 2) return 0;
	else return st;
}

function getBoardVal(x, y){
	var el = document.getElementById('p_'+x+'_'+y);
	var st = getState(el);
	return st;
}

function gameOver(){
	gameIsOver = true;
	document.getElementById('gameOver').style.display = 'block';
	document.getElementById('clear').style.display = 'none';
}

function checkDone(){
	for (var x = 0; x < numsX.length; x++){
		var nums = '';
		var num = 0;
		for (var y = 0; y < numsY.length; y++){
			if (getBoardVal(x,y) == '1'){
				num++;
			}
			else{
				if (num) {
					if (nums) nums+=',';
					nums+=num;
					num=0;
				}
			}
		}
		if (num){
			if (nums) nums+=',';
			nums+=num;
		}
		if (nums != numsX[x]) return false;
	}
	for (var y = 0; y < numsY.length; y++){
		var nums = '';
		var num = 0;
		for (var x = 0; x < numsX.length; x++){
			if (getBoardVal(x,y) == '1'){
				num++;
			}
			else{
				if (num) {
					if (nums) nums+=',';
					nums+=num;
					num=0;
				}
			}
		}
		if (num){
			if (nums) nums+=',';
			nums+=num;
		}
		if (nums != numsY[y]) return false;
	}
	return true;
}

function c(){
	if (gameIsOver) return false;
	for (var x = 0; x < numsX.length; x++){
		for (var y = 0; y < numsY.length; y++){
			setState(document.getElementById('p_'+x+'_'+y), 0);
		}
	}
	var nums;
	for (var x = 0; x < numsX.length; x++){
		num = document.getElementById('c_' + x).firstChild;
		while (num) {
			num.style.color='#000000';
			num = num.nextSibling;
		}
	}
	for (var y = 0; y < numsY.length; y++){
		num = document.getElementById('r_' + y).firstChild;
		while (num) {
			num.style.color='#000000';
			num = num.nextSibling;
			if (num) num = num.nextSibling;
		}
	}
}
