		dojo.require("dojo.fx");
		dojo.require("dojo.fx.easing");
		
		function toggleSubmenu(id) {
			var node = dojo.byId("subMenuContainer"+id);
			if (node) {
				var animIn = dojo.style(node,"display") != "block";
				if (animIn) {
					dojo.style(node,"height","0px");
					dojo.style(node,"display","block");
					dojo.fx.wipeIn({node:node,duration:400,onEnd:function(){}}).play();
				} else {
					dojo.animateProperty({node:node,properties:{height:0},duration:300,onEnd:function(){dojo.style(node,"display","none")}}).play();
				}
			}
		}
		
		function addHighlight1(e) {
			dojo.animateProperty({node:e.target,properties:{color:"#f56b00"},duration:150}).play();
		}
		function addHighlight2(e) {
			var targetCoords = dojo.coords(e.target);
			var tpc = dojo.byId("currentTopic");
			if (!tpc) return;
			var tpcCoords = dojo.coords(tpc);
			var isTop = tpcCoords.y > targetCoords.y;
			
			if (currentContainer == null) {
				if (isTop) enterTop();
				else enterBottom();
			}
			else {
				var cont = null;
				if (isTop) {
					cont = dojo.byId("naviTopContainer");
					if (cont != currentContainer) {
						leaveBottom();
						enterTop();
					}
				}
				else {
					cont = dojo.byId("naviBottomContainer");
					if (cont != currentContainer) {
						leaveTop();
						enterBottom();
					}
				}
			}
			var parentCoords = dojo.coords(currentContainer);
			var oldTop = 0;
			var prop = dojo.style(currentContainer,"backgroundPosition");
			if (prop) {
				if (prop.indexOf("%")>0)
					oldTop = parseInt(prop.substr(prop.indexOf("%")+2));
				else oldTop = parseInt(prop.substr(prop.indexOf("px")+2));
			}
			if (isTop) {
				if (currentTopAnim) currentTopAnim.stop();
				var newTop = targetCoords.y-parentCoords.y-27;
				//alert(oldTop+" "+newTop);
				currentTopAnim = new dojo._Animation({
									duration: 300, 
    								curve: [oldTop, newTop],
									onAnimate: function(y){
										dojo.style(currentContainer, "backgroundPosition", "0px " + y + "px");
    									}
    							});
    			currentTopAnim.play();
    		}
    		else {
				if (currentBottomAnim) currentBottomAnim.stop();
				var newTop = targetCoords.y-parentCoords.y-325;
				//alert(oldTop+" "+newTop);
				currentBottomAnim = new dojo._Animation({
									duration: 300, 
    								curve: [oldTop, newTop],
									onAnimate: function(y){
										dojo.style(currentContainer, "backgroundPosition", "0px " + y + "px");
    									}
    							});
    			currentBottomAnim.play();
    		}
		}
		function removeHighlight1(e) {
			dojo.animateProperty({node:e.target,properties:{color:"#10457b"},duration:500}).play();
		} 
		function removeHighlight2(e) {
		}
		
		var currentContainer = null;
		var currentTopAnim = null;
		var currentBottomAnim = null;
		var isUpper = false;
		
		function enterTop() {
			var node = dojo.byId("naviTopContainer");
			if (!node) return;
			currentContainer = node;
			isUpper = true;
			var coords = dojo.coords(node);
			dojo.style(node,"backgroundImage","url("+svNaviDirPath+"/nach_oben.png)");
			dojo.style(node,"backgroundRepeat","no-repeat");
			dojo.style(node,"backgroundPosition","0px "+coords.h+"px");
			currentTopAnim = null;
		}
		function leaveTop() {
			var node = dojo.byId("naviTopContainer");
			if (!node) return;
			if (currentTopAnim) {
				currentTopAnim.stop();
				currentTopAnim = null;
			}
			var coords = dojo.coords(node);
			var oldTop = coords.h;
			var prop = dojo.style(node,"backgroundPosition");
			if (prop) {
				if (prop.indexOf("%")>0)
					oldTop = parseInt(prop.substr(prop.indexOf("%")+2));
				else oldTop = parseInt(prop.substr(prop.indexOf("px")+2));
			}
			currentTopAnim = new dojo._Animation({
								duration: 200, 
   								curve: [oldTop, coords.h],
								onAnimate: function(y){
									dojo.style(node, "backgroundPosition", "0px " + y + "px");
   									}
   							});
			currentTopAnim.play();
		}
		function enterBottom() {
			var node = dojo.byId("naviBottomContainer");
			isUpper = false;
			if (!node) return;
			currentContainer = node;
			dojo.style(node,"backgroundImage","url("+svNaviDirPath+"/nach_unten.png)");
			dojo.style(node,"backgroundRepeat","no-repeat");
			dojo.style(node,"backgroundPosition","0px -364px");
			currentBottomAnim = null;
		}
		function leaveBottom() {
			var node = dojo.byId("naviBottomContainer");
			if (!node) return;
			if (currentBottomAnim) {
				currentBottomAnim.stop();
				currentBottomAnim = null;
			}
			var oldTop = -364;
			var prop = dojo.style(node,"backgroundPosition");
			if (prop) {
				if (prop.indexOf("%")>0)
					oldTop = parseInt(prop.substr(prop.indexOf("%")+2));
				else oldTop = parseInt(prop.substr(prop.indexOf("px")+2));
			}
			currentBottomAnim = new dojo._Animation({
								duration: 200, 
   								curve: [oldTop, -364],
								onAnimate: function(y){
									dojo.style(node, "backgroundPosition", "0px " + y + "px");
   									}
   							});
			currentBottomAnim.play();
		}
		
		dojo.addOnLoad(function() {
			var nodes = dojo.query(".navAnchor");
			nodes.hover(addHighlight1,removeHighlight1);
			nodes = dojo.query(".navItem");
			nodes.hover(addHighlight2,removeHighlight2);

			dojo.query("#naviTopContainer").hover(enterTop,leaveTop);
			dojo.query("#naviBottomContainer").hover(enterBottom,leaveBottom);
		});
