Ext.form.TextField.prototype.size = 0;
Ext.form.TextField.prototype.initValue = function()
{
    if(this.value !== undefined){
        this.setValue(this.value);
    }else if(this.el.dom.value.length > 0){
        this.setValue(this.el.dom.value);
    }
    if (this.size>0)
      this.el.dom.size = this.size;
    if (!isNaN(this.maxLength) && (this.maxLength *1) > 0 && (this.maxLength != Number.MAX_VALUE)) {
        this.el.dom.maxLength = this.maxLength *1;
    }
    
        
};

Ext.override(Ext.form.Radio,
  { onClick : function(){
    if(this.el.dom.checked != this.checked){
      var p=this.el.up('form'); 
      if(!p)p=Ext.fly(document.body); //if this radio doesn't belong to a form then search the body 
      var els = p.select('input[name='+this.el.dom.name+']'); 
      els.each(function(el){ 
        if(el.dom.id == this.id){
          this.setValue(true);
        }else{ 
          Ext.getCmp(el.dom.id).setValue(false); 
        } 
      }, this); 
    } 
  } 
});
Ext.form.CheckboxGroup.prototype.initComponent = function(){
    Ext.form.CheckboxGroup.superclass.initComponent.call(this);
    var panelCfg = {
        cls: this.groupCls,
        layout: 'column',
        border: false
    };
    var colCfg = {
        defaultType: this.defaultType,
        layout: 'form',
        border: false,
        defaults: {
            hideLabel: true,
            anchor: '100%'
        }
    }
    if(this.items[0].items){
        Ext.apply(panelCfg, {
            layoutConfig: {columns: this.items.length},
            defaults: this.defaults,
            items: this.items
        })
        for(var i=0, len=this.items.length; i<len; i++){
            Ext.applyIf(this.items[i], colCfg);
        };
    }else{
        var numCols, cols = [];
        if(typeof this.columns == 'string'){
            this.columns = this.items.length;
        }
        if(!Ext.isArray(this.columns)){
            var cs = [];
            for(var i=0; i<this.columns; i++){
                cs.push((100/this.columns)*.01);
            };
            this.columns = cs;
        }
        numCols = this.columns.length;
        for(var i=0; i<numCols; i++){
            var cc = Ext.apply({items:[]}, colCfg);
            cc[this.columns[i] <= 1 ? 'columnWidth' : 'width'] = this.columns[i];
            if(this.defaults){
                cc.defaults = Ext.apply(cc.defaults || {}, this.defaults)
            }
            cols.push(cc);
        };
        if(this.vertical){
        var rows = Math.ceil(this.items.length / numCols), ri = 0;
            for(var i=0, len=this.items.length; i<len; i++){
                if(i>0 && i%rows==0){
                    ri++;
                }
                if(this.items[i].fieldLabel){
                    this.items[i].hideLabel = false;
                }
                cols[ri].items.push(this.items[i]);
            };
        }else{
            for(var i=0, len=this.items.length; i<len; i++){
                var ci = i % numCols;
                if(this.items[i].fieldLabel){
                    this.items[i].hideLabel = false;
                }
                cols[ci].items.push(this.items[i]);
            };
        }
        Ext.apply(panelCfg, {
            layoutConfig: {columns: numCols},
            items: cols
        });
    }
    this.panel = new Ext.Panel(panelCfg);
    if(this.forId && this.itemCls){
        var l = this.el.up(this.itemCls).child('label', true);
        if(l){
            l.setAttribute('htmlFor', this.forId);
        }
    }
    var fields = this.panel.findBy(function(c){
        return c.isFormField;
    }, this);
    this.items = new Ext.util.MixedCollection();
    this.items.addAll(fields);
};
Ext.form.CheckboxGroup.prototype.onRender = function(ct, position){
    if(!this.el){
        this.panel.render(ct, position);
        this.el = this.panel.getEl();
    }
    Ext.form.CheckboxGroup.superclass.onRender.call(this, ct, position);
};
Ext.FormPanel.prototype.initFields = function(){
    var f = this.form;
    var formPanel = this;
    var fn = function(c){
        if(c.isFormField){
            if (!c.items){
                f.add(c);
            }else{
                c.items.each(fn);
            }
        }else if(c.doLayout && c != formPanel){
            Ext.applyIf(c, {
                labelAlign: c.ownerCt.labelAlign,
                labelWidth: c.ownerCt.labelWidth,
                itemCls: c.ownerCt.itemCls
            });
            if(c.items){
                c.items.each(fn);
            }
        }
    }
    this.items.each(fn);
};

/*!
 * Ext JS Library 3.1.1
 * Copyright(c) 2006-2010 Ext JS, LLC
 * licensing@extjs.com
 * http://www.extjs.com/license
 */
Ext.ns('Ext.ux.form');

/**
 * @class Ext.ux.form.FileUploadField
 * @extends Ext.form.TextField
 * Creates a file upload field.
 * @xtype fileuploadfield
 */
