private void CancelBtn_Click(object sender, EventArgs e)
        {
            isCancelled = true;
            Debug.WriteLine("CANCEL BUTTON WAS CLICKED!!!");
            BackgroundWorkerSchedules.CancelAsync();

            Debug.WriteLine("isFirstCalculation: " + RefToCourseSelectForm.getIsFirstCalculationState());
            if (RefToCourseSelectForm.getIsFirstCalculationState() == false)
            {
                RefToResultLoadForm.Show();
                RefToResultLoadForm.setIsOptimizedState(false);
                RefToResultLoadForm.ChangeOptimizationText();
            }
            else
            {
                RefToCourseSelectForm.Show();
            }

            acceptableSchedulesTemp.Clear();
            overlapSchedulesTemp.Clear();
            acceptableSchedules.Clear();
            overlapSchedules.Clear();
            resultSchedules.Clear();
            this.Hide();
        }
 //[FUNCTION - BeginWorking()]
 //Used from other classes as a way to start the evaluation/worker
 public void BeginWorking(bool isOptimized)
 {
     isCancelled         = false;
     this.isOptimization = isOptimized;
     numComplete         = 0;
     ModifyProgressBarColor.SetState(ProgressBarSchedules, 2);
     BackgroundWorkerSchedules.RunWorkerAsync();
 }
        //[FUNCTION - NestedForLoop]
        //Allows for dynamic creation off all schedule possibilities
        private void NestedScheduleConfig(int secID, int secAmount, int[] secConfig)
        {
            int secIdNext = secID + 1;

            int[] currentSecConfig = new int[courseAmount];
            secConfig.CopyTo(currentSecConfig, 0);

            if (BackgroundWorkerSchedules.CancellationPending == true)
            {
                Debug.WriteLine("Work was HALTED!");
                return;
            }


            for (int i = 0; i < secAmount; i++)
            {
                currentSecConfig[secID] = i;
                if ((secIdNext) == courseAmount)
                {
                    schedulePopulation.Add(new SingleSchedule(courseAmount, creditAmount, random, templateWeek, GetUniqueSec(currentSecConfig)));

                    if (numComplete % 1000 == 0)
                    {
                        //Debug.WriteLine("1k Schedules were added to schedule");
                        //Debug.WriteLine("(" + (float)numComplete + " / " + (float)scheduleAmount + ") * " + 100f + " = " + ((float)numComplete / (float)scheduleAmount) * 100f);
                        percentComplete = ((float)numComplete / (float)scheduleAmount) * 100f;
                        BackgroundWorkerSchedules.ReportProgress((int)percentComplete <= 100 ? (int)percentComplete : 100);
                    }
                    if (numComplete % 20000 == 0)
                    {
                        HandleScheduleOverload();
                    }
                    numComplete += 1;
                }
                else
                {
                    NestedScheduleConfig((secIdNext), sectionAmountAll[secIdNext], currentSecConfig);
                }
            }
        }