	function getLeft(id) {
		if (document.getElementById(id) == null) { return 0; }
		return document.getElementById(id).offsetLeft;
	}

	function getTop(id) {
		if (document.getElementById(id) == null) { return 0; }
		return document.getElementById(id).offsetTop;
	}

	function getWidth(id) {
		if (document.getElementById(id) == null) { return 0; }
		return document.getElementById(id).offsetWidth;
	}

	function getHeight(id) {
		if (document.getElementById(id) == null) { return 0; }
		return document.getElementById(id).offsetHeight;
	}


	function getElementsByClass(searchClass, node, tag) {
		var classElements = new Array();
		if ( node == null )
			node = document;
		if ( tag == null )
			tag = '*';
		var els = node.getElementsByTagName(tag);
		var elsLen = els.length;
		var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
		for (i = 0, j = 0; i < elsLen; i++) {
			if ( pattern.test(els[i].className) ) {
				classElements[j] = els[i];
				j++;
			}
		}
		return classElements;
	}


	var desk = {
		init: function() {
			pages = getElementsByClass("item", document.getElementById("desk"));

			var maxwidth = 0;
			var maxheight = 0;
			var indentwidth = pages[0].offsetLeft;
			var indentheight = pages[0].offsetTop;
			for (i = 0; i < pages.length; i++) {
				thiswidth = pages[i].offsetLeft + pages[i].offsetWidth;
				if (thiswidth > maxwidth) { maxwidth = thiswidth; }
				thisheight = pages[i].offsetTop + pages[i].offsetHeight;
				if (thisheight > maxheight) { maxheight = thisheight; }

				indentwidth = Math.min(pages[i].offsetLeft, indentwidth);
				indentheight = Math.min(pages[i].offsetTop, indentheight);
			}
			document.getElementById("desk").style.width = (maxwidth + indentwidth) + "px";
			document.getElementById("desk").style.height = (maxheight + indentheight) + "px";

			this.docW = document.getElementById("desk").offsetWidth;
			this.docH = document.getElementById("desk").offsetHeight;
			this.contW = document.getElementById("body").offsetWidth;
			this.contH = document.getElementById("body").offsetHeight;

		}
	}


	var menu = {
		init: function(items) {
			for (var id in items) {
//				if (document.getElementById(prefix_menu + id) != null) {
//					document.getElementById(prefix_menu + id).href = "#";
//				}

				if (document.getElementById(id) != null) {
					items[id][1] = new Scroller(id);
				}

			}
		}
	}


	function Highlight(id) {
		for (var key in items) {
			if (document.getElementById(prefix_menu + key) != null) {
				document.getElementById(prefix_menu + key).className = "def";
			}
		}
		if (document.getElementById(prefix_menu + id) != null) {
			document.title = prefix_title + items[id][0];
			document.getElementById(prefix_menu + id).className = "sel";
			return true;
		}
		return false;
	}


	function LoadData(id, sub) {
		Highlight(id);
	}




	var movemenu = 1;
	var menumoving = false;
	var steps = 50;
	var step = steps + 1;
	var srcX = 0;
	var srcY = 0;
	var dstX = 0;
	var dstY = 0;


	function MenuDown() {
		if (!menumoving) { movemenu = 1; }
	}


	function MenuUp() {
		MenuDown();
	}


	function MenuSlide() {
		if (movemenu < -1) { movemenu++; return; }
		if (movemenu > 1) { movemenu--; return; }

		menutop = getTop("menu");
		if (movemenu == 1) {
			if (menutop < 0) { menutop += 15; }
			if (menutop >= 0) { menutop = 0; movemenu = 0; }
		}
		if (movemenu == -1) {
			if (menutop > -32) { menutop -= 4;  }
			if (menutop <= -32) { menutop = -32; movemenu = 0;  }
		}
		menumoving = (menutop > -32) && (menutop < 0);
		document.getElementById("menu").style.top = menutop + "px";
	}

	function ScrollTo(x, y) {
		document.getElementById("desk").style.left = x + "px";
		document.getElementById("desk").style.top = y + "px";
		return false;
	}


	function SlideTo(id, sub) {
		LoadData(id, sub);

		areaW = getWidth("body");
		areaH = getHeight("body");
		targetW = getWidth(id);
		targetH = getHeight(id);
		deltaX = Math.round((areaW - targetW) / 2);
		deltaY = Math.round((areaH - targetH) / 2);

		dstX = deltaX - getLeft(id);
		dstY = deltaY - getTop(id);
		srcX = getLeft("desk");
		srcY = getTop("desk");

		step = 0;
		return false;
	}


	function DeskSlide() {
		q = Math.sin((Math.PI / 2) * (step / steps));
		posX = Math.round((dstX - srcX) * q) + srcX;
		posY = Math.round((dstY - srcY) * q) + srcY;
		ScrollTo(posX, posY);
		step++;
	}

	function Ticker() {
		if (movemenu != 0) { MenuSlide(); }
		if (step <= steps) { DeskSlide(); }

		window.setTimeout("Ticker()", 10);
	}


	function getCSSRule(ruleName, deleteFlag) {
		ruleName = ruleName.toLowerCase();
		if (document.styleSheets) {
			for (var i = 0; i < document.styleSheets.length; i++) {
				var styleSheet = document.styleSheets[i];
				var ii = 0;
				var cssRule = false;
				do {
					if (styleSheet.cssRules) {
						cssRule = styleSheet.cssRules[ii];
					} else {
						cssRule = styleSheet.rules[ii];
					}
					if (cssRule) {
						if (cssRule.selectorText.toLowerCase() == ruleName) {
							if (deleteFlag == 'delete') {
								if (styleSheet.cssRules) {
									styleSheet.deleteRule(ii);
								} else {
									styleSheet.removeRule(ii);
								}
								return true;
							} else {
								return cssRule;
							}
						}
					}
					ii++;
				} while (cssRule);
			}
		}
		return false;
	}


	function killCSSRule(ruleName) {
		return getCSSRule(ruleName, 'delete');
	}


function addCSSRule(ruleName) {
	if (document.styleSheets) {
		if (!getCSSRule(ruleName)) {
			if (document.styleSheets[0].addRule) {
				document.styleSheets[0].addRule(ruleName, null, 0);
			} else {
				document.styleSheets[0].insertRule(ruleName + ' { }', 0);
			 }
		}
	}
	return getCSSRule(ruleName);
}

