var slider;
var width;
var width_t
var width_b
var position;
var view_wid;
var num_page;
var curr_page;
var scrollby;
var col;
var min_pos;
var max_pos;
var col_width;
var width_r
col_width = 229; //product width


var slider_r; var width_r;

document.observe("dom:loaded", function() {
    
    width_b = ($('side_brand').scrollHeight - $('side_brand').offsetHeight);
    //if no width set width to 1 to avoid JS error
    if(width_b == 0)
    {
        width_b = 1
    }
    
    slider_b = new Control.Slider('side_b_bar', 'side_b_track', {
        axis: 'vertical',
        range: $R(0, width_b),
        onSlide: function(v) { scrollVertical(v, $('side_brand'), slider_b);  },
        onChange: function(v) { scrollVertical(v, $('side_brand'), slider_b); }
    });

    //if slider not needed hide it, else create it
    if ($('side_brand').scrollHeight <= $('side_brand').offsetHeight) {
        slider_b.setDisabled();
        $('side_b_wrap').hide();
    }
    
    Event.observe('side_brand', 'DOMMouseScroll', wheel_b); // mozilla
    Event.observe('side_brand', 'mousewheel', wheel_b); // IE/Opera 



    try
    {
        width = ($('plist_con').scrollWidth - $('plist_con').offsetWidth); //get total width to set scroller to
        //if no width set width to 1 to avoid JS error
        if(width == 0)
        {
            width = 1
        }
        
        //product list slider
        slider = new Control.Slider('handle', 'track', 
        {
            range: $R(0, width),
            onSlide: function(v) 
            { 
                scrollHorizontal(v, $('plist_con'), slider);
            },
            onChange: function(v) 
            { 
                scrollHorizontal(v, $('plist_con'), slider);
            }
        });
        
        if ($('plist_con').scrollWidth <= $('plist_con').offsetWidth) {
            slider.setDisabled();
            $('plist_mid').hide();
        }
        
        update();
            
        Event.observe(window, 'resize', update);
        Event.observe('plist_con', 'scroll', updatepage);
        Event.observe('plist_con', 'DOMMouseScroll', wheel); // mozilla
        Event.observe('plist_con', 'mousewheel', wheel); // IE/Opera

    }
    catch(error)
    {
        //ignore if slider does not exist
    }       
//                    RIGHT MENU 1 SCROLLER 
    
    width_r1 = ($('linktable').scrollHeight - $('linktable').offsetHeight);
    //if no width set width to 1 to avoid JS error
    if(width_r1 == 0)
    {
        width_r1 = 1
    }
    
    slider_r1 = new Control.Slider('side_r_bar1', 'side_r_track1', {
        axis: 'vertical',
        range: $R(0, width_r1),
        onSlide: function(v) { scrollVertical(v, $('linktable'), slider_r1);  },
        onChange: function(v) { scrollVertical(v, $('linktable'), slider_r1); }
    });

    //if slider not needed hide it, else create it
    if ($('linktable').scrollHeight <= $('linktable').offsetHeight) {
        slider_r1.setDisabled();
        $('side_r_wrap1').hide();
    }
    
    Event.observe('linktable', 'DOMMouseScroll', wheel_r1); // mozilla
    Event.observe('linktable', 'mousewheel', wheel_r1); // IE/Opera   

//                    RIGHT MENU 2 SCROLLER (bottom)

    width_r = ($('linktable2').scrollHeight - $('linktable2').offsetHeight);
    //if no width set width to 1 to avoid JS error
    if(width_r == 0)
    {
        width_r = 1
    }    
    slider_r = new Control.Slider('side_r_bar', 'side_r_track', {
        axis: 'vertical',
        range: $R(0, width_r),
        onSlide: function(v) { scrollVertical(v, $('linktable2'), slider_r);  },
        onChange: function(v) { scrollVertical(v, $('linktable2'), slider_r); }
    });

    //if slider not needed hide it, else create it
    if ($('linktable2').scrollHeight <= $('linktable2').offsetHeight) {
        slider_r.setDisabled();
        $('side_r_wrap').hide();
    }    
    Event.observe('linktable2', 'DOMMouseScroll', wheel_r); // mozilla
    Event.observe('linktable2', 'mousewheel', wheel_r); // IE/Opera         
});

function scrollVertical(value, element, slider) 
{
    element.scrollTop = Math.round(value/slider.maximum*(element.scrollHeight-element.offsetHeight));
}

function scrollHorizontal(value, element, slider) 
{
    element.scrollLeft = Math.round(value/slider.maximum*(element.scrollWidth-element.offsetWidth));
}

function moveP()
{
    slider.setValue($('plist_con').scrollLeft - scrollby);
}

function moveN()
{
    slider.setValue($('plist_con').scrollLeft + scrollby);
}

