/*global window, document, alert */

var bingo = new function() {
	this.init = function() {
		if (!document.getElementsByTagName) { return false; }
		var buzzwords = document.getElementsByTagName("td");
		for (var i=0; i<buzzwords.length; i++) {
			buzzwords[i].onclick = function() {
				bingo.toggleState(this);
			};
		}
	};
	this.toggleState = function (buzzword) {
		if (!buzzword.className) {
			buzzword.className = "spoken";
			if (this.checkRow(buzzword) || this.checkColumn(buzzword)) {
				alert("BINGO!");
			}
		} else {
			buzzword.className = "";
		}
	};
	this.checkRow = function(buzzword) {
		var row = buzzword.parentNode;
		var cells = row.getElementsByTagName("td");
		for (var i=0; i<cells.length; i++) {
			if (cells[i].className != "spoken") {
				return false;
			}
		}
		return true;
	};
	this.checkColumn = function(buzzword) {
		var row = buzzword.parentNode;
		var cells = row.getElementsByTagName("td");
		for (var i=0; i<cells.length; i++) {
			if (cells[i] == buzzword) {
				var column = i;
			}
		}
		var rows = document.getElementsByTagName("tr");
		for (var i=0; i<rows.length; i++) {
			var cells = rows[i].getElementsByTagName("td");
			if (cells[column].className != "spoken") {
				return false;
			}
		}
		return true;
	};
};

window.onload = bingo.init;
