/// <summary>
        ///  DayComparer private method to check day, used by CheckEventByDate on request eg: DayComparer(dateEnd, checkDate, eventObject).
        /// </summary>
        private bool DayComparer(DateTime start, DateTime origin, GameCalendarEventObject eventObject)
        {
            DateTime tempTime = new DateTime(start.Year, start.Month, start.Day);

            if (DateTime.Compare(tempTime, origin) > 0)
            {
                return(false);
            }

            if (eventObject.Daily > 0)
            {
                for (int i = 0; i <= eventObject.Daily; i++)
                {
                    DateTime temp = start;
                    temp = temp.AddDays(i);
                    if (temp.DayOfWeek == origin.DayOfWeek)
                    {
                        return(true);
                    }
                }
            }
            else
            {
                return(start.DayOfWeek == origin.DayOfWeek);
            }

            return(false);
        }
        /// <summary>
        ///  CreateEvent put new GameCalendarEventObject object to calendar events collection.
        /// </summary>
        public void CreateEvent(GameCalendarEventObject newEvent)
        {
            if (newEvent.Daily == 0 && newEvent.Weekly == 0 && newEvent.Monthly == 0 && newEvent.Yearly == 0)
            {
                _events.Add(newEvent);
            }
            else if (newEvent.RepeatByDate)
            {
                _eventsRepeatedByDate.Add(newEvent);
            }
            else
            {
                _eventsRepeated.Add(newEvent);
            }

            FillDaylyEventsList(_today);
            SortEvents();
        }
        /// <summary>
        ///  ReturnEndedEvents private method helper.
        /// </summary>
        private GameCalendarEventObject ReturnEndedEvents(GameCalendarEventObject eventObject, DateTime checkDate)
        {
            DateTime dateEnd = eventObject.DateEnd;

            DateTime dateEndY = dateEnd.AddYears(eventObject.Yearly);
            DateTime dateEndM = dateEndY.AddMonths(eventObject.Monthly);
            DateTime dateEndW = dateEndM.AddDays(eventObject.Weekly * 7);
            DateTime dateEndD = dateEndW.AddDays(eventObject.Daily);

            if
            (
                DateTime.Compare(dateEndD, checkDate) >= 0
            )
            {
                return(null);
            }
            else
            {
                return(eventObject);
            }
        }
        /// <summary>
        ///  CheckEventByDate private method to find any event for requested date.
        /// </summary>
        private GameCalendarEventObject[] CheckEventByDate(GameCalendarEventObject eventObject, DateTime checkDate)
        {
            GameCalendarEventObject[] array = new GameCalendarEventObject[] { null, null };

            DateTime dateStart = eventObject.DateStart;
            DateTime dateEnd   = eventObject.DateEnd;

            DateTime YS = dateStart.AddMonths(eventObject.Yearly * 12);
            DateTime YE = dateEnd.AddMonths(eventObject.Yearly * 12);

            if
            (
                YearComparer(dateStart, YS, checkDate)
                &&
                MonthComparer(dateStart, dateStart.AddMonths(eventObject.Monthly), checkDate)
                &&
                WeekComparer(dateStart, dateStart.AddDays(eventObject.Daily), checkDate, eventObject.Weekly)
                &&
                DayComparer(dateStart, checkDate, eventObject)
            )
            {
                array[0] = eventObject;
            }
            else if
            (
                YearComparer(dateEnd, YE, checkDate)
                &&
                MonthComparer(dateEnd, dateEnd.AddMonths(eventObject.Monthly), checkDate)
                &&
                WeekComparer(dateEnd, dateEnd.AddDays(eventObject.Daily), checkDate, eventObject.Weekly)
                &&
                DayComparer(dateEnd, checkDate, eventObject)
            )
            {
                array[1] = eventObject;
            }

            return(array);
        }
        /// <summary>
        ///  CheckEventRepeatByDate private method to find any event for requested day, repeated by current date(every 1 september).
        /// </summary>
        private GameCalendarEventObject[] CheckEventRepeatByDate(GameCalendarEventObject eventObject, DateTime checkDate)
        {
            GameCalendarEventObject[] array = new GameCalendarEventObject[] { null, null };

            var startDate = eventObject.DateStart.AddMonths(eventObject.Monthly);

            startDate = startDate.AddYears(eventObject.Yearly);

            var endDate = eventObject.DateEnd.AddMonths(eventObject.Monthly);

            endDate = endDate.AddYears(eventObject.Yearly);

            if (
                YearComparer(eventObject.DateStart, startDate, checkDate)
                &&
                MonthComparer(eventObject.DateStart, startDate, checkDate)
                &&
                eventObject.DateStart.Day == checkDate.Day
                )
            {
                array[0] = eventObject;
            }

            if (
                YearComparer(eventObject.DateEnd, endDate, checkDate)
                &&
                MonthComparer(eventObject.DateEnd, endDate, checkDate)
                &&
                eventObject.DateEnd.Day == checkDate.Day
                )
            {
                array[1] = eventObject;
            }

            return(array);
        }