protected qLrn_QuestionElement AddNewQuestionElement(int question_id, string details, bool is_correct)
    {
        var new_question_element = new qLrn_QuestionElement();

        new_question_element.QuestionID = question_id;
        new_question_element.Details = details;
        new_question_element.Correct = is_correct;

        new_question_element.AddQuestionElement();

        return new_question_element;
    }
    protected void btn_save_question_OnClick(object sender, EventArgs args)
    {
        if (QuestionID > 0)
        {
            var question = new qLrn_Question(QuestionID);

            question.Text = txt_new_question.Text;
            question.AnswerText = txt_answer.Text;
            question.Created = DateTime.Now;
            question.CreatedBy = Convert.ToInt32(Context.Items["UserID"]);
            question.LastModified = DateTime.Now;
            question.LastModifiedBy = Convert.ToInt32(Context.Items["UserID"]);

            int question_category_id = GetNewQuestionCategoryID();
            if (question_category_id > 0) question.QuestionCategoryID = question_category_id;

            question.Update();

            foreach (var c in ph_question_elements.Controls)
            {
                var element_control = c as IQuestionElementEditControl;

                if (element_control != null)
                {
                    int question_element_id = element_control.GetQuestionElementId ();

                    if (question_element_id > 0)
                    {
                        var e = new qLrn_QuestionElement(question_element_id);

                        if (string.IsNullOrEmpty (element_control.GetDetails ()))
                        {
                            e.MarkAsDelete = 1;
                        }
                        else
                        {
                            e.Details = element_control.GetDetails ();
                            e.Correct = element_control.IsCorrect ();
                            e.AnswerOrder = element_control.GetOrderNumber();
                        }

                        e.Update ();
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty (element_control.GetDetails ()))
                        {
                            var e = AddNewQuestionElement (question.QuestionID, element_control.GetDetails (), element_control.IsCorrect ());
                            element_control.SetQuestionElementId(e.QuestionElementID);
                        }
                    }
                }
            }
            Response.Redirect("question-editor.aspx?mode=edit&questionID=" + question.QuestionID);
        }
        else
        {
            var question = new qLrn_Question();

            question.Text = txt_new_question.Text;
            question.AnswerText = txt_answer.Text;
            question.Available = "Yes";
            question.Created = DateTime.Now;
            question.CreatedBy = Convert.ToInt32(Context.Items["UserID"]);

            int question_category_id = GetNewQuestionCategoryID();
            if (question_category_id > 0) question.QuestionCategoryID = question_category_id;

            QuestionID = question.AddQuestion();

            foreach (var c in ph_question_elements.Controls)
            {
                var element_control = c as IQuestionElementEditControl;

                if (element_control != null)
                {
                    string element_details = element_control.GetDetails();

                    if (!string.IsNullOrEmpty(element_details))
                    {
                        var e = AddNewQuestionElement(question.QuestionID, element_details, element_control.IsCorrect());
                        element_control.SetQuestionElementId(e.QuestionElementID);
                    }
                }
            }

            /*
            updateQuestionForm("edit");
            UpdateQuestionsList();
            ddl_questions.SelectedValue = Convert.ToString(question.QuestionID);
            EnableQuestionRemoval();
             */
            Response.Redirect("question-editor.aspx?mode=edit&questionID=" + question.QuestionID);
        }

        MessageLog("SUCCESS: Question saved.");
    }