var isFr = false;
if (document.URL.indexOf("_eng")<0) {isFr = true;}

// nombre d'images du menu
var imgmenu = 3*1;

//eight queens problem
//ron daenzer - script and html modified and extended by Charly Founes
var ferme = new Array(64);

var imgQueen = new Image(48,48);
imgQueen.src = "dame/queen.gif";
var imgEmpty = new Image(48,48);
imgEmpty.src = "dame/transp.gif";
var imgDot = new Image(48,48);
imgDot.src = "dame/transp2.gif";

var id=0;
var count=0;

var myboard = "<table style='cursor: pointer;'>";
	for (var r=0; r<8; r++) { //8 rows
		myboard += "<tr><td>" + (8-r) + "<\/td>";
		
		for (var c=0; c<8; c++) { //8 columns
			id=(r*8)+c; //calculate cell id
			myboard += "<td ";
			if ((r+c)%2 == 0) {
				myboard += "class=\"white\"";
			}
			else {
				myboard += "class=\"black\"";
			}
			myboard += " id=" + id + " onclick=\"placeq(this);\"><img src="
					+ imgEmpty.src + " />";
			myboard += "<\/td>";
		}		
		myboard += "<\/tr>";
	}
myboard += "<tr><td><img src=" + imgEmpty.src + " /><\/td>";
myboard += "<td>a<\/td><td>b<\/td><td>c<\/td><td>d<\/td>";
myboard += "<td>e<\/td><td>f<\/td><td>g<\/td><td>h<\/td><\/tr>";
myboard += "<\/table>";

function placeq (cell)
{
	var q = eval(cell.id);
	var r = Math.floor(q /8);
	var c = q % 8;
	var min = Math.min(r,c);
	var max = Math.max(r,c);
	if (document.images[(imgmenu+q)].src == imgEmpty.src && safe(q)) {
		count++;
		for (var h=r*8; h<(r*8)+8; h++) {
			ferme[h]=h;
			document.images[(imgmenu+h)].src=imgDot.src;
		}
		for (var v=c; v<64; v=v+8) {
			ferme[v]=v;
			document.images[(imgmenu+v)].src=imgDot.src;
		}
		if (c>r) { var x1=c-r; var x2=q+(9*(8-c)); }
		else { var x1=(r-c)*8; var x2=q+(9*(8-r)); }
		for (var x=x1; x<x2; x=x+9) {
			ferme[x]=x;
			document.images[(imgmenu+x)].src=imgDot.src;
		}
		if (r+c>7) { var y1=q-((7-c)*7); var y2=q+(7*(8-r)); }
		else { var y1=r+c; var y2=q+(8*c); }
		for (var y=y1; y<y2; y=y+7) {
			ferme[y]=y;
			document.images[(imgmenu+y)].src=imgDot.src;
		}
		document.images[(imgmenu+q)].src = imgQueen.src;
	}
	if (count == 8) {
		var good = "Good job, you solved it!";
			if (isFr) {good = "Bravo, vous avez réussi !";}
		alert(good);
	}
	if (count > 8) {
		var many = "Too many queens";
			if (isFr) {many = "Trop de dames";}
		alert(many);
	}
}

function safe (q)
{ //safe position to place queen on board
	if ( ferme[q]==q )
		return false;
	else
		return true;
}

