var rowCount;var colCount;var removedSpaces;var tileSet = "Default";var removedSpacesSuccessful = 0;var finalCount;function generateboardfromform(){	if (document.getElementById('genstyle') != null)	{		tileSet = document.getElementById('genstyle').options[document.getElementById('genstyle').selectedIndex].value;	}	var doorWidthSelect = document.getElementById('gendoorwidth');	var doorSelect = document.getElementById('gendoors');	var genRows = document.getElementById('genrows').options[document.getElementById('genrows').selectedIndex].value;	var genColumns = document.getElementById('gencolumns').options[document.getElementById('gencolumns').selectedIndex].value;	var genRemoved = document.getElementById('genremoved').options[document.getElementById('genremoved').selectedIndex].value;	var doorWidth = doorWidthSelect.options[doorWidthSelect.selectedIndex].value;	var doors = doorSelect.options[doorSelect.selectedIndex].value;	if (doors == "Random") { doors = Math.floor(Math.random()*4) + 1; }	if (genRows == "Random") { genRows = Math.floor(Math.random()*10) + 1; }	if (genColumns == "Random") { genColumns = Math.floor(Math.random()*10) + 1; }	if (genRemoved == "Random") { genRemoved = Math.floor(Math.random()*11); }	if (doorWidth == "Random") { doorWidth = Math.floor(Math.random()*3) + 1; }	if (doorWidth > Math.max(genRows, genColumns))	{		doorWidth = Math.min(genRows, genColumns); 		if (doorWidthSelect.options[doorWidthSelect.selectedIndex].value != "Random")		{			for (var i=0; i< doorWidthSelect.length; i++){				if (doorWidthSelect[i].value == doorWidth) { doorWidthSelect.selectedIndex = i; break; }			}		}	}	if ((doorWidth > genRows || doorWidth > genColumns) && doors > 2) 	{		doors = 2; 		if (doorSelect.options[doorSelect.selectedIndex].value != "Random") 		{			for (var i=0; i< doorSelect.length; i++){				if (doorSelect[i].value == doorWidth) { doorSelect.selectedIndex = i; break; }			}		}	}	if (genRemoved >= (genColumns * genRows))	{		genRemoved = (genColumns * genRows) - 1;	}	generateRemovedSpacesList(genRows, genColumns, genRemoved, false)	generateboard(parseInt(genRows), parseInt(genColumns), parseInt(doors), parseInt(doorWidth), removedSpaces);}function generateBoardOnLoad(rows, columns, doors, doorWidth, removedSpacesCount){	generateRemovedSpacesList(rows, columns, removedSpacesCount, false)	generateboard(rows,columns, doors, doorWidth, removedSpaces);}function generateRemovedSpacesList(rows, columns, removedSpacesCount, append){	if (append == false) {removedSpaces = new Array(); }	var removedSpaceRow;	var removedSpaceColumn;	var addedRemovedSpaces = 0;		while (addedRemovedSpaces < removedSpacesCount)	{		removedSpaceRow = Math.floor(Math.random()*rows) + 1;		removedSpaceColumn = Math.floor(Math.random()*columns) + 1;		var spaceMatch = false;		for (var i=0; i<removedSpaces.length; i++)		{			if (removedSpaceRow == removedSpaces[i][0] && removedSpaceColumn == removedSpaces[i][1]) { 				spaceMatch = true;				continue;			}		}		if (!spaceMatch) {removedSpaces.push(new Array(removedSpaceRow,removedSpaceColumn)); addedRemovedSpaces++;}	}	return removedSpaces;}function generateboard(rows, columns, doors, doorWidth, removedSpaces){	rowCount = rows;	colCount = columns;	document.getElementById("saveboarddoor").innerHTML = "";		generatebaseboard();			removedSpacesSuccessful = 0;			while(removedSpaces.length > 0)	{		var spaceRemoved = setSpaceEmpty(removedSpaces[0][0],removedSpaces[0][1]);		removedSpaces.shift();		if (!spaceRemoved) { generateRemovedSpacesList(rows, columns, 1, true); }	}	generatesquares();		var placedDoorCount = 0;	var attemptedPlacedDoorCount = 0;	while (placedDoorCount < doors)	{		if (attemptedPlacedDoorCount > doors) { doorWidth--; attemptedPlacedDoorCount == 0; }		if (placedoor(doorWidth)) {placedDoorCount++;}		attemptedPlacedDoorCount++;			}		document.getElementById("board").style.cssText = "width: " +(colCount * 95) + "px; margin-left:auto; margin-right:auto;";	generateSaveBoardString();	document.getElementById("saveboarddoor").innerHTML = document.getElementById("saveboarddoor").innerHTML.substring(0, document.getElementById("saveboarddoor").innerHTML.length - 2);	document.getElementById("saveboardstyle").innerHTML = tileSet;	setupSaveForm();}function generateSaveBoardString(){	var boardstring = '';	for(var i = 0; i < rowCount + 2; i++)	{		for(var n = 0; n < colCount + 2; n++)		{			boardstring = boardstring + document.getElementById('r'+i+'c'+n).className +"|";		}		boardstring = boardstring + "|";	}	document.getElementById("saveboard").innerHTML =  boardstring.substring(0,boardstring.length - 2);}function setSpaceEmpty(row, column){	if (document.getElementById('r'+row+'c'+column).className == 'e') { return false; }	document.getElementById('r'+row+'c'+column).className = 'e';	//Find a filled space	var testRow = 1;	var testColumn = 1;	var visitBoard = new Array(rowCount + 1)	var testSpaceList = new Array();	var visitCount = 0;	for (var i = 1; i <= rowCount+1; i++)	{		visitBoard[i] = new Array(colCount + 2);	}		while(document.getElementById('r'+testRow+'c'+testColumn).className == 'e')	{	 	testRow = Math.floor(Math.random()*rowCount) + 1;		testColumn = Math.floor(Math.random()*colCount) + 1;	}	visitBoard[testRow][testColumn] = 'v';	visitCount++;	//From there, set the test spaces up	testSpaceList.push(new Array(testRow - 1, testColumn));	testSpaceList.push(new Array(testRow + 1, testColumn));	testSpaceList.push(new Array(testRow, testColumn - 1));	testSpaceList.push(new Array(testRow, testColumn + 1));		while (testSpaceList.length > 0)	{		if (testSpaceList[0][0] == 0 || testSpaceList[0][1] == 0 || testSpaceList[0][0] > rowCount || testSpaceList[0][1] > colCount) { testSpaceList.shift(); continue;}		if (document.getElementById('r'+testSpaceList[0][0]+'c'+testSpaceList[0][1]).className == 'e') { testSpaceList.shift(); continue;}		if (visitBoard[testSpaceList[0][0]][testSpaceList[0][1]] == 'v') { testSpaceList.shift(); continue;}		visitCount++;		visitBoard[testSpaceList[0][0]][testSpaceList[0][1]] = 'v';		testSpaceList.push(new Array(testSpaceList[0][0] - 1, testSpaceList[0][1]));		testSpaceList.push(new Array(testSpaceList[0][0] + 1, testSpaceList[0][1]));		testSpaceList.push(new Array(testSpaceList[0][0], testSpaceList[0][1] - 1));		testSpaceList.push(new Array(testSpaceList[0][0], testSpaceList[0][1] + 1));			}		if (visitCount + removedSpacesSuccessful + 1 != rowCount * colCount)	{		document.getElementById('r'+row+'c'+column).className = "";		 finalCount++;		 if (finalCount > 10) {removedSpaces = new Array(); return true;}		return false;	}	removedSpacesSuccessful++;	document.getElementById('r'+row+'c'+column).innerHTML = '';	return true;}function generatebaseboard(){	var table = document.getElementById("board");	while ( table.hasChildNodes() ) { table.removeChild(table.firstChild); }	var tb = document.createElement("tbody");	for(var i = 0; i < rowCount + 2; i++)	{		var row = document.createElement('tr');		for(var n = 0; n < colCount + 2; n++)		{			var cell = document.createElement('td');			if (n==0 || n==colCount+1 || i==0 || i==rowCount+1)			{				cell.className = "e";			}			else			{				var content = document.createElement('img');				content.setAttribute('src', 'images/' + tileSet + '/Square.png');				cell.appendChild(content);			}			cell.id = 'r'+i+'c'+n;			row.appendChild(cell);					}		tb.appendChild(row);	}		table.appendChild(tb);}function generatesquares(){	var table = document.getElementById("board");	for(var i = 1; i <= rowCount; i++)	{		for(var n = 1; n <= colCount; n++)		{			var cell = document.getElementById('r'+i+'c'+n);			var edgeType = getEdge(i,n);			var content = document.createTextNode(edgeType);			var topMarginStyle = 'margin-top: -95px; margin-left: -95px;';			var leftMarginStyle = 'margin-left: -95px;'			var upStyle = topMarginStyle;			var downStyle = topMarginStyle;			var up = edgeType.indexOf('u') != -1;			var down = edgeType.indexOf('d') != -1;			var left = edgeType.indexOf('l') != -1;			var right = edgeType.indexOf('r') != -1;			var blank = edgeType.indexOf('n') != -1;			if (up)			{				cell.innerHTML += "<img id='u_"+'r'+i+'c'+n+"' src='images/" + tileSet + "/u.png' style='"+topMarginStyle+"' />";				upStyle = leftMarginStyle + topMarginStyle;			}			if (right)			{				cell.innerHTML += "<img id='r_"+'r'+i+'c'+n+"' style='"+upStyle+"' src='images/" + tileSet + "/r.png' />";				if (up) { cell.innerHTML += "<img style='"+upStyle+"' src='images/" + tileSet + "/ur.png' />"; }				downStyle =leftMarginStyle + topMarginStyle;			}			if (left)			{				if (right && !up)				{					upStyle = upStyle + topMarginStyle;				}				cell.innerHTML += "<img id='l_"+'r'+i+'c'+n+"' style='"+upStyle+"' src='images/" + tileSet + "/l.png' />";				if (up) { cell.innerHTML += "<img style='"+upStyle+"' src='images/" + tileSet + "/ul.png' />"; }				downStyle =leftMarginStyle + topMarginStyle;			}			if (down)			{				downStyle = downStyle + topMarginStyle;					cell.innerHTML += "<img id='d_"+'r'+i+'c'+n+"' style='"+downStyle+"' src='images/" + tileSet + "/d.png' />";				if (right) { cell.innerHTML += "<img style='"+downStyle+"' src='images/" + tileSet + "/dr.png' />"; }				if (left) { cell.innerHTML += "<img style='"+downStyle+"' src='images/" + tileSet + "/dl.png' />"; }			}			if (!blank)			{				//test outer corners				var outerTopLeft = false;				var outerDownLeft = false;				var outerTopRight = false;				var outerDownRight = false;				if (i>=2 && n>=2)				{					outerTopLeft = getEdge(i-1,n).indexOf('l') != -1 && getEdge(i,n-1).indexOf('u') != -1;					if (outerTopLeft && !up && !left)					{						if (down && right) { downStyle = topMarginStyle; }						if (down) {downStyle += topMarginStyle;}						cell.innerHTML += "<img style='"+downStyle+"' src='images/" + tileSet + "/ulx.png' />";					}				}				if (i<rowCount && n>=2)				{					outerDownLeft = getEdge(i+1,n).indexOf('l') != -1 && getEdge(i,n-1).indexOf('d') != -1;					if (outerDownLeft && !down && !left)					{						if ((up || outerTopLeft) && right) { downStyle = topMarginStyle; }						if (up || outerTopLeft) {downStyle += topMarginStyle;}						cell.innerHTML += "<img style='"+downStyle+"' src='images/" + tileSet + "/dlx.png' />";					}				}				if (i>=2 && n<colCount)				{					outerTopRight = getEdge(i-1,n).indexOf('r') != -1 && getEdge(i,n+1).indexOf('u') != -1;					if (outerTopRight && !up && !right)					{						if (down && left) { downStyle = topMarginStyle; }						if (down || outerTopLeft) {downStyle += topMarginStyle;}						cell.innerHTML += "<img style='"+downStyle+"' src='images/" + tileSet + "/urx.png' />";					}				}				if (i<rowCount && n<colCount)				{					outerDownRight = getEdge(i+1,n).indexOf('r') != -1 && getEdge(i,n+1).indexOf('d') != -1;					if (outerDownRight && !down && !right)					{						if (left) { downStyle = topMarginStyle; }						if (up || outerDownLeft || outerTopLeft || outerTopRight) {downStyle += topMarginStyle;}						cell.innerHTML += "<img style='"+downStyle+"' src='images/" + tileSet + "/drx.png' />";					}				}			}			cell.className = edgeType;		}	}}function placedoor(doorWidth){	var placedDoor = false;	var attempts = 0;	//0 = Up, 1 = Down, 2 = Left, 3 = Right	while (placedDoor == false)	{		var randomRow = Math.floor(Math.random()*(rowCount)) + 1;		var randomColumn = Math.floor(Math.random()*(colCount)) + 1;		var randomSide = Math.floor(Math.random()*4);		attempts++		if (attempts > 100) {return false;}		if (!checkForAllowedDoor(randomRow, randomColumn, doorWidth, randomSide)) { continue; }		placedDoor = placeDoorImages(randomRow, randomColumn, doorWidth, randomSide);	}	return true;}function checkForAllowedDoor(startRow, startCol, width, side){	for(var i=0; i< width; i++)	{		switch(side)		{			case 0:				if (!checkPossibleDoorSpace('u','u_r'+(startRow)+'c'+(startCol + i), startRow, startCol+i)) {return false; }				break;			case 1:				if (!checkPossibleDoorSpace('d','d_r'+(startRow)+'c'+(startCol + i), startRow, startCol+i)) {return false; }				break;			case 2:				if (!checkPossibleDoorSpace('l','l_r'+(startRow+i)+'c'+(startCol), startRow+i, startCol)) {return false; }				break;			case 3:				if (!checkPossibleDoorSpace('r','r_r'+(startRow+i)+'c'+(startCol), startRow+i, startCol)) {return false; }				break;		}	}	return true;}function checkPossibleDoorSpace(typeletter, elementID, row, column){	if (document.getElementById(elementID) == null) {return false; }	if (document.getElementById(elementID).getAttribute('src').indexOf(typeletter + 'o') != -1) {return false;}	switch (typeletter)	{		case 'd':		while (row < rowCount)		{			row++;			if (!checkSpaceBlank(row, column)) {return false;}		}		case 'u':		while (row > 0)		{			row--;			if (!checkSpaceBlank(row, column)) {return false;}		}		case 'r':		while (column < colCount)		{			column++;			if (!checkSpaceBlank(row, column)) {return false;}		}		case 'l':		while (column > 0)		{			column--;			if (!checkSpaceBlank(row, column)) {return false;}		}	}	return true;}function checkSpaceBlank(row, column){	var squareType = document.getElementById('r'+row+'c'+column).className;	if (squareType != 'n' && squareType != 'e') { return false; }	return true;}function placeDoorImages(startRow, startCol, width, side){	document.getElementById("saveboarddoor").innerHTML += startRow + "|" + startCol + "|" + width + "|" + side + "||";		for(var i=0; i< width; i++)	{		switch(side)		{			case 0:				if (width==1) { document.getElementById('u_r'+(startRow)+'c'+(startCol + i)).setAttribute('src', 'images/' + tileSet + '/uo.png'); }				else				{					if (i==0) { document.getElementById('u_r'+(startRow)+'c'+(startCol + i)).setAttribute('src', 'images/' + tileSet + '/uo1.png'); }					else if (i== width -1) { document.getElementById('u_r'+(startRow)+'c'+(startCol + i)).setAttribute('src', 'images/' + tileSet + '/uo2.png'); }					else { document.getElementById('u_r'+(startRow)+'c'+(startCol + i)).setAttribute('src', 'images/' + tileSet + '/uog.png'); }				}				break;			case 1:				if (width==1) { document.getElementById('d_r'+(startRow)+'c'+(startCol + i)).setAttribute('src', 'images/' + tileSet + '/do.png'); }				else				{					if (i==0) { document.getElementById('d_r'+(startRow)+'c'+(startCol + i)).setAttribute('src', 'images/' + tileSet + '/do1.png'); }					else if (i== width -1) { document.getElementById('d_r'+(startRow)+'c'+(startCol + i)).setAttribute('src', 'images/' + tileSet + '/do2.png'); }					else { document.getElementById('d_r'+(startRow)+'c'+(startCol + i)).setAttribute('src', 'images/' + tileSet + '/dog.png'); }				}				break;			case 2:				if (width==1) { document.getElementById('l_r'+(startRow + i)+'c'+(startCol)).setAttribute('src', 'images/' + tileSet + '/lo.png'); }				else				{					if (i==0) { document.getElementById('l_r'+(startRow + i)+'c'+(startCol)).setAttribute('src', 'images/' + tileSet + '/lo1.png'); }					else if (i== width -1) { document.getElementById('l_r'+(startRow + i)+'c'+(startCol)).setAttribute('src', 'images/' + tileSet + '/lo2.png'); }					else { document.getElementById('l_r'+(startRow + i)+'c'+(startCol)).setAttribute('src', 'images/' + tileSet + '/log.png'); }				}				break;			case 3:				if (width==1) { document.getElementById('r_r'+(startRow + i)+'c'+(startCol)).setAttribute('src', 'images/' + tileSet + '/ro.png'); }				else				{					if (i==0) { document.getElementById('r_r'+(startRow + i)+'c'+(startCol)).setAttribute('src', 'images/' + tileSet + '/ro1.png'); }					else if (i== width -1) { document.getElementById('r_r'+(startRow + i)+'c'+(startCol)).setAttribute('src', 'images/' + tileSet + '/ro2.png'); }					else { document.getElementById('r_r'+(startRow + i)+'c'+(startCol)).setAttribute('src', 'images/' + tileSet + '/rog.png'); }				}				break;		}	}		return true;}function getEdge(row, col){	var currentCellContents = document.getElementById('r'+row+'c'+col).className;	var upCellContents = document.getElementById('r'+(row-1)+'c'+col).className;	var downCellContents = document.getElementById('r'+(row+1)+'c'+col).className;	var leftCellContents = document.getElementById('r'+row+'c'+(col-1)).className;	var rightCellContents = document.getElementById('r'+row+'c'+(col+1)).className;	var edgeType = "";	if (currentCellContents == "e") { return "n"; }	if (upCellContents == "e" || upCellContents == "n") {edgeType = edgeType + "u";}	if (downCellContents == "e" || downCellContents == "n") {edgeType = edgeType + "d";}	if (leftCellContents == "e" || leftCellContents == "n") {edgeType = edgeType + "l";}	if (rightCellContents == "e" || rightCellContents == "n") {edgeType = edgeType + "r";}	if (edgeType == "") {edgeType = "_";}	return edgeType;}function generateBoardFromSave(boardstring, doorstring, stylestring, boardname){	tileSet = stylestring;		var rows = boardstring.split("||");	var table = document.getElementById("board");	while ( table.hasChildNodes() ) { table.removeChild(table.firstChild); }	var tb = document.createElement("tbody");	for (var i = 0; i < rows.length; i++)	{		var row = document.createElement('tr');		var cols = rows[i].split('|');		for(var n = 0; n < cols.length; n++)		{			appendBaseSquare(row, cols[n],i,n);		}		tb.appendChild(row);	}	table.appendChild(tb);		rowCount = rows.length-2;	colCount = cols.length-2;	generatesquares();		var doors = doorstring.split("||");	for (var i= 0; i < doors.length; i++)	{		var doorInfo = doors[i].split("|");		placeDoorImages(parseInt(doorInfo[0]),parseInt(doorInfo[1]),parseInt(doorInfo[2]),parseInt(doorInfo[3]));	}		document.getElementById("board").style.cssText = "width: " +(colCount * 95) + "px; margin-left:auto; margin-right:auto;";	document.getElementById("saveboard").innerHTML = boardstring;	document.getElementById("saveboardstyle").innerHTML = stylestring;	document.getElementById("saveboarddoor").innerHTML = doorstring;	if (document.getElementById("saveboardname") != null) { document.getElementById("saveboardname").value = boardname;}	setupSaveForm();}function appendBaseSquare(row, squaretype, rowID, colID){	var cell = document.createElement('td');	cell.className = squaretype;	if (squaretype != "e")	{		var content = document.createElement('img');		content.setAttribute('src', 'images/' + tileSet + '/Square.png');		cell.appendChild(content);	}	cell.id = 'r'+rowID+'c'+colID;	row.appendChild(cell);	return row;}function setupSaveForm(){	if (document.getElementById("saveboarddetail") != null) { document.getElementById("saveboarddetail").value = document.getElementById("saveboard").innerHTML; }	if (document.getElementById("saveboardstyledetail") != null) { document.getElementById("saveboardstyledetail").value = document.getElementById("saveboardstyle").innerHTML; }	if (document.getElementById("saveboarddoordetail") != null) { document.getElementById("saveboarddoordetail").value = document.getElementById("saveboarddoor").innerHTML; }}