public override bool ParseInput()
        {
            // passes each of the fields into a function to parse the input
            // also validates the ranges
            // min/max frame can be larger in the input box than the limit of a uint but it's low priority to fix that
            if (!(FormsFunctions.ParseInputD(searchParams.minFrame, out minFrame) &&
                  FormsFunctions.ParseInputD(searchParams.maxFrame, out maxFrame) &&
                  minFrame <= maxFrame &&
                  FormsFunctions.ParseInputD(searchParams.minHour, out minHour) &&
                  FormsFunctions.ParseInputD(searchParams.maxHour, out maxHour) &&
                  minHour <= maxHour && maxHour <= 23 &&
                  FormsFunctions.ParseInputD(searchParams.minMinute, out minMinute) &&
                  FormsFunctions.ParseInputD(searchParams.maxMinute, out maxMinute) &&
                  minMinute <= maxMinute && maxMinute <= 59))
            {
                return(false);
            }
            //parse the id/sid defaulting to 0
            FormsFunctions.ParseInputD(searchParams.id, out id);
            FormsFunctions.ParseInputD(searchParams.sid, out sid);

            // everything from here on should always be valid input
            seedDate = searchParams.date.Value;
            bool     shiny    = searchParams.isShiny.Checked;
            bool     synch    = searchParams.isSynch.Checked;
            IVFilter ivfilter = searchParams.ivfilters.IVFilter;

            List <int> encounterSlots = null;

            if (searchParams.encounterSlot.Text != "Any" && searchParams.encounterSlot.CheckBoxItems.Count > 0)
            {
                encounterSlots = new List <int>();
                for (int i = 0; i < searchParams.encounterSlot.CheckBoxItems.Count; i++)
                {
                    if (searchParams.encounterSlot.CheckBoxItems[i].Checked)
                    {
                        // We have to subtract 1 because this custom control contains a hidden item for text display
                        encounterSlots.Add(i - 1);
                    }
                }
            }

            List <uint> natures = null;

            if (searchParams.nature.Text != "Any" && searchParams.nature.CheckBoxItems.Count > 0)
            {
                natures =
                    (from t in searchParams.nature.CheckBoxItems
                     where t.Checked
                     select(uint) ((Nature)t.ComboBoxItem).Number).ToList();
            }

            frameCompare = new FrameCompare(ivfilter, natures,
                                            (int)((ComboBoxItem)searchParams.ability.SelectedItem).Reference, shiny,
                                            synch, false, encounterSlots,
                                            (GenderFilter)(searchParams.gender.SelectedItem));

            EncounterMod currentMod = synch ? EncounterMod.Synchronize : EncounterMod.None;

            generator = new FrameGenerator
            {
                FrameType =
                    (FrameType)((ComboBoxItem)searchParams.frameType.SelectedItem).Reference,
                EncounterMod = currentMod
            };
            if (currentMod == EncounterMod.Synchronize && natures == null)
            {
                generator.EncounterMod = EncounterMod.None;
            }

            generator.SynchNature = ((Nature)searchParams.synchNature.SelectedItem).Number;

            generator.EncounterType = EncounterTypeCalc.EncounterString(searchParams.encounterType.Text);

            return(true);
        }
        public override bool ParseInput()
        {
            // passes each of the fields into a function to parse the input
            // also validates the ranges
            // min/max frame can be larger in the input box than the limit of a uint but it's low priority to fix that
            if (!(FormsFunctions.ParseInputD(searchParams.minFrame, out minFrame) &&
                  FormsFunctions.ParseInputD(searchParams.maxFrame, out maxFrame) &&
                  minFrame <= maxFrame &&
                  FormsFunctions.ParseInputD(searchParams.minHour, out minHour) &&
                  FormsFunctions.ParseInputD(searchParams.maxHour, out maxHour) &&
                  minHour <= maxHour && maxHour <= 23 &&
                  FormsFunctions.ParseInputD(searchParams.minMinute, out minMinute) &&
                  FormsFunctions.ParseInputD(searchParams.maxMinute, out maxMinute) &&
                  minMinute <= maxMinute && maxMinute <= 59)) return false;
            //parse the id/sid defaulting to 0
            FormsFunctions.ParseInputD(searchParams.id, out id);
            FormsFunctions.ParseInputD(searchParams.sid, out sid);

            // everything from here on should always be valid input
            seedDate = searchParams.date.Value;
            bool shiny = searchParams.isShiny.Checked;
            bool synch = searchParams.isSynch.Checked;
            IVFilter ivfilter = searchParams.ivfilters.IVFilter;

            List<int> encounterSlots = null;
            if (searchParams.encounterSlot.Text != "Any" && searchParams.encounterSlot.CheckBoxItems.Count > 0)
            {
                encounterSlots = new List<int>();
                for (int i = 0; i < searchParams.encounterSlot.CheckBoxItems.Count; i++)
                {
                    if (searchParams.encounterSlot.CheckBoxItems[i].Checked)
                        // We have to subtract 1 because this custom control contains a hidden item for text display
                        encounterSlots.Add(i - 1);
                }
            }

            List<uint> natures = null;
            if (searchParams.nature.Text != "Any" && searchParams.nature.CheckBoxItems.Count > 0)
            {
                natures =
                    (from t in searchParams.nature.CheckBoxItems
                     where t.Checked
                     select (uint) ((Nature) t.ComboBoxItem).Number).ToList();
            }

            frameCompare = new FrameCompare(ivfilter, natures,
                                            (int) ((ComboBoxItem) searchParams.ability.SelectedItem).Reference, shiny,
                                            synch, false, encounterSlots,
                                            (GenderFilter) (searchParams.gender.SelectedItem));

            EncounterMod currentMod = synch ? EncounterMod.Synchronize : EncounterMod.None;
            generator = new FrameGenerator
                {
                    FrameType =
                        (FrameType) ((ComboBoxItem) searchParams.frameType.SelectedItem).Reference,
                    EncounterMod = currentMod
                };
            if (currentMod == EncounterMod.Synchronize && natures == null)
            {
                generator.EncounterMod = EncounterMod.None;
            }

            generator.SynchNature = ((Nature) searchParams.synchNature.SelectedItem).Number;

            generator.EncounterType = EncounterTypeCalc.EncounterString(searchParams.encounterType.Text);

            return true;
        }