function writeHTML(html)
{
	document.open();
	document.write(html);
	document.close();
}

if (!window.attachEvent)
	window.attachEvent = function($name, $handler) { this.addEventListener($name.slice(2), $handler, false);};
if (window.HTMLElement)
{
	if (!HTMLElement.prototype.contains)
		HTMLElement.prototype.contains = function(obj) { return !!(this.compareDocumentPosition(obj) & 16) };
	if (!HTMLElement.prototype.attachEvent)
		HTMLElement.prototype.attachEvent = function($name, $handler) { this.addEventListener($name.slice(2), $handler, false);};
	HTMLElement.prototype.__defineGetter__("currentStyle", function() { return getComputedStyle(this, null);});
}
if (window.Event)
	Event.prototype.__defineGetter__("offsetY", function() { return this.layerY;});

function offsetAbsolute(obj, toHTML)
{
	var width = obj.offsetWidth;
	var height = obj.offsetHeight;
	var left = 0;
	var top = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent && (toHTML || obj.offsetParent.tagName != "BODY"))
		{
			left += obj.offsetLeft;
			top += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
	{
		left = obj.x;
		top = obj.y;
	}
	return { top: top, bottom: top + height, left: left, right: left + width };
}

window.attachEvent("onload", bodyLoad);
window.attachEvent("onresize", recalcLayout);

function bodyLoad()
{
	scrollBar = new ScrollBar(document.getElementById("content"), document.getElementById("contentscrollbar"));
}
var scrollBar;

function ScrollBar(content, scrollBar)
{
	if (!content || !scrollBar)
		return null;
	if (document.isEditor)
		content.runtimeStyle.overflow = "auto";
	var contentScrollHeight;
	var contentHeight;
	var scrollBarPaddingTop = 12;
	var scrollBarPaddingBottom = 12;
	var scrollBarHeight;
	var scrollBarTop;
	var button;
	var buttonHeight;
	var scrollTop = 0;
	var step = 0;
	//
	button = document.createElement("div");
	button.id = "contentscrollbarbutton";
	button.scrolling = -1;
	scrollBar.appendChild(document.createElement("span"));
	scrollBar.appendChild(button);
	button.attachEvent("onmousedown", buttonDown);
	button.attachEvent("onmouseup", buttonUp);
	button.attachEvent("onselectstart", function(event) { return false; });
	button.unselectable = "on";
	scrollBar.attachEvent("onselectstart", function(event) { return false; });
	scrollBar.attachEvent("onmousedown", scrollBarDown);
	scrollBar.attachEvent("onmousewheel", setScroll);
	scrollBar.attachEvent("onDOMMouseScroll", setScroll);
	scrollBar.unselectable = "on";
	content.attachEvent("onmousewheel", setScroll);
	content.attachEvent("onDOMMouseScroll", setScroll);
	content.attachEvent("onscroll", syncScroll);
	document.body.attachEvent("onmouseup", bodyUp);
	document.body.attachEvent("onmousemove", bodyMove);
	this.recalc = function()
	{
		contentScrollHeight = content.scrollHeight;
		contentHeight = content.offsetHeight;
		if (contentScrollHeight <= contentHeight)
			scrollBar.style.display = "none";
		else
		{
			scrollBar.style.display = "block";
			scrollBar.style.height = contentHeight + "px";
			scrollBarHeight = scrollBar.offsetHeight - scrollBarPaddingTop - scrollBarPaddingBottom;
			scrollBarTop = offsetAbsolute(scrollBar, true).top;
			button.style.top = scrollTop + "px";
			buttonHeight = scrollBarHeight * (contentHeight / contentScrollHeight);
			button.style.height = buttonHeight + "px";
		}
	}
	this.recalc();
	window.attachEvent("onresize", this.recalc);

	function buttonDown(event)
	{
		if (!event)
			event = window.event;
		button.scrolling = event.offsetY;
	};
	function buttonUp()
	{
		button.scrolling = -1;
	};
	function scrollBarDown(event)
	{
		if (button.scrolling != -1)
			return;
		if (!event)
			event = window.event;
		if (!event)
		{
			if (step)
			{
				setScroll(scrollTop + step);
				setTimeout(scrollBarDown, 200);
			}
		}
		else
		{
			var y = event.clientY - scrollBarTop - 1;
			if (y < scrollBarPaddingTop)
			{
				step = -8;
				setScroll(scrollTop + step);
				setTimeout(scrollBarDown, 200);
			}
			else if (y > scrollBarHeight + scrollBarPaddingTop)
			{
				step = 8;
				setScroll(scrollTop + step);
				setTimeout(scrollBarDown, 200);
			}
			else
			{
				button.scrolling = buttonHeight / 2;
				setScroll(y - scrollBarPaddingTop - button.scrolling);
			}
		}
	};
	function bodyUp()
	{
		button.scrolling = -1;
		step = 0;
	};
	function bodyMove(event)
	{
		if (button.scrolling == -1)
			return;
		if (!event)
			event = window.event;
		var top = event.clientY - scrollBarTop - scrollBarPaddingTop - button.scrolling;
		setScroll(top);
	};
	function setScroll(top)
	{
		if (typeof(top) != "number")
		{
			var wheelDelta = top.wheelDelta ? top.wheelDelta / 12 : -top.detail * 3;
			if (!wheelDelta)
				return;
			top = scrollTop - wheelDelta;
		}
		if (top < 0)
			top = 0;
		else if (top > scrollBarHeight - buttonHeight)
			top = scrollBarHeight - buttonHeight;
		scrollTop = top;
		button.style.top = top + "px";
		top = (top / (scrollBarHeight - buttonHeight)) * (contentScrollHeight - contentHeight);
		var scrolled = false;
		if (content.scrollTop != top)
		{
			content.scrollTop = top;
			scrolled = true;
		}
		return !scrolled;
	}
	function syncScroll()
	{
		if (button.scrolling != -1)
			return;
		var top = (content.scrollTop / (contentScrollHeight - contentHeight)) * (scrollBarHeight - buttonHeight);
		button.style.top = top + "px";
	}
}

