/// <summary>
        /// The generate email body.
        /// </summary>
        /// <param name="page03ViewData">
        /// The page 03 view data.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        protected string GenerateEmailBody(Page03ViewData page03ViewData)
        {
            string        input   = Regex.Replace(Regex.Replace(Regex.Replace(Regex.Replace(page03ViewData.VolunteerInfo.EventMailBody, "<span>VolunteerID</span>", page03ViewData.Volunteer.VolunteerID.ToString(CultureInfo.InvariantCulture)), "<span>FirstName</span>", page03ViewData.Volunteer.FirstName), "<span>LastName</span>", page03ViewData.Volunteer.LastName), "<span>Region</span>", "Region " + page03ViewData.Config["RegionNumber"]);
            StringBuilder builder = new StringBuilder();

            if (!string.IsNullOrWhiteSpace(page03ViewData.TournamentInfo.LocationURL))
            {
                builder.Append("<a href=\"" + page03ViewData.TournamentInfo.LocationURL + "\" target=\"_blank\">");
            }

            builder.Append(page03ViewData.TournamentInfo.Location);
            if (!string.IsNullOrWhiteSpace(page03ViewData.TournamentInfo.LocationAddress))
            {
                builder.Append(", " + page03ViewData.TournamentInfo.LocationAddress);
            }

            if (!string.IsNullOrWhiteSpace(page03ViewData.TournamentInfo.LocationCity))
            {
                builder.Append(", " + page03ViewData.TournamentInfo.LocationCity);
            }

            if (!string.IsNullOrWhiteSpace(page03ViewData.TournamentInfo.LocationState))
            {
                builder.Append(", " + page03ViewData.TournamentInfo.LocationState);
            }

            if (!string.IsNullOrWhiteSpace(page03ViewData.TournamentInfo.LocationURL))
            {
                builder.Append("</a>");
            }

            return(Regex.Replace(Regex.Replace(Regex.Replace(Regex.Replace(input, "<span>TournamentLocation</span>", builder.ToString()), "<span>TournamentDate</span>", page03ViewData.TournamentInfo.StartDate.HasValue ? page03ViewData.TournamentInfo.StartDate.Value.ToLongDateString() : "TBA"), "<span>TournamentTime</span>", !string.IsNullOrWhiteSpace(page03ViewData.TournamentInfo.Time) ? page03ViewData.TournamentInfo.Time : "TBA"), "<span>ContactUsURL</span>", page03ViewData.Config["HomePage"] + page03ViewData.Config["ContactUsURL"]));
        }
        public ActionResult Page03(int id)
        {
            if (this.CurrentRegistrationState != RegistrationState.Available)
            {
                return(this.RedirectToAction(this.CurrentRegistrationState.ToString()));
            }

            Page03ViewData viewData = new Page03ViewData
            {
                VolunteerInfo = this.Repository.VolunteerInfo
            };

            this.SetBaseViewData(viewData);

            // Update the DateTime of the registration in the Volunteer record.
            viewData.Volunteer = this.Repository.GetVolunteerById(id);

            // This should NEVER happen!
            if (viewData.Volunteer == null)
            {
                // Volunteer not found; return error.
                viewData.ErrorMessage = "Your registration failed.  Please try the registration process over again.";
                return(this.View(viewData));
            }

            this.Repository.UpdateVolunteer(id, 3, viewData.Volunteer);

            viewData.MailBody = this.GenerateEmailBody(viewData);

            if (!string.IsNullOrEmpty(viewData.Volunteer.EmailAddress) && (viewData.Volunteer.EmailAddress != "None"))
            {
                viewData.EmailAddressWasSpecified = true;

                // Instantiate a new instance of MailMessage.
                MailMessage mailMessage = this.BuildMessage(
                    viewData.Config["WebmasterEmail"],
                    viewData.RegionName + " Odyssey Region " + viewData.RegionNumber + " " + viewData.FriendlyRegistrationName,
                    viewData.MailBody,
                    viewData.Volunteer.EmailAddress,
                    null,
                    null);

                if (mailMessage == null)
                {
                    return(this.RedirectToAction("BadEmail"));
                }

                // Instantiate a new instance of SmtpClient.
                viewData.MailErrorMessage = this.SendMessage(viewData, mailMessage);
            }
            else
            {
                viewData.EmailAddressWasSpecified = false;
            }

            return(this.View(viewData));
        }
        public ActionResult Page03(int id)
        {
            if (this.CurrentRegistrationState != RegistrationState.Available)
            {
                return(this.RedirectToAction(this.CurrentRegistrationState.ToString()));
            }

            Page03ViewData viewData = new Page03ViewData();

            this.SetBaseViewData(viewData);
            viewData.NoJudgesFound = false;

            return(this.View(viewData));
        }
        public ActionResult Page03(int id, Page03ViewData page03ViewData)
        {
            if (this.CurrentRegistrationState != RegistrationState.Available)
            {
                return(this.RedirectToAction(this.CurrentRegistrationState.ToString()));
            }

            try
            {
                this.SetBaseViewData(page03ViewData);
                this.UpdateModel(page03ViewData);

                page03ViewData.ListOfJudgesFound = this.Repository.GetJudgeByIdAndName(
                    int.Parse(page03ViewData.JudgeId),
                    page03ViewData.JudgeFirstName,
                    page03ViewData.JudgeLastName);

                if (!page03ViewData.ListOfJudgesFound.Any())
                {
                    page03ViewData.NoJudgesFound = true;
                    return(this.View(page03ViewData));
                }

                // Make sure any judge found is not already assigned to a team.
                if ((page03ViewData.ListOfJudgesFound.First() != null) &&
                    (page03ViewData.ListOfJudgesFound.First().TeamID != null))
                {
                    page03ViewData.JudgeAlreadyTaken = true;
                    return(this.View(page03ViewData));
                }

                TournamentRegistration newRegistrationData = new TournamentRegistration
                {
                    JudgeID = short.Parse(page03ViewData.JudgeId)
                };

                // TODO: Send an e-mail reporting database failure; could not find the record already added to the database
                this.Repository.UpdateTournamentRegistration(id, 3, newRegistrationData);

                return(this.RedirectToAction("Page05", new { id }));
            }
            catch (Exception exception)
            {
                ErrorSignal.FromCurrentContext().Raise(exception);

                // TODO: Replace with Error Message
                return(this.RedirectToAction("Index", "Home"));
            }
        }
        public ActionResult Page03(int id)
        {
            // If registration is currently closed, down, or coming soon, redirect to the appropriate page.
            if (this.CurrentRegistrationState != RegistrationState.Available)
            {
                return(this.RedirectToAction(this.CurrentRegistrationState.ToString()));
            }

            Page03ViewData viewData = new Page03ViewData
            {
                JudgesInfo = this.Repository.JudgesInfo
            };

            this.SetBaseViewData(viewData);

            // Update the DateTime of the registration in the Judge record
            viewData.Judge = this.Repository.GetJudgeById(id).FirstOrDefault <Judge>();

            // This should NEVER happen!
            if (viewData.Judge == null)
            {
                // Judge not found; return error
                viewData.ErrorMessage = "Your registration failed.  Please try the registration process over again.";
                return(this.View(viewData));
            }

            this.Repository.UpdateJudge(id, 3, viewData.Judge);

            viewData.MailBody = this.GenerateEmailBody(viewData);

            if (!string.IsNullOrWhiteSpace(viewData.Judge.EmailAddress) && (viewData.Judge.EmailAddress != "None"))
            {
                viewData.EmailAddressWasSpecified = true;
                MailMessage mailMessage = this.BuildMessage(viewData.Config["WebmasterEmail"], viewData.RegionName + " Odyssey Region " + viewData.RegionNumber + " " + viewData.FriendlyRegistrationName, viewData.MailBody, viewData.Judge.EmailAddress, null, null);
                if (mailMessage == null)
                {
                    return(this.RedirectToAction("BadEmail"));
                }

                // Instantiate a new instance of SmtpClient
                viewData.MailErrorMessage = this.SendMessage(viewData, mailMessage);
            }
            else
            {
                viewData.EmailAddressWasSpecified = false;
            }

            return(this.View(viewData));
        }