    /*!
     * Ext JS Library 3.3.0
     * Copyright(c) 2006-2010 Ext JS, Inc.
     * licensing@extjs.com
     * http://www.extjs.com/license
     */
    /**
     * @class Ext.menu.DateMenu
     * @extends Ext.menu.Menu
     * A menu containing an {@link Ext.DatePicker} Component.
     * Notes:
     * Although not listed here, the constructor for this class
     * accepts all of the configuration options of {@link Ext.DatePicker}.
     * If subclassing DateMenu, any configuration options for the DatePicker must be
     * applied to the initialConfig property of the DateMenu.
     * Applying {@link Ext.DatePicker DatePicker} configuration settings to
     * this will not affect the DatePicker's configuration.
     *
     * @xtype datemenu
     */
     Ext.menu.DateMenu = Ext.extend(Ext.menu.Menu, {
        /**
         * @cfg {Boolean} enableScrolling
         * @hide
         */
        enableScrolling : false,
        /**
         * @cfg {Function} handler
         * Optional. A function that will handle the select event of this menu.
         * The handler is passed the following parameters:
         * picker : DatePickerThe Ext.DatePicker.
         * date : DateThe selected date.
         *
         */
        /**
         * @cfg {Object} scope
         * The scope (this reference) in which the {@link #handler}
         * function will be called.  Defaults to this DateMenu instance.
         */
        /**
         * @cfg {Boolean} hideOnClick
         * False to continue showing the menu after a date is selected, defaults to true.
         */
        hideOnClick : true,

        /**
         * @cfg {String} pickerId
         * An id to assign to the underlying date picker. Defaults to null.
         */
        pickerId : null,

        /**
         * @cfg {Number} maxHeight
         * @hide
         */
        /**
         * @cfg {Number} scrollIncrement
         * @hide
         */
        /**
         * The {@link Ext.DatePicker} instance for this DateMenu
         * @property picker
         * @type DatePicker
         */
        cls : 'x-date-menu',

        /**
         * @event click
         * @hide
         */

        /**
         * @event itemclick
         * @hide
         */

        initComponent : function(){
            this.on('beforeshow', this.onBeforeShow, this);
            if(this.strict = (Ext.isIE7 && Ext.isStrict)){
                this.on('show', this.onShow, this, {single: true, delay: 20});
            }
            Ext.apply(this, {
                plain: true,
                showSeparator: false,
                items: this.picker = new Ext.DatePicker(Ext.applyIf({
                    internalRender: this.strict || !Ext.isIE,
                    ctCls: 'x-menu-date-item',
                    id: this.pickerId
                }, this.initialConfig))
            });
            this.picker.purgeListeners();
            Ext.menu.DateMenu.superclass.initComponent.call(this);
            /**
             * @event select
             * Fires when a date is selected from the {@link #picker Ext.DatePicker}
             * @param {DatePicker} picker The {@link #picker Ext.DatePicker}
             * @param {Date} date The selected date
             */
            this.relayEvents(this.picker, ['select']);
            this.on('show', this.picker.focus, this.picker);
            this.on('select', this.menuHide, this);
            if(this.handler){
                this.on('select', this.handler, this.scope || this);
            }
        },

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

        onBeforeShow : function(){
            if(this.picker){
                this.picker.hideMonthPicker(true);
            }
        },

        onShow : function(){
            var el = this.picker.getEl();
            el.setWidth(el.getWidth()); //nasty hack for IE7 strict mode
        }
     });
     Ext.reg('datemenu', Ext.menu.DateMenu);