private void UpdateCurSel(DateTime newDate, bool redraw, int monthIndex, bool setNone)
 {
     bool isNone = this.m_isNone;
     this.m_isNone = setNone;
     bool flag2 = (this.m_curSel.Month != newDate.Month) || (this.m_curSel.Year != newDate.Year);
     DateTime curSel = this.m_curSel;
     DateTime date = newDate;
     MonthChangeBeforeEventArgs e = new MonthChangeBeforeEventArgs(curSel, newDate);
     if (flag2)
     {
         this.OnMonthChangeBefore(e);
         newDate = e.NewDate;
     }
     bool flag3 = ((this.m_curSel != newDate) || (this.m_isNone != isNone)) ? !e.Cancel : false;
     if ((newDate >= this.MinDate) && (newDate <= this.MaxDate))
     {
         DateTime time3 = this.m_curSel;
         if (!e.Cancel)
         {
             this.m_curSel = newDate;
             this.m_hoverSel = newDate;
         }
         if (!e.Cancel)
         {
             if (monthIndex == -1)
             {
                 if ((this.m_curYear == -1) || (this.m_curMonth == -1))
                 {
                     this.m_curMonth = newDate.Month;
                     this.m_curYear = newDate.Year;
                     this.CalculateDays(this.m_monthCount);
                     redraw = true;
                 }
                 else
                 {
                     DateTime time4 = new DateTime(this.m_curYear, this.m_curMonth, 1);
                     if ((newDate < time4) || (newDate >= time4.AddMonths(this.m_monthCount)))
                     {
                         if (newDate < time4)
                         {
                             this.m_curMonth = newDate.Month;
                             this.m_curYear = newDate.Year;
                         }
                         if (newDate >= time4.AddMonths(this.m_monthCount))
                         {
                             DateTime time5 = newDate.AddMonths(-(this.m_monthCount - 1));
                             this.m_curMonth = time5.Month;
                             this.m_curYear = time5.Year;
                         }
                         this.CalculateDays(this.m_monthCount);
                         redraw = true;
                     }
                     else
                     {
                         redraw = false;
                     }
                 }
             }
             else
             {
                 DateTime time6 = newDate.AddMonths(-monthIndex);
                 this.m_curMonth = time6.Month;
                 this.m_curYear = time6.Year;
                 this.CalculateDays(this.m_monthCount);
                 redraw = true;
             }
         }
         if (base.Visible && (this.m_graphics != null))
         {
             if (redraw)
             {
                 this.m_redraw = true;
             }
             else
             {
                 if (e.Cancel || (newDate != date))
                 {
                     int mIndex = this.GetMonthIndex(date);
                     int dayIndex = this.GetDayIndex(date, mIndex);
                     if (this.IsInsideAnyGrid(mIndex, dayIndex))
                     {
                         if (this.DaysGrid)
                         {
                             this.DrawHoverSelection(this.m_graphics, date, false);
                         }
                         this.DrawDay(this.m_graphics, date, false, true, false, this.m_layout.GetMonthLayout(mIndex).GetCellBounds(dayIndex), mIndex);
                     }
                     this.RedrawBrokenBorders(mIndex, dayIndex);
                 }
                 if (!e.Cancel)
                 {
                     int num3 = this.GetMonthIndex(time3);
                     int num4 = this.GetDayIndex(time3, num3);
                     if (this.IsInsideAnyGrid(num3, num4))
                     {
                         if (this.DaysGrid)
                         {
                             this.DrawHoverSelection(this.m_graphics, time3, false);
                         }
                         this.DrawDay(this.m_graphics, time3, false, true, false, this.m_layout.GetMonthLayout(num3).GetCellBounds(num4), num3);
                     }
                     this.RedrawBrokenBorders(num3, num4);
                     if (!setNone)
                     {
                         num3 = this.GetMonthIndex(newDate);
                         num4 = this.GetDayIndex(newDate, num3);
                         if (this.IsInsideAnyGrid(num3, num4))
                         {
                             this.DrawDay(this.m_graphics, newDate, true, true, false, this.m_layout.GetMonthLayout(num3).GetCellBounds(num4), num3);
                         }
                     }
                     this.DrawTodaySelection(this.m_graphics);
                     if (!setNone)
                     {
                         this.DrawHoverSelection(this.m_graphics, newDate, true);
                     }
                 }
             }
             base.Invalidate();
         }
         if (!e.Cancel && flag2)
         {
             this.OnMonthChangeAfter(new MonthChangeAfterEventArgs(curSel, newDate));
         }
         if ((this.ValueChanged != null) && flag3)
         {
             this.ValueChanged(this, EventArgs.Empty);
         }
     }
 }
 protected void OnMonthChangeBefore(MonthChangeBeforeEventArgs e)
 {
     if (this.MonthChangeBefore != null)
     {
         this.MonthChangeBefore(this, e);
     }
 }