/// <summary>
 /// Creates a Recurrence Rule in RadScheduler-friendly format from the RRule of the specified Recurring component.
 /// </summary>
 /// <param name="startDate">The Start Date of the Recurring component.</param>
 /// <param name="endDate">The End Date of the Recurring component.</param>
 /// <param name="recurringComponent">The Recurring component.</param>
 /// <returns>A <see cref="string"/> representation of the RRule in RadScheduler-friendly format.</returns>
 private static string GetSchedulerRecurrenceRule(DateTime startDate, DateTime endDate, RecurringComponent recurringComponent)
 {
     string recurrenceRuleString = String.Empty;
     if ((recurringComponent.RecurrenceRules != null) &&
         (recurringComponent.RecurrenceRules[0] != null))
     {
         RecurrenceRange schedulerRange = new RecurrenceRange();
         schedulerRange.Start = startDate;
         schedulerRange.EventDuration = endDate - startDate;
         DDay.iCal.RecurrencePattern iCalPattern = (DDay.iCal.RecurrencePattern)recurringComponent.RecurrenceRules[0];
         if (iCalPattern.Count > 0)
         {
             schedulerRange.MaxOccurrences = iCalPattern.Count;
         }
         else if ((iCalPattern.Until != null))//&&   (iCalPattern.IsValidDate(iCalPattern.Until))
         {
             schedulerRange.RecursUntil = iCalPattern.Until.ToLocalTime();
         }
         RecurrenceRule schedulerRRule = null;
         int iCallPatternInterval = iCalPattern.Interval;
         RecurrenceDay schedulerRecurrenceDay = GetSchedulerRecurrenceDay(iCalPattern.ByDay);
         switch (iCalPattern.Frequency)
         {
             case FrequencyType.Hourly:
                 schedulerRRule =
                     new HourlyRecurrenceRule(iCallPatternInterval, schedulerRange);
                 break;
             case FrequencyType.Daily:
                 if (schedulerRecurrenceDay == RecurrenceDay.None)
                 {
                     schedulerRRule =
                         new DailyRecurrenceRule(iCallPatternInterval, schedulerRange);
                 }
                 else
                 {
                     schedulerRRule =
                         new DailyRecurrenceRule(schedulerRecurrenceDay, schedulerRange);
                 }
                 break;
             case FrequencyType.Weekly:
                 if (schedulerRecurrenceDay == RecurrenceDay.None)
                 {
                     schedulerRRule =
                         new WeeklyRecurrenceRule(
                             iCallPatternInterval,
                             (RecurrenceDay)startDate.DayOfWeek,
                             schedulerRange,
                             iCalPattern.FirstDayOfWeek);
                 }
                 else
                 {
                     schedulerRRule =
                         new WeeklyRecurrenceRule(
                             iCallPatternInterval,
                             schedulerRecurrenceDay,
                             schedulerRange,
                             iCalPattern.FirstDayOfWeek);
                 }
                 break;
             case FrequencyType.Monthly:
                 if (iCalPattern.ByMonthDay.Count > 0)
                 {
                     schedulerRRule = new MonthlyRecurrenceRule(
                         iCalPattern.ByMonthDay[0],
                         iCallPatternInterval,
                         schedulerRange);
                 }
                 else if (iCalPattern.BySetPosition.Count > 0)
                 {
                     schedulerRRule = new MonthlyRecurrenceRule(
                         iCalPattern.BySetPosition[0],
                         schedulerRecurrenceDay,
                         iCallPatternInterval,
                         schedulerRange);
                 }
                 else
                 {
                     schedulerRRule = new MonthlyRecurrenceRule(
                         startDate.Day,
                         iCallPatternInterval,
                         schedulerRange);
                 }
                 break;
             case FrequencyType.Yearly:
                 if (iCalPattern.ByMonth.Count > 0)
                 {
                     if (iCalPattern.ByMonthDay.Count > 0)
                     {
                         schedulerRRule = new YearlyRecurrenceRule(
                             (RecurrenceMonth)iCalPattern.ByMonth[0],
                             iCalPattern.ByMonthDay[0],
                             schedulerRange);
                     }
                     else if (iCalPattern.BySetPosition.Count > 0)
                     {
                         schedulerRRule = new YearlyRecurrenceRule(
                             iCalPattern.BySetPosition[0],
                             (RecurrenceMonth)iCalPattern.ByMonth[0],
                             schedulerRecurrenceDay,
                             schedulerRange);
                     }
                     else
                     {
                         schedulerRRule = new YearlyRecurrenceRule(
                             (RecurrenceMonth)iCalPattern.ByMonth[0],
                             startDate.Day,
                             schedulerRange);
                     }
                 }
                 else
                 {
                     schedulerRRule = new YearlyRecurrenceRule(
                             (RecurrenceMonth)startDate.Month,
                             startDate.Day,
                             schedulerRange);
                 }
                 break;
             default:
                 break;
         }
         if (schedulerRRule != null)
         {
             AddRecurrenceExceptions(schedulerRRule, recurringComponent);
             recurrenceRuleString = schedulerRRule.ToString();
         }
     }
     return recurrenceRuleString;
 }
    /// <summary>
    /// Creates a Recurrence Rule in RadScheduler-friendly format from the RRule of the specified Recurring component.
    /// </summary>
    /// <param name="startDate">The Start Date of the Recurring component.</param>
    /// <param name="endDate">The End Date of the Recurring component.</param>
    /// <param name="recurringComponent">The Recurring component.</param>
    /// <returns>A <see cref="string"/> representation of the RRule in RadScheduler-friendly format.</returns>
    private static string GetSchedulerRecurrenceRule(DateTime startDate, DateTime endDate, RecurringComponent recurringComponent)
    {
        string recurrenceRuleString = String.Empty;

        if ((recurringComponent.RecurrenceRules != null) &&
            (recurringComponent.RecurrenceRules[0] != null))
        {
            RecurrenceRange schedulerRange = new RecurrenceRange();
            schedulerRange.Start         = startDate;
            schedulerRange.EventDuration = endDate - startDate;
            DDay.iCal.RecurrencePattern iCalPattern = (DDay.iCal.RecurrencePattern)recurringComponent.RecurrenceRules[0];
            if (iCalPattern.Count > 0)
            {
                schedulerRange.MaxOccurrences = iCalPattern.Count;
            }
            else if ((iCalPattern.Until != null))//&&   (iCalPattern.IsValidDate(iCalPattern.Until))
            {
                schedulerRange.RecursUntil = iCalPattern.Until.ToLocalTime();
            }
            RecurrenceRule schedulerRRule         = null;
            int            iCallPatternInterval   = iCalPattern.Interval;
            RecurrenceDay  schedulerRecurrenceDay = GetSchedulerRecurrenceDay(iCalPattern.ByDay);
            switch (iCalPattern.Frequency)
            {
            case FrequencyType.Hourly:
                schedulerRRule =
                    new HourlyRecurrenceRule(iCallPatternInterval, schedulerRange);
                break;

            case FrequencyType.Daily:
                if (schedulerRecurrenceDay == RecurrenceDay.None)
                {
                    schedulerRRule =
                        new DailyRecurrenceRule(iCallPatternInterval, schedulerRange);
                }
                else
                {
                    schedulerRRule =
                        new DailyRecurrenceRule(schedulerRecurrenceDay, schedulerRange);
                }
                break;

            case FrequencyType.Weekly:
                if (schedulerRecurrenceDay == RecurrenceDay.None)
                {
                    schedulerRRule =
                        new WeeklyRecurrenceRule(
                            iCallPatternInterval,
                            (RecurrenceDay)startDate.DayOfWeek,
                            schedulerRange,
                            iCalPattern.FirstDayOfWeek);
                }
                else
                {
                    schedulerRRule =
                        new WeeklyRecurrenceRule(
                            iCallPatternInterval,
                            schedulerRecurrenceDay,
                            schedulerRange,
                            iCalPattern.FirstDayOfWeek);
                }
                break;

            case FrequencyType.Monthly:
                if (iCalPattern.ByMonthDay.Count > 0)
                {
                    schedulerRRule = new MonthlyRecurrenceRule(
                        iCalPattern.ByMonthDay[0],
                        iCallPatternInterval,
                        schedulerRange);
                }
                else if (iCalPattern.BySetPosition.Count > 0)
                {
                    schedulerRRule = new MonthlyRecurrenceRule(
                        iCalPattern.BySetPosition[0],
                        schedulerRecurrenceDay,
                        iCallPatternInterval,
                        schedulerRange);
                }
                else
                {
                    schedulerRRule = new MonthlyRecurrenceRule(
                        startDate.Day,
                        iCallPatternInterval,
                        schedulerRange);
                }
                break;

            case FrequencyType.Yearly:
                if (iCalPattern.ByMonth.Count > 0)
                {
                    if (iCalPattern.ByMonthDay.Count > 0)
                    {
                        schedulerRRule = new YearlyRecurrenceRule(
                            (RecurrenceMonth)iCalPattern.ByMonth[0],
                            iCalPattern.ByMonthDay[0],
                            schedulerRange);
                    }
                    else if (iCalPattern.BySetPosition.Count > 0)
                    {
                        schedulerRRule = new YearlyRecurrenceRule(
                            iCalPattern.BySetPosition[0],
                            (RecurrenceMonth)iCalPattern.ByMonth[0],
                            schedulerRecurrenceDay,
                            schedulerRange);
                    }
                    else
                    {
                        schedulerRRule = new YearlyRecurrenceRule(
                            (RecurrenceMonth)iCalPattern.ByMonth[0],
                            startDate.Day,
                            schedulerRange);
                    }
                }
                else
                {
                    schedulerRRule = new YearlyRecurrenceRule(
                        (RecurrenceMonth)startDate.Month,
                        startDate.Day,
                        schedulerRange);
                }
                break;

            default:
                break;
            }
            if (schedulerRRule != null)
            {
                AddRecurrenceExceptions(schedulerRRule, recurringComponent);
                recurrenceRuleString = schedulerRRule.ToString();
            }
        }
        return(recurrenceRuleString);
    }