function ScrollMenu(listObject){
    this.ListObj = listObject;
    this.ListObj.className = "fixOverflow";

    this.scrollIncrement = 10;
    this.scrollActive = false;

    this.menuParent = null;
    this.menu = null;
    this.menuTop = null;

    this.createDOM();
    //this.reportHTML();
}

ScrollMenu.prototype.createDOM = function(){
    var menuContentContainer = document.createElement("div");
        menuContentContainer.className = "menuContentContainer";
        var menuContent = document.createElement("div");
            menuContent.className = "menuContent";
            with(this.ListObj){
                while(firstChild){
                    var currentNode = removeChild(firstChild);
                    menuContent.appendChild(currentNode);
                }
            }
        this.menu = menuContent;
        menuContentContainer.appendChild(menuContent);
    this.menuParent = menuContentContainer;
    this.menuTop = menuContentContainer.offsetTop || 0;
    this.ListObj.appendChild(menuContentContainer);

    var currentMenu = this;
    var upArrow = document.createElement("div");
        upArrow.className = "scrollButtonUp";
        upArrow.onmouseover = function(){ currentMenu.activateScroll(1); };
        upArrow.onmouseout = function(){ currentMenu.deactivateScroll(); };
    this.ListObj.insertBefore(upArrow, menuContentContainer);

    var downArrow = document.createElement("div");
        downArrow.className = "scrollButtonDown";
        downArrow.onmouseover = function(){ currentMenu.activateScroll(0); };
        downArrow.onmouseout = function(){ currentMenu.deactivateScroll(); };
    this.ListObj.appendChild(downArrow);
    //this.ListObj.onmouseout = function(){ currentMenu.resetMenuPosition()};
}

ScrollMenu.prototype.activateScroll = function(scrollDirection){
    this.scrollActive = true;
    if(scrollDirection){
        this.scrollMenuUp();
    }
    else{
        this.scrollMenuDown();
    }
}

ScrollMenu.prototype.deactivateScroll = function(){
    this.scrollActive = false;
}

ScrollMenu.prototype.scrollMenuUp = function(){
    if(this.scrollActive){
        if(this.menuTop < 0){
            this.menuTop += this.scrollIncrement;
            this.menu.style.top = this.menuTop + 'px';
            var currentMenu = this;
            setTimeout(function(){currentMenu.scrollMenuUp();}, 30);
        }
        else{
            this.deactivateScroll();
        }
    }
    else{
        this.deactivateScroll();
    }
}

ScrollMenu.prototype.scrollMenuDown = function(){
    if(this.scrollActive){
        if(this.menuTop > -(this.menu.scrollHeight - this.menuParent.offsetHeight)){
            this.menuTop -= this.scrollIncrement;
            this.menu.style.top = this.menuTop + 'px';
            var currentMenu = this;
            setTimeout(function(){currentMenu.scrollMenuDown();}, 30);
        }
        else{
            this.deactivateScroll();
        }
    }
    else{
        this.deactivateScroll();
    }
}

ScrollMenu.prototype.resetMenuPosition = function(){
    this.menuTop = this.menuParent.offsetTop;
    this.menu.style.top = this.menuTop + 'px';
}

ScrollMenu.prototype.reportHTML = function(){
    alert(this.ListObj.innerHTML);
}