var g_mapinit = 0;
var g_floorinit = 0;
var g_busy = false;
var g_lastwid = 0;
 
window.onresize = resizefunc;

function resizefunc()
{
	var newwid = document.documentElement.clientWidth;
	if (newwid == g_lastwid)
		return;
	g_lastwid = newwid;
	RoomMap(-1);
	FloorMap(-1);
}
 
function adjustimages()
{
	var i = 1;
	var el = true;
	while (el) {
		var maxht = 0;
		var maximght = 0;
		var row = -1;
		var startid = i;
		while (el = document.getElementById('imagespan' + i)) {
			var imgel = document.getElementById('image' + i)
			var imgpos = GetPos(imgel);
			if (row < 0)
				row = imgpos[1];
			else if (row != imgpos[1])  // end of the row
				break;
			imgel = imgel.firstChild;
			while (imgel && imgel.tagName == 'A') {
				var imght = imgel.firstChild.clientHeight;
				if (imght > maximght)
					maximght = imght;
				imgel = imgel.nextSibling;
			}
			if (el.offsetHeight > maxht)
				maxht = el.offsetHeight;
			i++;
		}
		var newht = maximght + maxht + 16;
		var j;  // increase height of the row
		chg = false;
		for (j = startid; j < i; j++) {
			imgel = document.getElementById('image' + j);
			var curht = parseInt(imgel.style.height.substr(0, imgel.style.height.length - 2));
			if (curht != newht)
				chg = true;
			imgel.style.height = newht + 'px';
		}
		if (el && chg)
			setTimeout('adjustimages()', 100)
	}
}

function ExtMap(id)
{
	var i;
	for (i = 0; i < 5; i++) {
		var el = document.getElementById('map' + i);
		if (!el)
			continue;
		if (i == id)
			el.style.display = 'block';
		else
			el.style.display = 'none';
	}
}

function Shoppe(id)
{
	var i;
	for (i = 0; i < 5; i++) {
		var el = document.getElementById('shoppe' + i);
		if (!el)
			continue;
		if (i == id)
			el.style.display = 'block';
		else
			el.style.display = 'none';
	}
}

// id = -1 is code for init onload
function RoomMap(id)
{
	if (g_busy) {
		setTimeout('RoomMap(' + id + ')', 100);
		return;
	}
	g_busy = true;
	
	var cornerleft = new Array(12,12,12,111,182,111,255,255,346,346,437,507,478,582,582,581);
	var cornertop = new Array(13,88,149,14,14,142,14,137,14,137,14,14,142,14,88,149);
	var cornerright = new Array(103,104,104,178,248,207,339,339,430,430,502,574,574,672,672,672);	
	var cornerbottom = new Array(83,144,229,104,104,229,131,229,131,229,104,104,229,83,144,229);
	
	var numrooms = 16;
	var el, i;
	if (id < 0) {  // initialize page
		if (id == -1) {
			el = document.getElementById('loading');
			if (el)
				el.style.display = 'none';
			el = document.getElementById('loading2');
			if (el)
				el.style.display = 'none';
			el = document.getElementById('roommap0');
			if (el)
				el.style.display = 'block';
			el = document.getElementById('roommap02');
			if (el)
				el.style.display = 'block';
			g_busy = false;
			setTimeout('RoomMap(-2)', 100);
			return;
		}
	
		el = document.getElementById('roomimg');
		if (!el) {
			g_busy = false;
			return;
		}
		el.style.display = 'block';
		var basex, basey;
		var pos = GetPos(el);
		basex = pos[0];
		basey = pos[1];
		if (!basex && !basey) {
			g_busy = false;
			setTimeout('RoomMap(-1)', 100);
			return;
		}

		var el2 = document.getElementById('roomimg2');
		var basex2 = 0, basey2 = 0;
		if (el2) {
			el2.style.display = 'block';
			pos = GetPos(el2);
			basex2 = pos[0];
			basey2 = pos[1];
			el2 = document.getElementById('roompath');
			el2.style.left = Math.floor((basex + (el.clientWidth - el2.clientWidth) / 2) + 1) + 'px';
			el2.style.top = (basey + el.clientHeight - 19) + 'px';
		}
		i = 0;
		while (el = document.getElementById('label' + i)) {
			el.style.width = (cornerright[i % numrooms] - cornerleft[i % numrooms] + 1 - 6) + 'px';
			if (i >= numrooms)
				el.style.left = (basex2 + 3 + cornerleft[i % numrooms]) + 'px';
			else
				el.style.left = (basex + 3 + cornerleft[i % numrooms]) + 'px';
			var offset = 2;
			var pad = Math.floor((cornerbottom[i % numrooms] - cornertop[i % numrooms] + 1 - el.clientHeight) * 0.5);
			if (pad > offset)
				offset = pad;
			if (i >= numrooms)
				el.style.top = (basey2 + offset + cornertop[i % numrooms]) + 'px';
			else
				el.style.top = (basey + offset + cornertop[i % numrooms]) + 'px';
			el.style.zIndex = -1;
			if (document.getElementById && !document.all)
				el.onmousedown = function () { return false; } // mozilla
			else
				el.onselectstart = function () { return false; } // ie
			i++;
		}
		for (i = 0; i < 50; i++) {
			el = document.getElementById('roommapx' + i);
			if (!el)
				continue;
			if (i > numrooms) {
				el.style.left = basex2 + 'px';
				el.style.top = basey2 + 'px';
			}
			else {
				el.style.left = basex + 'px';
				el.style.top = basey + 'px';
			}
		}
		g_mapinit = 1;
		g_busy = false;
		return;
	}

	if (!g_mapinit) {
		g_busy = false;
		return false;
	}
		
	for (i = 0; i < 50; i++) {
		el = document.getElementById('roommap' + i);
		if (!el)
			continue;
		if (i == id)
			el.style.display = 'block';
		else
			el.style.display = 'none';
	}
	if (id) {
		el = document.getElementById('label' + (id - 1));
		el.style.zIndex = 1;
	}
	else {
		i = 0;
		while (el = document.getElementById('label' + i)) {
			el.style.zIndex = -1;
			i++;
		}
	}
	g_busy = false;
}

