
function x_octal_template_mapsize()
{
	return {
		width: 600,
		height: 410
	};
}


function x_octal_template_load()
{
	// Do the map sizing thing.
	var mapElem = document.getElementById('map');
	if (mapElem) {
		mapElem.x_octal_mapsize = x_octal_template_mapsize;
	}

	// Vertically align the language selector.
	vertical_align_middle(document.getElementById('lang_inner'));

	var topmenu = document.getElementById('menu_main');
	if (isIE6() && topmenu) {
		// Because IE6 is a piece of crap and can only do :hover CSS rules on
		// <a> elements, menu_a elements need <a> elements in them.
		for (var i = 0; i < topmenu.childNodes.length; ++i) {
			var topmenuitem = topmenu.childNodes.item(i);
			if (octalClass_inlist(topmenuitem, 'menu_a')) {
				var a = document.createElement('a');
				while (topmenuitem.childNodes.length > 0) {
					a.appendChild(topmenuitem.childNodes.item(0));
				}
				topmenuitem.appendChild(a);
				// And because IE is even crapper than you think, a:hover only
				// works if the <a> in question has an "href" attribute. FFS!!
				a.setAttribute('href', '#');
			}
		}
	}

	// Load and construct the flyout menu.
	var menutree = octalXmlHttpSync(ajaxbase + '/menu.xml');
	for (var i = 0;
			menutree
			&& menutree.responseXML
			&& topmenu
			&& topmenu.childNodes
			&& topmenu.childNodes.length
			&& i < topmenu.childNodes.length;
			++i)
	{
		var topmenuitem = topmenu.childNodes.item(i);
		if (!topmenuitem.tagName
				|| topmenuitem.tagName.toLowerCase() != 'div'
				|| !(octalClass_inlist(topmenuitem, 'menu_d')
					|| octalClass_inlist(topmenuitem, 'menu_a')))
		{
			continue;
		}

		var menutreesubitems = octalHovermenuSubitems(
				octalHovermenuFind(menutree.responseXML.documentElement,
					octalDomText(topmenuitem)));
		if (!menutreesubitems
				|| !menutreesubitems.length
				|| menutreesubitems.length == 1)
		{
			continue;
		}

		octalHovermenuAdd(topmenuitem,
				octalHovermenuFromMenuitems(document, menutreesubitems),
				{
					overlap: 0,
					vertical: true,
					expandmargin: true,
					expand: 'click',
					initialexpanded: octalClass_inlist(topmenuitem, 'menu_a')
				});

		octalClass_add(topmenuitem, 'hasflyout');
	}

	// Why the hell can CSS not right-align (not float, just align) one
	// block-level element inside another? Useless piece of rubbish.
	var cells = document.getElementsByTagName('td');
	for (var i = 0; i < cells.length; ++i) {
		var cell = cells.item(i);
		if (octalClass_inlist(cell, 'submit')) {
			for (var j = 0; j < cell.childNodes.length; ++j) {
				horizontal_align_right(cell.childNodes.item(j));
			}
		}
	}

	var vertbar = document.getElementById('vertbar');
	var vertborder = document.getElementById('vertborder');
	var hdrElem = document.getElementById('hdr');
	var spacerElem = document.getElementById('spacer');
	if (vertbar && vertborder && hdrElem && spacerElem) {
		var topHeight
			= elemPos(spacerElem).outerBottom
			- elemPos(hdrElem).outerTop;
		vertbar.style.height = topHeight + 'px';
		vertborder.style.height = topHeight + 'px';
	}
}


octalAddEventListener(window, 'load', x_octal_template_load);
