    /*!
     * Ext JS Library 3.3.0
     * Copyright(c) 2006-2010 Ext JS, Inc.
     * licensing@extjs.com
     * http://www.extjs.com/license
     */
    /**
     * @class Ext.calendar.DayHeaderView
     * @extends Ext.calendar.MonthView
     * This is the header area container within the day and week views where all-day events are displayed.
     * Normally you should not need to use this class directly -- instead you should use {@link Ext.calendar.DayView DayView}
     * which aggregates this class and the {@link Ext.calendar.DayBodyView DayBodyView} into the single unified view
     * presented by {@link Ext.calendar.CalendarPanel CalendarPanel}.
     * @constructor
     * @param {Object} config The config object
     */
    Ext.calendar.DayHeaderView = Ext.extend(Ext.calendar.MonthView, {
        // private configs
        weekCount: 1,
        dayCount: 1,
        allDayOnly: true,
        monitorResize: false,

        /**
         * @event dayclick
         * Fires after the user clicks within the day view container and not on an event element
         * @param {Ext.calendar.DayBodyView} this
         * @param {Date} dt The date/time that was clicked on
         * @param {Boolean} allday True if the day clicked on represents an all-day box, else false. Clicks within the
         * DayHeaderView always return true for this param.
         * @param {Ext.Element} el The Element that was clicked on
         */

        // private
        afterRender: function() {
            if (!this.tpl) {
                this.tpl = new Ext.calendar.DayHeaderTemplate({
                    id: this.id,
                    showTodayText: this.showTodayText,
                    todayText: this.todayText,
                    showTime: this.showTime
                });
            }
            this.tpl.compile();
            this.addClass('ext-cal-day-header');

            Ext.calendar.DayHeaderView.superclass.afterRender.call(this);
        },

        // private
        forceSize: Ext.emptyFn,

        // private
        refresh: function() {
            Ext.calendar.DayHeaderView.superclass.refresh.call(this);
            this.recalcHeaderBox();
        },

        // private
        recalcHeaderBox: function() {
            var tbl = this.el.child('.ext-cal-evt-tbl'),
            h = tbl.getHeight();

            this.el.setHeight(h + 7);

            if (Ext.isIE && Ext.isStrict) {
                this.el.child('.ext-cal-hd-ad-inner').setHeight(h + 4);
            }
            if (Ext.isOpera) {
                //TODO: figure out why Opera refuses to refresh height when
                //the new height is lower than the previous one
                //            var ct = this.el.child('.ext-cal-hd-ct');
                //            ct.repaint();
                }
        },

        // private
        moveNext: function(noRefresh) {
            this.moveDays(this.dayCount, noRefresh);
        },

        // private
        movePrev: function(noRefresh) {
            this.moveDays( - this.dayCount, noRefresh);
        },

        // private
        onClick: function(e, t) {
            var el = e.getTarget('td', 3),
                parts,
                dt;
            if (el) {
                if (el.id && el.id.indexOf(this.dayElIdDelimiter) > -1) {
                    parts = el.id.split(this.dayElIdDelimiter);
                    dt = parts[parts.length - 1];

                    this.fireEvent('dayclick', this, Date.parseDate(dt, 'Ymd'), true, Ext.get(this.getDayId(dt)));
                    return;
                }
            }
            Ext.calendar.DayHeaderView.superclass.onClick.apply(this, arguments);
        }
    });

    Ext.reg('dayheaderview', Ext.calendar.DayHeaderView);