internal void Add(CalendarEvent ev)
 {
     calendarEvents.Add(ev);
     arrangeColumns();
 }
        private void RenderEvent(CalendarDay calendarDay, CalendarEvent calendarEvent, HtmlTextWriter output)
        {
            var max = CellCount * Configuration.CellWidth;

            var dayVisibleStart = new DateTime(calendarDay.StartDate.Year,
                                               calendarDay.StartDate.Month,
                                               calendarDay.StartDate.Day,
                                               GetVisibleStart.Hour,
                                               0,
                                               0);
            var realBoxStart = calendarEvent.Start < dayVisibleStart ? dayVisibleStart : calendarEvent.Start;

            DateTime dayVisibleEnd;

            switch (GetVisibleEnd.Day)
            {
            case 1:
                dayVisibleEnd = new DateTime(calendarDay.StartDate.Year,
                                             calendarDay.StartDate.Month,
                                             calendarDay.StartDate.Day,
                                             GetVisibleEnd.Hour + 1,
                                             0,
                                             0);
                break;

            default:
                dayVisibleEnd =
                    new DateTime(calendarDay.StartDate.Year, calendarDay.StartDate.Month, calendarDay.StartDate.Day, GetVisibleEnd.Hour, 0, 0)
                    .AddDays(1);
                break;
            }

            var realBoxEnd = calendarEvent.End > dayVisibleEnd ? dayVisibleEnd : calendarEvent.End;

            var left   = (int)Math.Floor((realBoxStart - dayVisibleStart).TotalMinutes * Configuration.CellWidth / Configuration.CellDuration);
            var top    = calendarEvent.Column.Number * Configuration.EventHeight - 1;
            var width  = (int)Math.Floor((realBoxEnd - realBoxStart).TotalMinutes * Configuration.CellWidth / Configuration.CellDuration) - 3;
            var height = Configuration.EventHeight - 1;

            if (left > max)
            {
                return;
            }

            if (left + width > max - 2)
            {
                width = max - left - 2;
            }

            if (left < 0)
            {
                width += left;
                left   = 0;
            }

            width = Math.Max(width, 2);
            output.AddAttribute("unselectable", "on");
            output.AddStyleAttribute("position", "absolute");
            output.AddStyleAttribute("left", left + "px");
            output.AddStyleAttribute("top", top + "px");
            output.AddStyleAttribute("width", width + "px");
            output.AddStyleAttribute("height", height + "px");
            output.AddStyleAttribute("border", "1px solid " + Configuration.EventBorderColor);

            var eventBackColor = Configuration.EventBackColor;

            if (!string.IsNullOrEmpty(calendarEvent.LegacyFreeBusyStatus))
            {
                switch (calendarEvent.LegacyFreeBusyStatus)
                {
                case "OOF":
                    eventBackColor = Configuration.EventBackColor_OOF;
                    break;

                case "Tentative":
                    eventBackColor = Configuration.EventBackColor_Tentative;
                    break;

                case "Free":
                    eventBackColor = Configuration.EventBackColor_Free;
                    break;

                default:
                    eventBackColor = Configuration.EventBackColor;
                    break;
                }
            }

            output.AddStyleAttribute("background-color", eventBackColor);
            output.AddStyleAttribute("white-space", "nowrap");
            output.AddStyleAttribute("overflow", "hidden");
            output.AddStyleAttribute("display", "block");
            output.AddStyleAttribute("padding-left", "1px");
            output.RenderBeginTag("div");

            output.AddStyleAttribute("font-family", Configuration.EventFontFamily);
            output.AddStyleAttribute("font-size", Configuration.EventFontSize);
            output.RenderBeginTag("div");

            output.Write(calendarEvent.Name.Length < Configuration.MaxEventTextLenght
                ? calendarEvent.Name
                : calendarEvent.Name.Substring(0, 22) + "...");
            output.Write(calendarEvent.Name);
            if (!string.IsNullOrEmpty(calendarEvent.Location))
            {
                output.Write("<br/><strong>{0}</strong>", calendarEvent.Location);
            }

            output.RenderEndTag();
            output.RenderEndTag();
        }