public void EnableAppropriateButtons(SQLReference.CardDetails stats)
        {
            switch (area)
            {
            case DuelFieldNew.Area.Deck:
                ChangeButtons(true);
                break;

            case DuelFieldNew.Area.Extra:
                ChangeButtons(true);
                cmdToBottom.IsEnabled = false;
                cmdToTop.IsEnabled    = false;
                cmdToHand.IsEnabled   = false;
                cmdToExtra.IsEnabled  = false;
                break;

            case DuelFieldNew.Area.RFG:
                if (isPlayer)
                {
                    ChangeButtons(true);
                    cmdBanish.IsEnabled         = false;
                    chkBanishFacedown.IsEnabled = false;
                }
                else
                {
                    ChangeButtons(false);
                }
                break;

            case DuelFieldNew.Area.Grave:
                if (isPlayer)
                {
                    ChangeButtons(true);
                    cmdToGrave.IsEnabled = false;
                }
                else
                {
                    ChangeButtons(false);
                }
                break;
            }

            if (stats.IsMonster())
            {
                cmdToField.IsEnabled = !AllMonsterZonesFull && isPlayer && !stats.Facedown && !M.IamWatching;
            }
            else
            {
                cmdToField.IsEnabled = !AllSTZonesFull && isPlayer && !stats.Facedown && !M.IamWatching;
            }
        }
        private void genericShowStats(SQLReference.CardDetails stats)
        {
            int n = 0;

            if (stats.Facedown)
            {
                lblDuelName.Text = "{{Facedown Card}}";
                for (n = 1; n <= 12; n++)
                {
                    ImgStars(n).Source = null;
                }
                lblSlash.Visibility  = System.Windows.Visibility.Collapsed;
                BordATK.Visibility   = System.Windows.Visibility.Collapsed;
                BordDEF.Visibility   = System.Windows.Visibility.Collapsed;
                imgSTIcon.Visibility = System.Windows.Visibility.Collapsed;
                M.setImage(imgDuelAttribute, "Unknown.png", UriKind.Relative);
                lblDuelLore.Text = "";
                lblDuelType.Text = "";
                return;
            }
            lblDuelName.Text = stats.Name;

            if (stats.Type == null)
            {
                for (n = 1; n <= 12 - stats.Level; n++)
                {
                    ImgStars(n).Source = null;
                }
            }
            else if (stats.Type.Contains("Xyz"))
            {
                for (n = 1; n <= 12 - stats.Level; n++)
                {
                    ImgStars(n).Source = null;
                }
                for (n = 12 - stats.Level + 1; n <= 12; n++)
                {
                    M.setImage(ImgStars(n), "RankStar.jpg", UriKind.Relative);
                }
            }
            else
            {
                for (n = 1; n <= stats.Level; n++)
                {
                    M.setImage(ImgStars(n), "Star.jpg", UriKind.Relative);
                }
                for (n = stats.Level + 1; n <= 12; n++)
                {
                    ImgStars(n).Source = null;
                }
            }

            if (stats.IsMonster())
            {
                lblSlash.Visibility = System.Windows.Visibility.Visible;
                BordATK.Visibility  = System.Windows.Visibility.Visible;
                lblATK.Text         = stats.ATK.ToStringCountingQuestions();
                BordDEF.Visibility  = System.Windows.Visibility.Visible;
                lblDEF.Text         = stats.DEF.ToStringCountingQuestions();
            }
            else
            {
                lblSlash.Visibility = System.Windows.Visibility.Collapsed;
                BordATK.Visibility  = System.Windows.Visibility.Collapsed;
                BordDEF.Visibility  = System.Windows.Visibility.Collapsed;
            }

            if (!stats.IsMonster())
            {
                imgSTIcon.Visibility = System.Windows.Visibility.Visible;
                M.setImage(imgSTIcon, M.TypeToImageName(stats.Type), UriKind.Relative);
            }
            else
            {
                imgSTIcon.Visibility = System.Windows.Visibility.Collapsed;
            }

            lblDuelLore.Text = stats.Lore == null ? "" : stats.Lore;
            lblDuelType.Text = stats.Type == null ? null : stats.Type.NotDisplayEffect();

            if (stats.Attribute == null)
            {
                M.setImage(imgDuelAttribute, DuelFieldNew.BLANK_IMAGE, UriKind.Relative);
            }
            else
            {
                M.setImage(imgDuelAttribute, M.AttributeToImageName(stats.Attribute), UriKind.Relative);
            }
        }
        public void CreateAndAddImage(SQLReference.CardDetails stats)
        {
            Border bord = new Border();

            bord.BorderThickness = new Thickness(4);
            bord.Width           = 59;
            bord.Height          = 85;
            bord.Margin          = new Thickness(0, 0, -3, 0);
            Image image = new Image();

            bord.Child = image;
            int imageIndex = staCards.Children.Count + 1;

            bord.Name = "bord" + imageIndex;
            UpdatePictureBox(image, stats);
            MouseEventHandler enterHandler = new MouseEventHandler((s, e) => {
                genericShowStats(stats);
            });

            MouseEnterHandlers.Add(enterHandler);
            image.MouseEnter += enterHandler;

            image.MouseLeave += (s, e) =>
            {
                if (selectedCardIndex > 0)
                {
                    MouseEnterHandlers[selectedCardIndex - 1].Invoke(null, null);
                }
                else
                {
                    ClearStatLabels();
                }
            };

            image.MouseLeftButtonUp += (s, e) =>
            {
                if (selectedCardIndex > 0)
                {
                    Border previousSelectedBorder = (Border)LayoutRoot.FindName("bord" + selectedCardIndex);
                    ((Storyboard)previousSelectedBorder.Tag).Stop();
                    previousSelectedBorder.BorderBrush = null;
                    if (selectedCardIndex == imageIndex)     //Selecting a card which was already selected; cancel it
                    {
                        selectedCardIndex = 0;
                        ChangeButtons(false);
                        return;
                    }
                }
                selectedCardIndex = imageIndex;
                bord.BorderBrush  = new SolidColorBrush(Colors.Orange);
                DoubleAnimation opacityAnimation = new DoubleAnimation();
                opacityAnimation.RepeatBehavior = RepeatBehavior.Forever;
                opacityAnimation.From           = 1;
                opacityAnimation.To             = 0;
                opacityAnimation.AutoReverse    = true;
                opacityAnimation.Duration       = new Duration(new TimeSpan(0, 0, 0, 0, 500));
                Storyboard sb = bord.BorderBrush.BeginAnimation(SolidColorBrush.OpacityProperty, opacityAnimation);
                bord.Tag = sb;

                ChangeButtons(false);
                EnableAppropriateButtons(stats);     //Reset which buttons should be enabled
            };
            staCards.Children.Add(bord);
        }
        public void UpdatePictureBox(Image pBox, SQLReference.CardDetails stats)
        {
            try
            {
                if (stats.Name == null)
                {
                    M.setImage(pBox, null, UriKind.Relative);
                }
                else if (stats.Facedown)
                {
                    M.setImage(pBox, "back.jpg", UriKind.Relative);
                }
                else
                {
                    //int cardid = 0;

                    if (stats.ID == 0)
                    {
                        M.setImage(pBox, "token.jpg", UriKind.Relative);
                    }
                    else if (stats.Attribute == "Trap")
                    {
                        M.setImage(pBox, "trap.jpg", UriKind.Relative);
                    }
                    else if (stats.Attribute == "Spell")
                    {
                        M.setImage(pBox, "magic.jpg", UriKind.Relative);
                    }
                    else if (stats.Type.Contains("/Effect") && M.IsOrange(stats) == true)
                    {
                        M.setImage(pBox, "monstereffect.jpg", UriKind.Relative);
                    }
                    else if (stats.Type.Contains("/Ritual"))
                    {
                        M.setImage(pBox, "ritual.jpg", UriKind.Relative);
                    }
                    else if (stats.Type.Contains("/Synchro"))
                    {
                        M.setImage(pBox, "synchro.jpg", UriKind.Relative);
                    }
                    else if (stats.Type.Contains("/Fusion"))
                    {
                        M.setImage(pBox, "fusion.jpg", UriKind.Relative);
                    }
                    else if (stats.Type.Contains("/Xyz"))
                    {
                        M.setImage(pBox, "xyz.jpg", UriKind.Relative);
                    }
                    else
                    {
                        M.setImage(pBox, "monster.jpg", UriKind.Relative);
                    }

                    if (M.cardsWithImages.Contains(M.getRealImageName(stats.Name, stats.ID, isPlayer ? M.mySet : opponentSet)))
                    {
                        M.setImage(pBox, M.toPortalURL(stats.Name, stats.ID, isPlayer ? M.mySet : opponentSet), UriKind.Absolute);
                    }
                }
            }
            catch
            {
            }
        }