function recalcLayout()
{
	var container = document.getElementById("container");
	var content = document.getElementById("content");
	var intro = document.getElementById("intro");
	if (!container || document.isEditor)
		return;
	var clientHeight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight;
	if (content)
	{
		var offset = container.offsetHeight - content.offsetHeight;
		container.style.height = parseInt(clientHeight * 0.8) + "px";
		var height = container.offsetHeight;
		var top = clientHeight - height;
		container.style.top = "";
		if (top > 0)
			container.style.top = top + "px";
		content.style.height = (height - offset) + "px";
		var mainMenu = document.getElementById("mainmenuflash");
		if (mainMenu)
			mainMenu.style.top = (height - 255) + "px";
	}
	else if (intro)
	{
		var height = parseInt(clientHeight * 0.675);
		container.style.height = height + "px";
		intro.style.top = (height - intro.offsetHeight + 48) + "px";
	}
}

var currentMM = null;

function openMM(srcElement)
{
	if (currentMM)
		closeMM(currentMM);
	var subMenu = document.getElementById("s" + srcElement.id);
	if (!subMenu)
		return;
	var offset = offsetAbsolute(srcElement);
	subMenu.style.visibility = "visible";
	subMenu.style.top = (offset.top - subMenu.offsetHeight) + "px";
	subMenu.style.left = offset.left + "px";
	srcElement.className = "current";
	currentMM = subMenu;
}

function closeMM(srcElement, event)
{
	if (event)
	{
		var el = event.toElement ? event.toElement : event.relatedTarget;
		if (el && srcElement.contains(el))
			return;
	}
	srcElement.style.visibility = "hidden";
	var menu = document.getElementById(srcElement.id.substr(1));
	if (!menu)
		return;
	menu.className = "";
}