// id = -1 is code for init onload
function FloorMap(id)
{
	if (g_busy) {
		setTimeout('RoomMap(' + id + ')', 100);
		return;
	}
	g_busy = true;

	var cornerleft = new Array(148,346,175,388,1,183,459,179,431);
	var cornertop = new Array(8,34,139,155,216,218,248,326,323);
	var cornerright = new Array(305,678,387,661,146,456,659,432,681);	
	var cornerbottom = new Array(146,162,221,221,436,327,300,392,390);
	
	var numrooms = 9;
	var el, i, flr = 1;
	if (id < 0) {  // initialize page
		i = 0;
		while (el = document.getElementById('floorimg' + flr)) {
			if (id == -1) {
				var ell;
				while (ell = document.getElementById('loading' + flr)) {
					ell.style.display = 'none';
					ell = document.getElementById('floormap10' + flr);
					if (ell)
						ell.style.display = 'block';
					flr++;
				}
				g_busy = false;
				setTimeout('FloorMap(-2)', 100);
				return;
			}
			var basex, basey;
			var pos = GetPos(el);
			basex = pos[0];
			basey = pos[1];
			if (!basex && !basey) {
				g_busy = false;
				setTimeout('FloorMap(-1)', 100);
				return;
			}
			el = document.getElementById('legend' + flr);
			el.style.left = (basex - el.style.width - 50) + 'px';
			el.style.top = (basey + 20) + 'px';
			el = document.getElementById('legends' + flr);
			el.style.left = (basex - el.style.width - 50 - 2) + 'px';
			el.style.top = (basey + 20 + 2) + 'px';
			while (el = document.getElementById('label' + i)) {
				el.style.width = (cornerright[i % numrooms] - cornerleft[i % numrooms] + 1 - 6) + 'px';
				el.style.left = (basex + 3 + cornerleft[i % numrooms]) + 'px';
				var offset = 2;
				var pad = Math.floor((cornerbottom[i % numrooms] - cornertop[i % numrooms] + 1 - el.clientHeight) * 0.5);
				if (pad > offset)
					offset = pad;
				el.style.top = (basey + offset + cornertop[i % numrooms]) + 'px';
				el.style.zIndex = 1;
				if (document.getElementById && !document.all)
					el.onmousedown = function () { return false; } // mozilla
				else
					el.onselectstart = function () { return false; } // ie
				i++;
				if (i % numrooms == 0) {
					flr++;
					break;
				}
			}
			if (!el)
				break;
		}
		for (i = 1; i < 50; i++) {
			el = document.getElementById('floormapx' + i);
			if (!el)
				continue;
			var flr = 1 + (i - 1 - ((i - 1) % numrooms)) / numrooms;
			var elf = document.getElementById('floorimg' + flr);
			var pos = GetPos(elf);
			el.style.left = pos[0] + 'px';
			el.style.top = pos[1] + 'px';
		}
		g_floorinit = 1;
		g_busy = false;
		return;
	}

	if (!g_floorinit) {
		g_busy = false;
		return false;
	}
		
	var	flr;
	if (id == 0)
		flr = 0;
	else
		flr = 1 + (id - 1 - ((id - 1) % numrooms)) / numrooms;
	for (i = 0; i < 50; i++) {
		el = document.getElementById('floormap' + i);
		if (!el)
			continue;
		if (i == id) {
			el.style.display = 'block';
			document.getElementById('floormap10' + flr).style.display = 'none';
		}
		else {
			if (el.style.display == 'block') {
				var curflr = 1 + (i - 1 - ((i - 1) % numrooms)) / numrooms;
				if (flr != curflr)
					document.getElementById('floormap10' + curflr).style.display = 'block';
			}
			el.style.display = 'none';
		}
	}
	if (id) {
		el = document.getElementById('label' + (id - 1));
		el.style.zIndex = 3;
	}
	else {
		i = 0;
		while (el = document.getElementById('label' + i)) {
			el.style.zIndex = 1;
			i++;
		}
	}
	g_busy = false;
}

function GetPos(el)
{
	var basex = el.offsetLeft;
	var basey = el.offsetTop;
	while (el = el.offsetParent) {
		basex += el.offsetLeft;
		basey += el.offsetTop;
		if (el.tagName == 'BODY')
			break;
	}
	return [basex, basey];
}
