/*
	formations
*/

function Formations_rectangle(width, height, frame, fill)
{
	frame = frame != null ? frame : 1
	fill = fill != null ? fill : frame
	var outer = stringRepeat('' + frame, width)
	var inner = '' + frame + stringRepeat('' + fill, width - 2) + frame
	var result = outer
	for (var row = 2; row < height; row++) {
		result += ('.' + inner)
	}			
	return result + '.' + outer
}

function Formations_diamond(size, frame, fill)
{
	var result = ''

	frame = frame != null ? frame : 1
	fill = fill != null ? fill : frame

	var half = Math.floor(size / 2)
	var odd = size - 2 * half
	var even = 1 - odd
	var row, col
	var resultRowCount = size - half
	var resultRows = new Array(resultRowCount)
	for (row = 0; row < size - half; row++) {
		resultRows[row] = ''
		for (col = 0; col < half - row - even; col++) {
			resultRows[row] += '0'
		}
		resultRows[row] += frame
		for (col = half - row; col < half; col++) {
			resultRows[row] += fill
		}
		resultRows[row] += stringReverse(resultRows[row].substring(0, resultRows[row].length - odd))
		result += '.' + resultRows[row]
	}
	row -= (1 + odd);
	while (row >= 0) {
		result += '.' + resultRows[row--]
	}

	return result.substring(1) // remove leading '.'
}

function Formations_width(formationString)
{
	var result = 0
	var rows = formationString.split('.')
	for (var i = 0; i < rows.length; i++) {
		if (rows[i] != null && rows[i].length > result) {
			result = rows[i].length
		}
	}
	return result
}

function Formations_height(formationString)
{
	return formationString.split('.').length
}

function Formations() {
	this.rectangle = Formations_rectangle
	this.diamond = Formations_diamond
	this.height = Formations_height
	this.width = Formations_width
}


var formations = new Formations()
