Ext.onReady(function(){

   
var myData = {
                records
: [
                       
{ name : "Record 0", column1 : "0", column2 : "0" },
                       
{ name : "Record 1", column1 : "1", column2 : "1" },
                       
{ name : "Record 2", column1 : "2", column2 : "2" },
                       
{ name : "Record 3", column1 : "3", column2 : "3" },
                       
{ name : "Record 4", column1 : "4", column2 : "4" },
                       
{ name : "Record 5", column1 : "5", column2 : "5" },
                       
{ name : "Record 6", column1 : "6", column2 : "6" },
                       
{ name : "Record 7", column1 : "7", column2 : "7" },
                       
{ name : "Record 8", column1 : "8", column2 : "8" },
                       
{ name : "Record 9", column1 : "9", column2 : "9" }
               
]
       
};


       
// Generic fields array to use in both store defs.
       
var fields = [
           
{name: 'name', mapping : 'name'},
           
{name: 'column1', mapping : 'column1'},
           
{name: 'column2', mapping : 'column2'}
       
];

   
// create the data store
   
var gridStore = new Ext.data.JsonStore({
        fields
: fields,
                data  
: myData,
                root  
: 'records'
   
});


       
// Column Model shortcut array
       
var cols = [
               
{ id : 'name', header: "Record Name", width: 160, sortable: true, dataIndex: 'name'},
               
{header: "column1", width: 50, sortable: true, dataIndex: 'column1'},
               
{header: "column2", width: 50, sortable: true, dataIndex: 'column2'}
       
];

       
// declare the source Grid
   
var grid = new Ext.grid.GridPanel({
                ddGroup          
: 'gridDDGroup',
        store            
: gridStore,
        columns          
: cols,
                enableDragDrop  
: true,
        stripeRows      
: true,
        autoExpandColumn
: 'name',
        width            
: 325,
                region          
: 'west',
        title            
: 'Data Grid',
                selModel        
: new Ext.grid.RowSelectionModel({singleSelect : true})
   
});



       
// Declare the text fields.  This could have been done inline, is easier to read
       
// for folks learning :)
       
var textField1 = new Ext.form.TextField({
                fieldLabel
: 'Record Name',
                name      
: 'name'
       
});


       
var textField2 = new Ext.form.TextField({
                fieldLabel
: 'Column 1',
                name      
: 'column1'
       
});


       
var textField3 = new Ext.form.TextField({
                fieldLabel
: 'Column 2',
                name      
: 'column2'
       
});


       
// Setup the form panel
       
var formPanel = new Ext.form.FormPanel({
                region    
: 'center',
                title      
: 'Generic Form Panel',
                bodyStyle  
: 'padding: 10px; background-color: #DFE8F6',
                labelWidth
: 100,
                width      
: 325,
                items      
: [
                        textField1
,
                        textField2
,
                        textField3
               
]
       
});



       
//Simple 'border layout' panel to house both grids
       
var displayPanel = new Ext.Panel({
                width    
: 650,
                height  
: 300,
                layout  
: 'border',
                renderTo
: 'panel',
                items    
: [
                        grid
,
                        formPanel
               
],
                bbar    
: [
                       
'->', // Fill
                       
{
                                text    
: 'Reset Example',
                                handler
: function() {
                                       
//refresh source grid
                                        gridStore
.loadData(myData);
                                        formPanel
.getForm().reset();
                               
}
                       
}
               
]
       
});


       
// used to add records to the destination stores
       
var blankRecord =  Ext.data.Record.create(fields);

       
/****
        * Setup Drop Targets
        ***/


       
// This will make sure we only drop to the view container
       
var formPanelDropTargetEl =  formPanel.body.dom;

       
var formPanelDropTarget = new Ext.dd.DropTarget(formPanelDropTargetEl, {
                ddGroup    
: 'gridDDGroup',
                notifyEnter
: function(ddSource, e, data) {

                       
//Add some flare to invite drop.
                        formPanel
.body.stopFx();
                        formPanel
.body.highlight();
               
},
                notifyDrop  
: function(ddSource, e, data){

                       
// Reference the record (single selection) for readability
                       
var selectedRecord = ddSource.dragData.selections[0];


                       
// Load the record into the form
                        formPanel
.getForm().loadRecord(selectedRecord);


                       
// Delete record from the grid.  not really required.
                        ddSource
.grid.store.remove(selectedRecord);

                       
return(true);
               
}
       
});


});