private void SendNotifications()
 {
     //Send thank you letter
     if (Master.EmailPINRow != null)
     {
         SurveyTools.SendNotifications(
             Server,
             Master.PropertyShortCode,
             SharedClasses.SurveyType.GEI,
             NotificationReason.ThankYou,
             string.Empty,
             new
         {
             CasinoName       = PropertyTools.GetCasinoName((int)Master.PropertyShortCode),
             FeedbackNoteHTML = String.Empty,
             FeedbackNoteTXT  = String.Empty,
             Attachments      = new SurveyTools.SurveyAttachmentDetails[] {
                 new SurveyTools.SurveyAttachmentDetails()
                 {
                     Path = "~/Images/headers/" + PropertyTools.GetCasinoHeaderImage(Master.PropertyShortCode), ContentID = "HeaderImage"
                 }
             }
         },
             Master.EmailPINRow["EmailAddress"].ToString());
     }
 }
        private void SendNotifications(int surveyID)
        {
            //Add the feedback
            SQLDatabase  sql = new SQLDatabase();    sql.CommandTimeout = 120;
            SqlParameter feedbackUIDParam = new SqlParameter("@UID", System.Data.SqlDbType.UniqueIdentifier);

            feedbackUIDParam.Direction = System.Data.ParameterDirection.Output;

            sql.ExecStoredProcedureDataSet("spFeedback_Create",
                                           new SQLParamList()
                                           .Add("@PropertyID", (int)Master.PropertyShortCode)
                                           .Add("@SurveyTypeID", (int)SurveyType.Donation)
                                           .Add("@RecordID", surveyID)
                                           .Add("@ReasonID", (int)NotificationReason.SponsorshipRequest)
                                           .Add(feedbackUIDParam)
                                           );

            //Notify the location
            SurveyTools.SendNotifications(
                Server,
                Master.PropertyShortCode,
                SharedClasses.SurveyType.Donation,
                NotificationReason.SponsorshipRequest,
                string.Empty,
                new
            {
                Date         = DateTime.Now.ToString("yyyy-MM-dd"),
                CasinoName   = Master.CasinoName,
                FeedbackLink = GCCPortalUrl + "Admin/Feedback/" + feedbackUIDParam.Value.ToString(),
                Link         = GCCPortalUrl + "Display/Donation/" + surveyID
            });
        }
        private void MessageTimeline_OnReply(TextBox textBox, MessageManager mm)
        {
            //Prevent refresh from re-submitting form data
            if (Session["CheckRefresh"].ToString() == ViewState["CheckRefresh"].ToString())
            {
                Session["CheckRefresh"] = Server.UrlDecode(System.DateTime.Now.ToString());
            }
            else
            {
                //Catch refresh and wipe the value again
                Session["CheckRefresh"] = Server.UrlDecode(System.DateTime.Now.ToString());
                textBox.Text            = String.Empty;
                return;
            }
            MessageTimeline.NoteTabActive = false;
            if (!String.IsNullOrWhiteSpace(textBox.Text.Trim()))
            {
                SQLDatabase sql  = new SQLDatabase();    sql.CommandTimeout = 120;
                int         rows = sql.NonQuery(@"	INSERT INTO [tblFeedbackEvents]  ( [FeedbackID], [FeedbackEventTypeID], [IsFromPlayer], [DateCreated], [Message], [NewStatusValue], [StaffMemberID] )
											VALUES ( ( SELECT FeedbackID FROM [tblFeedbackRequests] WHERE [UID] = @UID ), 2, 0, GETDATE(), @Message, NULL, @UserID);"                                            ,
                                                new SQLParamList()
                                                .Add("@Message", textBox.Text.Trim())
                                                .Add("@UID", GUID)
                                                .Add("@UserID", User.UserID));
                if (!sql.HasError && rows == 1)
                {
                    SurveyTools.SendFeedbackNotifications(Server, GUID, true);
                    mm.SuccessMessage = "Reply sent!";
                    textBox.Text      = String.Empty;
                    int feedbackStatus = sql.QueryScalarValue <int>("SELECT [FeedbackStatusID] FROM [tblFeedbackRequests] WHERE [UID] = @UID", new SQLParamList().Add("@UID", GUID));
                    if (feedbackStatus == (int)FeedbackStatus.Open)
                    {
                        sql.ExecStoredProcedureDataTable("spFeedback_ChangeStatus",
                                                         new SQLParamList()
                                                         .Add("@UID", GUID)
                                                         .Add("@FeedbackStatusID", (int)FeedbackStatus.AwaitingGuestResponse)
                                                         .Add("@IsFromPlayer", false)
                                                         .Add("@UserID", User.UserID));
                    }
                }
                else
                {
                    mm.ErrorMessage = "Oops! It looks like something went wrong. Please check the timeline and verify that the message was added.";
                }
            }
            else
            {
                mm.ErrorMessage = "Please enter something into the message box.";
            }
        }
        protected bool SaveData(out int rowID)
        {
            StringBuilder columnList = new StringBuilder();
            SQLParamList  sqlParams  = new SQLParamList();

            fbkEmail.PrepareQuestionForDB(columnList, sqlParams);
            fbkProperty.PrepareQuestionForDB(columnList, sqlParams);
            radGAG_Everett.PrepareQuestionForDB(columnList, sqlParams);
            radGAG_Lakewood.PrepareQuestionForDB(columnList, sqlParams);
            radGAG_Tukwila.PrepareQuestionForDB(columnList, sqlParams);
            radGAG_DeMoines.PrepareQuestionForDB(columnList, sqlParams);
            fbkQ1.PrepareQuestionForDB(columnList, sqlParams);
            fbkQ2.PrepareQuestionForDB(columnList, sqlParams);
            fbkQ3.PrepareQuestionForDB(columnList, sqlParams);
            fbkQ4.PrepareQuestionForDB(columnList, sqlParams);
            fbkQ5.PrepareQuestionForDB(columnList, sqlParams);
            txtName.PrepareQuestionForDB(columnList, sqlParams);
            txtTelephoneNumber.PrepareQuestionForDB(columnList, sqlParams);
            txtEmailContact.PrepareQuestionForDB(columnList, sqlParams);
            // fbkDirectQuestion.PrepareQuestionForDB(columnList, sqlParams);

            columnList.Append(",[PropertyID],[DateEntered]");
            sqlParams.Add("@PropertyID", Master.PropertyID)
            .Add("@DateEntered", DateTime.Now);

            if (IsStaffSurvey)
            {
                columnList.Append(",[StaffMemberID]");
                sqlParams.Add("@StaffMemberID", User.UserID);
                ddlStaffContact.PrepareQuestionForDB(columnList, sqlParams);
            }

            columnList.Remove(0, 1);
            SQLDatabase sql = new SQLDatabase();    sql.CommandTimeout = 120;

            rowID = sql.QueryAndReturnIdentity(String.Format("INSERT INTO [tblSurveyFeedback] ({0}) VALUES ({1});", columnList, columnList.ToString().Replace("[", "@").Replace("]", String.Empty)), sqlParams);
            if (!sql.HasError && rowID != -1)
            {
                Dictionary <string, int> wordCounts = SurveyTools.GetWordCount(fbkQ3.Text);
                SurveyTools.SaveWordCounts(SharedClasses.SurveyType.Feedback, rowID, wordCounts);
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public GCCPropertyShortCode PropertyShortCodeOverride()
        {
            switch (SurveyType)
            {
            case GSEISurveyType.HP:
                if (SurveyTools.GetValue(radLocation_EC, false, false))
                {
                    return(GCCPropertyShortCode.ECS);
                }
                else if (SurveyTools.GetValue(radLocation_HA, false, false))
                {
                    return(GCCPropertyShortCode.HA);
                }
                else
                {
                    return(Master.OriginalPropertyShortCode);
                }

            case GSEISurveyType.TM:
                if (SurveyTools.GetValue(radLocation_RR, false, false))
                {
                    return(GCCPropertyShortCode.RR);
                }
                else if (SurveyTools.GetValue(radLocation_HRCV, false, false))
                {
                    return(GCCPropertyShortCode.HRCV);
                }
                else
                {
                    return(Master.OriginalPropertyShortCode);
                }

            case GSEISurveyType.GA:
                return(GCCPropertyShortCode.GAG);

            default:
                return(Master.OriginalPropertyShortCode);
            }
        }
        /// <summary>
        /// Validates and saves a page's values. Returns true if the page is valid.
        /// </summary>
        /// <param name="page">The page ID to check.</param>
        /// <param name="currentPage">Whether this is the current page. If true, the values in the controls will be checked, otherwise the session will be checked.</param>
        /// <param name="saveOnly">If save only is true, the validation will be ignored and values will be saved so that they can be returned to. This is for use with the "Back" button.</param>
        protected bool ValidateAndSave(int page, bool currentPage, bool saveOnly)
        {
            bool retVal = true;

            switch (page)
            {
            case 1:

                #region Page 1

                if (!saveOnly)
                {
                    bool accept  = SurveyTools.GetValue(radAccept, currentPage, false);
                    bool decline = SurveyTools.GetValue(radDecline, currentPage, false);
                    if (!accept && !decline)
                    {
                        mmAcceptGroup.ErrorMessage = "Please select one of the following options.";
                        return(false);
                    }
                }
                if (currentPage)
                {
                    SurveyTools.SaveRadioButtons(radAccept, radDecline);
                }
                break;

                #endregion Page 1

            case 2:

                #region Page 2

                if (!saveOnly)
                {
                    if (SurveyType == GSEISurveyType.HP)
                    {
                        if (!SurveyTools.GetValue(radLocation_EC, currentPage, false) &&
                            !SurveyTools.GetValue(radLocation_HA, currentPage, false) &&
                            !SurveyTools.GetValue(radLocation_None, currentPage, false))
                        {
                            radLocation_EC.MessageManager.ErrorMessage = "Please select one of the following options.";
                            retVal = false;
                        }
                    }
                    else if (SurveyType == GSEISurveyType.TM)
                    {
                        if (!SurveyTools.GetValue(radLocation_RR, currentPage, false) &&
                            !SurveyTools.GetValue(radLocation_HRCV, currentPage, false) &&
                            !SurveyTools.GetValue(radLocation_None2, currentPage, false))
                        {
                            radLocation_RR.MessageManager.ErrorMessage = "Please select one of the following options.";
                            retVal = false;
                        }
                    }
                    else if (SurveyType == GSEISurveyType.GA)
                    {
                        if (!SurveyTools.GetValue(radLocation_Lakewood, currentPage, false) &&
                            !SurveyTools.GetValue(radLocation_Tukwila, currentPage, false) &&
                            !SurveyTools.GetValue(radLocation_Everett, currentPage, false) &&
                            !SurveyTools.GetValue(radLocation_DeMoines, currentPage, false) &&
                            !SurveyTools.GetValue(radLocation_None3, currentPage, false))
                        {
                            radLocation_Lakewood.MessageManager.ErrorMessage = "Please select one of the following options.";
                            retVal = false;
                        }
                    }
                }
                if (currentPage)
                {
                    if (SurveyType == GSEISurveyType.HP)
                    {
                        SurveyTools.SaveRadioButtons(radLocation_EC, radLocation_HA, radLocation_None);
                    }
                    else if (SurveyType == GSEISurveyType.TM)
                    {
                        SurveyTools.SaveRadioButtons(radLocation_RR, radLocation_HRCV, radLocation_None2);
                    }
                    else if (SurveyType == GSEISurveyType.GA)
                    {
                        SurveyTools.SaveRadioButtons(radLocation_Lakewood, radLocation_Tukwila, radLocation_Everett, radLocation_DeMoines, radLocation_None3);
                    }
                }
                break;

                #endregion Page 2

            case 3:                     // Staff

                #region Page 3

                if (!saveOnly)
                {
                    if (!SurveyTools.CheckForAnswer(Q7A, true)
                        | !SurveyTools.CheckForAnswer(Q7B, true)
                        | !SurveyTools.CheckForAnswer(Q7C, true)
                        | !SurveyTools.CheckForAnswer(Q7D, true)
                        | !SurveyTools.CheckForAnswer(Q7E, true)
                        | !SurveyTools.CheckForAnswer(Q7F, true)
                        | !SurveyTools.CheckForAnswer(Q8, true)
                        )
                    {
                        retVal = false;
                    }
                }
                if (currentPage)
                {
                    SurveyTools.SaveValue(Q7A);
                    SurveyTools.SaveValue(Q7B);
                    SurveyTools.SaveValue(Q7C);
                    SurveyTools.SaveValue(Q7D);
                    SurveyTools.SaveValue(Q7E);
                    SurveyTools.SaveValue(Q7F);
                    SurveyTools.SaveValue(Q8);
                }
                break;

                #endregion Page 3

            case 4:                     // Demographics

                #region Page 4

                if (!saveOnly)
                {
                    bool ageGroupNotSelected = !SurveyTools.GetValue(Q37_1, currentPage, false) &&
                                               !SurveyTools.GetValue(Q37_2, currentPage, false) &&
                                               !SurveyTools.GetValue(Q37_3, currentPage, false) &&
                                               !SurveyTools.GetValue(Q37_4, currentPage, false) &&
                                               !SurveyTools.GetValue(Q37_5, currentPage, false) &&
                                               !SurveyTools.GetValue(Q37_6, currentPage, false);
                    //if ( ageGroupNotSelected ) {
                    //    Q37Message.ErrorMessage = "Please answer the following question.";
                    //    retVal = false;
                    //}

                    bool genderNotSelected = !SurveyTools.GetValue(Q36Male, currentPage, false) &&
                                             !SurveyTools.GetValue(Q36Female, currentPage, false);
                    //if ( genderNotSelected ) {
                    //    Q36Message.ErrorMessage = "Please answer the following question.";
                    //    retVal = false;
                    //}

                    if (SurveyType != GSEISurveyType.GA)
                    {
                        bool noneSelected = !SurveyTools.GetValue(radQ1_Slots, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_Tables, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_Poker, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_Food, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_Entertainment, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_Hotel, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_LiveRacing, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_Racebook, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_Bingo, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_Lottery, currentPage, false) &&
                                            !SurveyTools.GetValue(radQ1_None, currentPage, false);

                        if (!saveOnly && noneSelected)
                        {
                            mmQ1.ErrorMessage = "Please select one of the following options.";
                            return(false);
                        }
                    }
                }
                if (currentPage)
                {
                    SurveyTools.SaveRadioButtons(Q37_1, Q37_2, Q37_3, Q37_4, Q37_5, Q37_6);
                    SurveyTools.SaveRadioButtons(Q36Male, Q36Female);
                    if (SurveyType != GSEISurveyType.GA)
                    {
                        SurveyTools.SaveRadioButtons(radQ1_Slots, radQ1_Tables, radQ1_Poker, radQ1_Food, radQ1_Entertainment, radQ1_Hotel, radQ1_LiveRacing, radQ1_Racebook, radQ1_Bingo, radQ1_Lottery, radQ1_None);
                        SurveyTools.SaveValue(chkQ2_Slots);
                        SurveyTools.SaveValue(chkQ2_Tables);
                        SurveyTools.SaveValue(chkQ2_Poker);
                        SurveyTools.SaveValue(chkQ2_Food);
                        SurveyTools.SaveValue(chkQ2_Entertainment);
                        SurveyTools.SaveValue(chkQ2_Hotel);
                        SurveyTools.SaveValue(chkQ2_LiveRacing);
                        SurveyTools.SaveValue(chkQ2_Racebook);
                        SurveyTools.SaveValue(chkQ2_Bingo);
                        SurveyTools.SaveValue(chkQ2_Lottery);
                    }
                }

                break;

                #endregion Page 4
            }
            return(retVal);
        }
 protected bool CheckForAnswer(ISurveyControl <string> control)
 {
     return(SurveyTools.CheckForAnswer(control, QuestionsAreMandatory));
 }
 protected void SaveValue <T>(ISurveyControl <T> control)
 {
     SurveyTools.SaveValue(control);
 }
 protected T GetValue <T>(ISurveyControl <T> control, bool getCurrentValue, T defaultValue)
 {
     return(SurveyTools.GetValue(control, getCurrentValue, defaultValue));
 }
        private void SendNotifications(int surveyID, string feedbackUID)
        {
            string gagLocation = String.Empty;

            if (AlignedPropertyShortCode == GCCPropertyShortCode.GAG)
            {
                if (radGAG_Everett.Checked)
                {
                    gagLocation = "Everett";
                }
                else if (radGAG_Lakewood.Checked)
                {
                    gagLocation = "Lakewood";
                }
                else if (radGAG_Tukwila.Checked)
                {
                    gagLocation = "Tukwila";
                }
                else if (radGAG_DeMoines.Checked)
                {
                    gagLocation = "DeMoines";
                }
                if (gagLocation.Length > 0)
                {
                    gagLocation = " - " + gagLocation;
                }
            }



            // 2018 04 18 Adding notification users for no specific property
            // Adding proper PropertyID for No Specific Property Region Operations

            //if (AlignedPropertyShortCode == GCCPropertyShortCode.GCC && fbkProperty.SelectedIndex == 24)   // No specific Property
            //{


            //    if (Master.PropertyShortCode == GCCPropertyShortCode.GCC)
            //    {
            //        int selectedProp = Conversion.StringToInt(fbkDirectQuestion.SelectedValue, 0);
            //        if (selectedProp != 0)
            //        {
            //            try
            //            {
            //                GCCPropertyShortCode sc = (GCCPropertyShortCode)selectedProp;
            //                NoSpecificPropertyShortCode = sc;
            //            }
            //            catch
            //            {
            //                NoSpecificPropertyShortCode = GCCPropertyShortCode.GCC;
            //            }
            //        }
            //        else
            //        {
            //            NoSpecificPropertyShortCode = GCCPropertyShortCode.GCC;
            //        }
            //    }
            //    else
            //    {
            //        NoSpecificPropertyShortCode = Master.PropertyShortCode;
            //    }



            //  //  AlignedPropertyShortCode = (GCCPropertyShortCode)Convert.ToInt32(fbkDirectQuestion.SelectedValue.ToString());

            //}


            NotificationReason nr = (NotificationReason)fbkQ2.SelectedValue.StringToInt();

            //Send the notification
            SurveyTools.SendNotifications(
                Server,
                AlignedPropertyShortCode,
                SharedClasses.SurveyType.Feedback,
                nr,
                fbkQ3.Text.ToString(),
                new
            {
                Date             = DateTime.Now.ToString("yyyy-MM-dd"),
                CasinoName       = Master.CasinoName + gagLocation,
                FeedbackNoteHTML = String.IsNullOrEmpty(feedbackUID) ? String.Empty : "<p><b>This guest has requested a response.</b> You can view and respond to the feedback request by clicking on (or copying and pasting) the following link:</p>\n<p>" + GCCPortalUrl + "Admin/Feedback/" + feedbackUID + "</p>",
                FeedbackNoteTXT  = String.IsNullOrEmpty(feedbackUID) ? String.Empty : "The guest requested feedback. You can view and respond to the feedback request by clicking on (or copying and pasting) the following link:\n" + GCCPortalUrl + "Admin/Feedback/" + feedbackUID + "\n\n",
                SurveyLink       = GCCPortalUrl + "Display/Feedback/" + surveyID
            },
                String.Empty,
                String.Empty,
                fbkDirectQuestion.SelectedValue.StringToInt(-1)
                );
            //Determine triggers for feedback request
            if (!IsStaffSurvey &&
                !fbkQ5.SelectedValue.Equals("I do not want to be contacted") &&
                !String.IsNullOrEmpty(txtEmailContact.Text))
            {
                //Send thank you letter
                SurveyTools.SendNotifications(
                    Server,
                    AlignedPropertyShortCode,
                    SharedClasses.SurveyType.Feedback,
                    NotificationReason.ThankYou,
                    string.Empty,
                    new
                {
                    CasinoName = PropertyTools.GetCasinoName(Master.PropertyID),

                    Attachments = new SurveyTools.SurveyAttachmentDetails[]
                    {
                        new SurveyTools.SurveyAttachmentDetails()
                        {
                            Path = "~/Images/headers/" + PropertyTools.GetCasinoHeaderImage(AlignedPropertyShortCode), ContentID = "HeaderImage"
                        }
                    }
                },
                    txtEmailContact.Text,
                    String.Empty,
                    fbkDirectQuestion.SelectedValue.StringToInt(-1));
            }
        }
        /// <summary>
        /// Validates and saves a page's values. Returns true if the page is valid.
        /// </summary>
        /// <param name="page">The page ID to check.</param>
        /// <param name="currentPage">Whether this is the current page. If true, the values in the controls will be checked, otherwise the session will be checked.</param>
        /// <param name="saveOnly">If save only is true, the validation will be ignored and values will be saved so that they can be returned to. This is for use with the "Back" button.</param>
        protected bool ValidateAndSave(int page, bool currentPage, bool saveOnly)
        {
            bool retVal = true;

            switch (page)
            {
            case 1:

                #region Page 1

                if (currentPage)
                {
                    SurveyTools.SaveValue <string>(Q1);
                    SurveyTools.SaveValue <string>(Q1);

                    if (Session["CurrentUI"].ToString() == "fr-CA")
                    {
                        SurveyTools.SaveValue <int>(Q2_F);
                    }
                    else
                    {
                        SurveyTools.SaveValue <int>(Q2);
                    }


                    SurveyTools.SaveValue <string>(Q3);
                    SurveyTools.SaveValue <string>(Q4);
                    SurveyTools.SaveValue <string>(Q5Name);
                    SurveyTools.SaveValue <string>(Q5Title);
                    SurveyTools.SaveValue <string>(Q5Telephone);
                    SurveyTools.SaveValue <string>(Q5Email);
                    SurveyTools.SaveValue <string>(Q6Street);
                    SurveyTools.SaveValue <string>(Q6City);
                    SurveyTools.SaveValue <string>(Q6Province);
                    SurveyTools.SaveValue <string>(Q6PostalCode);
                    SurveyTools.SaveValue <string>(Q7);
                    SurveyTools.SaveValue <string>(Q8);
                    SurveyTools.SaveRadioButtons(Q9A, Q9B, Q9C);
                    SurveyTools.SaveValue <string>(Q9C_Explanation);
                    SurveyTools.SaveValue <string>(Q10);
                    SurveyTools.SaveValue <bool>(Q11A_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11A_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11B_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11B_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11C_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11C_CurrentRequest);
                    //SurveyTools.SaveValue<bool>( Q11D_PastSupport );
                    //SurveyTools.SaveValue<bool>( Q11D_CurrentRequest );
                    SurveyTools.SaveValue <bool>(Q11E_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11E_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11F_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11F_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11G_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11G_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11H_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11H_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11I_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11I_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11J_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11J_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11K_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11K_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11L_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11L_CurrentRequest);
                    SurveyTools.SaveValue <bool>(Q11M_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11M_CurrentRequest);

                    //2017-11-14 aDDING 3 NEW LOCATIONS
                    SurveyTools.SaveValue <bool>(Q11N_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11N_CurrentRequest);


                    SurveyTools.SaveValue <bool>(Q11O_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11O_CurrentRequest);


                    SurveyTools.SaveValue <bool>(Q11P_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11P_CurrentRequest);


                    SurveyTools.SaveValue <bool>(Q11Q_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11Q_CurrentRequest);


                    SurveyTools.SaveValue <bool>(Q11R_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11R_CurrentRequest);


                    SurveyTools.SaveValue <bool>(Q11S_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11S_CurrentRequest);


                    SurveyTools.SaveValue <bool>(Q11T_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11T_CurrentRequest);


                    SurveyTools.SaveValue <bool>(Q11U_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11U_CurrentRequest);



                    SurveyTools.SaveValue <bool>(Q11V_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11V_CurrentRequest);

                    SurveyTools.SaveValue <bool>(Q11W_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11W_CurrentRequest);

                    SurveyTools.SaveValue <bool>(Q11X_PastSupport);
                    SurveyTools.SaveValue <bool>(Q11X_CurrentRequest);


                    SurveyTools.SaveValue <string>(Q12);
                    SurveyTools.SaveValue <string>(Q13);
                    SurveyTools.SaveValue <string>(Q14);
                }

                if (!saveOnly)
                {
                    if (!SurveyTools.CheckForAnswer(Q1, true)
                        | !SurveyTools.CheckForAnswer(Q2, true)
                        | !SurveyTools.CheckForAnswer(Q5Name, true)
                        | !SurveyTools.CheckForAnswer(Q5Title, true)
                        | !SurveyTools.CheckForAnswer(Q5Telephone, true)
                        | !SurveyTools.CheckForAnswer(Q5Email, true)
                        | !SurveyTools.CheckForAnswer(Q6Street, true)
                        | !SurveyTools.CheckForAnswer(Q6City, true)
                        | !SurveyTools.CheckForAnswer(Q6Province, true)
                        | !SurveyTools.CheckForAnswer(Q6PostalCode, true)
                        | !SurveyTools.CheckForAnswer(Q7, true)
                        | !SurveyTools.CheckForAnswer(Q10, true)
                        | !SurveyTools.CheckForAnswer(Q13, true)
                        | !SurveyTools.CheckForAnswer(Q14, true)
                        )
                    {
                        retVal = false;
                    }

                    bool noneSelected = !SurveyTools.GetValue(Q9A, currentPage, false) &&
                                        !SurveyTools.GetValue(Q9B, currentPage, false) &&
                                        !SurveyTools.GetValue(Q9C, currentPage, false);
                    if (noneSelected)
                    {
                        mmQ9.ErrorMessage = "Please select one of the following values.";
                        retVal            = false;
                    }

                    string email = SurveyTools.GetValue(Q5Email, currentPage, String.Empty);
                    if (!Validation.RegExCheck(email, ValidationType.Email))
                    {
                        Q5Email.MessageManager.ErrorMessage = "Please enter a valid email address.";
                        return(false);
                    }

                    string postcode = SurveyTools.GetValue(Q6PostalCode, currentPage, String.Empty);
                    if (!Validation.RegExCheck(postcode, ValidationType.Postal))
                    {
                        Q6PostalCode.MessageManager.ErrorMessage = "Please enter a valid postal code in the format 'A1A 1A1'.";
                        return(false);
                    }


                    if (Session["CurrentUI"].ToString() == "fr-CA")
                    {
                        if ((Q2_F.SelectedValue_F == 1 && !SurveyTools.CheckForAnswer(Q3, true)) ||
                            (Q2_F.SelectedValue_F == 0 && !SurveyTools.CheckForAnswer(Q4, true)))
                        {
                            retVal = false;
                        }
                    }
                    else
                    {
                        if ((Q2.SelectedValue == 1 && !SurveyTools.CheckForAnswer(Q3, true)) ||
                            (Q2.SelectedValue == 0 && !SurveyTools.CheckForAnswer(Q4, true)))
                        {
                            retVal = false;
                        }
                    }
                    if (Q9C.Checked && !SurveyTools.CheckForAnswer(Q9C_Explanation, true))
                    {
                        retVal = false;
                    }
                }
                break;

                #endregion Page 1

            case 2:     // Final confirm

                #region Page 2

                break;

                #endregion Page 2
            }
            return(retVal);
        }
        protected void btnSaveTier_Click(object sender, EventArgs e)
        {
            //Prevent refresh from re-submitting form data
            if (Session["CheckRefresh"].ToString() == ViewState["CheckRefresh"].ToString())
            {
                Session["CheckRefresh"] = Server.UrlDecode(System.DateTime.Now.ToString());
            }
            else
            {
                //Catch refresh and wipe the value again
                Session["CheckRefresh"] = Server.UrlDecode(System.DateTime.Now.ToString());
                return;
            }
            //Don't do anything if the tier hasn't changed
            if (ddlTier.SelectedValue.Equals(hdnOldTier.Value))
            {
                return;
            }
            //Update the tier
            SQLDatabase sql = new SQLDatabase();    sql.CommandTimeout = 120;

            sql.ExecStoredProcedureDataTable("spFeedback_ChangeTier",
                                             new SQLParamList()
                                             .Add("@UID", GUID)
                                             .Add("@Tier", Conversion.StringToInt(ddlTier.SelectedValue, 1))
                                             .Add("@UserID", User.UserID));
            //Send tier 3 notifications
            if (ddlTier.SelectedValue.Equals("3"))
            {
                SQLParamList sqlParams = new SQLParamList();
                sqlParams.Add("@GUID", GUID);
                DataSet ds = sql.ExecStoredProcedureDataSet("[spFeedback_GetItem]", sqlParams);
                if (sql.HasError)
                {
                    TopMessage.ErrorMessage = "Unable to load the feedback item.";
                    return;
                }
                DataRow fr = ds.Tables[0].Rows[0];                 //Feedback row
                DataRow sr = ds.Tables[2].Rows[0];                 //Survey row
                GCCPropertyShortCode sc = (GCCPropertyShortCode)fr["PropertyID"].ToString().StringToInt(1);
                SurveyType           st = (SurveyType)fr["SurveyTypeID"].ToString().StringToInt(1);

                //Get the GAG location
                string gagLocation = String.Empty;
                switch (st)
                {
                case SurveyType.GEI:
                    gagLocation = sr["Q3"].ToString();
                    break;

                case SurveyType.Feedback:
                    gagLocation = sr["GAGProperty"].ToString();
                    break;
                }
                if (gagLocation.Length > 0)
                {
                    gagLocation = " - " + gagLocation;
                }

                //Send the notification
                SurveyTools.SendNotifications(Server, sc, SurveyType.Feedback, NotificationReason.Tier3Alert, string.Empty, new {
                    Date         = DateTime.Now.ToString("MMMM dd, yyyy"),
                    CasinoName   = fr["CasinoName"].ToString() + gagLocation,
                    FeedbackLink = GCCPortalUrl + "Admin/Feedback/" + fr["UID"].ToString(),
                    SurveyLink   = String.Format(GCCPortalUrl + "Display/{0}/{1}", st.ToString(), fr["RecordID"])
                });
            }
            if (sql.HasError)
            {
                TopMessage.ErrorMessage = "Oops! It looks like something went wrong trying to change the tier. Please try again. (EFB120)";
            }
        }
        /// <summary>
        /// Validates and saves a page's values. Returns true if the page is valid.
        /// </summary>
        /// <param name="page">The page ID to check.</param>
        /// <param name="currentPage">Whether this is the current page. If true, the values in the controls will be checked, otherwise the session will be checked.</param>
        /// <param name="saveOnly">If save only is true, the validation will be ignored and values will be saved so that they can be returned to. This is for use with the "Back" button.</param>
        protected bool ValidateAndSave(int page, bool currentPage, bool saveOnly)
        {
            bool retVal = true;

            switch (page)
            {
            case 1:

                #region Page 1

                if (currentPage)
                {
                    SurveyTools.SaveValue <string>(fbkEmail);
                    SurveyTools.SaveValue <string>(fbkProperty);
                    SurveyTools.SaveValue <string>(fbkDirectQuestion);
                    if (IsStaffSurvey)
                    {
                        SurveyTools.SaveValue <string>(ddlStaffContact);
                    }
                }
                string email = SurveyTools.GetValue(fbkEmail, currentPage, String.Empty);


                // 20180406 - OLD wants to make this email address optional


                //if (!Validation.RegExCheck(email, ValidationType.Email)
                //    && !(String.IsNullOrWhiteSpace(email) && IsStaffSurvey))
                //{ //Allow blanks on staff survey
                //    mmTrackingEmail.ErrorMessage = "Please enter a valid email address.";
                //    retVal = false;
                //}
                if (Master.PropertyShortCode == GCCPropertyShortCode.GCC && fbkProperty.SelectedIndex == 0)
                {
                    fbkProperty.MessageManager.ErrorMessage = "Please indicate which property you are providing feedback for or select \"No Specific Property\".";
                    retVal = false;
                }

                if (fbkProperty.GetValue() == "1" && fbkDirectQuestion.SelectedIndex == 0)
                {
                    fbkDirectQuestion.MessageManager.ErrorMessage = "Please select which area of operations you are providing feedback for.";
                    retVal = false;
                }
                if (IsStaffSurvey && ddlStaffContact.SelectedIndex == 0)
                {
                    ddlStaffContact.MessageManager.ErrorMessage = "Please indicate how the guest was contacted.";
                    retVal = false;
                }
                break;

                #endregion Page 1

            case 2:                     // Initial question

                #region Page 2

                if (currentPage)
                {
                    SurveyTools.SaveValue <string>(fbkQ1);
                    if (AlignedPropertyShortCode == GCCPropertyShortCode.GAG)
                    {
                        SurveyTools.SaveRadioButtons(radGAG_Everett, radGAG_Lakewood, radGAG_Tukwila, radGAG_DeMoines);
                    }
                }
                if (!saveOnly)
                {
                    bool q3Check = (AlignedPropertyShortCode != GCCPropertyShortCode.GAG) ||
                                   SurveyTools.GetValue(radGAG_Everett, currentPage, false) ||
                                   SurveyTools.GetValue(radGAG_Lakewood, currentPage, false) ||
                                   SurveyTools.GetValue(radGAG_Tukwila, currentPage, false) ||
                                   SurveyTools.GetValue(radGAG_DeMoines, currentPage, false);
                    if (!q3Check)
                    {
                        mmGAG.ErrorMessage = "Please select one of the following options.";
                        retVal             = false;
                    }
                    if (fbkQ1.SelectedIndex == 0)
                    {
                        fbkQ1.MessageManager.ErrorMessage = "Please select an answer.";
                        retVal = false;
                    }
                }
                break;

                #endregion Page 2

            case 3:                     // Basic Form

                #region Page 3

                if (currentPage)
                {
                    SurveyTools.SaveValue <string>(fbkQ2);
                    SurveyTools.SaveValue <string>(fbkQ3);
                    SurveyTools.SaveValue <string>(fbkQ4);
                    SurveyTools.SaveValue <string>(fbkQ5);
                }

                if (!saveOnly)
                {
                    if (fbkQ2.SelectedIndex == 0)
                    {
                        fbkQ2.MessageManager.ErrorMessage = "Please select an answer.";
                        retVal = false;
                    }

                    if (!SurveyTools.CheckForAnswer(fbkQ3, true))
                    {
                        retVal = false;
                    }

                    if (!SurveyTools.CheckForAnswer(fbkQ4, false))
                    {
                        retVal = false;
                    }

                    if (fbkQ5.SelectedIndex == 0)
                    {
                        fbkQ5.MessageManager.ErrorMessage = "Please select an answer.";
                        retVal = false;
                    }
                }

                break;

                #endregion Page 3

            case 4:                     // Contact Info

                #region Page 4

                if (!saveOnly && !fbkQ5.GetValue().Equals("I do not want to be contacted"))
                {
                    //Check for phone or email validation depending on Q5
                    email = SurveyTools.GetValue(txtEmailContact, currentPage, String.Empty);
                    if (fbkQ5.GetValue().Equals("By e-mail") &&
                        (String.IsNullOrEmpty(email) ||
                         !Validation.RegExCheck(email, ValidationType.Email)))
                    {
                        txtEmailContact.MessageManager.ErrorMessage = "Please enter a valid email address.";
                        retVal = false;
                    }
                    if (fbkQ5.GetValue().Equals("By telephone") &&
                        !SurveyTools.CheckForAnswer(txtTelephoneNumber, true))
                    {
                        retVal = false;
                    }

                    if (!SurveyTools.CheckForAnswer(txtName, true))
                    {
                        retVal = false;
                    }
                }
                if (currentPage)
                {
                    SurveyTools.SaveValue <string>(txtName);
                    SurveyTools.SaveValue <string>(txtTelephoneNumber);
                    SurveyTools.SaveValue <string>(txtEmailContact);
                }
                break;

                #endregion Page 4

            case 5:                     // Confirmation

                #region Page 5

                break;

                #endregion Page 5
            }
            return(retVal);
        }
        /// <summary>
        /// Validates and saves a page's values. Returns true if the page is valid.
        /// </summary>
        /// <param name="page">The page ID to check.</param>
        /// <param name="currentPage">Whether this is the current page. If true, the values in the controls will be checked, otherwise the session will be checked.</param>
        /// <param name="saveOnly">If save only is true, the validation will be ignored and values will be saved so that they can be returned to. This is for use with the "Back" button.</param>
        protected bool ValidateAndSave(int page, bool currentPage, bool saveOnly)
        {
            bool retVal = true;

            switch (page)
            {
            case 1:

                #region Page 1

                break;

                #endregion Page 1

            case 2:

                #region Page 2

                if (QueryPropertyShortCode == GCCPropertyShortCode.GCC || (QueryPropertyShortCode == GCCPropertyShortCode.GAG && QueryGAGLocation == GLocation.None))
                {
                    if (currentPage)
                    {
                        SurveyTools.SaveValue(fbkProperty);
                    }
                    if (!saveOnly)
                    {
                        if (fbkProperty.SelectedIndex == 0)
                        {
                            fbkProperty.MessageManager.ErrorMessage = "Please select an answer.";
                            retVal = false;
                        }
                    }
                }
                break;

                #endregion Page 2

            case 3:     // Department

                #region Page 3

                if (currentPage)
                {
                    SurveyTools.SaveValue(ddlDepartment);
                }
                if (!saveOnly)
                {
                    if (ddlDepartment.SelectedIndex == 0)
                    {
                        ddlDepartment.MessageManager.ErrorMessage = "Please select your department.";
                        retVal = false;
                    }
                }
                break;

                #endregion Page 3

            case 4:     // Main survey

                #region Page 4

                if (currentPage)
                {
                    SurveyTools.SaveValue(Q1);
                    SurveyTools.SaveValue(Q2);
                    SurveyTools.SaveValue(Q3);
                    SurveyTools.SaveValue(Q4);
                    SurveyTools.SaveValue(Q5);
                    SurveyTools.SaveValue(Q6);
                    SurveyTools.SaveValue(Q7);
                }
                if (!saveOnly)
                {
                    if (!SurveyTools.CheckForAnswer(Q1, true)
                        | !SurveyTools.CheckForAnswer(Q2, true)
                        | !SurveyTools.CheckForAnswer(Q3, true)
                        | !SurveyTools.CheckForAnswer(Q4, true)
                        | !SurveyTools.CheckForAnswer(Q5, true)
                        | !SurveyTools.CheckForAnswer(Q6, true)
                        | !SurveyTools.CheckForAnswer(Q7, true))
                    {
                        retVal = false;
                    }
                }
                break;

                #endregion Page 4

            case 5:     // Main survey

                #region Page 5

                if (currentPage)
                {
                    SurveyTools.SaveValue(Q8);
                    SurveyTools.SaveValue(Q9);
                    SurveyTools.SaveValue(Q10);
                    SurveyTools.SaveValue(Q11);
                    SurveyTools.SaveValue(Q12);
                    SurveyTools.SaveValue(Q13);
                    SurveyTools.SaveValue(Q14);
                    SurveyTools.SaveValue(Q15);
                    SurveyTools.SaveValue(Q16);
                    SurveyTools.SaveValue(Q17);
                }
                if (!saveOnly)
                {
                    if (!SurveyTools.CheckForAnswer(Q8, true)
                        | !SurveyTools.CheckForAnswer(Q9, true)
                        | !SurveyTools.CheckForAnswer(Q10, true)
                        | !SurveyTools.CheckForAnswer(Q11, true)
                        | !SurveyTools.CheckForAnswer(Q12, true)
                        | !SurveyTools.CheckForAnswer(Q13, true)
                        | !SurveyTools.CheckForAnswer(Q14, true)
                        | !SurveyTools.CheckForAnswer(Q15, true)
                        | !SurveyTools.CheckForAnswer(Q16, true)
                        | !SurveyTools.CheckForAnswer(Q17, true))
                    {
                        retVal = false;
                    }
                }
                break;

                #endregion Page 5

            case 6:     // Main survey

                #region Page 6

                if (currentPage)
                {
                    SurveyTools.SaveValue(Q18);
                    SurveyTools.SaveValue(Q19);
                    SurveyTools.SaveValue(Q20);
                    SurveyTools.SaveValue(Q21);
                    SurveyTools.SaveValue(Q22);
                    SurveyTools.SaveValue(Q23);
                }
                if (!saveOnly)
                {
                    if (!SurveyTools.CheckForAnswer(Q18, true)
                        | !SurveyTools.CheckForAnswer(Q19, true)
                        | !SurveyTools.CheckForAnswer(Q20, true)
                        | !SurveyTools.CheckForAnswer(Q21, true)
                        | !SurveyTools.CheckForAnswer(Q22, true)
                        | !SurveyTools.CheckForAnswer(Q23, true))
                    {
                        retVal = false;
                    }
                }
                break;

                #endregion Page 6

            case 7:     // Main survey

                #region Page 7

                if (currentPage)
                {
                    SurveyTools.SaveValue(Q24);
                    SurveyTools.SaveValue(Q25);
                    SurveyTools.SaveValue(Q26);
                    SurveyTools.SaveValue(Q27);
                    SurveyTools.SaveValue(Q28);
                    SurveyTools.SaveValue(Q29A);
                    SurveyTools.SaveValue(Q29B);
                    SurveyTools.SaveValue(Q29C);
                    SurveyTools.SaveValue(Q30);
                }
                if (!saveOnly)
                {
                    if (!SurveyTools.CheckForAnswer(Q24, true)
                        | !SurveyTools.CheckForAnswer(Q25, true)
                        | !SurveyTools.CheckForAnswer(Q26, true)
                        | !SurveyTools.CheckForAnswer(Q27, true)
                        | !SurveyTools.CheckForAnswer(Q28, true)
                        | !SurveyTools.CheckForAnswer(Q29A, true)
                        | !SurveyTools.CheckForAnswer(Q29B, true)
                        | !SurveyTools.CheckForAnswer(Q29C, true)
                        | !SurveyTools.CheckForAnswer(Q30, true))
                    {
                        retVal = false;
                    }
                }
                break;

                #endregion Page 7

            case 8:     // Demographics

                #region Page 8

                if (currentPage)
                {
                    SurveyTools.SaveRadioButtons(radQ31_Hourly, radQ31_Salary);
                    SurveyTools.SaveRadioButtons(radQ32_1, radQ32_2, radQ32_3, radQ32_4, radQ32_5);
                    SurveyTools.SaveValue(Q33);
                    SurveyTools.SaveValue(chkQ34_1);
                    SurveyTools.SaveValue(chkQ34_2);
                    SurveyTools.SaveValue(chkQ34_3);
                    SurveyTools.SaveValue(chkQ34_4);
                    SurveyTools.SaveValue(chkQ34_5);
                    SurveyTools.SaveValue(chkQ34_6);
                    SurveyTools.SaveValue(chkQ34_7);
                    SurveyTools.SaveValue(chkQ34_8);
                    SurveyTools.SaveValue(chkQ34_9);
                    SurveyTools.SaveValue(chkQ34_10);
                    SurveyTools.SaveValue(chkQ34_11);
                    SurveyTools.SaveValue(chkQ34_12);
                }
                if (!saveOnly)
                {
                    bool payTypeNotSelected = !SurveyTools.GetValue(radQ31_Hourly, currentPage, false) &&
                                              !SurveyTools.GetValue(radQ31_Salary, currentPage, false);

                    if (payTypeNotSelected)
                    {
                        radQ31_Hourly.MessageManager.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }

                    bool tenureNotSelected = !SurveyTools.GetValue(radQ32_1, currentPage, false) &&
                                             !SurveyTools.GetValue(radQ32_2, currentPage, false) &&
                                             !SurveyTools.GetValue(radQ32_3, currentPage, false) &&
                                             !SurveyTools.GetValue(radQ32_4, currentPage, false) &&
                                             !SurveyTools.GetValue(radQ32_5, currentPage, false);
                    if (tenureNotSelected)
                    {
                        radQ32_1.MessageManager.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }
                }
                break;

                #endregion Page 8

            case 9:     // First Final Confirmation

                #region Page 9

                if (currentPage)
                {
                    SurveyTools.SaveRadioButtons(radFFNoThanks, radFFContinue);
                }
                if (!saveOnly)
                {
                    bool continueNotSelected = !SurveyTools.GetValue(radFFNoThanks, currentPage, false) &&
                                               !SurveyTools.GetValue(radFFContinue, currentPage, false);

                    if (continueNotSelected)
                    {
                        radFFNoThanks.MessageManager.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }
                }
                break;

                #endregion Page 9

            case 10:     // CSR

                #region Page 10

                if (radFFContinue.Checked)
                {
                    if (currentPage)
                    {
                        SurveyTools.SaveValue(CSR_Q1);
                        SurveyTools.SaveValue(CSR_Q2);
                        SurveyTools.SaveValue(CSR_Q3);
                        SurveyTools.SaveValue(CSR_Q4);
                        SurveyTools.SaveValue(CSR_Q5_1);
                        SurveyTools.SaveValue(CSR_Q5_2);
                        SurveyTools.SaveValue(CSR_Q5_3);
                        SurveyTools.SaveValue(CSR_Q5_4);
                        SurveyTools.SaveValue(CSR_Q6);
                        SurveyTools.SaveValue(CSR_Q7);
                        SurveyTools.SaveValue(CSR_Q8_1);
                        SurveyTools.SaveValue(CSR_Q8_2);
                        SurveyTools.SaveValue(CSR_Q8_3);
                        SurveyTools.SaveValue(CSR_Q8_4);
                        SurveyTools.SaveValue(CSR_Q8_5);
                        SurveyTools.SaveValue(CSR_Q8_6);
                        SurveyTools.SaveValue(CSR_Q8_7);
                        SurveyTools.SaveValue(CSR_Q8_8);
                        SurveyTools.SaveValue(CSR_Q8_9);
                        SurveyTools.SaveValue(CSR_Q8_OtherExplanation);
                        SurveyTools.SaveValue(CSR_Q9A);
                        SurveyTools.SaveValue(CSR_Q9B);
                        SurveyTools.SaveValue(CSR_Q9C);
                        SurveyTools.SaveValue(CSR_Q9D);
                        SurveyTools.SaveValue(CSR_Q9E);
                        SurveyTools.SaveValue(CSR_Q9F);
                        SurveyTools.SaveValue(CSR_Q9G);
                        SurveyTools.SaveValue(CSR_Q9H);
                        SurveyTools.SaveValue(CSR_Q10A);
                        SurveyTools.SaveValue(CSR_Q10B);
                        SurveyTools.SaveValue(CSR_Q10C);
                        SurveyTools.SaveValue(CSR_Q10D);
                        SurveyTools.SaveValue(CSR_Q10E);
                        SurveyTools.SaveRadioButtons(radCSR_Q11_1, radCSR_Q11_2, radCSR_Q11_3, radCSR_Q11_4);
                        SurveyTools.SaveValue(CSR_Q12);
                        SurveyTools.SaveValue(CSR_Q13);
                    }
                    if (!saveOnly)
                    {
                        if (!SurveyTools.CheckForAnswer(CSR_Q1, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q2, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q3, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q4, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q6, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q7, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q9A, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q9B, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q9C, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q9D, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q9E, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q9F, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q9G, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q9H, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q10A, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q10B, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q10C, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q10D, true)
                            | !SurveyTools.CheckForAnswer(CSR_Q10E, true)
                            | (!(new GCCPropertyShortCode[] { GCCPropertyShortCode.GAG, GCCPropertyShortCode.FL, GCCPropertyShortCode.GD, GCCPropertyShortCode.CNB }).Contains(Master.PropertyShortCode) && !SurveyTools.CheckForAnswer(CSR_Q12, true))
                            )
                        {
                            retVal = false;
                        }
                        bool informedNotSelected = !SurveyTools.GetValue(radCSR_Q11_1, currentPage, false) &&
                                                   !SurveyTools.GetValue(radCSR_Q11_2, currentPage, false) &&
                                                   !SurveyTools.GetValue(radCSR_Q11_3, currentPage, false) &&
                                                   !SurveyTools.GetValue(radCSR_Q11_4, currentPage, false);
                        if (informedNotSelected)
                        {
                            radCSR_Q11_4.MessageManager.ErrorMessage = "Please select one of the following options.";
                            retVal = false;
                        }

                        if (CSR_Q8_9.Checked && String.IsNullOrEmpty(CSR_Q8_OtherExplanation.Text))
                        {
                            CSR_Q8_9.MessageManager.ErrorMessage = "Please explain why you chose \"Other\".";
                            retVal = false;
                        }
                    }
                }
                break;

                #endregion Page 10
            }
            return(retVal);
        }
        /// <summary>
        /// Validates and saves a page's values. Returns true if the page is valid.
        /// </summary>
        /// <param name="page">The page ID to check.</param>
        /// <param name="currentPage">Whether this is the current page. If true, the values in the controls will be checked, otherwise the session will be checked.</param>
        /// <param name="saveOnly">If save only is true, the validation will be ignored and values will be saved so that they can be returned to. This is for use with the "Back" button.</param>
        protected bool ValidateAndSave(int page, bool currentPage, bool saveOnly)
        {
            bool retVal = true;

            switch (page)
            {
            case 1:

                #region Page 1
                string email = GetValue(txtEmail, currentPage, String.Empty);
                if (!Validation.RegExCheck(email, ValidationType.Email))
                {
                    mmTxtEmail.ErrorMessage = "Please enter a valid email address.";
                    return(false);
                }
                else if (currentPage)
                {
                    SaveValue <string>(txtEmail);
                }
                break;

                #endregion Page 1

            case 2:

                #region Page 2
                if (!saveOnly)
                {
                    bool accept  = GetValue(radAccept, currentPage, false);
                    bool decline = GetValue(radDecline, currentPage, false);
                    if (!accept && !decline)
                    {
                        mmAcceptGroup.ErrorMessage = "Please select one of the following options.";
                        return(false);
                    }
                }
                if (currentPage)
                {
                    SurveyTools.SaveRadioButtons(radAccept, radDecline);
                }
                break;

                #endregion Page 2

            case 3:

                #region Page 3
                if (!saveOnly)
                {
                    bool Q1notselected = !GetValue(Q1_1, currentPage, false) &&
                                         !GetValue(Q1_2to4, currentPage, false) &&
                                         !GetValue(Q1_5to9, currentPage, false) &&
                                         !GetValue(Q1_10, currentPage, false);
                    if (Q1notselected)
                    {
                        Q1Message.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }

                    bool Q2notselected = !GetValue(Q2_Yes, currentPage, false) &&
                                         !GetValue(Q2_No, currentPage, false);
                    if (Q2notselected)
                    {
                        Q2Message.ErrorMessage = "Please select one of the following options.";
                    }

                    bool Q3notselected = !GetValue(Q3_No, currentPage, false) &&
                                         !GetValue(Q3_Yes, currentPage, false);
                    if (Q3notselected)
                    {
                        Q3Message.ErrorMessage = "Please select one of the following options.";
                    }

                    bool Q4notselected = !GetValue(Q4_Yes, currentPage, false) &&
                                         !GetValue(Q4_No, currentPage, false);

                    if (Q4notselected)
                    {
                        Q4Message.ErrorMessage = "Please select Yes or No.";
                        retVal = false;
                    }
                }
                if (currentPage)
                {
                    SaveValue(Q1_1);
                    SaveValue(Q1_2to4);
                    SaveValue(Q1_5to9);
                    SaveValue(Q1_10);
                    SaveValue(Q2_No);
                    SaveValue(Q2_Yes);
                    SaveValue(Q3_No);
                    SaveValue(Q3_Yes);
                    SaveValue(Q4_Yes);
                    SaveValue(Q4_No);
                    SaveValue(Q4_EncoreNumber);
                }
                break;

                #endregion Page 3

            case 4:

                #region Page 4
                if (!saveOnly)
                {
                    bool Q5notselected = !GetValue(Q5_Tarmac, currentPage, false) &&
                                         !GetValue(Q5_BoxSeats, currentPage, false) &&
                                         !GetValue(Q5_GroupPatio, currentPage, false) &&
                                         !GetValue(Q5_MarqueeTent, currentPage, false) &&
                                         !GetValue(Q5_SilksBuffet, currentPage, false) &&
                                         !GetValue(Q5_DiamondClub, currentPage, false);
                    if (Q5notselected)
                    {
                        Q5Message.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }

                    bool Q6notselected = !GetValue(Q6_Excellent, currentPage, false) &&
                                         !GetValue(Q6_VeryGood, currentPage, false) &&
                                         !GetValue(Q6_Good, currentPage, false) &&
                                         !GetValue(Q6_Fair, currentPage, false) &&
                                         !GetValue(Q6_Poor, currentPage, false);
                    if (Q6notselected)
                    {
                        Q6Message.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }

                    bool Q7notselected = !GetValue(Q7_Excellent, currentPage, false) &&
                                         !GetValue(Q7_VeryGood, currentPage, false) &&
                                         !GetValue(Q7_Good, currentPage, false) &&
                                         !GetValue(Q7_Fair, currentPage, false) &&
                                         !GetValue(Q7_Poor, currentPage, false);
                    if (Q7notselected)
                    {
                        Q7Message.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }

                    bool Q8notselected = !GetValue(Q8_DefinitelyWould, currentPage, false) &&
                                         !GetValue(Q8_ProbablyWould, currentPage, false) &&
                                         !GetValue(Q8_MightMightNot, currentPage, false) &&
                                         !GetValue(Q8_ProbablyWouldNot, currentPage, false) &&
                                         !GetValue(Q8_DefinitelyWouldNot, currentPage, false);
                    if (Q8notselected)
                    {
                        Q8Message.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }
                }
                if (currentPage)
                {
                    SaveValue(Q5_Tarmac);
                    SaveValue(Q5_BoxSeats);
                    SaveValue(Q5_GroupPatio);
                    SaveValue(Q5_MarqueeTent);
                    SaveValue(Q5_SilksBuffet);
                    SaveValue(Q5_DiamondClub);
                    SaveValue(Q6_Excellent);
                    SaveValue(Q6_VeryGood);
                    SaveValue(Q6_Good);
                    SaveValue(Q6_Fair);
                    SaveValue(Q6_Poor);
                    SaveValue(Q7_Excellent);
                    SaveValue(Q7_VeryGood);
                    SaveValue(Q7_Good);
                    SaveValue(Q7_Fair);
                    SaveValue(Q7_Poor);
                    SaveValue(Q8_DefinitelyWould);
                    SaveValue(Q8_ProbablyWould);
                    SaveValue(Q8_MightMightNot);
                    SaveValue(Q8_ProbablyWouldNot);
                    SaveValue(Q8_DefinitelyWouldNot);
                }
                break;

                #endregion Page 4

            case 5:

                #region Page 5
                if (!saveOnly)
                {
                    bool Q9notselected = !GetValue(Q9_Male, currentPage, false) &&
                                         !GetValue(Q9_Female, currentPage, false);
                    if (Q9notselected)
                    {
                        Q9Message.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }

                    bool Q10notselected = !GetValue(Q10_19to24, currentPage, false) &&
                                          !GetValue(Q10_25to34, currentPage, false) &&
                                          !GetValue(Q10_35to44, currentPage, false) &&
                                          !GetValue(Q10_45to54, currentPage, false) &&
                                          !GetValue(Q10_55to64, currentPage, false) &&
                                          !GetValue(Q10_65orOlder, currentPage, false);
                    if (Q10notselected)
                    {
                        Q10Message.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }

                    bool Q11notselected = !GetValue(Q11_35000, currentPage, false) &&
                                          !GetValue(Q11_35000to59999, currentPage, false) &&
                                          !GetValue(Q11_60000to89999, currentPage, false) &&
                                          !GetValue(Q11_90000, currentPage, false) &&
                                          !GetValue(Q11_NoSay, currentPage, false);
                    if (Q11notselected)
                    {
                        Q10Message.ErrorMessage = "Please select one of the following options.";
                        retVal = false;
                    }

                    bool Q12check = !String.IsNullOrEmpty(GetValue(Q12_PostalCode, currentPage, String.Empty));

                    if (!Q12check)
                    {
                        Q12_PostalCode.MessageManager.ErrorMessage = "Please enter the first 3 digits of your Postal Code.";
                        retVal = false;
                    }

                    bool Q13FirstNameCheck = !String.IsNullOrEmpty(GetValue(Q13_FirstName, currentPage, String.Empty));

                    if (!Q13FirstNameCheck)
                    {
                        Q13_FirstName.MessageManager.ErrorMessage = "Please enter your First Name.";
                        retVal = false;
                    }

                    bool Q13LastNameCheck = !String.IsNullOrEmpty(GetValue(Q13_LastName, currentPage, String.Empty));

                    if (!Q13LastNameCheck)
                    {
                        Q13_LastName.MessageManager.ErrorMessage = "Please enter your Last Name.";
                        retVal = false;
                    }

                    bool Q13EmailCheck = !String.IsNullOrEmpty(GetValue(Q13_Email, currentPage, String.Empty));

                    if (!Q13EmailCheck)
                    {
                        Q13_Email.MessageManager.ErrorMessage = "Please enter your Email Address.";
                        retVal = false;
                    }
                }
                if (currentPage)
                {
                    SaveValue(Q9_Male);
                    SaveValue(Q9_Female);
                    SaveValue(Q10_19to24);
                    SaveValue(Q10_25to34);
                    SaveValue(Q10_35to44);
                    SaveValue(Q10_45to54);
                    SaveValue(Q10_55to64);
                    SaveValue(Q10_65orOlder);
                    SaveValue(Q11_35000);
                    SaveValue(Q11_35000to59999);
                    SaveValue(Q11_60000to89999);
                    SaveValue(Q11_90000);
                    SaveValue(Q11_NoSay);
                    SaveValue(Q12_PostalCode);
                    SaveValue(Q13_FirstName);
                    SaveValue(Q13_LastName);
                    SaveValue(Q13_Email);
                }
                break;

                #endregion Page 5
            }
            return(retVal);
        }
        protected bool SaveData()
        {
            StringBuilder columnList = new StringBuilder();
            SQLParamList  sqlParams  = new SQLParamList();

            if (QueryPropertyShortCode == GCCPropertyShortCode.GCC || (QueryPropertyShortCode == GCCPropertyShortCode.GAG && QueryGAGLocation == GLocation.None))
            {
                //User had to select location
                string propSel = fbkProperty.SelectedValue;
                if (propSel.Length > 3)
                {
                    //GAG
                    if (propSel.Substring(0, 2).Equals("13"))
                    {
                        columnList.AppendFormat(",[{0}]", fbkProperty.DBColumn);
                        sqlParams.Add("@" + fbkProperty.DBColumn, 13);
                    }
                }
                else
                {
                    fbkProperty.PrepareQuestionForDB(columnList, sqlParams);
                }
            }

            ddlDepartment.PrepareQuestionForDB(columnList, sqlParams);
            Q1.PrepareQuestionForDB(columnList, sqlParams);
            Q2.PrepareQuestionForDB(columnList, sqlParams);
            Q3.PrepareQuestionForDB(columnList, sqlParams);
            Q4.PrepareQuestionForDB(columnList, sqlParams);
            Q5.PrepareQuestionForDB(columnList, sqlParams);
            Q6.PrepareQuestionForDB(columnList, sqlParams);
            Q7.PrepareQuestionForDB(columnList, sqlParams);
            Q8.PrepareQuestionForDB(columnList, sqlParams);
            Q9.PrepareQuestionForDB(columnList, sqlParams);
            Q10.PrepareQuestionForDB(columnList, sqlParams);
            Q11.PrepareQuestionForDB(columnList, sqlParams);
            Q12.PrepareQuestionForDB(columnList, sqlParams);
            Q13.PrepareQuestionForDB(columnList, sqlParams);
            Q14.PrepareQuestionForDB(columnList, sqlParams);
            Q15.PrepareQuestionForDB(columnList, sqlParams);
            Q16.PrepareQuestionForDB(columnList, sqlParams);
            Q17.PrepareQuestionForDB(columnList, sqlParams);
            Q18.PrepareQuestionForDB(columnList, sqlParams);
            Q19.PrepareQuestionForDB(columnList, sqlParams);
            Q20.PrepareQuestionForDB(columnList, sqlParams);
            Q21.PrepareQuestionForDB(columnList, sqlParams);
            Q22.PrepareQuestionForDB(columnList, sqlParams);
            Q23.PrepareQuestionForDB(columnList, sqlParams);
            Q24.PrepareQuestionForDB(columnList, sqlParams);
            Q25.PrepareQuestionForDB(columnList, sqlParams);
            Q26.PrepareQuestionForDB(columnList, sqlParams);
            Q27.PrepareQuestionForDB(columnList, sqlParams);
            Q28.PrepareQuestionForDB(columnList, sqlParams);
            Q29A.PrepareQuestionForDB(columnList, sqlParams);
            Q29B.PrepareQuestionForDB(columnList, sqlParams);
            Q29C.PrepareQuestionForDB(columnList, sqlParams);
            Q30.PrepareQuestionForDB(columnList, sqlParams);
            radQ31_Hourly.PrepareQuestionForDB(columnList, sqlParams);
            radQ31_Salary.PrepareQuestionForDB(columnList, sqlParams);
            radQ32_1.PrepareQuestionForDB(columnList, sqlParams);
            radQ32_2.PrepareQuestionForDB(columnList, sqlParams);
            radQ32_3.PrepareQuestionForDB(columnList, sqlParams);
            radQ32_4.PrepareQuestionForDB(columnList, sqlParams);
            radQ32_5.PrepareQuestionForDB(columnList, sqlParams);
            Q33.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_1.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_2.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_3.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_4.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_5.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_6.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_7.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_8.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_9.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_10.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_11.PrepareQuestionForDB(columnList, sqlParams);
            chkQ34_12.PrepareQuestionForDB(columnList, sqlParams);

            if (radFFContinue.Checked)
            {
                CSR_Q1.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q2.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q3.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q4.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q5_1.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q5_2.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q5_3.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q5_4.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q6.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q7.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_1.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_2.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_3.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_4.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_5.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_6.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_7.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_8.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_9.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q8_OtherExplanation.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q9A.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q9B.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q9C.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q9D.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q9E.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q9F.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q9G.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q9H.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q10A.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q10B.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q10C.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q10D.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q10E.PrepareQuestionForDB(columnList, sqlParams);
                radCSR_Q11_1.PrepareQuestionForDB(columnList, sqlParams);
                radCSR_Q11_2.PrepareQuestionForDB(columnList, sqlParams);
                radCSR_Q11_3.PrepareQuestionForDB(columnList, sqlParams);
                radCSR_Q11_4.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q12.PrepareQuestionForDB(columnList, sqlParams);
                CSR_Q13.PrepareQuestionForDB(columnList, sqlParams);
            }

            columnList.Append(",[PropertyID],[DateEntered],[SurveyType]");
            sqlParams.Add("@PropertyID", Master.PropertyID)
            .Add("@DateEntered", DateTime.Now)
            .Add("@SurveyType", IsKioskSurvey ? "K" : "D");
            if (GAGLocation != GLocation.None)
            {
                columnList.Append(",[GAGLocation]");
                sqlParams.Add("@GAGLocation", GAGLocation.ToString());
            }

            columnList.Remove(0, 1);
            SQLDatabase sql   = new SQLDatabase();    sql.CommandTimeout = 120;
            int         rowID = sql.QueryAndReturnIdentity(String.Format("INSERT INTO [tblSurveySnapshot2017] ({0}) VALUES ({1});", columnList, columnList.ToString().Replace("[", "@").Replace("]", String.Empty)), sqlParams);

            if (!sql.HasError && rowID != -1)
            {
                Dictionary <string, int> wordCounts = SurveyTools.GetWordCount(Q33.Text, CSR_Q8_OtherExplanation.Text, CSR_Q13.Text);
                SurveyTools.SaveWordCounts(SharedClasses.SurveyType.Employee, rowID, wordCounts);
                return(true);
            }
            else
            {
                return(false);
            }
        }
        public void ProcessRequest(HttpContext context)
        {
            //Only run locally or in the network
            string ip = RequestVars.GetRequestIPv4Address();

            if (!ip.Equals("127.0.0.1") && !ip.StartsWith("172.16.") && !ip.StartsWith("192.168.0."))
            {
                ErrorHandler.WriteLog("GCC_Web_Portal.Jobs", "Job attempted to be run by invalid IP: " + ip, ErrorHandler.ErrorEventID.General);
                return;
            }
            //Get the job ID
            string jobID = RequestVars.Get("jobid", String.Empty);

            switch (jobID)
            {
            case "e07db58b-d3a6-4e01-a5ed-ff9875773b3c":

                #region Send weekly notification email

                DateTime startDate = DateTime.Now.Date.AddDays(-7);
                DateTime endDate   = DateTime.Now.Date.AddMilliseconds(-1);
                //DateTime startDate = new DateTime( 2015, 7, 1 ).Date;
                //DateTime endDate = new DateTime( 2015, 8, 1 ).Date.AddMilliseconds( -1 );
                SQLDatabase sql = new SQLDatabase();    sql.CommandTimeout = 120;
                DataTable   dt  = sql.ExecStoredProcedureDataTable("spJobs_StatusEmail",
                                                                   new SQLParamList()
                                                                   .Add("@DateCreated_Begin", startDate)
                                                                   .Add("@DateCreated_End", endDate));
                StringBuilder sbCurrent = new StringBuilder();
                sbCurrent.AppendFormat(@"<h3 style='margin:20px 0'>GEI / GSEI Dashboard for {0} to {1}</h3><table style='border-collapse:collapse;border:1px solid #444;width:100%' cellspacing='0' cellpadding='0'>", startDate.ToString("MMM d, yyyy"), endDate.ToString("MMM d, yyyy"));
                sbCurrent.AppendFormat("<thead><tr><th{0}></th><th{0}># Surveys</th><th{0}>GEI</th><th{0}>NPS</th><th{0}>PRS</th><th{0}>GSEI</th><th{0}># Followup</th><th{0}>% Followup</th><th{0}># <24h</th><th{0}>#24-48h</th><th{0}># > 48h</th><th{0}>Avg. Response</th></tr></thead>",
                                       " style='padding:5px;border:1px solid #BBB'");
                StringBuilder sbComparison = new StringBuilder("<h3 style='margin:20px 0'>Change from Previous Week</h3><table style='border-collapse:collapse;border:1px solid #444;width:100%' cellspacing='0' cellpadding='0'>");
                sbComparison.AppendFormat("<thead><tr><th{0}></th><th{0}># Surveys</th><th{0}>GEI</th><th{0}>NPS</th><th{0}>PRS</th><th{0}>GSEI</th><th{0}># Followup</th><th{0}>% Followup</th><th{0}># <24h</th><th{0}>#24-48h</th><th{0}># > 48h</th><th{0}>Avg. Response</th></tr></thead>",
                                          " style='padding:5px;border:1px solid #BBB'");
                Dictionary <string, List <string> > redFlagDetails = new Dictionary <string, List <string> >();
                foreach (DataRow dr in dt.Rows)
                {
                    sbCurrent.AppendFormat("<tr><th style='padding:5px;text-align:left;border:1px solid #BBB;'>{0}</th><td{12}>{1:#,###}</td><td{12}>{2}</td><td{12}>{3}</td><td{12}>{4}</td><td{12}>{5}</td><td{12}>{6:#,###}</td><td{12}>{7:#,###}</td><td{12}>{8:#,###}</td><td{12}>{9:#,###}</td><td{12}>{10:#,###}</td><td{12}>{11}</td></tr>",
                                           dr["ShortCode"],
                                           dr["TotalRecords"],
                                           ReportingTools.FormatIndex(dr["GEI"].ToString()),
                                           ReportingTools.FormatPercent(dr["NPS"].ToString()),
                                           ReportingTools.FormatPercent(dr["PRS"].ToString()),
                                           ReportingTools.FormatPercent(dr["GSEI"].ToString()),
                                           dr["FeedbackCount"], //6
                                           ReportingTools.FormatPercent(dr["FeedbackCompletePercent"].ToString()),
                                           dr["FeedbackLessThan24Hrs"],
                                           dr["Feedback24HrsTo48Hrs"],
                                           dr["FeedbackGreaterThan48Hrs"],
                                           ReportingTools.MinutesToNiceTime(dr["AverageFeedbackResponse"].ToString()),
                                           " style='padding:5px;border:1px solid #BBB;text-align:center'"
                                           );
                    sbComparison.AppendFormat("<tr><th style='padding:5px;text-align:left;border:1px solid #BBB;'>{0}</th>{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}</tr>",
                                              dr["ShortCode"],
                                              GetChangeCell(dr, "TotalRecords_Diff", String.Format("{0:#,###}", dr["TotalRecords"]), redFlagDetails, null),
                                              GetChangeCell(dr, "GEI_Diff", ReportingTools.FormatIndex(dr["GEI_Diff"].ToString()), redFlagDetails, r => { return(r != -1000 && r <= -10); }),
                                              GetChangeCell(dr, "NPS_Diff", ReportingTools.FormatPercent(dr["NPS_Diff"].ToString()), redFlagDetails, r => { return(r != -1000 && r <= -0.1); }),
                                              GetChangeCell(dr, "PRS_Diff", ReportingTools.FormatPercent(dr["PRS_Diff"].ToString()), redFlagDetails, r => { return(r != -1000 && r <= -0.1); }),
                                              GetChangeCell(dr, "GSEI_Diff", ReportingTools.FormatPercent(dr["GSEI_Diff"].ToString()), redFlagDetails, r => { return(r != -1000 && r <= -0.1); }),
                                              GetChangeCell(dr, "FeedbackCount_Diff", String.Format("{0:#,###}", dr["FeedbackCount_Diff"]), redFlagDetails, null), //6
                                              GetChangeCell(dr, "FeedbackCompletePercent_Diff", ReportingTools.FormatPercent(dr["FeedbackCompletePercent_Diff"].ToString()), redFlagDetails, r => { return(r != -1000 && r <= -0.1); }),
                                              GetChangeCell(dr, "FeedbackLessThan24Hrs_Diff", String.Format("{0:#,###}", dr["FeedbackLessThan24Hrs_Diff"]), redFlagDetails, null),
                                              GetChangeCell(dr, "Feedback24HrsTo48Hrs_Diff", String.Format("{0:#,###}", dr["Feedback24HrsTo48Hrs_Diff"]), redFlagDetails, null),
                                              GetChangeCell(dr, "FeedbackGreaterThan48Hrs_Diff", String.Format("{0:#,###}", dr["FeedbackGreaterThan48Hrs_Diff"]), redFlagDetails, null),
                                              GetChangeCell(dr, "AverageFeedbackResponse_Diff", ReportingTools.MinutesToNiceTime(dr["AverageFeedbackResponse_Diff"].ToString()), redFlagDetails, r => { return(r != -1000 && r >= 120); })
                                              );
                }
                sbCurrent.Append("</table><br /><br /><br />");
                sbComparison.Append("</table>");

                StringBuilder sbRedFlags = new StringBuilder();
                foreach (var kvp in redFlagDetails)
                {
                    if (sbRedFlags.Length == 0)
                    {
                        sbRedFlags.Append("<h3 style='margin:20px 0'>Red Flag Summary</h3><ul>");
                    }
                    if (kvp.Key.Length <= 4)
                    {
                        //Score
                        sbRedFlags.AppendFormat("<li><b>{0} score</b> has decreased by at least 10% for the following site(s): ", kvp.Key);
                    }
                    else if (kvp.Key.Equals("FeedbackCompletePercent"))
                    {
                        //Completion percentage
                        sbRedFlags.Append("<li><b>Feedback Completion</b> has decreased by at least 10% for the following site(s): ");
                    }
                    else if (kvp.Key.Equals("AverageFeedbackResponse"))
                    {
                        //Feedback response
                        sbRedFlags.Append("<li><b>Average Feedback Response</b> has increased by at least 2 hours for the following site(s): ");
                    }
                    foreach (string shortCode in kvp.Value)
                    {
                        sbRedFlags.AppendFormat("{0}, ", shortCode);
                    }
                    sbRedFlags.Remove(sbRedFlags.Length - 2, 2)
                    .Append("</li>");
                }
                if (sbRedFlags.Length > 0)
                {
                    sbRedFlags.Append("</ul><br />");
                    sbCurrent.Insert(0, sbRedFlags.ToString());
                }

                MailMessage msg = null;
                try
                {
                    var replacementModel = new
                    {
                        DataTables = sbCurrent.ToString() + sbComparison.ToString()
                    };
                    string path = context.Server.MapPath("~/Content/notifications/");
                    msg = EmailManager.CreateEmailFromTemplate(
                        Path.Combine(path, "WeeklyNotification.htm"),
                        replacementModel);
                    msg.IsBodyHtml   = true;
                    msg.BodyEncoding = System.Text.Encoding.UTF8;
                    msg.From         = new MailAddress("*****@*****.**");
                    msg.Subject      = "GCGC Weekly Status Notification - Week Ending " + endDate.ToString("MMM d, yyyy");
                    bool hasAddress = false;

                    dt = sql.QueryDataTable(@"
SELECT [SendType], u.[FirstName], u.[LastName],  u.[Email]
FROM [tblNotificationUsers] ne
	INNER JOIN [tblNotificationPropertySurveyReason] psr
		ON ne.[PropertySurveyReasonID] = psr.[PropertySurveyReasonID]
	INNER JOIN [tblCOM_Users] u
		ON ne.UserID = u.UserID
WHERE psr.PropertyID = @PropertyID
    AND psr.SurveyTypeID = @SurveyID
    AND psr.ReasonID = @ReasonID
;",
                                            new SQLParamList()
                                            .Add("@PropertyID", (int)GCCPropertyShortCode.GCC)
                                            .Add("@SurveyID", (int)SurveyType.GEI)
                                            .Add("@ReasonID", (int)NotificationReason.WeeklyStatusNotification)
                                            );
                    if (!sql.HasError && dt.Rows.Count > 0)
                    {
                        StringBuilder addrs = new StringBuilder();
                        foreach (DataRow dr in dt.Rows)
                        {
                            switch (dr["SendType"].ToString())
                            {
                            case "1":
                                msg.To.Add(dr["Email"].ToString());
                                addrs.Append(dr["FirstName"].ToString() + " " + dr["LastName"].ToString() + " <" + dr["Email"].ToString() + ">" + "\n");
                                hasAddress = true;
                                break;

                            case "2":
                                msg.CC.Add(dr["Email"].ToString());
                                //Colin requested that CC addresses not show on the call Aug 10,2015
                                //addrs.Append( dr["FirstName"].ToString() + " " + dr["LastName"].ToString() + " <" + dr["Email"].ToString() + ">" + "\n" );
                                hasAddress = true;
                                break;

                            case "3":
                                msg.Bcc.Add(dr["Email"].ToString());
                                hasAddress = true;
                                break;
                            }
                        }
                        //using ( StreamReader sr = new StreamReader( msg.AlternateViews[0].ContentStream ) ) {
                        //    msg.AlternateViews[0] = AlternateView.CreateAlternateViewFromString( sr.ReadToEnd().Replace( "{Recipients}", context.Server.HtmlEncode( addrs.ToString() ).Replace( "\n", "<br />" ) ), null, MediaTypeNames.Text.Html );
                        //}
                    }

                    if (hasAddress)
                    {
                        msg.Send();
                    }
                }
                catch (Exception ex)
                {
                    ErrorHandler.WriteLog("GCC_Web_Portal.Jobs", "Error running job.", ErrorHandler.ErrorEventID.General, ex);
                }
                finally
                {
                    if (msg != null)
                    {
                        msg.Dispose();
                        msg = null;
                    }
                }
                return;

                #endregion Send weekly notification email

            case "506aebb3-dfa2-4b34-94bc-51e81f5f31d3":

                #region Send Feedback Reminder Email

                sql = new SQLDatabase();
                dt  = sql.ExecStoredProcedureDataTable("[spJobs_48HrReminder]");
                foreach (DataRow dr in dt.Rows)
                {
                    GCCPropertyShortCode sc;
                    SurveyType           st;
                    NotificationReason   nr;
                    DateTime             created = Conversion.XMLDateToDateTime(dr["DateCreated"].ToString());
                    string feedbackUID           = dr["UID"].ToString();
                    if (Enum.TryParse(dr["PropertyID"].ToString(), out sc) &&
                        Enum.TryParse(dr["SurveyTypeID"].ToString(), out st) &&
                        Enum.TryParse(dr["ReasonID"].ToString(), out nr))
                    {
                        switch (st)
                        {
                        case SurveyType.GEI:
                            string gagLocation = dr["GEIGAGLocation"].ToString();
                            if (gagLocation.Length > 0)
                            {
                                gagLocation = " - " + gagLocation;
                            }
                            string fbLink = GCCPortalUrl + "Admin/Feedback/" + feedbackUID;
                            SurveyTools.SendNotifications(HttpContext.Current.Server, sc, st, nr, string.Empty,
                                                          new
                            {
                                Date               = created.ToString("yyyy-MM-dd"),
                                CasinoName         = PropertyTools.GetCasinoName((int)sc) + gagLocation,
                                Problems           = (dr["Q27"].Equals(1) ? "Yes" : "No"),
                                Response           = (dr["Q40"].Equals(1) ? "Yes" : "No"),
                                ProblemDescription = dr["Q27B"].ToString(),
                                StaffComment       = dr["Q11"].ToString(),
                                GeneralComments    = dr["Q34"].ToString(),
                                MemorableEmployee  = dr["Q35"].ToString(),
                                FeedbackLinkTXT    = (String.IsNullOrWhiteSpace(feedbackUID) ? String.Empty : "\n\nRespond to this feedback:\n" + fbLink + "\n"),
                                FeedbackLinkHTML   = (String.IsNullOrWhiteSpace(feedbackUID) ? String.Empty : @"<br /><br />
	<p><b>Respond to this feedback:</b></p>
	<p>"     + fbLink + "</p>"),
                                SurveyLink = GCCPortalUrl + "Display/GEI/" + dr["RecordID"].ToString()
                            },
                                                          String.Empty,
                                                          "Overdue: ");
                            break;

                        case SurveyType.Hotel:
                            SurveyTools.SendNotifications(HttpContext.Current.Server, sc, st, nr, string.Empty,
                                                          new
                            {
                                CasinoName       = PropertyTools.GetCasinoName((int)sc),
                                FeedbackNoteHTML = "<p><b>This guest has requested a response.</b> You can view and respond to the feedback request by clicking on (or copying and pasting) the following link:</p>\n<p>" + GCCPortalUrl + "Admin/Feedback/" + feedbackUID + "</p>",
                                FeedbackNoteTXT  = "The guest requested feedback. You can view and respond to the feedback request by clicking on (or copying and pasting) the following link:\n" + GCCPortalUrl + "Admin/Feedback/" + feedbackUID + "\n\n",
                                SurveyLink       = GCCPortalUrl + "Display/Hotel/" + dr["RecordID"].ToString()
                            },
                                                          String.Empty,
                                                          "Overdue: ");
                            break;

                        case SurveyType.Feedback:
                            gagLocation = dr["FBKGAGLocation"].ToString();
                            if (gagLocation.Length > 0)
                            {
                                gagLocation = " - " + gagLocation;
                            }
                            SurveyTools.SendNotifications(HttpContext.Current.Server, sc, st, nr, string.Empty,
                                                          new
                            {
                                Date             = created.ToString("yyyy-MM-dd"),
                                CasinoName       = PropertyTools.GetCasinoName((int)sc) + gagLocation,
                                FeedbackNoteHTML = "<p><b>This guest has requested a response.</b> You can view and respond to the feedback request by clicking on (or copying and pasting) the following link:</p>\n<p>" + GCCPortalUrl + "Admin/Feedback/" + feedbackUID + "</p>",
                                FeedbackNoteTXT  = "The guest requested feedback. You can view and respond to the feedback request by clicking on (or copying and pasting) the following link:\n" + GCCPortalUrl + "Admin/Feedback/" + feedbackUID + "\n\n",
                                SurveyLink       = GCCPortalUrl + "Display/Feedback/" + dr["RecordID"].ToString()
                            },
                                                          String.Empty,
                                                          "Overdue: ");
                            break;

                        case SurveyType.Donation:
                            SurveyTools.SendNotifications(HttpContext.Current.Server, sc, st, nr, string.Empty,
                                                          new
                            {
                                Date         = created.ToString("yyyy-MM-dd"),
                                CasinoName   = PropertyTools.GetCasinoName((int)sc),
                                FeedbackLink = GCCPortalUrl + "Admin/Feedback/" + feedbackUID,
                                Link         = GCCPortalUrl + "Display/Donation/" + dr["RecordID"].ToString()
                            },
                                                          String.Empty,
                                                          "Overdue: ");
                            break;
                        }
                    }
                }
                return;

                #endregion Send Feedback Reminder Email
            }

            context.Response.ContentType = "text/plain";
            context.Response.Write("Invalid Job ID.");
        }