/// <summary>
 /// This method populates a StudentSearchCriteria object with values from the Criteria Controller
 /// </summary>
 /// <param name="criteriaController"></param>
 /// <returns></returns>
 private IMStudentSearchCriteria GetStudentCriteriaFromController(CriteriaController criteriaController)
 {
     var studentSearchCriteria = new IMStudentSearchCriteria();
     var studentName = criteriaController.ParseCriteria<Text.ValueObject>("StudentName").FirstOrDefault();
     studentSearchCriteria.StudentName = studentName == null ? string.Empty : studentName.Text;
     var studentId = criteriaController.ParseCriteria<Text.ValueObject>("StudentID").FirstOrDefault();
     studentSearchCriteria.StudentID = studentId == null ? string.Empty : studentId.Text;
     var inactiveRti =
         criteriaController.ParseCriteria<CheckBoxList.ValueObject>("RTI").Find(x => x.Text == RtiFormerYear);
     studentSearchCriteria.InactiveRTI = inactiveRti == null ? string.Empty : inactiveRti.Text;
     var tier1Rti = criteriaController.ParseCriteria<CheckBoxList.ValueObject>("RTI")
         .Find(x => x.Text == RtiTier1);
     studentSearchCriteria.Tier1RTI = tier1Rti == null ? string.Empty : tier1Rti.Text;
     var tier2Rti = criteriaController.ParseCriteria<CheckBoxList.ValueObject>("RTI")
         .Find(x => x.Text == RtiTier2);
     studentSearchCriteria.Tier2RTI = tier2Rti == null ? string.Empty : tier2Rti.Text;
     var tier3Rti = criteriaController.ParseCriteria<CheckBoxList.ValueObject>("RTI")
         .Find(x => x.Text == RtiTier3);
     studentSearchCriteria.Tier3RTI = tier3Rti == null ? string.Empty : tier3Rti.Text;
     studentSearchCriteria.Cluster = string.Join(",",
         criteriaController.ParseCriteria<CheckBoxList.ValueObject>("Cluster").Select(x => x.Text).ToList());
     studentSearchCriteria.SchoolTypes = string.Join(",",
         criteriaController.ParseCriteria<CheckBoxList.ValueObject>("SchoolType").Select(x => x.Text).ToList());
     studentSearchCriteria.School =
         Convert.ToInt32(criteriaController.ParseCriteria<DropDownList.ValueObject>("School")
             .Select(x => x.Value)
             .ToList()
             .FirstOrDefault());
     studentSearchCriteria.Grades = string.Join(",",
         criteriaController.ParseCriteria<CheckBoxList.ValueObject>("Grade").Select(x => x.Text).ToList());
     studentSearchCriteria.ClassID = Convert.ToInt32(criteriaController.ParseCriteria<DropDownList.ValueObject>("Class").Select(x => x.Value).ToList().FirstOrDefault());
     ClassId = studentSearchCriteria.ClassID > 0 ? studentSearchCriteria.ClassID : ClassId;
     studentSearchCriteria.GroupID = Convert.ToInt32(criteriaController.ParseCriteria<DropDownList.ValueObject>("Group").Select(x => x.Value).ToList().FirstOrDefault());
     GroupId = studentSearchCriteria.GroupID > 0 ? studentSearchCriteria.GroupID : GroupId;
     return studentSearchCriteria;
 }
        /// <summary>
        /// This method loads all students the the current user has visibility too AND that are not already 
        /// enrolled in the current group.
        /// </summary>
        /// <returns>A list of students who are eligable to be added to this group</returns>
        public IEnumerable<IMAvailableStudent> LoadStudentsAvailableForIM()
        {
            var availableStudents = new List<IMAvailableStudent>();
            var studentSearchCriteria = new IMStudentSearchCriteria();
            var IM = new IMAssignment();
            var criteriaController = GetCriteriaControllerFromMasterPage();

            if (criteriaController != null)
            {
                studentSearchCriteria = GetStudentCriteriaFromController(criteriaController);
            }


            switch (SessionObject.CurrentPortal)
            {
                case EntityTypes.District:
                    availableStudents = IM.GetAvaiableStudentsForIM(GroupId,
                     SessionObject.LoggedInUser.Page, studentSearchCriteria,
                      DistrictParms.LoadDistrictParms().ClientID, ClassId, DocumentNodeID);
                    break;
                case EntityTypes.School:
                    if (studentSearchCriteria.School == 0)
                    {
                        studentSearchCriteria.School = SessionObject.LoggedInUser.School;
                    }

                    availableStudents = IM.GetAvaiableStudentsForIM(GroupId,
                     SessionObject.LoggedInUser.Page, studentSearchCriteria,
                      DistrictParms.LoadDistrictParms().ClientID, ClassId, DocumentNodeID);
                    break;
                case EntityTypes.Teacher:

                    availableStudents = IM.GetAvaiableStudentsForIM(GroupId,
                      SessionObject.LoggedInUser.Page, studentSearchCriteria,
                      DistrictParms.LoadDistrictParms().ClientID, ClassId, DocumentNodeID);
                    break;
            }



            return availableStudents;
        }