// private string questionID;

        protected void Page_Load(object sender, EventArgs e)
        {
            CurrentQuestionLabel.Text = "Question " + AppSession.getQuestionID();

            int currentQuestion = AppSession.getCurrentQuestionID();

            using (SqlConnection connection = GetConnection())
            {
                //Console.WriteLine("I am here using");
                string commandStr = "SELECT * FROM Question, Type " +
                                    "WHERE Question.type = Type.ID AND Question.ID = " + currentQuestion;
                SqlCommand command = new SqlCommand(commandStr, connection);

                //run command, collect results into reader
                SqlDataReader reader = command.ExecuteReader();

                //see if we have at least 1 result
                if (reader.Read())
                {
                    //read basic info from result row
                    string questionText = (string)reader["text"];

                    string questionType = reader["Name"].ToString().ToLower();

                    if (questionType.Equals("textbox"))
                    {
                        //load up control
                        TextBoxControl textBoxControl = (TextBoxControl)LoadControl("~/TextBoxControl.ascx");

                        //set it up
                        textBoxControl.ID = TEXTBOX_ID;
                        textBoxControl.QuestionLabel.Text = questionText;

                        //add to placeholder
                        questionPlaceHolder.Controls.Add(textBoxControl);
                    }
                    else if (questionType.Equals("checkbox"))
                    {
                        CheckBoxControl checkBoxControl = (CheckBoxControl)LoadControl("~/CheckBoxControl.ascx");
                        checkBoxControl.ID = CHECKBOX_ID;
                        checkBoxControl.QuestionLabel.Text = questionText;

                        //ask DB for options associated with this question
                        SqlCommand optionCommand = new SqlCommand("SELECT * FROM Options WHERE questionID = " + currentQuestion, connection);
                        //execute into reader
                        SqlDataReader optionReader = optionCommand.ExecuteReader();

                        //loop through results(1 row at a time
                        while (optionReader.Read())
                        {
                            //build list items from results
                            ListItem item = new ListItem(optionReader["text"].ToString(), optionReader["ID"].ToString());

                            checkBoxControl.QuestionCheckBoxList.Items.Add(item);
                        }

                        //add loaded control to the placeholder
                        questionPlaceHolder.Controls.Add(checkBoxControl);
                    }
                    else if (questionType.Equals("radiochecklist"))
                    {
                        Console.WriteLine("I am here");
                        RadioBoxControl radioBoxControl = (RadioBoxControl)LoadControl("~/RadioBoxControl.ascx");
                        radioBoxControl.ID = RADIOBOX_ID;
                        radioBoxControl.QuestionLabel.Text = questionText;

                        SqlCommand optionCommand = new SqlCommand("SELECT * FROM Options WHERE questionID = " + currentQuestion, connection);

                        SqlDataReader optionReader = optionCommand.ExecuteReader();

                        //loop through results(1 row at a time
                        while (optionReader.Read())
                        {
                            ListItem item = new ListItem(optionReader["text"].ToString(), optionReader["ID"].ToString());
                            radioBoxControl.QuestionRadioBoxList.Items.Add(item);
                        }


                        questionPlaceHolder.Controls.Add(radioBoxControl);
                    }
                }
            }//closes db connection for us here
        }
        protected void NextButton_Click(object sender, EventArgs e)
        {
            int currentQuestion = AppSession.getCurrentQuestionID();

            AppSession.incrementLabelNumber();
            List <int> extraQuestions = AppSession.getExtraQuestionsList();

            if (HttpContext.Current.Session["answer"] == null)
            {
                List <Answer> answerList = new List <Answer>();
                HttpContext.Current.Session["answer"] = answerList;
            }
            //setup DB connection
            using (SqlConnection connection = GetConnection())
            {
                //check for answers user has filled in on the form

                //check to see if previously a textbox control was dynamically added to the screen
                TextBoxControl textBoxControl = (TextBoxControl)questionPlaceHolder.FindControl(TEXTBOX_ID);//find control is looking for id of something
                if (textBoxControl != null)
                {
                    //tring typedAnswer = textBoxControl.QuestionTextBox.Text;
                    //TODO: store in session so that later it can be stored into the DB
                    List <Answer> answerList = (List <Answer>)HttpContext.Current.Session["answer"];
                    Answer        answer     = new Answer();
                    answer.QuestionID = AppSession.getCurrentQuestionID();
                    answer.MyAnswer   = textBoxControl.QuestionTextBox.Text;
                    answerList.Add(answer);
                    HttpContext.Current.Session["answer"] = answerList;
                }
                RadioBoxControl radioBoxControl = (RadioBoxControl)questionPlaceHolder.FindControl(RADIOBOX_ID);
                if (radioBoxControl != null)
                {
                    foreach (ListItem item in radioBoxControl.QuestionRadioBoxList.Items)
                    {
                        if (item.Selected)
                        {
                            //store in session and break the loop coz only one radio can be selected.
                            List <Answer> answerList = (List <Answer>)HttpContext.Current.Session["answer"];
                            Answer        answer     = new Answer();
                            answer.QuestionID = AppSession.getCurrentQuestionID();
                            answer.MyAnswer   = item.Value;
                            answerList.Add(answer);
                            HttpContext.Current.Session["answer"] = answerList;

                            string     commandStr = "Select * From Options Where ID = " + item.Value;
                            SqlCommand command    = new SqlCommand(commandStr, connection);

                            //run command, collect results into reader
                            SqlDataReader reader = command.ExecuteReader();
                            if (reader.Read())
                            {
                                if (reader["extraQuestionID"] != System.DBNull.Value)
                                {
                                    extraQuestions.Add((int)reader["extraQuestionID"]);
                                }
                            }
                            break;
                        }
                    }
                }
                //check to see if it was a checkbox question
                CheckBoxControl checkBoxControl = (CheckBoxControl)questionPlaceHolder.FindControl(CHECKBOX_ID);
                if (checkBoxControl != null)
                {
                    //loop through the checkboxes
                    foreach (ListItem item in checkBoxControl.QuestionCheckBoxList.Items)
                    {
                        if (item.Selected)
                        {
                            //TODO: store item.Value(which is the optionID) in session to store later in DB
                            //TODO: if selected option leads to extra questions, here is where to check that
                            //      check this option against DB table and see if it has a foreign key to next question
                            //      if it does, add it to extra questions
                            //item.Value
                            List <Answer> answerList = (List <Answer>)HttpContext.Current.Session["answer"];
                            Answer        answer     = new Answer();
                            answer.QuestionID = AppSession.getCurrentQuestionID();
                            answer.MyAnswer   = item.Value;
                            answerList.Add(answer);
                            HttpContext.Current.Session["answer"] = answerList;

                            string     commandStr = "Select * From Options Where ID = " + item.Value;
                            SqlCommand command    = new SqlCommand(commandStr, connection);

                            //run command, collect results into reader
                            SqlDataReader reader = command.ExecuteReader();
                            if (reader.Read())
                            {
                                if (reader["extraQuestionID"] != System.DBNull.Value)
                                {
                                    if (!extraQuestions.Contains((int)reader["extraQuestionID"]))
                                    {
                                        extraQuestions.Add((int)reader["extraQuestionID"]);
                                    }
                                }
                            }
                        }
                    }
                }

                //TODO: Dont hard code extra questions like this, this is purely for example

                /*
                 * if(currentQuestion == 1)
                 * {
                 *  extraQuestions.Add(3);
                 *  extraQuestions.Add(4);
                 * }
                 */

                //GO TO NEXT QUESTION
                //===================
                if (extraQuestions.Count > 0)
                {
                    //use first question in list
                    int nextQuestion = extraQuestions[0];
                    //erase from list
                    extraQuestions.Remove(nextQuestion);
                    //store list of extra questions
                    AppSession.setExtraQuestionsList(extraQuestions);

                    //set currentQuestion in session to this value
                    AppSession.setCurrentQuestionID(nextQuestion);
                    //reload page
                    Response.Redirect("QuestionPage.aspx");
                }
                else
                {
                    //use default navigation from 1 question to the next
                    SqlCommand    command = new SqlCommand("SELECT * FROM Question WHERE ID = " + currentQuestion, connection);
                    SqlDataReader reader  = command.ExecuteReader();

                    //read first row (dont care if multiple are returned)
                    if (reader.Read())
                    {
                        //get column index(ordinal) of nextQuestion
                        int nextQuestionColumnIndex = reader.GetOrdinal("nextQuestion");
                        //check if the value inside this column for this row of results is NULL or not
                        if (reader.IsDBNull(nextQuestionColumnIndex))
                        {
                            //its the end of the survey, go to thank you page or registration
                            //maybe store all answers in DB
                            // Console.WriteLine("all good yea!!!");
                            Response.Redirect("registration.aspx");
                        }
                        else
                        {
                            //if not null, use this value to help navigate to next question
                            AppSession.setCurrentQuestionID((int)reader["nextQuestion"]);
                            //reload the page so that pageLoad loads correct new question up
                            Response.Redirect("QuestionPage.aspx");
                        }
                    }
                    else
                    {
                        //cant find this question in the DB??!!??!
                    }
                    reader.Close();
                }
            }
        }