Ext.ns('Ext.ecpack');



/**
 * Ext ECPack
 *
 * @author NOMURA Akiyuki <aki-nomura@sus4.co.jp
 */

Ext.ecpack.Base = Ext.extend(Ext.form.FormPanel, {

    autoScroll: true,
    bodyStyle: 'padding: 10px',
    defaultType: 'textfield',
    labelAlign: 'top',
    border: false,



    initEvents: function()
    {
        this.addEvents('onCancel', 'onSubmit');


        Ext.ecpack.Base.superclass.initEvents.call(this); 
    },



    initComponent: function()
    {

        Ext.applyIf(this, {
            buttons: [
            {
                id: 'cancelbutton',
                text: 'キャンセル',
                handler: this.onCancel.createDelegate(this)
            },
            {
                id: 'submitbutton',
                text: '送信',
                handler: this.onSend.createDelegate(this)
            }
            ]
        });

        this.on('render', function(){
            var r = this.findByType('textfield');
            if(!Ext.isArray(r)) return;
            
            (function(){
                r[0].focus();
            }).defer(1000);
        }, this);

        if(Ext.isObject(this.items)){
            this.items.unshift(this.items);
        }
        if(Ext.isArray(this.defaultItems)){
            this.defaultItems.reverse();
            Ext.each(this.defaultItems, function(r)
            {
                this.items.unshift(r);
            }, this);
        }
        if(Ext.isArray(this.defaultItemsAfter)){
            Ext.each(this.defaultItemsAfter, function(r)
            {
                this.items.push(r);
            }, this);
        }

        if(!this.headerCfg.style)
        {
            this.headerCfg.style = 'padding: 10px';
        }

        Ext.ecpack.Base.superclass.initComponent.call(this); 
    },




    /**
     * showByWindow
     *
     * ウィンドウの中に表示
     */
    showByWindow: function(config){

        var ww = window.innerWidth || document.documentElement.clientWidth;
        var wh = window.innerHeight || document.documentElement.clientHeight;

        var win = new Ext.Window(Ext.apply({ 
            width: ww * .7,
            height: wh * .7,
            layout: 'fit',
            modal: true,
            animCollapse: true,
            maximizable: true,
            items: [
                this
            ]
        }, config)).show();

        this.on('onCancel', function()
        {
            win.close();
        });
        
        this.on('onSuccess', function()
        {
            win.close();
        });

        return win;
    },



    onCancel: function()
    {
        this.fireEvent('onCancel');
    },



    onSend: function()
    {
        var f = this.getForm();

        if(!f.isValid()) return;

        Ext.each(this.buttons, function(b)
        {
            b.disable();
        });

        this.fireEvent('onSubmit');

        f.submit({
            method: 'post',
            url: this.url,
            success: function(form, action)
            {
                this.fireEvent('onSuccess');
            },
            failure: function(form, action)
            {
                Ext.each(this.buttons, function(b)
                {
                    b.enable();
                });

                if(action.result.msg){
                    Ext.Msg.alert(
                        'エラーが発生しました',
                        action.result.msg
                    );
                
                }
            },
            scope: this
        });
    }



});