Ext.ux.form.FileUploadField = Ext.extend(Ext.form.TextField,  {
    /**
     * @cfg {String} buttonText The button text to display on the upload button (defaults to
     * 'Browse...').  Note that if you supply a value for {@link #buttonCfg}, the buttonCfg.text
     * value will be used instead if available.
     */
    buttonText: 'Browse...',
    /**
     * @cfg {Boolean} buttonOnly True to display the file upload field as a button with no visible
     * text field (defaults to false).  If true, all inherited TextField members will still be available.
     */
    buttonOnly: false,
    /**
     * @cfg {Number} buttonOffset The number of pixels of space reserved between the button and the text field
     * (defaults to 3).  Note that this only applies if {@link #buttonOnly} = false.
     */
    buttonOffset: 3,
    /**
     * @cfg {Object} buttonCfg A standard {@link Ext.Button} config object.
     */

    // private
    readOnly: true,

    /**
     * @hide
     * @method autoSize
     */
    autoSize: Ext.emptyFn,

    // private
    initComponent: function(){
        Ext.ux.form.FileUploadField.superclass.initComponent.call(this);

        this.addEvents(
            /**
             * @event fileselected
             * Fires when the underlying file input field's value has changed from the user
             * selecting a new file from the system file selection dialog.
             * @param {Ext.ux.form.FileUploadField} this
             * @param {String} value The file value returned by the underlying file input field
             */
            'fileselected'
        );
    },

    // private
    onRender : function(ct, position){
        Ext.ux.form.FileUploadField.superclass.onRender.call(this, ct, position);

        this.wrap = this.el.wrap({cls:'x-form-field-wrap x-form-file-wrap'});
        this.el.addClass('x-form-file-text');
        this.el.dom.removeAttribute('name');
        this.createFileInput();

        var btnCfg = Ext.applyIf(this.buttonCfg || {}, {
            text: this.buttonText
        });
        this.button = new Ext.Button(Ext.apply(btnCfg, {
            renderTo: this.wrap,
            cls: 'x-form-file-btn' + (btnCfg.iconCls ? ' x-btn-icon' : '')
        }));

        if(this.buttonOnly){
            this.el.hide();
            this.wrap.setWidth(this.button.getEl().getWidth());
        }

        this.bindListeners();
        this.resizeEl = this.positionEl = this.wrap;
    },
    
    bindListeners: function(){
        this.fileInput.on({
            scope: this,
            mouseenter: function() {
                this.button.addClass(['x-btn-over','x-btn-focus'])
            },
            mouseleave: function(){
                this.button.removeClass(['x-btn-over','x-btn-focus','x-btn-click'])
            },
            mousedown: function(){
                this.button.addClass('x-btn-click')
            },
            mouseup: function(){
                this.button.removeClass(['x-btn-over','x-btn-focus','x-btn-click'])
            },
            change: function(){
                var v = this.fileInput.dom.value;
                this.setValue(v);
                this.fireEvent('fileselected', this, v);    
            }
        }); 
    },
    
    createFileInput : function() {
        this.fileInput = this.wrap.createChild({
            id: this.getFileInputId(),
            name: this.name||this.getId(),
            cls: 'x-form-file',
            tag: 'input',
            type: 'file',
            size: 1
        });
    },
    
    reset : function(){
        this.fileInput.remove();
        this.createFileInput();
        this.bindListeners();
        Ext.ux.form.FileUploadField.superclass.reset.call(this);
    },

    // private
    getFileInputId: function(){
        return this.id + '-file';
    },

    // private
    onResize : function(w, h){
        Ext.ux.form.FileUploadField.superclass.onResize.call(this, w, h);

        this.wrap.setWidth(w);

        if(!this.buttonOnly){
            var w = this.wrap.getWidth() - this.button.getEl().getWidth() - this.buttonOffset;
            this.el.setWidth(w);
        }
    },

    // private
    onDestroy: function(){
        Ext.ux.form.FileUploadField.superclass.onDestroy.call(this);
        Ext.destroy(this.fileInput, this.button, this.wrap);
    },
    
    onDisable: function(){
        Ext.ux.form.FileUploadField.superclass.onDisable.call(this);
        this.doDisable(true);
    },
    
    onEnable: function(){
        Ext.ux.form.FileUploadField.superclass.onEnable.call(this);
        this.doDisable(false);

    },
    
    // private
    doDisable: function(disabled){
        this.fileInput.dom.disabled = disabled;
        this.button.setDisabled(disabled);
    },


    // private
    preFocus : Ext.emptyFn,

    // private
    alignErrorIcon : function(){
        this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]);
    }

});

Ext.reg('fileuploadfield', Ext.ux.form.FileUploadField);

// backwards compat
Ext.form.FileUploadField = Ext.ux.form.FileUploadField;


/**
 * @class Ext.ux.form.FileUploadField
 * @extends Ext.form.TextField
 * Creates a file upload field.
 * @xtype fileuploadfield
 */
