@FXML
  private void handleDrawToCommunity() {
    communityCardDrawn++;

    Card c = gme.getGameDeck().drawFromDeck();
    String strCard = "/res/img/" + c.getCardImg();
    // ImageView img = new ImageView(new Image(getClass().getResourceAsStream(strCard), 75, 75,
    // true, true));
    // HboxCommunityCards.getChildren().add(img);

    ImageView i = (ImageView) HboxCommunityCards.getChildren().get(communityCardDrawn - 1);
    ImageView iCardFaceDown = (ImageView) HboxCommonArea.getChildren().get(0);
    final ParallelTransition transitionForward =
        createTransition(
            i,
            iCardFaceDown,
            new Image(getClass().getResourceAsStream(strCard), 75, 75, true, true));

    transitionForward.play();

    if (communityCardDrawn == NbrCommunityCards) {
      btnDrawCenter.setVisible(false);
    }
  }
  @FXML
  private void handleDraw() {

    if (this.mainApp.getiGameType() == null) {
      displayWarning("you must select a game to play from the menu");
      return;
    }

    iCardDrawn++;
    iDrawCount++;
    ImageView imView = null;
    eGameState = eGameState.PlayOfGame;

    // Disable the button in case of double-click
    SetGameControls(eGameState.DrawingCard);

    // Create the parent transition
    SequentialTransition tranDealCards = new SequentialTransition();

    // Figure the action based on the game, state of game
    Action act = new Action(gme, iCardDrawnPlayer, iCardDrawnCommon, iDrawCount);

    if (act.geteDrawAction() == eDrawAction.DrawPlayer) {
      // Draw a card for each player seated
      for (int iDraw = 0; iDraw < act.getiCardDrawn(); iDraw++) {
        iCardDrawnPlayer++;
        for (Player p : mainApp.GetSeatedPlayers()) {
          Card c = gme.getGameDeck().drawFromDeck();

          HBox PlayerCardBox = null;

          switch (p.getiPlayerPosition()) {
            case 1:
              PlayerCardBox = hBoxP1Cards;
              imView = imgTransCardP1;
              break;
            case 2:
              PlayerCardBox = hBoxP2Cards;
              imView = imgTransCardP2;
              break;

            case 3:
              PlayerCardBox = hBoxP3Cards;
              imView = imgTransCardP3;
              break;

            case 4:
              PlayerCardBox = hBoxP4Cards;
              imView = imgTransCardP4;
              break;
          }
          gme.FindPlayerGame(gme, p).addCardToHand(c);
          tranDealCards
              .getChildren()
              .add(CalculateTransition(c, PlayerCardBox, imView, iCardDrawnPlayer));
        }
      }

    } else if (act.geteDrawAction() == eDrawAction.DrawCommon) {

      for (int iDraw = 0; iDraw < act.getiCardDrawn(); iDraw++) {
        iCardDrawnCommon++;
        imView = imgTransCardCommon;
        Card c = gme.getGameDeck().drawFromDeck();
        gme.FindCommonHand(gme).addCardToHand(c);
        tranDealCards
            .getChildren()
            .add(CalculateTransition(c, HboxCommunityCards, imView, iCardDrawnCommon));
      }
    }

    // tranDealCards is the master transition... it has deals for every card
    // to every player. Play it.
    tranDealCards.play();

    // If bEvalHand is true, it's time to evaluate the Hand...
    if (act.isbEvaluateHand()) {

      ArrayList<GamePlayPlayerHand> AllPlayersHands = new ArrayList<GamePlayPlayerHand>();
      ArrayList<Hand> BestPlayerHands = new ArrayList<Hand>();
      HashMap hsPlayerHand = new HashMap();

      for (Player p : mainApp.GetSeatedPlayers()) {
        GamePlayPlayerHand GPPH = gme.FindPlayerGame(gme, p);
        Hand PlayerHand = GPPH.getHand();
        GamePlayPlayerHand GPCH = gme.FindCommonHand(gme);

        ArrayList<Hand> AllHands = Hand.ListHands(GPPH.getHand(), GPCH.getHand(), GPPH.getGame());
        Hand hBestHand = Hand.PickBestHand(AllHands);
        GPPH.setBestHand(hBestHand);
        hsPlayerHand.put(hBestHand, GPPH.getPlayer());
        BestPlayerHands.add(hBestHand);
      }

      Hand WinningHand = Hand.PickBestHand(BestPlayerHands);
      Player WinningPlayer = (Player) hsPlayerHand.get(WinningHand);
      System.out.println(
          "Winning Player Position: "
              + WinningPlayer.getiPlayerPosition()
              + "("
              + WinningPlayer.getPlayerName()
              + ")");
      displayWinner(
          "Winning Player Position: "
              + WinningPlayer.getiPlayerPosition()
              + " ("
              + WinningPlayer.getPlayerName()
              + ")");
      SetGameControls(eGameState.EndOfGame);

    } else {
      if (iCardDrawnPlayer + iCardDrawnCommon + 2 >= gme.getRule().getTotalCardsToDraw()) {
        for (Player p : mainApp.GetSeatedPlayers()) {
          Hand hPlayer = gme.FindPlayerGame(gme, p).getHand();
          for (int a = hPlayer.getCards().size(); a < gme.getRule().GetPlayerNumberOfCards(); a++) {
            hPlayer.AddCardToHand(new Card(eSuit.JOKER, eRank.JOKER, 0));
          }

          Hand hCommon = gme.FindCommonHand(gme).getHand();

          if (hCommon.getCards() == null) {
            for (int a = 0; a < gme.getRule().GetCommunityCardsCount(); a++) {
              hCommon.AddCardToHand(new Card(eSuit.JOKER, eRank.JOKER, 0));
            }
          } else {

            for (int a = hCommon.getCards().size();
                a < gme.getRule().GetCommunityCardsCount();
                a++) {
              hCommon.AddCardToHand(new Card(eSuit.JOKER, eRank.JOKER, 0));
            }
          }
          ArrayList<Hand> AllHands = Hand.ListHands(hPlayer, hCommon, gme);

          System.out.println(AllHands.get(0).getHandStrength());
        }
      }

      // Re-enable the draw button
      SetGameControls(eGameState);
    }
  }
  @FXML
  private void handleDraw() {
    iCardDrawn++;

    // Draw a card for each player seated
    for (Player p : mainApp.GetSeatedPlayers()) {
      Card c = gme.getGameDeck().drawFromDeck();

      // Player 1
      if (p.getiPlayerPosition() == 1) {
        GamePlayPlayerHand GPPH = gme.FindPlayerGame(gme, p);
        GPPH.addCardToHand(c);
        String strCard = "/res/img/" + c.getCardImg();
        ImageView img =
            new ImageView(new Image(getClass().getResourceAsStream(strCard), 75, 75, true, true));

        ImageView i = (ImageView) h1P1.getChildren().get(iCardDrawn - 1);
        ImageView iCardFaceDown = (ImageView) HboxCommonArea.getChildren().get(0);
        final ParallelTransition transitionForward =
            createTransition(
                i,
                iCardFaceDown,
                new Image(getClass().getResourceAsStream(strCard), 75, 75, true, true));

        transitionForward.play();
        // h1P1.getChildren().add(img);

        if (iCardDrawn == NbrCards) {
          GPPH.getHand().EvalHand();
          handsInPlay.add(GPPH);
        }
      }

      // Player 2
      if (p.getiPlayerPosition() == 2) {
        GamePlayPlayerHand GPPH = gme.FindPlayerGame(gme, p);
        GPPH.addCardToHand(c);
        String strCard = "/res/img/" + c.getCardImg();
        ImageView img =
            new ImageView(new Image(getClass().getResourceAsStream(strCard), 75, 75, true, true));

        ImageView i = (ImageView) v2P2.getChildren().get(iCardDrawn - 1);
        ImageView iCardFaceDown = (ImageView) HboxCommonArea.getChildren().get(0);
        final ParallelTransition transitionForward =
            createTransition(
                i,
                iCardFaceDown,
                new Image(getClass().getResourceAsStream(strCard), 75, 75, true, true));

        transitionForward.play();
        // h1P1.getChildren().add(img);

        if (iCardDrawn == NbrCards) {
          GPPH.getHand().EvalHand();
          handsInPlay.add(GPPH);
        }
      }

      // Player 3
      if (p.getiPlayerPosition() == 3) {
        GamePlayPlayerHand GPPH = gme.FindPlayerGame(gme, p);
        GPPH.addCardToHand(c);
        String strCard = "/res/img/" + c.getCardImg();
        ImageView img =
            new ImageView(new Image(getClass().getResourceAsStream(strCard), 75, 75, true, true));

        ImageView i = (ImageView) h3P3.getChildren().get(iCardDrawn - 1);
        ImageView iCardFaceDown = (ImageView) HboxCommonArea.getChildren().get(0);
        final ParallelTransition transitionForward =
            createTransition(
                i,
                iCardFaceDown,
                new Image(getClass().getResourceAsStream(strCard), 75, 75, true, true));

        transitionForward.play();
        // h1P1.getChildren().add(img);

        if (iCardDrawn == NbrCards) {
          GPPH.getHand().EvalHand();
          this.handsInPlay.add(GPPH);
        }
      }

      // Player 4
      if (p.getiPlayerPosition() == 4) {
        GamePlayPlayerHand GPPH = gme.FindPlayerGame(gme, p);
        GPPH.addCardToHand(c);
        String strCard = "/res/img/" + c.getCardImg();
        ImageView img =
            new ImageView(new Image(getClass().getResourceAsStream(strCard), 75, 75, true, true));

        ImageView i = (ImageView) v4P4.getChildren().get(iCardDrawn - 1);
        ImageView iCardFaceDown = (ImageView) HboxCommonArea.getChildren().get(0);
        final ParallelTransition transitionForward =
            createTransition(
                i,
                iCardFaceDown,
                new Image(getClass().getResourceAsStream(strCard), 75, 75, true, true));

        transitionForward.play();
        // h1P1.getChildren().add(img);

        if (iCardDrawn == NbrCards) {
          GPPH.getHand().EvalHand();
          handsInPlay.add(GPPH);
        }
      }
    }

    if (iCardDrawn == NbrCards) {
      btnDraw.setVisible(false);

      if (NbrCommunityCards != 0) {
        btnDrawCenter.setVisible(true);
      }
    }
  }