public void addComponent(HtmlAgilityPack.HtmlNode row)
        {
            RowInterpreter interpreter = new RowInterpreter(row);
            if (!interpreter.isCancelled())
            {
                if (interpreter.isNewCourse())
                {
                    if (course != null && section != null)
                    {
                        course.addSection(section);
                        courseList.Add(course);
                    }

                    // new course
                    course = new Course();
                    course.addCourseID(interpreter.getCourseID());
                    course.addSectionCode(interpreter.getSectionCode());
                    course.addTitle(interpreter.getTitle());

                    // new section AND add it to course
                    section = new Section();
                    section.addSectionID(interpreter.getSectionID());
                    section.addTime(interpreter.getTime());
                    section.addlocation(interpreter.getLocation());
                    section.addInstructor(interpreter.getInstructor());
                }
                else
                {
                    if (interpreter.hasSectionID())
                    {
                        course.addSection(section);

                        // new section
                        section = new Section();
                        section.addSectionID(interpreter.getSectionID());
                        section.addTime(interpreter.getTime());
                        section.addlocation(interpreter.getLocation());
                        section.addInstructor(interpreter.getInstructor());
                    }
                    else
                    {
                        // same section more info
                        section.addTime(interpreter.getTime());
                        section.addlocation(interpreter.getLocation());
                        section.addInstructor(interpreter.getInstructor());
                    }
                }
            }
            else
            {
                /*
                // cancelled (Implies old course ended)
                if (course != null && section != null)
                {
                    course.addSection(section);
                    courseList.Add(course);
                }
                */
            }
        }
        public static List<Schedule> GenerateAllPossibleSchedule(Course course)
        {
            string courseID = course.courseID;
            string semester = course.semester;
            List<Section> lectureList = course.getSectionListByType(SectionType.Lecture);
            List<Section> tutorialList = course.getSectionListByType(SectionType.Tutorial);
            List<Section> practicalList = course.getSectionListByType(SectionType.Practical);
            List<Schedule> lectureListTemp = new List<Schedule>();
            List<Schedule> tutorialListTemp = new List<Schedule>();
            List<Schedule> practicalListTemp = new List<Schedule>();
            List<Schedule> scheduleList = new List<Schedule>();

            foreach (Section lectureSection in lectureList)
            {
                Schedule schedule = new Schedule();
                Schedule mergedSchedule = schedule.AddScheduleSlot(new ScheduleSlot(courseID, semester, lectureSection));

                lectureListTemp.Add(mergedSchedule);
            }

            if (lectureListTemp.Count != 0)
            {
                scheduleList = lectureListTemp;
            }
            else
            {
                if (tutorialListTemp.Count != 0)
                {
                    foreach (Section tutorialSection in tutorialList)
                    {
                        Schedule schedule = new Schedule();
                        Schedule mergedSchedule = schedule.AddScheduleSlot(new ScheduleSlot(courseID, semester, tutorialSection));

                        tutorialListTemp.Add(mergedSchedule);
                    }
                }
            }

            foreach (Section tutorialSection in tutorialList)
            {
                foreach (Schedule schedule in lectureListTemp)
                {
                    ScheduleSlot tutorialScheduleSlot = new ScheduleSlot(courseID, semester, tutorialSection);
                    if (!schedule.HasConfilct(tutorialScheduleSlot))
                    {
                        Schedule mergedSchedule = schedule.AddScheduleSlot(tutorialScheduleSlot);
                        tutorialListTemp.Add(mergedSchedule);
                    }
                }
            }

            if (tutorialListTemp.Count != 0)
            {
                scheduleList = tutorialListTemp;
            }
            else
            {
                tutorialListTemp = scheduleList;
            }

            if (lectureListTemp.Count == 0 && tutorialListTemp.Count == 0 && practicalListTemp.Count != 0)
            {
                foreach (Section practicalSection in practicalList)
                {
                    Schedule schedule = new Schedule();
                    Schedule mergedSchedule = schedule.AddScheduleSlot(new ScheduleSlot(courseID, semester, practicalSection));

                    practicalListTemp.Add(mergedSchedule);
                }
            }

            foreach (Section practicalSection in practicalList)
            {
                foreach (Schedule schedule in tutorialListTemp)
                {
                    ScheduleSlot practicalScheduleSlot = new ScheduleSlot(courseID, semester, practicalSection);
                    if (!schedule.HasConfilct(practicalScheduleSlot))
                    {
                        Schedule mergedSchedule = schedule.AddScheduleSlot(practicalScheduleSlot);
                        practicalListTemp.Add(mergedSchedule);
                    }
                }
            }

            if (practicalListTemp.Count != 0)
            {
                scheduleList = practicalListTemp;
            }

            return scheduleList;
        }
        public List<Course> getResult()
        {
            if (finalized == false)
            {
                if (section != null && course != null)
                {
                    course.addSection(section);
                    courseList.Add(course);
                }
                else
                {
                    //meaning all departmental courses are cancelled
                    //EX: www.artsandscience.utoronto.ca/ofr/timetable/winter/mst.html
                    //Medieval Studies, Centre for [MST courses]
                }

                course = null;
                section = null;
                finalized = true;
            }

            return courseList;
        }