	var DDmaxStep = 4;
	var DDscrollSpeed = 30;
	var DDadjustTarget = null;
	var DDscrollTop = 0;
	var DDgetScrollTop = function(){ DDscrollTop = document.documentElement ? document.documentElement.scrollTop : pageYOffset; }
	window.onresize = window.onscroll = function(){DDgetScrollTop()};
	var DDadjustSchedule = setTimeout(function(){});
		DDsetAdjustTarget = function(who){	
			if(DDadjustTarget != null) DDclearAdjustY(DDadjustTarget);
			DDadjustTarget = who;
			DDadjustOffset();
		}
		DDadjustOffset = function(){
			var sfactor = DDadjustTarget.realHeight/DDadjustTarget.maxHeight;
			var offsetY = DDadjustTarget.offsetY;
			if(Math.abs(offsetY*sfactor-DDadjustTarget.item.jumpTo) < DDadjustTarget.item.offsetHeight*.55)
				offsetY = DDadjustTarget.item.jumpTo/sfactor;
			scrollY = -(offsetY/DDadjustTarget.maxHeight)*(DDadjustTarget.realHeight-DDadjustTarget.maxHeight);
			if(DDadjustTarget.item == DDadjustTarget.items[0]){
				if(DDadjustTarget.scrollY < 0) DDadjustTarget.scrollY += 1.5;
			}
			else if(DDadjustTarget.item == DDadjustTarget.items[DDadjustTarget.items.length-1]){
				if(DDadjustTarget.scrollY > DDadjustTarget.maxHeight-DDadjustTarget.realHeight) DDadjustTarget.scrollY -= 1.5;
			}
			else{
				var moveBy = (scrollY - DDadjustTarget.scrollY)*.06;
				//document.getElementById("content").innerHTML = moveBy;
				if(Math.abs(moveBy) < 1){
					//moveBy /= Math.abs(moveBy);
				}
				DDadjustTarget.scrollY += Math.round(moveBy);
			}
			DDadjustTarget.handle.style.marginTop	= DDadjustTarget.scrollY + "px";
			DDadjustTarget.ddscrollbar.style.top = -(DDadjustTarget.scrollY/sfactor) + "px";
			DDadjustSchedule = setTimeout(function(){DDadjustOffset()},DDscrollSpeed);
		}
		DDclearAdjustY = function(who){
			if(DDadjustTarget == who){
				DDadjustTarget = null;
				clearTimeout(DDadjustSchedule);
			}
		}
		DDscrollMenu = function(menu,maxHeight,menuTop,adjustHeigth){
			maxHeight = maxHeight || 200;
			menuTop = menuTop || menu.offsetTop;
			adjustHeigth = adjustHeigth || 0;
			if(typeof(menu) == "string") menu = document.getElementById(menu);
			var dds = menu.getElementsByTagName("dd");
			for(var a = 0; a < dds.length; a++){
				var ul = dds[a].getElementsByTagName("ul");
				if(ul.length){
					ul = ul[0];
					ul.style.display="block";
					var realHeight = ul.offsetHeight + adjustHeigth;
					var istall = realHeight > maxHeight;
					if(istall){
						var items = ul.items = ul.getElementsByTagName("li");
						var accheight = 0;
						for(var b = 0; b < items.length; b++){
							items[b].onmouseover = function(){
								this.parentNode.item = this;
							}
							items[b].jumpTo = items[b].offsetHeight/2 + accheight;
							accheight += items[b].offsetHeight;
						}
					}
					ul.style.display="";
					if (istall){
						ul.className = (ul.className + " scrollmenu").replace(/^\s/,'');
						ul.realHeight = realHeight;
						ul.maxHeight = maxHeight;
						ul.menuTop = menuTop;
						ul.style.height = maxHeight + "px";
						ul.style.overflowY = "hidden";
						ul.handle = ul.getElementsByTagName("li")[0];
						ul.setOffsetY = function(e){
							this.offsetY = (e ? e.clientY : event.clientY)
							- (this.menuTop-DDscrollTop);
						};
						ul.scrollY = 0;
						ul.onmousemove = function(e){this.setOffsetY(e); }
						ul.onmouseover = function(e){ this.setOffsetY(e); DDsetAdjustTarget(this); }
						ul.onmouseout = function(){ DDclearAdjustY(this); }
				// scroll bar
						ul.ddscrollbar = ul.appendChild(document.createElement("div"));
						ul.ddscrollbar.className = "ddscrollbar";
						var inner = ul.ddscrollbar.appendChild(document.createElement("div"));
						var outer = ul.ddscrollbar.appendChild(document.createElement("div"));
						var back = ul.ddscrollbar.appendChild(document.createElement("div"));
						inner.className = "ddscrollinner";
						outer.className = "ddscrollouter";
						back.className = "ddscrollback";
						ul.ddscrollbar.style.height = inner.style.height = back.style.height = Math.round(maxHeight*(maxHeight/realHeight)) + "px";
						outer.style.height = Math.round(maxHeight*(maxHeight/realHeight)-2) + "px";
						inner.style.marginLeft = outer.style.marginTop = "1px";
						var trigger = ul.parentNode.getElementsByTagName("a")[0];
						trigger.onmouseover = function(){
							var ul = this.parentNode.getElementsByTagName("ul")[0];
							if(ul != DDadjustTarget){
								ul.handle.style.marginTop = "";
								ul.ddscrollbar.style.top = "0px";
								ul.scrollY = 0;
							}
						}
					}
				}
			}
		}