var newMenuId, nextMenu, currentMenuId, defaultLenseTop, lenseTop, submenuItem, submenuContainer, lense, distance, submenuHeight, forwardMove, backMove, expandSubmenuTimer, collapseSubmenuTimer;

window.onload = windowLoad;

function $(id) {
	return document.getElementById(id);
}

function windowLoad() {
	if ($("currentItem")) {
		$("lense").style.top = ($("currentItem").offsetTop - 22) + "px";
	}
}

function changeOpacity(obj, opacity) {
	obj.style.filter = "alpha(opacity=" + opacity + ")";
	obj.style.mozOpacity = "." + opacity;
	//obj.style.opacity = "." + opacity;
}

function changeMenuItem(id) {
	if (!defaultLenseTop) defaultLenseTop = $("lense").offsetTop + "px";
	newMenuId = id;
	lense = $("lense");
	submenuItem = $("submenu-"+id);
	submenuContainer = $("submenu-container-"+id);
	nextMenuId = id + 1;
	nextMenuId2 = id + 2;
	if ($("menu-"+nextMenuId)) {
		nextMenu = $("menu-"+nextMenuId);
	} else if (!$("menu-"+nextMenuId) && $("menu-"+nextMenuId2)) {
		nextMenu = $("currentItem");
	} else {
		nextMenu = null;
	}
	if (nextMenu) {
		if (!nextMenu.style.marginTop) {
			nextMenu.style.marginTop = "0px";
		}
	}
	if (currentMenuId && currentMenuId != "" && currentMenuId != newMenuId) {
		submenuItem = $("submenu-"+currentMenuId);
		submenuContainer = $("submenu-container-"+currentMenuId);
		nextMenuId = currentMenuId + 1;
		nextMenu = $("menu-"+nextMenuId);
		submenuHeight = submenuContainer.offsetHeight;
		currentMenuId = "processed";
		if (expandSubmenuTimer) clearTimeout(expandSubmenuTimer);
		collapseSubmenu();
	} else {
		if (submenuItem.style.display != "block") {
			currentMenuId = id;
			changeOpacity(submenuItem, 0);
			submenuItem.style.display = "block";
			submenuHeight = submenuContainer.offsetHeight;
			submenuContainer.style.height = "0px";
			changeOpacity(submenuItem, 100);
			if (collapseSubmenuTimer) clearTimeout(collapseSubmenuTimer);
			expandSubmenu();
			lenseTop = (submenuItem.offsetTop - 40) + "px";
			if (backMove) clearTimeout(backMove);
			doLenseForwardMove();
		} else {
			currentMenuId = "";
			if (expandSubmenuTimer) clearTimeout(expandSubmenuTimer);
			collapseSubmenu();
			if (forwardMove) clearTimeout(forwardMove);
			doLenseBackMove();
		}
	}
}

function expandSubmenu() {
	if (parseInt(submenuContainer.style.height) < submenuHeight) {
		if (submenuHeight - parseInt(submenuContainer.style.height) >= 5) {
			submenuContainer.style.height = (parseInt(submenuContainer.style.height)+5) + "px";
			if (nextMenu) nextMenu.style.marginTop = (parseInt(nextMenu.style.marginTop)+5) + "px";
			expandSubmenuTimer = setTimeout(expandSubmenu,1);
		} else {
			submenuContainer.style.height = submenuHeight + "px";
			if (nextMenu) nextMenu.style.marginTop = submenuHeight + "px";
			clearTimeout(expandSubmenuTimer);
		}
	} else {
		submenuContainer.style.height = submenuHeight + "px";
		if (nextMenu) nextMenu.style.marginTop = submenuHeight + "px";
		clearTimeout(expandSubmenuTimer);
	}
}

function collapseSubmenu() {
	if (submenuHeight >= parseInt(submenuContainer.style.height)) {
		if (parseInt(submenuContainer.style.height) >= 5) {
			submenuContainer.style.height = (parseInt(submenuContainer.style.height)-5) + "px";
			if (nextMenu) nextMenu.style.marginTop = (parseInt(nextMenu.style.marginTop)-5) + "px";
			collapseSubmenuTimer = setTimeout(collapseSubmenu,1);
		} else {
			submenuItem.style.display = "none";
			submenuContainer.style.height = submenuHeight + "px";
			if (nextMenu) nextMenu.style.marginTop = "0px";
			clearTimeout(collapseSubmenuTimer);
			
			if (currentMenuId && currentMenuId == "processed") {
				currentMenuId = "";
				changeMenuItem(newMenuId);
			}
		}
	} else {
		submenuItem.style.display = "none";
		submenuContainer.style.height = submenuHeight + "px";
		if (nextMenu) nextMenu.style.marginTop = submenuHeight + "px";
		clearTimeout(collapseSubmenuTimer);
		
		if (currentMenuId && currentMenuId == "processed") {
			currentMenuId = "";
			changeMenuItem(newMenuId);
		}
	}
}

function doLenseForwardMove() {
	if (!parseInt(lense.style.top)) lense.style.top = defaultLenseTop;
	distance = Math.round((parseInt(lenseTop) - parseInt(lense.style.top)) / 10);
	if (distance < 3 && distance >= 0) distance = 2;
	if (distance < 0 && distance > -3) distance = -2;
	if (distance > 0) {
		if (parseInt(lense.style.top) < parseInt(lenseTop)) {
			if ((parseInt(lenseTop) - parseInt(lense.style.top)) <= 2) {
				lense.style.top = parseInt(lenseTop) + "px";
				clearTimeout(forwardMove);
			} else {
				lense.style.top = (parseInt(lense.style.top)+distance) + "px";
				forwardMove = setTimeout(doLenseForwardMove,1);
			}
		} else {
			clearTimeout(forwardMove);
		}
	} else {
		if (parseInt(lense.style.top) > parseInt(lenseTop)) {
			if ((parseInt(lenseTop) - parseInt(lense.style.top)) >= -2) {
				lense.style.top = parseInt(lenseTop) + "px";
				clearTimeout(forwardMove);
			} else {
				lense.style.top = (parseInt(lense.style.top)+distance) + "px";
				forwardMove = setTimeout(doLenseForwardMove,1);
			}
		} else {
			clearTimeout(forwardMove);
		}
	}
}

function doLenseBackMove() {
	distance = Math.round((parseInt(lense.style.top) - parseInt(defaultLenseTop)) / 15);
	if (distance < 4) distance = 3;
	if (parseInt(lense.style.top) > parseInt(defaultLenseTop)) {
		if ((parseInt(lense.style.top) - parseInt(defaultLenseTop)) <= 2) {
			lense.style.top = defaultLenseTop;
			clearTimeout(backMove);
		} else {
			lense.style.top = (parseInt(lense.style.top)-distance) + "px";
			backMove = setTimeout(doLenseBackMove,1);
		}
	}
}
