/// <summary>
        /// Handles when the done button has been clicked
        /// </summary>
        /// <param name="bClickedByHuman"></param>
        public void DoneClicked(bool bClickedByHuman)
        {
            Round curRound = m_Rounds[m_Rounds.Count - 1];

            curRound.Expand();
            Turn curTurn  = curRound.GetCurrentTurn();
            Turn prevTurn = (Turn)curTurn.Clone();

            prevTurn--;
            Player curPlayer  = curTurn.GetPlayer();
            Player prevPlayer = prevTurn.GetPlayer();
            Hand   prevHand   = prevTurn.GetHand();
            Hand   curHand    = curTurn.GetHand();

            if (curTurn.GetPlayer().ID == prevTurn.GetPlayer().ID)
            {
                if (!curTurn.isDefending())//impossible to defend on the first turn
                {
                    if (!bClickedByHuman)
                    {
                        curHand = curPlayer.Attack(prevHand);//a player object may attack, only if it's not human
                        foreach (PlayingCard card in curHand)
                        {
                            m_Gg.m_BattleArea.AddAttackCard(new CardBox(card, Orientation.Vertical, curTurn.GetHashCode()));
                            curPlayer.m_Hand -= card;//remove the card from the player's hand
                            WriteToLog("Player " + prevTurn.GetPlayer().ID.ToString() + " " + ((!(PlayerType.human == prevTurn.GetPlayer().GetMode())) ? "computer" : "human")
                                       + " attacked using " + card.ToString());
                        }
                        curTurn.SetHand(curHand);
                        if (0 == curHand.Count)
                        {
                            WriteToLog("Player " + prevTurn.GetPlayer().ID.ToString() + " " + ((!(PlayerType.human == prevTurn.GetPlayer().GetMode())) ? "computer" : "human")
                                       + " player (prev turn) sucessfully attacked/defended");
                        }
                        m_Gg.UpdateElements(m_Players);//update UI
                    }
                }
                if (false == btnDoneGuard)
                {
                    Timed_Response(ResponseType.next_turn);//timed response gives time for the user to view cards on the table
                }
            }
            else
            {
                int iLoserId = 0;//used to track loser of this round. The loser will have the first turn in next round
                if (!bClickedByHuman)
                {
                    if (false == btnDoneGuard)
                    {
                        if (curTurn.GetPlayer().CanDefend(prevHand))
                        {
                            curHand = curPlayer.MakeDefense(prevHand);
                            foreach (PlayingCard card in curHand)
                            {
                                m_Gg.m_BattleArea.AddDefenseCard(new CardBox(card, Orientation.Vertical, curTurn.GetHashCode()));
                                curPlayer.m_Hand -= card;
                                WriteToLog("Player " + prevTurn.GetPlayer().ID.ToString() + " " + ((!(PlayerType.human == prevTurn.GetPlayer().GetMode())) ? "computer" : "human")
                                           + " defended using " + card.ToString());
                            }
                            curTurn.SetHand(curHand);//override any existing hand
                            if (0 == curHand.Count)
                            {
                                WriteToLog("Player " + prevTurn.GetPlayer().ID.ToString() + " " + ((!(PlayerType.human == prevTurn.GetPlayer().GetMode())) ? "computer" : "human")
                                           + " player (prev turn) sucessfully attacked/defended");
                                iLoserId = prevTurn.GetPlayer().ID;
                            }
                        }
                        else
                        {
                            iLoserId = ProcessLoser(prevTurn, prevHand, prevPlayer.ID, curTurn, curHand, bClickedByHuman);
                        }
                    }
                }
                //need to get the current count of cards in each player's hands
                int  ranksInPrevHand = GameUtil.getCountMaxRanksInHand(prevHand);
                int  ranksInCurHand  = GameUtil.getCountMaxRanksInHand(curHand);
                bool bTemp           = GameUtil.doHandSuitsMatch(prevHand, curHand);
                if (ranksInPrevHand == ranksInCurHand)//test for equal hands, do nothing if not equals
                {
                    if (false == btnDoneGuard)
                    {
                        if (prevHand > curHand)//compare
                        {
                            iLoserId = ProcessLoser(prevTurn, prevHand, prevPlayer.ID, curTurn, curHand, bClickedByHuman);
                        }
                        else if (curHand > prevHand)
                        {
                            iLoserId = ProcessLoser(curTurn, curHand, curPlayer.ID, prevTurn, prevHand, bClickedByHuman);
                        }
                        else
                        {//draw
                            MessageBox.Show("Draw");
                        }
                    }
                }
                else
                {
                    if (curTurn.isDefending()) //attacking humans are free to place as many cards on the board as they want, errors to be caught by Cardbox_Clicked method
                    {
                        if (bClickedByHuman)   //notify user of their mistake
                        {
                            if (GameUtil.ShallIDoThisForYou("You did not place the correct amount of cards in the battle area. Forfeit?"))
                            {
                                WriteToLog("Player " + prevTurn.GetPlayer().ID.ToString() + " " + ((!(PlayerType.human == prevTurn.GetPlayer().GetMode())) ? "computer" : "human")
                                           + " player (prev turn) sucessfully attacked/defended");
                                iLoserId = prevTurn.GetPlayer().ID;
                            }
                        }
                    }
                }
                m_Gg.UpdateElements(m_Players); //refresh gui with new placements
                DoneWithRound(iLoserId);        //iLoserId used to set player order in the next round
                curRound.m_CurrentTurn--;
            }
            curRound.m_CurrentTurn++;
            curRound.outputStatusToWindow(ref m_Gg);
            curRound.updateBoldedStatus(curRound.GetCurrentTurn(), ref m_Gg);
        }