private Schedule GetLessons(HtmlNode schedule)
        {
            var lessonsToAddNextHour = new List <MultiHourLesson>();

            //Create new schedule and set properties
            var timeSchedule = new Schedule();

            timeSchedule.Identifier    = this.Identifier;
            timeSchedule.Department    = this.Department;
            timeSchedule.Week          = this.Week;
            timeSchedule.QuarterOfYear = this.Quarter;

            // Loop through each row (row is an hour, e.x. 08:30-09:20)
            for (int time = 2; time < schedule.ChildNodes.Count; time += 2)
            {
                var addMultiHourLesson = false;

                //Get lessons from current hour
                var row     = schedule.ChildNodes[time];
                var lessons = row.ChildNodes.Where(n => n.Name == "td").ToList();

                for (int lesson = 1; lesson < lessons.Count; lesson++)
                {
                    // Get current lesson and info
                    var currentLesson = lessons[lesson];

                    // Current hour
                    var hourNumber  = RemoveChars(lessons[0].InnerText.Split(' ')[0], false);
                    var currentHour = RemoveChars(lessons[0].InnerText.Split(' ')[1], false);

                    // Create lesson and set start time
                    var newLesson = new Lesson();
                    newLesson.StartTime = currentHour;

                    // If list with HtmlNodes contains key with tuple of current time and lesson, then add lesson of previous hour to this hour
                    if (lessons.Count != 6)
                    {
                        if (lessonsToAddNextHour.FirstOrDefault(q => q.Hour == time && q.Day == lesson) != null ||
                            lessonsToAddNextHour.FirstOrDefault(q => q.Hour == (time + 2) && q.Day == lesson) != null)
                        {
                            var previousLesson = lessonsToAddNextHour.FirstOrDefault(q => q.Hour == time && q.Day == lesson) != null
                                ? lessonsToAddNextHour.FirstOrDefault(q => q.Hour == time && q.Day == lesson) : lessonsToAddNextHour.FirstOrDefault(q => q.Hour == (time + 2) && q.Day == lesson);

                            if (previousLesson != null)
                            {
                                lessons.Insert(lesson, previousLesson.Lesson);

                                // Remove lesson from list
                                lessonsToAddNextHour.Remove(previousLesson);

                                // Set multihour lesson to true
                                addMultiHourLesson = true;
                                currentLesson      = previousLesson.Lesson;
                            }
                        }
                    }

                    // Set correct identifier of lesson based on schedule type
                    switch (this.ScheduleType)
                    {
                    case "c":
                        timeSchedule.ScheduleType = "Class";
                        newLesson.Class           = timeSchedule.Identifier;
                        break;

                    case "t":
                        timeSchedule.ScheduleType = "Teacher";
                        newLesson.Teacher         = timeSchedule.Identifier;
                        break;

                    case "r":
                        timeSchedule.ScheduleType = "Room";
                        newLesson.Room            = timeSchedule.Identifier;
                        break;
                    }

                    var lessonInfo = ParseHtml(currentLesson);
                    var rowSpan    = Convert.ToInt32(currentLesson.Attributes["rowspan"].Value);

                    if (lessonInfo != null)
                    {
                        newLesson = SetLessonInfo(lessonInfo, newLesson, timeSchedule.ScheduleType);

                        // Add lesson to current day
                        if (addMultiHourLesson == true && timeSchedule.Days.FirstOrDefault(q => q.Id == lesson).Lessons
                            .FirstOrDefault(q => q.StartTime == currentHour) == null)
                        {
                            timeSchedule.Days.FirstOrDefault(q => q.Id == lesson).Lessons.Add(newLesson);

                            // Reset multihour lesson
                            addMultiHourLesson = false;

                            // Continue to next day
                            continue;
                        }
                        else if (timeSchedule.Days.FirstOrDefault(q => q.Id == lesson).Lessons
                                 .FirstOrDefault(q => q.StartTime == currentHour) == null)
                        {
                            timeSchedule.Days.FirstOrDefault(q => q.Id == lesson).Lessons.Add(newLesson);
                        }

                        // If row span is greater than two,
                        // than the current lesson must be added at the next hour and same day
                        if (rowSpan > 2)
                        {
                            var difference = rowSpan - 2;
                            var totalLoops = difference / 2;

                            for (int j = 1; j < totalLoops + 1; j++)
                            {
                                var nextHour = (2 * j) + time;

                                if (lessonsToAddNextHour.FirstOrDefault(q => q.Lesson == currentLesson && q.Day == lesson && q.Hour == nextHour) == null)
                                {
                                    var lessonNextHour = new MultiHourLesson();
                                    lessonNextHour.Day    = lesson;
                                    lessonNextHour.Hour   = nextHour;
                                    lessonNextHour.Lesson = currentLesson;

                                    lessonsToAddNextHour.Add(lessonNextHour);
                                }
                            }
                        }
                    }
                }
            }

            // If list with multihour lessons is not empty, then add these to the schedule
            if (lessonsToAddNextHour.Count > 0)
            {
                foreach (var lesson in lessonsToAddNextHour)
                {
                    var hour = lesson.Hour;
                    var day  = lesson.Day;

                    var hourString     = GetHour(hour);
                    var lessonToInsert = ConvertToLesson(lesson.Lesson, hourString);

                    // Insert lesson at index
                    timeSchedule.Days.FirstOrDefault(q => q.Id == day).Lessons.Insert(((hour / 2) - 1), lessonToInsert);
                }
            }

            return(timeSchedule);
        }
        private void GetLessons(HtmlNode schedule)
        {
            // Create list for multihour lessons
            var lessonsToAddNextHour = new List <MultiHourLesson>();

            //Create new schedule and set properties
            var timeSchedule = new Schedule();

            timeSchedule.Department    = this.Department;
            timeSchedule.Week          = this.Week;
            timeSchedule.QuarterOfYear = this.Quarter;

            // Loop through each row (row is an hour, e.x. 08:30-09:20)
            for (int time = 2; time < schedule.ChildNodes.Count; time += 2)
            {
                var addMultiHourLesson = false;

                // Get hour
                //Get lessons from current hour
                var row     = schedule.ChildNodes[time];
                var lessons = row.ChildNodes.Where(n => n.Name == "td").ToList();

                for (int lesson = 1; lesson < lessons.Count; lesson++)
                {
                    // Get current hour
                    var hourNumber  = RemoveChars(lessons[0].InnerText.Split(' ')[0]);
                    var currentHour = RemoveChars(lessons[0].InnerText.Split(' ')[1]);

                    // Create new lesson and set start time
                    var newLesson = new Lesson(lesson);
                    newLesson.StartTime = currentHour;

                    // Get current lesson and info
                    var currentLesson = lessons[lesson];

                    // If contains key with tuple time and lesson, then add lesson of previous hour to this hour
                    if (lessons.Count != 6)
                    {
                        var id = String.Format("{0}{1}", time, lesson);
                        if (lessonsToAddNextHour.FirstOrDefault(q => q.Hour == time && q.Day == lesson && q.Id == id) != null)
                        {
                            var previousLesson = lessonsToAddNextHour.FirstOrDefault(q => q.Hour == time && q.Day == lesson && q.Id == id);
                            if (previousLesson != null)
                            {
                                lessons.Insert(lesson, previousLesson.Lesson);

                                // Remove lesson from list
                                lessonsToAddNextHour.Remove(previousLesson);

                                // Set multihour lesson to true
                                addMultiHourLesson = true;
                                currentLesson      = previousLesson.Lesson;
                            }
                        }
                    }

                    // Get lesson and info
                    var lessonInfo = currentLesson.SelectSingleNode("table").ChildNodes.Descendants("font").ToList();

                    // Get lesson row span
                    var rowSpan = Convert.ToInt32(currentLesson.Attributes["rowspan"].Value);

                    if (lessonInfo != null)
                    {
                        // Set lesson properties
                        switch (lessonInfo.Count)
                        {
                        case 0:
                            newLesson.Course  = "Geen les";
                            newLesson.Class   = String.Empty;
                            newLesson.Teacher = String.Empty;
                            break;

                        case 1:
                            newLesson.Course  = RemoveChars(lessonInfo[0].InnerText);
                            newLesson.Class   = String.Empty;
                            newLesson.Teacher = String.Empty;
                            break;

                        case 2:
                            newLesson.Course  = RemoveChars(lessonInfo[1].InnerText);
                            newLesson.Class   = RemoveChars(lessonInfo[0].InnerText);
                            newLesson.Teacher = String.Empty;
                            break;

                        case 3:
                            newLesson.Course  = RemoveChars(lessonInfo[2].InnerText);
                            newLesson.Class   = RemoveChars(lessonInfo[0].InnerText);
                            newLesson.Teacher = RemoveChars(lessonInfo[1].InnerText);
                            break;
                        }

                        // Add lesson to current day
                        if (addMultiHourLesson == true && timeSchedule.Days.FirstOrDefault(q => q.Id == lesson).Lessons
                            .FirstOrDefault(q => q.StartTime == currentHour) == null)
                        {
                            timeSchedule.Days.FirstOrDefault(q => q.Id == lesson).Lessons.Add(newLesson);

                            // Reset multihour lesson
                            addMultiHourLesson = false;

                            // Continue to next day
                            continue;
                        }
                        else if (timeSchedule.Days.FirstOrDefault(q => q.Id == lesson).Lessons
                                 .FirstOrDefault(q => q.StartTime == currentHour) == null)
                        {
                            timeSchedule.Days.FirstOrDefault(q => q.Id == lesson).Lessons.Add(newLesson);
                        }

                        // If row span is greater than two,
                        // than the current lesson must be added at the next hour and same day
                        if (rowSpan > 2)
                        {
                            var difference = rowSpan - 2;
                            var totalLoops = difference / 2;

                            for (int j = 1; j < totalLoops + 1; j++)
                            {
                                var nextHour = (2 * j) + time;

                                if (lessonsToAddNextHour.FirstOrDefault(q => q.Lesson == currentLesson && q.Day == lesson && q.Hour == nextHour) == null)
                                {
                                    var lessonNextHour = new MultiHourLesson();
                                    lessonNextHour.Id     = String.Format("{0}{1}", nextHour, lesson);
                                    lessonNextHour.Day    = lesson;
                                    lessonNextHour.Hour   = nextHour;
                                    lessonNextHour.Lesson = currentLesson;

                                    lessonsToAddNextHour.Add(lessonNextHour);
                                }
                            }
                        }
                    }
                }
            }

            // If list with multihour lessons is not empty, then add these to the schedule
            if (true)
            {
                foreach (var lesson in lessonsToAddNextHour)
                {
                    var hour = lesson.Hour;
                    var day  = lesson.Day;

                    var hourString     = GetHour(hour);
                    var lessonToInsert = ConvertToLesson(lesson.Lesson, hourString);

                    // Insert lesson at index
                    timeSchedule.Days.FirstOrDefault(q => q.Id == day).Lessons.Insert(((hour / 2) - 1), lessonToInsert);
                }
            }

            Print(timeSchedule);
        }