/// <summary>
        /// handles all logic to bench the skater for the game.
        /// </summary>
        /// <param name="skater"></param>
        /// <param name="teamNumber"></param>
        public void benchSkater(TeamMembersViewModel skater, TeamNumberEnum teamNumber)
        {
            if (teamNumber == TeamNumberEnum.Team1)
            {
                if (Blocker1T1 != null && Blocker1T1.SkaterId == skater.SkaterId)
                    Blocker1T1 = null;
                if (Blocker2T1 != null && Blocker2T1.SkaterId == skater.SkaterId)
                    Blocker2T1 = null;
                if (Blocker3T1 != null && Blocker3T1.SkaterId == skater.SkaterId)
                    Blocker3T1 = null;
                if (PivotT1 != null && PivotT1.SkaterId == skater.SkaterId)
                    PivotT1 = null;
                if (JammerT1 != null && JammerT1.SkaterId == skater.SkaterId)
                    JammerT1 = null;

                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBenched = true;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker1 = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker2 = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker3 = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsInBox = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsJammer = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsLeadJammer = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsPivot = false;
            }
            else if (teamNumber == TeamNumberEnum.Team2)
            {
                if (Blocker1T2 != null && Blocker1T2.SkaterId == skater.SkaterId)
                    Blocker1T2 = null;
                if (Blocker2T2 != null && Blocker2T2.SkaterId == skater.SkaterId)
                    Blocker2T2 = null;
                if (Blocker3T2 != null && Blocker3T2.SkaterId == skater.SkaterId)
                    Blocker3T2 = null;
                if (PivotT2 != null && PivotT2.SkaterId == skater.SkaterId)
                    PivotT2 = null;
                if (JammerT2 != null && JammerT2.SkaterId == skater.SkaterId)
                    JammerT2 = null;

                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBenched = true;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker1 = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker2 = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker3 = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsInBox = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsJammer = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsLeadJammer = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsPivot = false;
            }
        }
 /// <summary>
 /// sets the pivot for the jam.
 /// </summary>
 /// <param name="skater"></param>
 /// <param name="team"></param>
 public void setPivot(TeamMembersViewModel skater, TeamNumberEnum team)
 {
     clearSkaterPositions(skater, team);
     if (team == TeamNumberEnum.Team1)
     {
         for (int i = 0; i < GameViewModel.Instance.Team1.TeamMembers.Count; i++)
         {
             if (GameViewModel.Instance.Team1.TeamMembers[i].IsPivot)
             {
                 GameViewModel.Instance.Team1.TeamMembers[i].IsBenched = true;
                 GameViewModel.Instance.Team1.TeamMembers[i].IsPivot = false;
             }
         }
         PivotT1 = skater;
         GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsPivot = true;
         GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBenched = false;
     }
     else if (team == TeamNumberEnum.Team2)
     {
         for (int i = 0; i < GameViewModel.Instance.Team2.TeamMembers.Count; i++)
         {
             if (GameViewModel.Instance.Team2.TeamMembers[i].IsPivot)
             {
                 GameViewModel.Instance.Team2.TeamMembers[i].IsBenched = true;
                 GameViewModel.Instance.Team2.TeamMembers[i].IsPivot = false;
             }
         }
         PivotT2 = skater;
         GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsPivot = true;
         GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBenched = false;
     }
 }
        public void clearSkaterPositions(TeamMembersViewModel skater, TeamNumberEnum team)
        {
            if (team == TeamNumberEnum.Team1)
            {
                if (PivotT1 == skater)
                    PivotT1 = null;
                if (JammerT1 == skater)
                    JammerT1 = null;
                if (Blocker1T1 == skater)
                    Blocker1T1= null;
                if (Blocker2T1 == skater)
                    Blocker2T1= null;
                if (Blocker3T1== skater)
                    Blocker3T1= null;
                               
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBenched = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker1 = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker2 = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker3 = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsInBox = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsJammer = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsLeadJammer = false;
                GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsPivot = false;
            }
            else if (team == TeamNumberEnum.Team2)
            {
                if (PivotT1 == skater)
                    PivotT1 = null;
                if (JammerT1 == skater)
                    JammerT1 = null;
                if (Blocker1T1 == skater)
                    Blocker1T1 = null;
                if (Blocker2T1 == skater)
                    Blocker2T1 = null;
                if (Blocker3T1 == skater)
                    Blocker3T1 = null;
                
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBenched = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker1 = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker2 = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsBlocker3 = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsInBox = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsJammer = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsLeadJammer = false;
                GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault().IsPivot = false;

            }
        }
        /// <summary>
        /// sets the lead jammer for the Jam.
        /// Also takes care if the Lead Jammer has changed as in MADE rules.
        /// </summary>
        /// <param name="jammerInLead"></param>
        /// <param name="gameTimeinMilliseconds"></param>
        /// <param name="jamTimeinMilliseconds"></param>
        public bool setLeadJammer(TeamMembersViewModel jammerInLead, long gameTimeinMilliseconds, TeamNumberEnum team)
        {
            //can only be lead if they are jammer or pivot
            if ((jammerInLead.IsPivot | jammerInLead.IsJammer) && !jammerInLead.IsInBox)
            {
                if (LeadJammers == null)
                    LeadJammers = new List<LeadJammerViewModel>();

                LeadJammerViewModel jamLead = new LeadJammerViewModel();
                jamLead.Jammer = jammerInLead;
                jamLead.JamTimeInMilliseconds = (long)TimeSpan.FromTicks(this.JamClock.TimeElapsed).TotalMilliseconds;
                jamLead.GameTimeInMilliseconds = gameTimeinMilliseconds;

                LeadJammers.Add(jamLead);

                if (team == TeamNumberEnum.Team1)
                {
                    //removes lead from this team 
                    removeLeadJammer(team);
                    GameViewModel.Instance.Team1.TeamMembers.Where(x => x.SkaterId == jammerInLead.SkaterId).FirstOrDefault().IsLeadJammer = true;
                    removeLeadJammer(TeamNumberEnum.Team2);
                }
                else if (team == TeamNumberEnum.Team2)
                {
                    removeLeadJammer(team);
                    GameViewModel.Instance.Team2.TeamMembers.Where(x => x.SkaterId == jammerInLead.SkaterId).FirstOrDefault().IsLeadJammer = true;
                    removeLeadJammer(TeamNumberEnum.Team1);
                }
                return true;
            }
            return false;
        }
        /// <summary>
        /// add a skater to a team specified.
        /// </summary>
        /// <param name="skaterName"></param>
        /// <param name="skaterNumber"></param>
        /// <param name="team"></param>
        public void addTeamSkater(string skaterName, string skaterNumber, TeamNumberEnum team)
        {
            TeamMembersViewModel teamMember = new TeamMembersViewModel();
            teamMember.SkaterId = Guid.NewGuid();
            teamMember.SkaterName = skaterName;
            teamMember.SkaterNumber = skaterNumber;
            teamMember.IsBenched = true;
            teamMember.IsBlocker1 = false;
            teamMember.IsBlocker2 = false;
            teamMember.IsBlocker3 = false;
            teamMember.IsInBox = false;
            teamMember.IsJammer = false;
            teamMember.IsLeadJammer = false;
            teamMember.IsPivot = false;

            if (team == TeamNumberEnum.Team1)
            {
                instance.Team1.TeamMembers.Add(teamMember);
            }
            else
            {
                instance.Team2.TeamMembers.Add(teamMember);
            }
        }
        /// <summary>
        /// removes the player from the penalty box.
        /// </summary>
        /// <param name="skaterBeingRemovedFromBox"></param>
        /// <param name="team"></param>
        public void removeSkaterFromPenaltyBox(TeamMembersViewModel skaterBeingRemovedFromBox, TeamNumberEnum team)
        {
            if (skaterBeingRemovedFromBox.IsInBox)
            {
                instance.PenaltyBox.Where(x => x.PlayerSentToBox.SkaterId == skaterBeingRemovedFromBox.SkaterId).LastOrDefault().GameTimeInMillisecondsReleased = instance.ElapsedTimeGameClockMilliSeconds;
                instance.PenaltyBox.Where(x => x.PlayerSentToBox.SkaterId == skaterBeingRemovedFromBox.SkaterId).LastOrDefault().JamTimeInMillisecondsReleased = instance.CurrentJam.JamClock.TimeElapsed;
                instance.PenaltyBox.Where(x => x.PlayerSentToBox.SkaterId == skaterBeingRemovedFromBox.SkaterId).LastOrDefault().JamNumberReleased = instance.CurrentJam.JamNumber;

                if (team == TeamNumberEnum.Team1)
                    instance.Team1.TeamMembers.Where(x => x.SkaterId == skaterBeingRemovedFromBox.SkaterId).FirstOrDefault().IsInBox = false;
                else if (team == TeamNumberEnum.Team2)
                    instance.Team2.TeamMembers.Where(x => x.SkaterId == skaterBeingRemovedFromBox.SkaterId).FirstOrDefault().IsInBox = false;
            }
        }
        /// <summary>
        /// Sends Player to Penalty Box
        /// </summary>
        /// <param name="skaterBeingSentToBox"></param>
        public void sendSkaterToPenaltyBox(TeamMembersViewModel skaterBeingSentToBox, TeamNumberEnum team)
        {
            SkaterInPenaltyBoxViewModel skater = new SkaterInPenaltyBoxViewModel();
            skater.GameTimeInMillisecondsSent = instance.ElapsedTimeGameClockMilliSeconds;
            skater.JamTimeInMillisecondsSent = instance.CurrentJam.JamClock.TimeElapsed;
            skater.PlayerSentToBox = skaterBeingSentToBox;
            skater.JamNumberSent = instance.CurrentJam.JamNumber;
            instance.PenaltyBox.Add(skater);

            if (team == TeamNumberEnum.Team1)
            {
                instance.Team1.TeamMembers.Where(x => x.SkaterId == skaterBeingSentToBox.SkaterId).FirstOrDefault().IsInBox = true;
                //any skater in box isn't allowed to be lead jammer.
                if (PolicyViewModel.Instance.PenaltyBoxControlsLeadJammer)
                    instance.Team1.TeamMembers.Where(x => x.SkaterId == skaterBeingSentToBox.SkaterId).FirstOrDefault().IsLeadJammer = false;
            }
            else if (team == TeamNumberEnum.Team2)
            {
                instance.Team2.TeamMembers.Where(x => x.SkaterId == skaterBeingSentToBox.SkaterId).FirstOrDefault().IsInBox = true;
                //any skater in box isn't allowed to be lead jammer.
                if (PolicyViewModel.Instance.PenaltyBoxControlsLeadJammer)
                    instance.Team2.TeamMembers.Where(x => x.SkaterId == skaterBeingSentToBox.SkaterId).FirstOrDefault().IsLeadJammer = false;
            }
        }
 public void removeSkaterFromTeam(TeamMembersViewModel skater, TeamNumberEnum team)
 {
     if (team == TeamNumberEnum.Team1)
     {
         var member = this.Team1.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault();
         instance.Team1.TeamMembers.Remove(member);
     }
     else if (team == TeamNumberEnum.Team2)
     {
         var member = this.Team2.TeamMembers.Where(x => x.SkaterId == skater.SkaterId).FirstOrDefault();
         instance.Team2.TeamMembers.Remove(member);
     }
 }