// This example illustrates how to load a FormPanel or BasicForm through Ext.Direct.

Ext.onReady(function(){
   
// Notice that Direct requests will batch together if they occur
   
// within the enableBuffer delay period (in milliseconds).
   
// Slow the buffering down from the default of 10ms to 100ms
   
Ext.app.REMOTING_API.enableBuffer = 100;
   
Ext.Direct.addProvider(Ext.app.REMOTING_API);
   
   
// provide feedback for any errors
   
Ext.QuickTips.init();
   
   
var basicInfo = new Ext.form.FormPanel({
       
// configs for FormPanel
        title
: 'Basic Information',
        border
: false,
        padding
: 10,
        buttons
:[{
            text
: 'Submit',
            handler
: function(){
                basicInfo
.getForm().submit({
                    params
: {
                        foo
: 'bar',
                        uid
: 34
                   
}
               
});
           
}
       
}],

       
// configs apply to child items
        defaults
: {anchor: '-20'}, // provide some room on right for validation errors
        defaultType
: 'textfield',
        items
: [{
            fieldLabel
: 'Name',
            name
: 'name'
       
},{
            fieldLabel
: 'Email',
            msgTarget
: 'side',
            name
: 'email'        
       
},{
            fieldLabel
: 'Company',
            name
: 'company'
       
}],
       
       
// configs for BasicForm
        api
: {
           
// The server-side method to call for load() requests
            load
: Profile.getBasicInfo,
           
// The server-side must mark the submit handler as a 'formHandler'
            submit
: Profile.updateBasicInfo
       
},
       
// specify the order for the passed params    
        paramOrder
: ['uid', 'foo']
   
});
   
   
var phoneInfo = new Ext.form.FormPanel({
        title
: 'Phone Numbers',
        border
: false,
        api
: {
            load
: Profile.getPhoneInfo
       
},    
        padding
: 10,
        paramOrder
: ['uid'],
        defaultType
: 'textfield',
        defaults
: {anchor: '100%'},
        items
: [{
            fieldLabel
: 'Office',
            name
: 'office'
       
},{
            fieldLabel
: 'Cell',
            name
: 'cell'        
       
},{
            fieldLabel
: 'Home',
            name
: 'home'
       
}]
   
});
   
     
var locationInfo = new Ext.form.FormPanel({
        title
: 'Location Information',
        border
: false,
        padding
: 10,
        api
: {
            load
: Profile.getLocationInfo
       
},    
        paramOrder
: ['uid'],
        defaultType
: 'textfield',
        defaults
: {anchor: '100%'},
        items
: [{
            fieldLabel
: 'Street',
            name
: 'street'
       
},{
            fieldLabel
: 'City',
            name
: 'city'            
       
},{
            fieldLabel
: 'State',
            name
: 'state'
       
},{
            fieldLabel
: 'Zip',
            name
: 'zip'
       
}]
   
});    

     
var accordion = new Ext.Panel({
        layout
: 'accordion',
        renderTo
: Ext.getBody(),
        title
: 'My Profile',
        width
: 300,
        height
: 240,    
        items
: [basicInfo, phoneInfo, locationInfo]
   
});
       
   
// load the forms (notice the load requests will get batched together)
    basicInfo
.getForm().load({
       
// pass 2 arguments to server side getBasicInfo method (len=2)
        params
: {
            foo
: 'bar',
            uid
: 34
       
}
   
});

    phoneInfo
.getForm().load({
        params
: {
            uid
: 5
       
}
   
});    

   
// defer this request just to simulate the request not getting batched
   
// since it exceeds to configured buffer
   
(function(){
        locationInfo
.getForm().load({
            params
: {
                uid
: 5
           
}
       
});
   
}).defer(200);    
   
   
// rpc call
   
TestAction.doEcho('sample');

});