/**
 * Name: Isometric map generator.
 * By:   FireFly (firefly.nu).
 * Date: 2009-04-22.
 */
function setupTiles() {	
	var grass = new TileType('tGrass', false, false);
	var water = new TileType('tWater', true,  true);
	
	tileTypes = [ grass, water ];
}

function setupMap() {
		debug("Skapar element för karta... ");
	mapCreateElements();
		debug("klar!\nFixar kantdelar... ");
	mapFixBorderTiles();
		debugln("klar!");
}

function mapFixBorderTiles() {
	var i, j, bordering;
	for (var x=0; x<map.length; x++)
		for (var y=0; y<map[x].length; y++)
			if (map[x][y].type.hasBorders) {
				bordering = 0; // Markera bordering med biten som representerar varje tile-riktning.
				if (x>0)
					bordering += ((map[x-1][y].type != map[x][y].type)?1:0) << 0;
				if (x<width-1)
					bordering += ((map[x+1][y].type != map[x][y].type)?1:0) << 1;
				if (y>0)
					bordering += ((map[x][y-1].type != map[x][y].type)?1:0) << 2;
				if (y<height-1)
					bordering += ((map[x][y+1].type != map[x][y].type)?1:0) << 3;
				
				if (bordering > 0)
					map[x][y].element.className = 'tTile '+tileTypes[0].class;
				
				map[x][y].overlay.className = 'tOverlay '+map[x][y].type.class;
				map[x][y].overlay.style.backgroundPosition = '0 -'+(16*bordering)+'px';
			}
}

function mapCreateElements() {
	var element, gridDiv, overlay;
	for (var x in map)
		for (var y in map[x]) {
			element = document.createElement('div');
			
			gridDiv = element.cloneNode(false);
			overlay = element.cloneNode(false);
			
			element.style.left = (map[x][y].x+map[x][y].y)*17;
			element.style.top  = (map[x][y].x-map[x][y].y)*8 + 17*height/2;
			
			gridDiv.className  = 'tGrid';
			overlay.className  = 'tOverlay';
			element.className  = 'tTile '+map[x][y].type.class;
			
			map[x][y].setElements(element, overlay);
			element.onclick = 'map['+x+']['+y+'].select()';
			
			element.appendChild(overlay);
			element.appendChild(gridDiv);
			elMap.appendChild(element);
		}
}

	/*** Prototype: TileType ***/
function TileType(class, isWater, hasBorders) {
	this.class = class;
	this.hasBorders = hasBorders;
	this.isWater = isWater;
}

	/*** Prototype: MapTile ***/
function MapTile(x, y, type) {
	this.x = x;
	this.y = y;
	this.type = type;
	this.selected = false;
	this.element = null;
	this.overlay = null;
	
	this.setElements = function(element, overlay) {
		this.element = element;
		this.overlay = overlay;
	}
	this.select = function() {
		this.selected = !this.selected;
		if (this.selected) {
			this.element.style.opacity = '0.7';
		}
		else
			this.element.style.opacity = '1.0';
	}
}