/***********************************************************/
/* Master Mind made by Bjarne Fich                         */
/* www.rednebula.com                                       */
/***********************************************************/
/* Start game with:                                        */
/*  makeLogicGame(colors, sizex, sizey);                   */
/* Ex:                                                     */
/*  makeLogicGame(6,8,5);                                  */
/***********************************************************/

var logicColors = new Array("#ff0000", "#00ff00", "#0000ff", "#ffff00", "#00ffff", "#ff00ff");
var logicBaseGridId = 0;
var logicHelpGridId = 0;
var logicResultGridId = 0;
var logicColorsGridId = 0;
var logicTempGridId = 0;
var logicNoOfColors = 0;
var logicCurrentCollum = 0;
var logicSizeY = 0;
var logicSizeX = 0;
var logicGameOver = 0;

function makeLogicGame(colors, sizex, sizey) {
	logicNoOfColors = colors;
	logicSizeY = sizey;
	logicSizeX = sizex;

	logicBaseGridId = makeGrid(sizex, sizey, "#808080");
	logicHelpGridId = makeGrid(sizex*3, Math.round(sizey/2), "#E0E0E0");
	logicResultGridId = makeGrid(1, sizey, "#808080");
	logicTempGridId = makeGrid(1, sizey, 0);
	logicColorsGridId = makeGrid(logicNoOfColors+3, 1, "#E0E0E0");

	document.write("<table cellpadding='0' cellspacing='1' border='0'><tr><td>");
	drawGrid(logicBaseGridId, 20, "logicPlaceColor");
	document.write("</td><td>");
	drawGrid(logicResultGridId, 18, "logicGuess");
	document.write("</td></tr><tr><td>");
	drawGrid(logicHelpGridId, 6, "");
	document.write("</td><td></td></tr><tr><td>");
	drawGrid(logicColorsGridId, 20, "logicSelectColor");
	document.write("</td><td></td></tr></table>");

	for (var i=0; i<logicNoOfColors; i++)
		setGrid(logicColorsGridId, i, 0, logicColors[i]);
	setGrid(logicColorsGridId, logicNoOfColors, 0, 0);
	setGrid(logicColorsGridId, logicNoOfColors+1, 0, 0);
	setGrid(logicColorsGridId, logicNoOfColors+2, 0, logicColors[0]);

	for (var i=0; i<sizey; i++)
		setGrid(logicResultGridId, 0, i, logicColors[Math.round(Math.random()*logicNoOfColors-0.5)]);

	updateGrid(logicColorsGridId);
	updateGrid(logicHelpGridId);
	//updateGrid(logicResultGridId);
	
	logicCurrentCollum = 0;
	logicGameOver = 0;
}

function logicSelectColor(x,y) {
	if (logicGameOver==0) {
		setGrid(logicColorsGridId, logicNoOfColors+2, 0, logicColors[x]);	
		updateGrid(logicColorsGridId);
	} else {
		alert("Game over.");
	}
}

function logicPlaceColor(x,y) {
	if (logicGameOver==0) {
		setGrid(logicBaseGridId, logicCurrentCollum, y, getGrid(logicColorsGridId, logicNoOfColors+2, 0));	
		updateGrid(logicBaseGridId);
	} else {
		alert("Game over.");
	}
}

function logicGuess(x,y) {
	if (logicGameOver==0) {
		logicEvaluateCollum(logicCurrentCollum);
		logicCurrentCollum++;
	} else {
		alert("Game over.");
	}
}

function logicEvaluateCollum(col) {
	for (var i=0; i<logicSizeY; i++) {
		setGrid(logicTempGridId,0,i,0);
	}
	var full_correct=0;
	for (var i=0; i<logicSizeY; i++) {
		if (getGrid(logicBaseGridId, col, i) == getGrid(logicResultGridId, 0, i)) {
			full_correct+=1;
			setGrid(logicTempGridId,0,i,2);
		}
	}
	var part_correct=0;
	var i=0;
	for (; i<logicSizeY; i++) {
		if (getGrid(logicTempGridId,0,i)<2) {
			var tempcol = getGrid(logicBaseGridId, col, i);
			var j=0;
			for (; j<logicSizeY; j++) { 
				if ((getGrid(logicTempGridId,0,j)==0) && (tempcol==getGrid(logicResultGridId, 0, j))) {
					part_correct+=1;
					setGrid(logicTempGridId,0,j,1);
					tempcol=-1;
				}
			}
		}
	}
	var r=0;
	var c=0;
	for (var i=0; i<full_correct; i++) {
		setGrid(logicHelpGridId, col*3 + c, r, "#000000");
		r++;
		if (r>=Math.round(logicSizeY/2)) { r=0; c++; }
	}
	for (var i=0; i<part_correct; i++) {
		setGrid(logicHelpGridId, col*3 + c, r, "#808080");
		r++;
		if (r>=Math.round(logicSizeY/2)) { r=0; c++; }
	}
	updateGrid(logicHelpGridId);

	if ((logicSizeY==full_correct) || ((col+1)>=logicSizeX)) {
		updateGrid(logicResultGridId);
		logicGameOver = 1;
		if (logicSizeY==full_correct) {
			alert("Game over - you win.");
		} else {
			alert("Game over - you loose.");
		}
	}
}
