public FullCalendarEvent(EventCalendarDb.EventCalendarDetailsData c, List <EventCalendarDb.EventCalendarCategoryData> categoryHaystack)
            {
                CmsPage page = CmsContext.getPageById(c.PageId);

                id    = c.PageId.ToString();
                title = page.getTitle(c.Lang);
                start = c.StartDateTime;
                end   = c.EndDateTime;
                url   = page.getUrl(c.Lang);

                EventCalendarDb.EventCalendarCategoryData category = EventCalendarDb.EventCalendarCategoryData.GetFromHaystack(categoryHaystack, c.CategoryId);
                backgroundColor = category.ColorHex;
                borderColor     = "black";
                textColor       = "white";
            }
            /// <summary>
            /// Create the jQuery FullCalendar event object for an event with a file attached.
            /// </summary>
            /// <param name="c"></param>
            /// <param name="f"></param>
            public FullCalendarEvent(EventCalendarDb.EventCalendarDetailsData c, FileLibraryDetailsData attachedFile, List <EventCalendarDb.EventCalendarCategoryData> categoryHaystack)
            {
                CmsPage page = CmsContext.getPageById(attachedFile.DetailsPageId);

                id     = "EventFile_" + attachedFile.DetailsPageId.ToString();
                title  = attachedFile.FileName;
                start  = c.StartDateTime.AddSeconds(1); // show below the event
                end    = c.EndDateTime.AddSeconds(1);   // show below the event
                allDay = true;
                url    = page.getUrl(attachedFile.Lang);

                EventCalendarDb.EventCalendarCategoryData category = EventCalendarDb.EventCalendarCategoryData.GetFromHaystack(categoryHaystack, c.CategoryId);
                backgroundColor = category.ColorHex;
                borderColor     = "black";
                textColor       = "white";
            }
        /// <summary>
        /// Create the entity object by reading the updated values from html form.
        /// </summary>
        /// <param name="langArray"></param>
        /// <param name="controlId"></param>
        /// <param name="id"></param>
        /// <returns></returns>
        protected EventCalendarDb.EventCalendarCategoryData[] createUpdateRecord(CmsLanguage[] langArray, string controlId, int id)
        {
            int step = langArray.Length;

            EventCalendarDb.EventCalendarCategoryData[] data = new EventCalendarDb.EventCalendarCategoryData[step];

            for (int x = 0; x < step; x++)
            {
                string l = langArray[x].shortCode;
                data[x]             = new EventCalendarDb.EventCalendarCategoryData();
                data[x].CategoryId  = id;
                data[x].ColorHex    = PageUtils.getFromForm(controlId + "colorHex", "");
                data[x].Lang        = langArray[x];
                data[x].Title       = PageUtils.getFromForm(controlId + "title_" + l, "");
                data[x].Description = PageUtils.getFromForm(controlId + "description_" + l, "");
            }

            return(data);
        }
        /// <summary>
        /// Create the entity object by reading the new values from html form.
        /// </summary>
        /// <param name="langArray"></param>
        /// <param name="controlId"></param>
        /// <returns></returns>
        protected EventCalendarDb.EventCalendarCategoryData[] createAddRecord(CmsLanguage[] langArray, string controlId)
        {
            int step = langArray.Length;

            EventCalendarDb.EventCalendarCategoryData[] data = new EventCalendarDb.EventCalendarCategoryData[step];
            EventCalendarDb db    = new EventCalendarDb();
            int             newId = db.fetchNextCategoryId();

            for (int x = 0; x < step; x++)
            {
                string l = langArray[x].shortCode;
                data[x]             = new EventCalendarDb.EventCalendarCategoryData();
                data[x].CategoryId  = newId;
                data[x].ColorHex    = PageUtils.getFromForm(controlId + "addColorHex", "");
                data[x].Lang        = langArray[x];
                data[x].Title       = PageUtils.getFromForm(controlId + "addTitle_" + l, "");
                data[x].Description = PageUtils.getFromForm(controlId + "addDescription_" + l, "");
            }

            return(data);
        }
        /// <summary>
        /// Create table body to show the Event Calendar Category records.
        /// </summary>
        /// <param name="langArray"></param>
        /// <param name="colorArray"></param>
        /// <param name="controlId"></param>
        /// <returns></returns>
        protected string generateContent(CmsLanguage[] langArray, string[] colorArray, string controlId)
        {
            EventCalendarDb db = new EventCalendarDb();
            List <EventCalendarDb.EventCalendarCategoryData> list = db.fetchCategoryList();

            int           step = langArray.Length;
            StringBuilder html = new StringBuilder();

            for (int x = 0; x < list.Count; x = x + step)
            {
                html.Append("<tr>" + EOL);
                EventCalendarDb.EventCalendarCategoryData data1 = list[x];
                html.Append("<td>" + EOL);
                html.Append("<input class=\"" + controlId + "chgButton\" type=\"button\" value=\"Edit\" title=\"" + data1.CategoryId + "\" />" + EOL);
                html.Append("<input class=\"" + controlId + "chgSaveButton\" type=\"button\" value=\"Save\" title=\"" + data1.CategoryId + "\" />" + EOL);
                html.Append("<input class=\"" + controlId + "chgCancelButton\" type=\"button\" value=\"Cancel\" title=\"" + data1.CategoryId + "\" />" + EOL);
                html.Append("</td>" + EOL);

                html.Append("<td>" + EOL);
                html.Append("<select title=\"" + data1.ColorHex + "\" class=\"" + controlId + "chg\" disabled=\"disabled\" id=\"" + controlId + "colorHex_" + data1.CategoryId + "\" name=\"" + controlId + "colorHex\" onchange=\"this.style.backgroundColor=this.value;\">" + EOL);
                html.Append(generateColorOption(colorArray, data1.ColorHex));
                html.Append("</select>" + EOL);
                html.Append("</td>" + EOL);

                for (int y = 0; y < step; y++)
                {
                    string l = langArray[y].shortCode;
                    EventCalendarDb.EventCalendarCategoryData data2 = list[y + x];

                    string title = data2.Title;
                    html.Append("<td><div id=\"" + controlId + "title_" + l + "_" + data1.CategoryId + "\">" + title + "</div></td>" + EOL);

                    string description = StringUtils.nl2br(data2.Description);
                    html.Append("<td><div id=\"" + controlId + "description_" + l + "_" + data1.CategoryId + "\">" + description + "</div></td>" + EOL);
                }

                html.Append("</tr>" + EOL);
            }
            return(html.ToString());
        }