private DynamicTable buildTree( string name, IEnumerable<MergeRow> emptyRowTree )
        {
            var singleRow = emptyRowTree.Single();

            var table = new DynamicTable( new EwfTableColumn( "Field name" ), new EwfTableColumn( "Description" ) ) { Caption = name };
            foreach( var field in singleRow.Values )
                table.AddTextRow( getFieldNameCellText( field ), field.GetDescription() );

            foreach( var child in singleRow.Children ) {
                var panel = new Panel();
                panel.Style.Add( HtmlTextWriterStyle.MarginLeft, "2em" );
                panel.Controls.Add( buildTree( child.NodeName, child.Rows ) );

                table.AddRow( panel.ToCell( new TableCellSetup( fieldSpan: 2 ) ) );
            }

            return table;
        }
        private void buildNavigationBox()
        {
            var jumpList =
                SelectList.CreateDropDown(
                    from i in Enumerable.Range( -3, 7 ) select SelectListItem.Create( i, formatDateTimeForJumpList( adjustDateByNumberOfIntervals( date, i ) ) ),
                    0,
                    autoPostBack: true );
            jumpList.Width = JumpListWidth;
            var numIntervals = 0;
            EwfPage.Instance.DataUpdate.AddTopValidationMethod( ( pbv, validator ) => numIntervals = jumpList.ValidateAndGetSelectedItemIdInPostBack( pbv, validator ) );
            EwfPage.Instance.DataUpdate.AddModificationMethod( () => dateModificationMethod( adjustDateByNumberOfIntervals( date, numIntervals ) ) );

            var previousLink =
                new PostBackButton(
                    PostBack.CreateFull( id: "prev", firstModificationMethod: () => dateModificationMethod( adjustDateByNumberOfIntervals( date, -1 ) ) ),
                    PreviousButton,
                    usesSubmitBehavior: false );
            var todayLink = new PostBackButton(
                PostBack.CreateFull( id: "today", firstModificationMethod: () => dateModificationMethod( DateTime.Today ) ),
                CurrentDateButton,
                usesSubmitBehavior: false );
            var nextLink =
                new PostBackButton(
                    PostBack.CreateFull( id: "next", firstModificationMethod: () => dateModificationMethod( adjustDateByNumberOfIntervals( date, 1 ) ) ),
                    NextButton,
                    usesSubmitBehavior: false );

            var table = new DynamicTable { CssClass = "calendarViewHeader ewfNavigationBoxHeader", IsStandard = false };
            var navControls = new Panel();
            foreach( var postBackButton in new List<PostBackButton> { previousLink, todayLink, nextLink } )
                navControls.Controls.Add( postBackButton );

            table.AddRow( jumpList, navControls.ToCell( new TableCellSetup( classes: "calendarViewNavButtons".ToSingleElementArray() ) ) );
            Controls.Add( table );
        }