function update()
{
    width = ($('plist_con').scrollWidth - $('plist_con').offsetWidth);
    position = ($('plist_con').scrollLeft);
    view_wid = ($('plist_con').offsetWidth);
    
    //if no width set width to 1 to avoid JS error
    if(width == 0)
    {
        width = 1
    }
        
    if ($('plist_con').scrollWidth <= $('plist_con').offsetWidth) 
    {
        $('plist_mid').hide();
    }
    else
    {
        $('plist_mid').show();
    }
    try{
    slider.dispose();
    }
    catch(error)
    {
        //ignore if slider does not exist
    }
    
    try
    {
        slider = new Control.Slider('handle', 'track',
        {
            range: $R(0, width),
            sliderValue: position,
            onSlide: function(v)
            {
                scrollHorizontal(v, $('plist_con'), slider);
            },
            onChange: function(v)
            {
                scrollHorizontal(v, $('plist_con'), slider);
            }
        });
    }
    catch(error)
    {
        //no
    }
    updatepage();
}

function updatepage()
{
    width = ($('plist_con').scrollWidth-$('plist_con').offsetWidth);
    col = Math.floor($('plist_con').offsetWidth / col_width) //find number of columns, times by width of col to get scroll size
    scrollby = col * col_width
    view_wid = ($('plist_con').offsetWidth);
    position = ($('plist_con').scrollLeft);
    num_page = (Math.ceil(width / scrollby)+1);
    
    for (i=1; i<=num_page; i++)
    {
        min_pos = ((scrollby * i) - scrollby) - (scrollby - 1);
        max_pos = (scrollby * i) - (scrollby - 1);
        if (position > min_pos && position < max_pos)
        {
            curr_page = i;
            $('pageination').innerHTML = '' + curr_page + ' of ' + num_page
        }
    }
    
    if (position == 0) {
        $('page_prev').setStyle({
          opacity: '0.4',
          filter: 'alpha(opacity=40)'
        });
    }
    else
    {
        $('page_prev').setStyle({
          opacity: '1.0',
          filter: 'alpha(opacity=100)'
        });
    }
    
    if (position == (width)) {
        $('page_next').setStyle({
          opacity: '0.4',
          filter: 'alpha(opacity=40)'
        });
    }
    else
    {
        $('page_next').setStyle({
          opacity: '1.0',
          filter: 'alpha(opacity=100)'
        });
    }
}

//mouse scrolling
function handle(delta) {
	slider.setValueBy(-delta);
}

function wheel(event){
	var delta = 0;
	if (!event)
		event = window.event;
	if (event.wheelDelta) { // IE Opera
		delta = event.wheelDelta*1.9083333333333333333333333333333;
	} else if (event.detail) { // Mozilla
		delta = -event.detail*28.625;
	}
	if (delta)
		handle(delta);

	if (event.preventDefault)
		event.preventDefault();
	
	event.returnValue = false;
}

//mouse scrolling type
function handle_b(delta) {
	slider_b.setValueBy(-delta);
}

function wheel_b(event){
	var delta = 0;
	if (!event)
		event = window.event;
	if (event.wheelDelta) { // IE Opera
		delta = event.wheelDelta/6;
	} else if (event.detail) { // Mozilla
		delta = -event.detail*2;
	}
	if (delta)
		handle_b(delta);

	if (event.preventDefault)
		event.preventDefault();
	
	event.returnValue = false;
}

//right menu
//basket scroller handle + wheel

function handle_r1(delta) { //mouse scrolling right
	slider_r1.setValueBy(-delta);
}
function wheel_r1(event){
	var delta = 0;
	if (!event)
		event = window.event;
	if (event.wheelDelta) { // IE Opera
		delta = event.wheelDelta/6;
	} else if (event.detail) { // Mozilla
		delta = -event.detail*2; }
	if (delta)
		handle_r1(delta);
	if (event.preventDefault)
		event.preventDefault();	
	event.returnValue = false; 
}

//right menu
//bottom menu scroller handle + wheel

function handle_r(delta) { //mouse scrolling right
	slider_r.setValueBy(-delta);
}
function wheel_r(event){
	var delta = 0;
	if (!event)
		event = window.event;
	if (event.wheelDelta) { // IE Opera
		delta = event.wheelDelta/6;
	} else if (event.detail) { // Mozilla
		delta = -event.detail*2; }
	if (delta)
		handle_r(delta);
	if (event.preventDefault)
		event.preventDefault();	
	event.returnValue = false; 
}

//sets scroller for assigned page (pageID), resets scroll pos. to top of page (0)
function do_loadup(pageID)
{     
    width_r = ($(pageID).scrollHeight - $('linktable2').offsetHeight);     
    set_top=(document.getElementById('linktable2'));
    set_top.scrollTop=0;
    position_i =($('linktable2').scrollTop);
        
    //if no width set width to 1 to avoid JS error
    if(width_r == 0)
    {
        width_r = 1
    }        
    if ($(pageID).scrollHeight <= $('linktable2').offsetHeight) 
    {
        $('side_r_wrap').hide();
    }
    else
    {
        $('side_r_wrap').show();
    }    
    try
    {
        slider_r.dispose();
    }
    catch(error)
    {
        //ignore if slider does not exist
    }    
    try
    {
        slider_r = new Control.Slider('side_r_bar', 'side_r_track',
        {
            axis: 'vertical',
            range: $R(0, width_r),
            sliderValue: position_i,
            onSlide: function(v)
            {
                scrollVertical(v, $('linktable2'), slider_r);
            },
            onChange: function(v)
            {
                scrollVertical(v, $('linktable2'), slider_r);
            }
        });
    }
    catch(error)
    {
        //no
    }
}