    /**
     * @class Ext.ensible.cal.CalendarListMenu
     * @extends Ext.menu.Menu
     * A menu containing a {@link Ext.ensible.cal.ColorPalette palette} for choosing calendar colors,
     * as well as other calendar-specific options.
     * @xtype extensible.calendarlistmenu
     */
    Ext.ensible.cal.CalendarListMenu = Ext.extend(Ext.menu.Menu, {
        /**
         * @cfg {Boolean} hideOnClick
         * False to continue showing the menu after a color is selected, defaults to true.
         */
        hideOnClick : true,
        /**
         * @cfg {Boolean} ignoreParentClicks
         * True to ignore clicks on any item in this menu that is a parent item (displays a submenu)
         * so that the submenu is not dismissed when clicking the parent item (defaults to true).
         */
        ignoreParentClicks: true,
        /**
         * @cfg {String} cls
         * An optional extra CSS class that will be added to this component's Element (defaults to 'x-calendar-list-menu').
         * This can be useful for adding customized styles to the component or any of its children using standard CSS rules.
         */
        cls : 'x-calendar-list-menu',
        /**
         * @cfg {String} displayOnlyThisCalendarText
         * The text to display for the 'Display only this calendar' option in the menu.
         */
        displayOnlyThisCalendarText: 'Display only this calendar',
        /**
         * @cfg {Number} calendarId
         * The id of the calendar to be associated with this menu. This calendarId will be passed
         * back with any events from this menu to identify the calendar to be acted upon. The calendar
         * id can also be changed at any time after creation by calling {@link setCalendar}.
         */

        /**
         * @cfg {Boolean} enableScrolling
         * @hide
         */
        enableScrolling : false,
        /**
         * @cfg {Number} maxHeight
         * @hide
         */
        /**
         * @cfg {Number} scrollIncrement
         * @hide
         */
        /**
         * @event click
         * @hide
         */
        /**
         * @event itemclick
         * @hide
         */

        /**
         * @property palette
         * @type ColorPalette
         * The {@link Ext.ensible.cal.ColorPalette ColorPalette} instance for this CalendarListMenu
         */

        // private
        initComponent : function(){
            this.addEvents(
                'showcalendar',
                'hidecalendar',
                'radiocalendar',
                'colorchange'
            );

            Ext.apply(this, {
                items: [{
                    text: this.displayOnlyThisCalendarText,
                    iconCls: 'extensible-cal-icon-cal-show',
                    handler: this.handleRadioCalendarClick.createDelegate(this)
                }, '-', {
                    xtype: 'extensible.calendarcolorpalette',
                    handler: this.handleColorSelect.createDelegate(this)
                }]
            });
            Ext.ensible.cal.CalendarListMenu.superclass.initComponent.call(this);
        },

        // private
        afterRender: function(){
            Ext.ensible.cal.CalendarListMenu.superclass.afterRender.call(this);
            this.palette = this.findByType('extensible.calendarcolorpalette')[0];

            if(this.colorId){
                this.palette.select(this.colorId, true);
            }
        },

        // private
        handleRadioCalendarClick: function(e, t){
            this.fireEvent('radiocalendar', this, this.calendarId);
        },

        // private
        handleColorSelect: function(cp, selColorId){
            this.fireEvent('colorchange', this, this.calendarId, selColorId, this.colorId);
            this.colorId = selColorId;
            this.menuHide();
        },

        /**
         * Sets the calendar id and color id to be associated with this menu. This should be called each time the
         * menu is shown relative to a new calendar.
         * @param {Number} calendarId The id of the calendar to be associated
         * @param {Number} colorId The id of the color to be pre-selected in the color palette
         * @return {Ext.ensible.cal.CalendarListMenu} this
         */
        setCalendar: function(id, cid){
            this.calendarId = id;
            this.colorId = cid;

            if(this.rendered){
                this.palette.select(cid, true);
            }
            return this;
        },

        // private
        menuHide : function(){
            if(this.hideOnClick){
                this.hide(true);
            }
        }
    });

    Ext.reg('extensible.calendarlistmenu', Ext.ensible.cal.CalendarListMenu);