protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                return;
            }

            if (TeamScheduleID.HasValue)
            {
                //edit
                using (TeamSchedulesController tsc = new TeamSchedulesController())
                {
                    if (!tsc.IsUserScoped(CurrentUser.UserID, "Scheduler.EditEvent", TeamScheduleID.Value))
                    {
                        AlertBox_General.SetStatus("You do not have permission to edit this event.", UI.AlertBoxType.Error);
                        divManage.Visible = false;
                        return;
                    }
                    else
                    {
                        divManage.Visible = true;
                        Populate(TeamScheduleID.Value);
                    }
                }

                lnkUpdateEvent.Visible = true;
            }
            else
            {
                CheckAllowed("Scheduler.AddNewEvent");
                divManage.Visible = true;
                lnkCreateEvent.Visible = true;
                Title = "Add New Event";
            }
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!TeamScheduleID.HasValue)
            {
                return;
            }

            lnkEdit.NavigateUrl = string.Format(lnkEdit.NavigateUrl, TeamScheduleID.Value);

            using (TeamSchedulesController tsc = new TeamSchedulesController())
            {
                FetchStrategy fetch = new FetchStrategy() { MaxFetchDepth = 6 };
                fetch.LoadWith<TeamSchedule>(i => i.Team);
                fetch.LoadWith<Team>(i => i.TeamPlayers);
                fetch.LoadWith<TeamPlayer>(i => i.Player);
                fetch.LoadWith<Player>(i => i.Person);
                fetch.LoadWith<TeamSchedule>(i => i.Attendances);
                fetch.LoadWith<TeamPlayer>(i => i.PlayerPass);
                fetch.LoadWith<PlayerPass>(i => i.Player);

                TeamSchedule schedule = tsc.GetWhere(i => i.TeamScheduleID == TeamScheduleID.Value, fetch).First();

                EventName = schedule.EventName;
                TeamName = schedule.Team.TeamName;
                Starts = schedule.StartDate;
                Ends = schedule.EndDate;

                var knownAttendances = schedule.Attendances.ToList();

                var data = schedule.Team.TeamPlayers.Select(i => new PlayerAttendance()
                {
                    FirstName = i.PlayerID.HasValue ? i.Player.Person.FName : i.PlayerPass.Player.Person.FName,
                    LastName = i.PlayerID.HasValue ? i.Player.Person.LName : i.PlayerPass.Player.Person.LName,
                    Present = knownAttendances.Where(j => j.PlayerID == i.PlayerID).Count() > 0,
                    PlayerID = i.PlayerID.HasValue ? i.PlayerID.Value : i.PlayerPass.PlayerID
                });

                rptPlayer.DataSource = data;
                rptPlayer.DataBind();
            }
        }
        private void Populate(int teamScheduleID)
        {
            using (TeamSchedulesController tsc = new TeamSchedulesController())
            {
                FetchStrategy fetch = new FetchStrategy();
                fetch.LoadWith<TeamSchedule>(i => i.Team);

                TeamSchedule teamSchedule = tsc.GetWhere(i => i.TeamScheduleID == TeamScheduleID.Value, fetch).First();
                txtStartDate.Text = teamSchedule.StartDate.ToLocalTime().ToString("yyyy-MM-ddTHH:mm");
                txtEndDate.Text = teamSchedule.EndDate.ToLocalTime().ToString("yyyy-MM-ddTHH:mm");
                txtRSVPBy.Text = teamSchedule.RSVPBy.HasValue ? teamSchedule.RSVPBy.Value.ToLocalTime().ToString("yyyy-MM-ddTHH:mm") : null;
                txtEventName.Text = teamSchedule.EventName;
                chkEnableRSVP.Checked = teamSchedule.RSVPBy.HasValue;
                chkEnableRSVP_CheckedChanged(null, null);

                // set program/team
                ptpPicker.SelectedProgramID = teamSchedule.Team.ProgramID;
                ptpPicker.SelectedTeamID = teamSchedule.TeamID;
                ptpPicker.Populate();
            }
        }
        protected void lnkCreateEvent_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
            {
                return;
            }

            try
            {
                using (TeamSchedulesController tsc = new TeamSchedulesController())
                {
                    tsc.AddNew(new TeamSchedule()
                    {
                        CreateDate = DateTime.Now.ToUniversalTime(),
                        CreateUserID = CurrentUser.UserID,
                        EventName = txtEventName.Text,
                        TeamID = ptpPicker.SelectedTeamID.Value,
                        StartDate = DateTime.Parse(txtStartDate.Text).ToUniversalTime(),
                        EndDate = DateTime.Parse(txtEndDate.Text).ToUniversalTime(),
                        RSVPBy = chkEnableRSVP.Checked && !string.IsNullOrWhiteSpace(txtRSVPBy.Text) ? DateTime.Parse(txtRSVPBy.Text).ToUniversalTime() : (DateTime?)null,
                        IsActive = true
                    });

                    Response.Redirect(ResolveUrl("~/Modules/Scheduler/"));
                }
            }
            catch (Exception ex)
            {
                AlertBox_Manage.SetStatus("An error occurred while trying to create new event.", UI.AlertBoxType.Error);
            }
        }
        protected void lnkUpdateEvent_Click(object sender, EventArgs e)
        {
            if (!Page.IsValid)
            {
                return;
            }

            try
            {
                using (TeamSchedulesController tsc = new TeamSchedulesController())
                {
                    // get clean copy
                    TeamSchedule teamSchedule = tsc.Get(TeamScheduleID.Value);
                    teamSchedule.ModifyDate = DateTime.Now.ToUniversalTime();
                    teamSchedule.ModifyUserID = CurrentUser.UserID;
                    teamSchedule.EventName = txtEventName.Text;
                    teamSchedule.TeamID = ptpPicker.SelectedTeamID.Value;
                    teamSchedule.StartDate = DateTime.Parse(txtStartDate.Text).ToUniversalTime();
                    teamSchedule.EndDate = DateTime.Parse(txtEndDate.Text).ToUniversalTime();
                    teamSchedule.RSVPBy = chkEnableRSVP.Checked && !string.IsNullOrWhiteSpace(txtRSVPBy.Text) ? DateTime.Parse(txtRSVPBy.Text).ToUniversalTime() : (DateTime?)null;

                    tsc.Update(teamSchedule);

                    Response.Redirect(ResolveUrl("~/Modules/Scheduler/"));
                }
            }
            catch (Exception ex)
            {
                AlertBox_Manage.SetStatus("An error occurred while trying to create new event.", UI.AlertBoxType.Error);
            }
        }
        protected void lnkDelete_Click(object sender, EventArgs e)
        {
            if(!TeamScheduleID.HasValue){
                return;
            }

            if (TeamScheduleDeleted == null)
            {
                throw new Exception("No event supplied when team schedule is deleted. Cannot delete");
            }
            else
            {
                try
                {
                    using (TeamSchedulesController tsc = new TeamSchedulesController())
                    {
                        TeamSchedule teamSchedule = tsc.Get(TeamScheduleID.Value);
                        teamSchedule.IsActive = false;
                        teamSchedule.DeleteDate = DateTime.Now.ToUniversalTime();
                        teamSchedule.DeleteUserID = CurrentUser.UserID;
                        tsc.Update(teamSchedule);

                        OnTeamScheduleDeleted(new TeamScheduleEvent()
                        {
                            Message = "Successfully deleted the event.",
                            MessageType = UI.AlertBoxType.Success
                        });
                    }
                }
                catch (Exception ex)
                {
                    OnTeamScheduleDeleted(new TeamScheduleEvent()
                    {
                        Message = "An error occurred while attempting to delete the event.",
                        MessageType = UI.AlertBoxType.Error
                    });
                }
            }
        }