public bool Initialize(int xPos, int yPos, int width, int min, int max, int initialAmount, Random r, out string reason)
        {
            _enabled = true;
            _upButtonEnabled = true;

            _width = width;

            _upButton = new BBButton();
            _downButton = new BBButton();
            _valueLabel = new BBLabel();

            if (!_upButton.Initialize("ScrollUpBGButton", "ScrollUpFGButton", string.Empty, ButtonTextAlignment.LEFT, xPos + width - 16, yPos, 16, 16, r, out reason))
            {
                return false;
            }
            if (!_downButton.Initialize("ScrollDownBGButton", "ScrollDownFGButton", string.Empty, ButtonTextAlignment.LEFT, xPos, yPos, 16, 16, r, out reason))
            {
                return false;
            }
            if (!_valueLabel.Initialize(xPos + width - 20, yPos, string.Empty, Color.White, out reason))
            {
                return false;
            }
            _valueLabel.SetAlignment(true);

            _minimum = min;
            _maximum = max;
            Value = initialAmount;
            CheckAmount(); //Just in case

            _incrementAmount = 1;

            return true;
        }
        public bool Initialize(int xPos, int yPos, int length, int amountOfVisibleItems, int amountOfItems, bool isHorizontal, bool isSlider, Random r, out string reason)
        {
            this.xPos = xPos;
            this.yPos = yPos;
            Up = new BBButton();
            Down = new BBButton();
            Scroll = new BBUniStretchButton();

            this.amountOfItems = amountOfItems;
            this.amountVisible = amountOfVisibleItems;
            this.isSlider = isSlider;
            this.isHorizontal = isHorizontal;

            scrollBarLength = length - 32;

            if (!isSlider)
            {
                scrollButtonLength = (int)(((float)amountOfVisibleItems / amountOfItems) * scrollBarLength);
                if (!isHorizontal)
                {
                    if (!Up.Initialize("ScrollUpBGButton", "ScrollUpFGButton", "", ButtonTextAlignment.CENTER, xPos, yPos, 16, 16, r, out reason))
                    {
                        return false;
                    }
                    if (!Down.Initialize("ScrollDownBGButton", "ScrollDownFGButton", "", ButtonTextAlignment.CENTER, xPos, yPos + length - 16, 16, 16, r, out reason))
                    {
                        return false;
                    }
                    if (!Scroll.Initialize(new List<string> { "ScrollVerticalBGButton1", "ScrollVerticalBGButton2", "ScrollVerticalBGButton3" },
                                           new List<string> { "ScrollVerticalFGButton1", "ScrollVerticalFGButton2", "ScrollVerticalFGButton3" },
                                           false, "", ButtonTextAlignment.LEFT, xPos, yPos + 16, 16, 7, 2, scrollButtonLength, r, out reason))
                    {
                        return false;
                    }
                    scrollBar = SpriteManager.GetSprite("ScrollVerticalBar", r);
                    if (scrollBar == null)
                    {
                        reason = "\"ScrollVerticalBar\" sprite does not exist";
                        return false;
                    }
                }
                else
                {
                    if (!Up.Initialize("ScrollLeftBGButton", "ScrollLeftFGButton", "", ButtonTextAlignment.CENTER, xPos, yPos, 16, 16, r, out reason))
                    {
                        return false;
                    }
                    if (!Down.Initialize("ScrollRightBGButton", "ScrollRightFGButton", "", ButtonTextAlignment.CENTER, xPos + length - 16, yPos, 16, 16, r, out reason))
                    {
                        return false;
                    }
                    if (!Scroll.Initialize(new List<string> { "ScrollHorizontalBGButton1", "ScrollHorizontalBGButton2", "ScrollHorizontalBGButton3" },
                                           new List<string> { "ScrollHorizontalFGButton1", "ScrollHorizontalFGButton2", "ScrollHorizontalFGButton3" },
                                           false, "", ButtonTextAlignment.LEFT, xPos + 16, yPos, 16, 7, 2, scrollButtonLength, r, out reason))
                    {
                        return false;
                    }
                    scrollBar = SpriteManager.GetSprite("ScrollHorizontalBar", r);
                    if (scrollBar == null)
                    {
                        reason = "\"ScrollHorizontalBar\" sprite does not exist";
                        return false;
                    }
                }
            }
            else
            {
                scrollButtonLength = 16;
                if (!Up.Initialize("ScrollLeftBGButton", "ScrollLeftFGButton", "", ButtonTextAlignment.CENTER, xPos, yPos, 16, 16, r, out reason))
                {
                    return false;
                }
                if (!Down.Initialize("ScrollRightBGButton", "ScrollRightFGButton", "", ButtonTextAlignment.CENTER, xPos + length - 16, yPos, 16, 16, r, out reason))
                {
                    return false;
                }
                if (!Scroll.Initialize(new List<string> { "SliderHorizontalBGButton1", "SliderHorizontalBGButton2", "SliderHorizontalBGButton3" },
                                       new List<string> { "SliderHorizontalFGButton1", "SliderHorizontalFGButton2", "SliderHorizontalFGButton3" },
                                       true, "", ButtonTextAlignment.LEFT, xPos + 16, yPos, 16, 7, 2, scrollButtonLength, r, out reason))
                {
                    return false;
                }
                scrollBar = SpriteManager.GetSprite("SliderBGBar", r);
                if (scrollBar == null)
                {
                    reason = "\"SliderBGBar\" sprite does not exist";
                    return false;
                }
                highlightedScrollBar = SpriteManager.GetSprite("SliderFGBar", r);
                if (highlightedScrollBar == null)
                {
                    reason = "\"SliderFGBar\" sprite does not exist";
                    return false;
                }
            }

            topIndex = 0;
            scrollPos = 0; //relative to the scrollbar itself
            scrollSelected = false;
            isEnabled = true;
            reason = null;
            return true;
        }