Ext.ux.form.PasswordChangeField = Ext.extend(Ext.form.TextField,  {
    /**
     * @cfg {String} buttonText The button text to display on the upload button (defaults to
     * 'Browse...').  Note that if you supply a value for {@link #buttonCfg}, the buttonCfg.text
     * value will be used instead if available.
     */
    buttonText: 'Browse...',
    /**
     * @cfg {Boolean} buttonOnly True to display the file upload field as a button with no visible
     * text field (defaults to false).  If true, all inherited TextField members will still be available.
     */
    buttonOnly: false,
    /**
     * @cfg {Number} buttonOffset The number of pixels of space reserved between the button and the text field
     * (defaults to 3).  Note that this only applies if {@link #buttonOnly} = false.
     */
    buttonOffset: 3,
    /**
     * @cfg {Object} buttonCfg A standard {@link Ext.Button} config object.
     */

    // private
    readOnly: true,

    /**
     * @hide
     * @method autoSize
     */
    autoSize: Ext.emptyFn,

    // private
    initComponent: function(){
        Ext.ux.form.PasswordChangeField.superclass.initComponent.call(this);

        this.addEvents(
            /**
             * @event fileselected
             * Fires when the underlying file input field's value has changed from the user
             * selecting a new file from the system file selection dialog.
             * @param {Ext.ux.form.FileUploadField} this
             * @param {String} value The file value returned by the underlying file input field
             */
            'fileselected'
        );
    },

    // private
    onRender : function(ct, position){
        Ext.ux.form.PasswordChangeField.superclass.onRender.call(this, ct, position);

        this.wrap = this.el.wrap({cls:'x-form-field-wrap x-form-file-wrap'});
        this.el.addClass('x-form-file-text');
        this.el.dom.removeAttribute('name');
        this.createPassInput();

        var btnCfg = Ext.applyIf(this.buttonCfg || {}, {
            text: this.buttonText
        });
        this.button = new Ext.Button(Ext.apply(btnCfg, {
            renderTo: this.wrap,
            cls: 'x-form-file-btn' + (btnCfg.iconCls ? ' x-btn-icon' : '')
        }));

        if(this.buttonOnly){
            this.el.hide();
            this.wrap.setWidth(this.button.getEl().getWidth());
        }

        this.bindListeners();
        this.resizeEl = this.positionEl = this.wrap;
    },
    
    bindListeners: function(){
        this.passInput.on({
            scope: this,
            mouseenter: function() {
                this.button.addClass(['x-btn-over','x-btn-focus'])
            },
            mouseleave: function(){
                this.button.removeClass(['x-btn-over','x-btn-focus','x-btn-click'])
            },
            mousedown: function(){
                this.button.addClass('x-btn-click')
            },
            mouseup: function(){
                this.button.removeClass(['x-btn-over','x-btn-focus','x-btn-click'])
            },
            change: function(){
                var v = this.passInput.dom.value;
                this.setValue(v);
                this.fireEvent('passwordselected', this, v);    
            }
        }); 
    },
    
    createPassInput : function() {
        this.passInput = this.wrap.createChild({
            id: this.getPasswordInputId(),
            name: this.name||this.getId(),
            cls: 'x-form-file',
            tag: 'input',
            type: 'password',
            size: 1
        });
    },
    
    reset : function(){
        this.passInput.remove();
        this.createPassInput();
        this.bindListeners();
        Ext.ux.form.PasswordField.superclass.reset.call(this);
    },

    // private
    getPasswordInputId: function(){
        return this.id + '-password';
    },

    // private
    onResize : function(w, h){
        Ext.ux.form.FileUploadField.superclass.onResize.call(this, w, h);

        this.wrap.setWidth(w);

        if(!this.buttonOnly){
            var w = this.wrap.getWidth() - this.button.getEl().getWidth() - this.buttonOffset;
            this.el.setWidth(w);
        }
    },

    // private
    onDestroy: function(){
        Ext.ux.form.FileUploadField.superclass.onDestroy.call(this);
        Ext.destroy(this.fileInput, this.button, this.wrap);
    },
    
    onDisable: function(){
        Ext.ux.form.FileUploadField.superclass.onDisable.call(this);
        this.doDisable(true);
    },
    
    onEnable: function(){
        Ext.ux.form.FileUploadField.superclass.onEnable.call(this);
        this.doDisable(false);

    },
    
    // private
    doDisable: function(disabled){
        this.fileInput.dom.disabled = disabled;
        this.button.setDisabled(disabled);
    },


    // private
    preFocus : Ext.emptyFn,

    // private
    alignErrorIcon : function(){
        this.errorIcon.alignTo(this.wrap, 'tl-tr', [2, 0]);
    }

});

Ext.reg('passwordchangefield', Ext.ux.form.PasswordChangeField);

// backwards compat
Ext.form.PasswordChangeField = Ext.ux.form.PasswordChangeField;
