    /*!
     * Ext JS Library 3.3.0
     * Copyright(c) 2006-2010 Ext JS, Inc.
     * licensing@extjs.com
     * http://www.extjs.com/license
     */
    /**
     * @class Ext.list.Column
     * This class encapsulates column configuration data to be used in the initialization of a
     * {@link Ext.list.ListView ListView}.
     * While subclasses are provided to render data in different ways, this class renders a passed
     * data field unchanged and is usually used for textual columns.
     */
    Ext.list.Column = Ext.extend(Object, {
        /**
         * @private
         * @cfg {Boolean} isColumn
         * Used by ListView constructor method to avoid reprocessing a Column
         * if isColumn is not set ListView will recreate a new Ext.list.Column
         * Defaults to true.
         */
        isColumn: true,

        /**
         * @cfg {String} align
         * Set the CSS text-align property of the column. Defaults to 'left'.
         */
        align: 'left',
        /**
         * @cfg {String} header Optional. The header text to be used as innerHTML
         * (html tags are accepted) to display in the ListView.  Note: to
         * have a clickable header with no text displayed use ' '.
         */
        header: '',

        /**
         * @cfg {Number} width Optional. Percentage of the container width
         * this column should be allocated.  Columns that have no width specified will be
         * allocated with an equal percentage to fill 100% of the container width.  To easily take
         * advantage of the full container width, leave the width of at least one column undefined.
         * Note that if you do not want to take up the full width of the container, the width of
         * every column needs to be explicitly defined.
         */
        width: null,

        /**
         * @cfg {String} cls Optional. This option can be used to add a CSS class to the cell of each
         * row for this column.
         */
        cls: '',

        /**
         * @cfg {String} tpl Optional. Specify a string to pass as the
         * configuration string for {@link Ext.XTemplate}.  By default an {@link Ext.XTemplate}
         * will be implicitly created using the dataIndex.
         */

        /**
         * @cfg {String} dataIndex Required. The name of the field in the
         * ListViews's {@link Ext.data.Store}'s {@link Ext.data.Record} definition from
         * which to draw the column's value.
         */

        constructor : function(c){
            if(!c.tpl){
                c.tpl = new Ext.XTemplate('{' + c.dataIndex + '}');
            }
            else if(Ext.isString(c.tpl)){
                c.tpl = new Ext.XTemplate(c.tpl);
            }

            Ext.apply(this, c);
        }
    });

    Ext.reg('lvcolumn', Ext.list.Column);

    /**
     * @class Ext.list.NumberColumn
     * @extends Ext.list.Column
     * A Column definition class which renders a numeric data field according to a {@link #format} string.  See the
     * {@link Ext.list.Column#xtype xtype} config option of {@link Ext.list.Column} for more details.
     */
    Ext.list.NumberColumn = Ext.extend(Ext.list.Column, {
        /**
         * @cfg {String} format
         * A formatting string as used by {@link Ext.util.Format#number} to format a numeric value for this Column
         * (defaults to '0,000.00').
         */
        format: '0,000.00',

        constructor : function(c) {
            c.tpl = c.tpl || new Ext.XTemplate('{' + c.dataIndex + ':number("' + (c.format || this.format) + '")}');
            Ext.list.NumberColumn.superclass.constructor.call(this, c);
        }
    });

    Ext.reg('lvnumbercolumn', Ext.list.NumberColumn);

    /**
     * @class Ext.list.DateColumn
     * @extends Ext.list.Column
     * A Column definition class which renders a passed date according to the default locale, or a configured
     * {@link #format}. See the {@link Ext.list.Column#xtype xtype} config option of {@link Ext.list.Column}
     * for more details.
     */
    Ext.list.DateColumn = Ext.extend(Ext.list.Column, {
        format: 'm/d/Y',
        constructor : function(c) {
            c.tpl = c.tpl || new Ext.XTemplate('{' + c.dataIndex + ':date("' + (c.format || this.format) + '")}');
            Ext.list.DateColumn.superclass.constructor.call(this, c);
        }
    });
    Ext.reg('lvdatecolumn', Ext.list.DateColumn);

    /**
     * @class Ext.list.BooleanColumn
     * @extends Ext.list.Column
     * A Column definition class which renders boolean data fields.  See the {@link Ext.list.Column#xtype xtype}
     * config option of {@link Ext.list.Column} for more details.
     */
    Ext.list.BooleanColumn = Ext.extend(Ext.list.Column, {
        /**
         * @cfg {String} trueText
         * The string returned by the renderer when the column value is not falsey (defaults to 'true').
         */
        trueText: 'true',
        /**
         * @cfg {String} falseText
         * The string returned by the renderer when the column value is falsey (but not undefined) (defaults to
         * 'false').
         */
        falseText: 'false',
        /**
         * @cfg {String} undefinedText
         * The string returned by the renderer when the column value is undefined (defaults to ' ').
         */
        undefinedText: ' ',

        constructor : function(c) {
            c.tpl = c.tpl || new Ext.XTemplate('{' + c.dataIndex + ':this.format}');

            var t = this.trueText, f = this.falseText, u = this.undefinedText;
            c.tpl.format = function(v){
                if(v === undefined){
                    return u;
                }
                if(!v || v === 'false'){
                    return f;
                }
                return t;
            };

            Ext.list.DateColumn.superclass.constructor.call(this, c);
        }
    });

    Ext.reg('lvbooleancolumn', Ext.list.BooleanColumn);