var solution = new Array(
	new Array(0,12,23,29,34,46,49,59),
	new Array(0,13,23,26,38,43,49,60),
	new Array(0,14,19,29,39,41,52,58),
	new Array(0,14,20,31,33,43,53,58),
	new Array(1,11,21,31,34,40,54,60),
	new Array(1,12,22,24,34,47,53,59),
	new Array(1,12,22,27,32,47,53,58),
	new Array(1,13,16,30,35,47,50,60),
	new Array(1,13,23,26,32,43,54,60),
	new Array(1,14,18,29,39,44,48,59),
	new Array(1,14,20,31,32,43,53,58),
	new Array(1,15,21,24,34,44,54,59),
	new Array(2,8,22,28,39,41,51,61),
	new Array(2,12,17,31,32,46,51,61),
	new Array(2,12,17,31,37,43,54,56),
	new Array(2,12,22,24,35,41,55,61),
	new Array(2,12,23,27,32,46,49,61),
	new Array(2,13,17,28,39,40,54,59),
	new Array(2,13,17,30,32,43,55,60),
	new Array(2,13,17,30,36,40,55,59),
	new Array(2,13,19,24,39,44,54,57),
	new Array(2,13,19,25,39,44,54,56),
	new Array(2,13,23,24,35,46,52,57),
	new Array(2,13,23,24,36,46,49,59),
	new Array(2,13,23,25,35,40,54,60),
	new Array(2,14,17,31,36,40,51,61),
	new Array(2,14,17,31,37,43,48,60),
	new Array(2,15,19,30,32,45,49,60),
	new Array(3,8,20,31,33,46,50,61),
	new Array(3,8,20,31,37,42,54,57),
	new Array(3,9,20,31,37,40,50,62),
	new Array(3,9,22,26,37,47,48,60),
	new Array(3,9,22,26,37,47,52,56),
	new Array(3,9,22,28,32,47,53,58),
	new Array(3,9,23,28,38,40,50,61),
	new Array(3,9,23,29,32,42,52,62),
	new Array(3,13,16,28,33,47,50,62),
	new Array(3,13,23,25,38,40,50,60),
	new Array(3,13,23,26,32,46,52,57),
	new Array(3,14,16,31,36,41,53,58),
	new Array(3,14,18,31,33,44,48,61),
	new Array(3,14,20,25,37,40,50,63),
	new Array(3,14,20,26,32,45,55,57),
	new Array(3,15,16,26,37,41,54,60),
	new Array(3,15,16,28,38,41,53,58),
	new Array(3,15,20,26,32,46,49,61),
	new Array(4,8,19,29,39,41,54,58),
	new Array(4,8,23,27,33,46,50,61),
	new Array(4,8,23,29,34,46,49,59),
	new Array(4,9,19,29,39,42,48,62),
	new Array(4,9,19,30,34,47,53,56),
	new Array(4,9,21,24,38,43,55,58),
	new Array(4,9,23,24,35,46,50,61),
	new Array(4,10,16,29,39,41,51,62),
	new Array(4,10,16,30,33,47,53,59),
	new Array(4,10,23,27,38,40,53,57),
	new Array(4,14,16,26,39,45,51,57),
	new Array(4,14,16,27,33,47,53,58),
	new Array(4,14,17,27,39,40,50,61),
	new Array(4,14,17,29,34,40,51,63),
	new Array(4,14,17,29,34,40,55,59),
	new Array(4,14,19,24,34,47,53,57),
	new Array(4,15,19,24,34,45,49,62),
	new Array(4,15,19,24,38,41,53,58),
	new Array(5,8,20,25,39,42,54,59),
	new Array(5,9,22,24,34,44,55,59),
	new Array(5,9,22,24,35,47,52,58),
	new Array(5,10,16,30,36,47,49,59),
	new Array(5,10,16,31,35,41,54,60),
	new Array(5,10,16,31,36,41,51,62),
	new Array(5,10,20,30,32,43,49,63),
	new Array(5,10,20,31,32,43,49,62),
	new Array(5,10,22,25,35,47,48,60),
	new Array(5,10,22,25,39,44,48,59),
	new Array(5,10,22,27,32,47,49,60),
	new Array(5,11,16,28,39,41,54,58),
	new Array(5,11,17,31,36,46,48,58),
	new Array(5,11,22,24,34,44,49,63),
	new Array(5,11,22,24,39,41,52,58),
	new Array(5,15,17,27,32,46,52,58),
	new Array(6,8,18,31,37,43,49,60),
	new Array(6,9,19,24,39,44,50,61),
	new Array(6,9,21,26,32,43,55,60),
	new Array(6,10,16,29,39,44,49,59),
	new Array(6,10,23,25,36,40,53,59),
	new Array(6,11,17,28,39,40,50,61),
	new Array(6,11,17,31,37,40,50,60),
	new Array(6,12,18,24,37,47,49,59),
	new Array(7,9,19,24,38,44,50,61),
	new Array(7,9,20,26,32,46,51,61),
	new Array(7,10,16,29,33,44,54,59),
	new Array(7,11,16,26,37,41,54,60)
	);

var haz = Math.floor( solution.length * Math.random() );

function help ()
{ //help print an example of 8 queens
	clearBoard();
	for (var i=0; i<8; i++) {
		window.document.images[(imgmenu+ solution[haz][i]) ].src = imgQueen.src;
	}
	count=8;
	for (var q=0; q<64; q++) {
		ferme[q] = q;
	}
haz++;
	if (haz==solution.length) {haz=0;}
}

function clearBoard ()
{ //clear the image array
	for (var i=0; i<64; i++) {
	window.document.images[(imgmenu+i)].src = imgEmpty.src;
	}
	count=0;
	ferme = new Array(64);
}

