public override void Update(GameTime gameTime)
        {
            PlayerIndex index = PlayerIndex.One;
            int         i     = 0;

            switch (_mode)
            {
            case MerchantMode.Talk:
                _conversation.Update(gameTime);

                if (Xin.WasReleased(PlayerIndexInControl, Buttons.A, Keys.Space, out index) || Xin.WasReleased(PlayerIndexInControl, Buttons.A, Keys.Space, out index))
                {
                    if (_conversation.CurrentScene.OptionAction.Action == ActionType.Buy)
                    {
                        _mode = MerchantMode.Buy;
                    }
                    if (_conversation.CurrentScene.OptionAction.Action == ActionType.Sell)
                    {
                        _mode = MerchantMode.Sell;
                    }
                    if (_conversation.CurrentScene.OptionAction.Action == ActionType.End)
                    {
                        _manager.PopState();
                    }
                }
                else if (Xin.CheckMouseReleased(MouseButton.Left) && _conversation.CurrentScene.IsMouseOver)
                {
                    if (_conversation.CurrentScene.OptionAction.Action == ActionType.Buy)
                    {
                        _mode = MerchantMode.Buy;
                    }
                    if (_conversation.CurrentScene.OptionAction.Action == ActionType.Sell)
                    {
                        _mode = MerchantMode.Sell;
                    }
                    if (_conversation.CurrentScene.OptionAction.Action == ActionType.End)
                    {
                        _manager.PopState();
                    }
                }
                break;

            case MerchantMode.Buy:
                if (Xin.WasReleased(PlayerIndexInControl, Buttons.A, Keys.Space, out index) || (Xin.CheckMouseReleased(MouseButton.Left) && mouseOver))
                {
                    if (_inventoryManager.ItemList[_selectedItem].Cost <= player.Gold)
                    {
                        player.AddItem(_selectedItem);
                        player.UpdateGold(_inventoryManager.ItemList[_selectedItem].Cost * -1);
                        player.Character.AddItem(_inventoryManager.ItemList[_selectedItem]);
                        _inventory.RemoveItem(_selectedItem);

                        foreach (string s in player.ActiveQuests.Keys)
                        {
                            if (player.ActiveQuests[s].CurrentStep.QuestStepType == QuestStepType.Buy &&
                                player.ActiveQuests[s].CurrentStep.Target == Enum.GetName(typeof(ItemCategory), _inventoryManager.ItemList[_selectedItem].ItemType))
                            {
                                player.ActiveQuests[s].CurrentStep.Finish();
                                player.ActiveQuests[s].UpdateQuestStep();
                            }
                        }
                    }
                    else
                    {
                        // show that the offer was refused
                    }
                }
                else if (Xin.WasReleased(PlayerIndexInControl, Buttons.Back, Keys.Escape, out index) || Xin.CheckMouseReleased(MouseButton.Right))
                {
                    _mode = MerchantMode.Talk;
                }
                else if (!mouseOver)
                {
                    if (Xin.WasReleased(PlayerIndexInControl, Buttons.LeftThumbstickUp, Keys.Up, out index))
                    {
                        _selectedIndex--;

                        if (_selectedIndex < 0)
                        {
                            _selectedIndex = _inventory.Inventory.Count - 1;
                        }
                    }
                    else if (Xin.WasReleased(PlayerIndexInControl, Buttons.LeftThumbstickDown, Keys.Down, out index))
                    {
                        _selectedIndex++;

                        if (_selectedIndex >= _inventory.Inventory.Count)
                        {
                            _selectedIndex = 0;
                        }
                    }
                }

                foreach (string s in _inventory.Inventory.Keys)
                {
                    if (_selectedIndex == i)
                    {
                        _selectedItem = s;
                        break;
                    }
                    i++;
                }
                break;

            case MerchantMode.Sell:
                if (Xin.WasReleased(PlayerIndexInControl, Buttons.A, Keys.Space, out index) || (Xin.CheckMouseReleased(MouseButton.Left) && mouseOver))
                {
                    player.RemoveItem(_selectedItem);
                    player.UpdateGold(_inventoryManager.ItemList[_selectedItem].Cost / 2);
                    _inventory.AddItem(_selectedItem);

                    foreach (string s in player.ActiveQuests.Keys)
                    {
                        if (player.ActiveQuests[s].CurrentStep.QuestStepType == QuestStepType.Sell &&
                            player.ActiveQuests[s].CurrentStep.Target == Enum.GetName(typeof(ItemCategory), _inventoryManager.ItemList[_selectedItem].ItemType))
                        {
                            player.ActiveQuests[s].CurrentStep.Finish();
                            player.ActiveQuests[s].UpdateQuestStep();
                        }
                    }
                }
                else if (Xin.WasReleased(PlayerIndexInControl, Buttons.Back, Keys.Escape, out index) || Xin.CheckMouseReleased(MouseButton.Right))
                {
                    _mode = MerchantMode.Talk;
                }
                else if (!mouseOver)
                {
                    if (Xin.WasReleased(PlayerIndexInControl, Buttons.LeftThumbstickUp, Keys.Up, out index))
                    {
                        _selectedIndex--;

                        if (_selectedIndex < 0)
                        {
                            _selectedIndex = _inventory.Inventory.Count - 1;
                        }
                    }
                    else if (Xin.WasReleased(PlayerIndexInControl, Buttons.LeftThumbstickDown, Keys.Down, out index))
                    {
                        _selectedIndex++;

                        if (_selectedIndex >= _inventory.Inventory.Count)
                        {
                            _selectedIndex = 0;
                        }
                    }
                }

                foreach (string s in player.Backpack.Keys)
                {
                    if (_selectedIndex == i)
                    {
                        _selectedItem = s;
                        break;
                    }
                    i++;
                }
                break;
            }

            base.Update(gameTime);
        }