﻿
// gives up and down scroll buttons to images, spans, ... named up_name, down_name, respectively.
// will keep the default scroll_box's style overflow if it encounters errors (so make overflow: auto;)

// usage: put this after the scrollbox div:  var div_scroll1 = new TextScroll('div_scroll1', 'scroll_box');
function TextScroll(scrollname, div_name, up_name, down_name)
{
    this.div_name = div_name;
    this.name = scrollname;
    this.scrollCursor = 0;
    this.hover_speed = 5;
    this.mousedown_speed = 15;
    this.timeoutID = 0;
    this.timeoutQuickID = 0;
    this.div_obj = null;
    this.up_name = up_name;
    this.dn_name = down_name;

    {
        if (document.getElementById) 
        {
            div_obj = document.getElementById(this.div_name);
            if (div_obj) 
            {
                this.div_obj = div_obj;
                this.div_obj.style.overflow = 'hidden';
            }
            div_up_obj = document.getElementById(this.up_name);
            div_dn_obj = document.getElementById(this.dn_name);
            if (div_up_obj && div_dn_obj) 
            {
//                div_up_obj.setAttribute("onmouseover", scrollname + ".scrollUp();")
//                div_up_obj.setAttribute("onmouseout", scrollname + ".stopScroll();")

//                div_dn_obj.setAttribute("onmouseover", scrollname + ".scrollDown();")
//                div_dn_obj.setAttribute("onmouseout", scrollname + ".stopScroll();")
                
                div_up_obj.onmouseover = function() { eval(scrollname + ".scrollUp();") };
                div_up_obj.onmouseout = function() { eval(scrollname + ".stopScroll();") };                
                div_up_obj.onmousedown = function() { eval(scrollname + ".scrollUpFast();") };
                div_up_obj.onmouseup = function() { eval(scrollname + ".stopQuickScroll();" + scrollname + ".scrollUp();") };

                
                div_dn_obj.onmouseover = function() { eval(scrollname + ".scrollDown();") };
                div_dn_obj.onmouseout = function() { eval(scrollname + ".stopScroll();") };   
                div_dn_obj.onmousedown = function() { eval(scrollname + ".scrollDownFast();") };
                div_dn_obj.onmouseup = function() { eval(scrollname + ".stopQuickScroll();" + scrollname + ".scrollDown();") };

            }
        }
    }

    this.stopScroll = function() 
    {
        clearTimeout(this.timeoutID);
    }
    
    this.stopQuickScroll = function() 
    {
        clearTimeout(this.timeoutQuickID);
    }

    this.scrollUpFast = function() 
    {
        this.stopScroll();
        if (this.div_obj) 
        {
            this.scrollCursor = (this.scrollCursor - this.mousedown_speed) < 0 ? 0 : this.scrollCursor - this.mousedown_speed;
            this.div_obj.scrollTop = this.scrollCursor;
            this.timeoutQuickID = setTimeout(this.name + ".scrollUpFast()", 60);
        }
    }
    
    this.scrollUp = function() 
    {
        this.stopQuickScroll();
        if (this.div_obj) 
        {
            this.scrollCursor = (this.scrollCursor - this.hover_speed) < 0 ? 0 : this.scrollCursor - this.hover_speed;
            this.div_obj.scrollTop = this.scrollCursor;
            this.timeoutID = setTimeout(this.name + ".scrollUp()", 60);
        }
    }

    
    this.scrollDownFast = function() 
    {
        this.stopScroll();
        if (this.div_obj) 
        {
            this.scrollCursor += this.mousedown_speed;
            this.div_obj.scrollTop = this.scrollCursor;
            if (this.div_obj.scrollTop == this.scrollCursor) 
            {
                this.timeoutQuickID = setTimeout(this.name + ".scrollDownFast()", 60);
            } 
            else 
            {
                this.scrollCursor = this.div_obj.scrollTop;
            }
        }
    }
    
    
    
    this.scrollDown = function() 
    {
        this.stopQuickScroll();
        if (this.div_obj) 
        {
            this.scrollCursor += this.hover_speed;
            this.div_obj.scrollTop = this.scrollCursor;
            if (this.div_obj.scrollTop == this.scrollCursor) 
            {
                this.timeoutID = setTimeout(this.name + ".scrollDown()", 60);
            } 
            else 
            {
                this.scrollCursor = this.div_obj.scrollTop;
            }
        }
    }

    this.resetScroll = function() 
    {
        if (this.div_obj) 
        {
            this.div_obj.scrollTop = 0;
            this.scrollCursor = 0;
        }
    }
    
    
    
}