function RunCodaSlider(sliderId)
{
    if (document.getElementById(sliderId) != null)
    {
        var exclude;
        var startPanel = 0;
        var leftArrow = 'ScrollLeft';
        var rightArrow = 'ScrollRight';

        switch (sliderId)
        {
            case "DockBasket":
                exclude = 3;
                break;
            case "SelectedProductsScroller":
                exclude = 7;
                startPanel = (window.SelectionBoxStart ? SelectionBoxStart : 0);
                leftArrow = 'ScrollLeft_Purple';
                rightArrow = 'ScrollRight_Purple';
                break;
            default:
                exclude = 0;
                break;
        }

        var $panels = $('#' + sliderId + ' .scrollContainer > div');
        var $container = $('#' + sliderId + ' .scrollContainer');

        // if false, we'll float all the panels left and fix the width 
        // of the container
        var horizontal = true;

        // float the panels left if we're going horizontal
        if (horizontal)
        {
            $panels.css({
                'float': 'left',
                'position': 'relative' // IE fix to ensure overflow is hidden
            });

            // calculate a new width for the container (so it holds all panels)
            $container.css('width', $panels[0].offsetWidth * $panels.length);
        }

        // collect the scroll object, at the same time apply the hidden overflow
        // to remove the default scrollbars that will appear
        var $scroll = $('#' + sliderId + ' .scroll').css('overflow', 'hidden');

        // apply our left + right buttons
        if (navigator.appVersion.toUpperCase().indexOf("MSIE 6.") > -1)
        {
            $scroll
            .before('<img class="scrollButtons left" src="/App_Themes/CGD-Summer/Images/IE6/' + leftArrow + '.gif" />')
            .after('<img class="scrollButtons right" src="/App_Themes/CGD-Summer/Images/IE6/' + rightArrow + '.gif" />');
        }
        else
        {
            $scroll
            .before('<img class="scrollButtons left" src="/App_Themes/CGD-Summer/Images/' + leftArrow + '.png" />')
            .after('<img class="scrollButtons right" src="/App_Themes/CGD-Summer/Images/' + rightArrow + '.png" />');
        }

        // handle nav selection
        function selectNav()
        {
            $(this)
            .parents('ul:first')
                .find('a')
                    .removeClass('selected')
                .end()
            .end()
            .addClass('selected');
        }

        $('#' + sliderId + ' .navigation').find('a').click(selectNav);

        // go find the navigation link that has this target and select the nav
        function trigger(data)
        {
            var el = $('#' + sliderId + ' .navigation').find('a[href$="' + data.id + '"]').get(0);
            selectNav.call(el);
        }

        if (window.location.hash)
        {
            trigger({ id: window.location.hash.substr(1) });
        } else
        {
            $('ul.navigation a:first').click();
        }

        // offset is used to move to *exactly* the right place, since I'm using
        // padding on my example, I need to subtract the amount of padding to
        // the offset.  Try removing this to get a good idea of the effect
        var offset = parseInt((horizontal ?
        $container.css('paddingTop') :
        $container.css('paddingLeft'))
        || 0) * -1;

        var scrollOptions = {
            start: startPanel,
            force: true,
            target: $scroll,
            items: $panels,
            navigation: '.navigation a',
            prev: 'img.left',
            next: 'img.right',
            axis: 'xy',
            onAfter: trigger, // our final callback
            offset: offset,
            duration: 500,
            easing: 'swing',
            exclude: exclude
        };

        // apply serialScroll to the slider - we chose this plugin because it 
        // supports// the indexed next and previous scroll along with hooking 
        // in to our navigation.
        $('#' + sliderId + '').serialScroll(scrollOptions);

        // now apply localScroll to hook any other arbitrary links to trigger 
        // the effect
        $.localScroll(scrollOptions);

        // finally, if the URL has a hash, move the slider in to position, 
        // setting the duration to 1 because I don't want it to scroll in the
        // very first page load.  We don't always need this, but it ensures
        // the positioning is absolutely spot on when the pages loads.
        scrollOptions.duration = 1;
        $.localScroll.hash(scrollOptions);
    }
}
