    // Menu constants
    var menuItemHeight = 20;
    var maxMenuHeight = 449;
    var animateHeight = 3;
    var menuPadding = 43;
    var menuIsMoving = false;
    var moveMenu = false;
    var moveIntervalId = null;
    var menuIntervalTime = 1;
    var menuAnimationTime = 1;
    var menuIsDropping = false;
	
	$().ready(function() {
		$('.subnav').each(function() {
           $(this).wrap('<div class="subnav-viewport" style="opacity:0.9"></div>');
           $(this).css({display:'block',top:'8px'})
           var thisMenuHeight = ($('li',this).length * menuItemHeight);
           if(thisMenuHeight > maxMenuHeight) {
              var viewport = $(this).parents('.subnav-viewport');
              $(viewport).append('<a class="menu-down" style="border-right:1px solid #CFCFCF;border-left:1px solid #CFCFCF;border-bottom:1px solid #CFCFCF;background:url(/interface/images/menu-down-new.jpg) no-repeat scroll 0 0 #FFFFFF;display:block;width:134px;height:20px;z-index:100;position:absolute;top:444px;" href="#down"></a>');
              $(viewport).prepend('<a class="menu-up" style="border-left:1px solid #CFCFCF;border-right:1px solid #CFCFCF;background:url(/interface/images/menu-up-new.jpg) no-repeat scroll 0 0 #FFFFFF;display:block;width:134px;height:20px;z-index:100;position:absolute;top:8px;" href="#up"></a>');
              $('.menu-up').hide();
           }
        });
        
				
        $('.menu-down').mouseover(function() {
            moveMenu = true;            
            //moveMenuDown(this)
            var element = this;
            moveIntervalId = setInterval(function(){
                moveMenuDown(element)
            },menuIntervalTime)
        });
        
        $('.menu-down').mouseout(function() {
            clearInterval(moveIntervalId);
            menuIsMoving = false;
        });
        
        $('.menu-up').mouseover(function() {
            moveMenu = true;            
            var element = this;
            moveIntervalId = setInterval(function(){
                moveMenuUp(element)
            },menuIntervalTime)
        });
        
        $('.menu-up').mouseout(function() {
            clearInterval(moveIntervalId);
            menuIsMoving = false;
        });
        
        
        $('.menu-down').click(function() {
            moveMenuDown(this);
            return false;
        });
        
        $('.menu-up').click(function() {
            moveMenuUp(this);
            return false;
        });
        
        
		/*$('#head-nav li').mouseenter(function() {
			if(!menuIsDropping) {
				menuIsDropping = true;
				$('.subnav-viewport', this).slideDown(400, function(){menuIsDropping = false;});
			}
		});*/
		
		/*$('#head-nav li,.subnav-viewport').mouseleave(function() {
			if (!menuIsDropping) {
				menuIsDropping = true;
				$('.subnav-viewport', this).slideUp(250, function(){
					$('.subnav-viewport .subnav').css({
						top: '0px'
					})
					menuIsDropping = false;
					$('.menu-down').show();
					$('.menu-up').hide();
				});
			}
		});*/
		
        // top nav
       $('#head-nav li').hover(
          function() {
		      $('.subnav-viewport', this).stop(true,true).slideDown(400);
          },
          function() {
				$('.subnav-viewport', this).slideUp(250, function(){
					$('.subnav-viewport .subnav').css({top: '8px'})
					$('.menu-down').show();
					$('.menu-up').hide();
				});
          }
        )
	});
	
    
    function checkMenuTopPos(currentTop,maxTop,element) {
        // hide down link if required
        if(currentTop <= (-maxTop)) {
            $('.menu-down',element).hide();
        }
        
        //show down link if required
        if(currentTop > (-maxTop)) {
            $('.menu-down',element).show();
        }
        
        
        // show up link if required
        if(currentTop < 0) {
            $('.menu-up',element).show();
        }
        
        // hide up link if required
        if(currentTop >= 0) {
            $('.menu-up',element).hide();
        }
    }
    
    function moveMenuDown(element) {
        var parent = $(element).parents('.subnav-viewport');
        var thisMenuHeight = $('.subnav li',parent).length * menuItemHeight;
        var maxTop = (thisMenuHeight-maxMenuHeight)+menuPadding;
        var currentTop = parseInt($('.subnav',parent).css('top'));
        if (-maxTop != currentTop && (-maxTop - currentTop) < -animateHeight && !menuIsMoving) {
            menuIsMoving = true;
            $('.subnav', parent).animate({
                    top: "-=" + animateHeight + "px"
                }, menuAnimationTime, function(){
                    currentTop = parseInt($('.subnav',parent).css('top'));
                    checkMenuTopPos(currentTop,maxTop,parent);
                    menuIsMoving = false;
            });
        } else if(-maxTop < currentTop && !menuIsMoving) {
            menuIsMoving = true;
            $('.subnav', parent).animate({
                    top: "-=" + -(-maxTop-currentTop) + "px"
                }, menuAnimationTime, function(){
                    currentTop = parseInt($('.subnav',parent).css('top'));
                    checkMenuTopPos(currentTop,maxTop,parent);
                    menuIsMoving = false
                
            });
        } else {
            checkMenuTopPos(currentTop,maxTop,parent);
            //clearInterval(moveIntervalId);
        }
    }
    
    function moveMenuUp(element){
		var parent = $(element).parents('.subnav-viewport');
		var thisMenuHeight = $('.subnav li', parent).length * menuItemHeight;
		var maxTop = thisMenuHeight - maxMenuHeight;
		var currentTop = parseInt($('.subnav', parent).css('top'));
		if (currentTop < 0 && (currentTop + animateHeight) < 0 && !menuIsMoving) {
			menuIsMoving = true;
			$('.subnav', parent).animate({
				top: "+=" + animateHeight + "px"
			}, menuAnimationTime, function(){
				currentTop = parseInt($('.subnav', parent).css('top'));
				checkMenuTopPos(currentTop, maxTop, parent);
				menuIsMoving = false;
			});
		}
		else 
			if (currentTop < 0 && !menuIsMoving) {
				menuIsMoving = true;
				$('.subnav', parent).animate({
					top: "+=" + (-currentTop) + "px"
				}, menuAnimationTime, function(){
					currentTop = parseInt($('.subnav', parent).css('top'));
					checkMenuTopPos(currentTop, maxTop, parent);
					menuIsMoving = false;
				});
			}
			else {
				checkMenuTopPos(currentTop, maxTop, parent);
			}
	}
