evalGridSort = function(rec1,rec2) { a = parseInt(rec1.data.categoryOrder, 10); b = parseInt(rec2.data.categoryOrder, 10); return (a > b) ? 1 : (a < b) ? -1 : 0; };
evalRadioRenderer = function(value, meta, rec, rowIndex, colIndex,store){
  return '<input type = radio ' + ((value != 0) ? 'checked' : '') + ' name = "' + rec.data.id + 'radio"/>';
};
var gradebookAbility = new Ext.Window({
    title: 'Ability Evaluations',
    width: 770,
    height: 470,
    minWidth: 770,
    minHeight: 470,
    modal: true,
    closeAction: 'hide',

        items: [
            {
                xtype: 'tabpanel',
                activeTab: 1,
                autoHeight: false,
                border: false,
                height: 400,
                items: [
                    {
                        xtype: 'panel',
                        title: 'Assign',
                        layout: 'border',
                        items: [
                            {
                                xtype: 'panel',
                                title: 'Students',
                                region: 'west',
                                width: 200,
                                split: true,
                                margins: '5 0 0 5',
                                items: [
                                    {
                                        xtype: 'treepanel',
                                        border: false,
                                        titleCollapse: true,
                                        rootVisible: false,
                                        root: {
                                            text: 'Root Node',
                                            children: [
                                                {
                                                    text: 'Student 1',
                                                    leaf: true
                                                },
                                                {
                                                    text: 'Student 2',
                                                    leaf: true
                                                },
                                                {
                                                    text: 'Student 3',
                                                    leaf: true
                                                }
                                            ]
                                        },
                                        loader: {

                                        }
                                    }
                                ]
                            },
                            {
                                xtype: 'panel',
                                title: 'Evaluations',
                                region: 'center',
                                margins: '5 5 0 0',
                                layout: 'fit',
                                items: [
                                    {
                                        xtype: 'grid',
                                        titleCollapse: true,
                                        enableColumnHide: false,
                                        enableColumnMove: false,
                                        enableColumnResize: false,
                                        stripeRows: true,
                                        border: false,
                                        autoExpandColumn: 'evaluationCategory',
                                        minColumnWidth: 60,
                                        id: 'evaluationsGrid',
                                        columns: [
                                                                                        {
                                                xtype: 'gridcolumn',
                                                sortByFn: evalGridSort,
                                                sortable: false,
                                                resizable: true,
                                                width: 100,
                                                dataIndex: 'category',
                                                id: 'evaluationCategory'
                                            },
                                            {
                                                xtype: 'gridcolumn',
                                                header: 'Description',
                                                sortable: true,
                                                resizable: true,
                                                width: 100,
                                                dataIndex: 'col1',
                                                id: 'evaluationDescription'
                                            },
                                            {
                                                header: 'Outstanding',
                                                sortable: true,
                                                resizable: true,
                                                width: 80,
                                                dataIndex: 'col2',
                                                align: 'center',
                                                renderer: evalRadioRenderer
                                            },
                                            {
                                                header: 'Satisfactory',
                                                sortable: true,
                                                resizable: true,
                                                width: 80,
                                                dataIndex: 'col3',
                                                align: 'center',
                                                renderer: evalRadioRenderer
                                            },
                                            {
                                                xtype: 'booleancolumn',
                                                header: 'Neutral',
                                                sortable: true,
                                                resizable: true,
                                                width: 60,
                                                dataIndex: 'bool',
                                                align: 'center'
                                            },
                                            {
                                                xtype: 'booleancolumn',
                                                header: 'Unsatisfactory',
                                                sortable: true,
                                                resizable: true,
                                                width: 90,
                                                dataIndex: 'bool',
                                                align: 'center'
                                            },
                                            {
                                                xtype: 'booleancolumn',
                                                header: 'N/A',
                                                sortable: true,
                                                resizable: true,
                                                width: 60,
                                                dataIndex: 'bool',
                                                align: 'center'
                                            }
                                        ],
                                        enableDragDrop: true,
                                        store: new Ext.data.GroupingStore({
                                          url : 'teacher_tools/gradebook_data.json.php',
                                          baseParams: {command: 'getEvaluations'},
                                          reader: new Ext.data.JsonReader({root: 'evaluations'}, [            
                                            {name: 'id'},
                                            {name: 'category'},
                                            {name: 'categoryOrder'},
                                            {name: 'col1'},
                                            {name: 'col2'},
                                            {name: 'col3'}  
                                          ]),
                                          groupField:'category',
                                          sortInfo:{field: 'category', direction: "DESC"},
                                          autoLoad : false,
                                          listeners: {
                                            load: function(store,recs){
                                              evalGrid = Ext.getCmp('evaluationsGrid');
                                              lowestCatOrder = recs[0].data.categoryOrder;
                                              highestCatOrder = recs[recs.length-1].data.categoryOrder;
                                              
                                              for (i = 0; i < recs.length; i++){
                                                 recs[i].data.lowestCatOrder = lowestCatOrder;
                                                 recs[i].data.highestCatOrder = highestCatOrder;
                                                  
                                              } 
                                            }
                                          } 
                                      }),
                                      sm: new Ext.grid.RowSelectionModel({singleSelect:true}),
                                      view: new Ext.grid.GroupingView({
                                          forceFit: true,
                                          showGroupName: false,
                                          hideGroupedColumn: true,
                                          groupTextTpl: ' <div class = "{[(values.rs[0].data.lowestCatOrder != parseInt(values.rs[0].data.categoryOrder,10)) ? "groupUp" : "hiddenGroup"]}">Up</div> <div class = "{[(values.rs[0].data.highestCatOrder != parseInt(values.rs[0].data.categoryOrder,10)) ? "groupDown" : "hiddenGroup"]}">Dn</div> {text} ',
                                          enableNoGroups:false,
                                          interceptMouse : function(e){
                                              className = Ext.get(e.getTarget()).dom.className;
                                              if (className == 'groupUp'){
                                                this.shiftUp(e.getTarget('.x-grid-group-hd', this.mainBody));
                                              } else if (className == 'groupDown') {
                                                this.shiftDown(e.getTarget('.x-grid-group-hd', this.mainBody));
                                              } else {
                                                var hd = e.getTarget('.x-grid-group-hd', this.mainBody);
                                                if(hd){
                                                    e.stopEvent();
                                                    this.toggleGroup(hd.parentNode);
                                                }     
                                              }
                                          },
                                          shiftUp: function(groupHeader){
                                            
                                            evalGrid = Ext.getCmp('evaluationsGrid');
                                            clickedChildren = evalGrid.store.queryBy(function(rec,recID) {return (rec._groupId + '-hd' == groupHeader.id) }, this);
                                            
                                            
                                            clickedCatOrder = clickedChildren.items[0].data.categoryOrder;
                                            prevCatOrder = clickedCatOrder - 1;
                
                                            prevChildren = evalGrid.store.queryBy(function(rec,recID) {return (rec.data.categoryOrder == prevCatOrder) }, this);
                                            
                                            for (i = 0; i < clickedChildren.length; i++){
                                              clickedChildren.items[i].data.categoryOrder = prevCatOrder;
                                            }
                                            for (i = 0; i < prevChildren.length; i++){
                                              prevChildren.items[i].data.categoryOrder = clickedCatOrder;
                                            }
                                            
                                            evalGrid.store.data.sort('ASC',evalGridSort);
                                            evalGrid.getView().refresh();
                                            Ext.get(clickedChildren.items[0]._groupId + '-hd').highlight();



                                          },
                                          shiftDown: function(groupHeader){
                                            evalGrid = Ext.getCmp('evaluationsGrid');
                                            clickedChildren = evalGrid.store.queryBy(function(rec,recID) {return (rec._groupId + '-hd' == groupHeader.id) }, this);
                                            
                                            
                                            clickedCatOrder = parseInt(clickedChildren.items[0].data.categoryOrder,10);
                                            nextCatOrder = clickedCatOrder + 1;
                
                                            nextChildren = evalGrid.store.queryBy(function(rec,recID) {return (rec.data.categoryOrder == nextCatOrder) }, this);
                                            
                                            for (i = 0; i < clickedChildren.length; i++){
                                              clickedChildren.items[i].data.categoryOrder = nextCatOrder;
                                            }
                                            for (i = 0; i < nextChildren.length; i++){
                                              nextChildren.items[i].data.categoryOrder = clickedCatOrder;
                                            }
                                            
                                            evalGrid.store.data.sort('ASC',evalGridSort);
                                            evalGrid.getView().refresh();
                                            Ext.get(clickedChildren.items[0]._groupId + '-hd').highlight();
                                          }

                                      }),
                                      plugins: new Ext.ux.grid.CustomSortPlugin(),
                                      ddGroup    : 'evalDD',
                                      listeners: {
                                        render: function(){
                                          var evaluationsGridEl =  this.getView().scroller.dom;
                                          var evaluationsGridDropTarget = new Ext.dd.DropTarget(evaluationsGridEl, {
                                                  ddGroup    : 'evalDD',
                                                  notifyDrop : function(ddSource, e, data){
                                                          var records =  ddSource.dragData.selections;
                                                          selectedCategory = records[0].data.category;
                                                          evalGrid = Ext.getCmp('evaluationsGrid');
                                                          
                                                          rowNum = evalGrid.getView().findRowIndex(e.getTarget());
                                                          destinationRec = evalGrid.store.getAt(rowNum);
                                                          if (destinationRec != undefined && destinationRec._groupId == data.selections[0]._groupId){
                                                                                                                    
                                                            Ext.each(records, ddSource.grid.store.remove, ddSource.grid.store);
                                                            
                                                            evalGrid.store.insert(rowNum,records);
                                                            evalGrid.store.data.sort('ASC',evalGridSort);
                                                            evalGrid.getView().refresh();
                                                          }
                                                          return true
                                                          
                                                  },
                                                  notifyOver : function( source, e, data ){
                                                     evalGrid = Ext.getCmp('evaluationsGrid');

                                                     try {
                                                       if (evalGrid.store.getAt(evalGrid.getView().findRowIndex(e.getTarget()))._groupId != data.selections[0]._groupId){
                                                          return this.dropNotAllowed;
                                                       } else {
                                                          return this.dropAllowed;
                                                       }
                                                     }
                                                     catch(error){
                                                        return this.dropNotAllowed;
                                                     }
                                                    
                                                  }
                                          });
                                        }
                                      }

  
                                    }
                                ]
                            }
                        ],
                        tbar: {
                            xtype: 'toolbar',
                            items: [
                                {
                                    xtype: 'tbtext',
                                    text: 'Apply master template:',
                                    style: 'margin-left: 5px;'
                                },
                                {
                                    xtype: 'combo',
                                    fieldLabel: 'Label',
                                    style: 'margin-left: 5px;'
                                }
                            ]
                        },
                        listeners: {
                          show: function(){
                             Ext.getCmp('evaluationsGrid').store.load();
                          }
                        }
                    },
                    {
                        xtype: 'panel',
                        title: 'Manage',
                        layout: 'border',
                        items: [
                            {
                                xtype: 'panel',
                                title: 'Master Templates',
                                region: 'west',
                                width: 200,
                                split: true,
                                margins: '5 0 0 5',
                                tbar: {
                                    xtype: 'toolbar',
                                    items: [
                                        {
                                            xtype: 'button',
                                            text: 'Add',
                                            iconCls: 'add',
                                            style: 'margin-left: 5px;'
                                        },
                                        {
                                            xtype: 'button',
                                            text: 'Delete',
                                            iconCls: 'delete',
                                            style: 'margin-left: 5px;'
                                        }
                                    ]
                                },
                                items: [
                                    {
                                        xtype: 'editorgrid',
                                        autoHeight: true,
                                        border: false,
                                        autoExpandColumn: 'masterTemplateName',
                                        enableColumnMove: false,
                                        enableColumnResize: false,
                                        enableColumnHide: false,
                                        stripeRows: true,
                                        titleCollapse: true,
                                        id: 'masterTemplateGrid',
                                        columns: [
                                            new Ext.grid.CheckboxSelectionModel(),
                                            {
                                                xtype: 'gridcolumn',
                                                header: 'Name',
                                                sortable: true,
                                                resizable: true,
                                                dataIndex: 'templatename',
                                                id: 'masterTemplateName',
                                                editor: {
                                                    xtype: 'textfield',
                                                    fieldLabel: 'Label'
                                                }
                                            }
                                        ],
                                        store: new Ext.data.Store({  
                                           url : 'teacher_tools/gradebook_data.json.php',  
                                           baseParams: {command: 'getTemplate'},     
                                           reader: new Ext.data.JsonReader({root: 'template'}, [
                                              {name: 'templatename'}, 
                                           ]),
                                           autoLoad : false
                                        })                                          
                                    }
                                ]
                            },
                            {
                                xtype: 'panel',
                                title: 'Ability Descriptions',
                                region: 'center',
                                margins: '5 5 0 0',
                                tbar: {
                                    xtype: 'toolbar',
                                    items: [
                                        {
                                            xtype: 'button',
                                            text: 'Add',
                                            iconCls: 'add',
                                            style: 'margin-left: 5px;',
                                            menu: {
                                                xtype: 'menu',
                                                items: [
                                                    {
                                                        xtype: 'menuitem',
                                                        text: 'Category',
                                                        iconCls: 'node_insert_previous'
                                                    },
                                                    {
                                                        xtype: 'menuitem',
                                                        text: 'Ability',
                                                        iconCls: 'medal_red'
                                                    }
                                                ]
                                            }
                                        },
                                        {
                                            xtype: 'button',
                                            text: 'Delete',
                                            iconCls: 'delete',
                                            style: 'margin-left: 5px;'
                                        }
                                    ]
                                },
                                items: [
                                    {
                                        xtype: 'editorgrid',
                                        autoHeight: true,
                                        titleCollapse: true,
                                        enableColumnHide: false,
                                        enableColumnMove: false,
                                        enableColumnResize: false,
                                        stripeRows: true,
                                        border: false,
                                        autoExpandColumn: 'abilityDescriptionsName',
                                        id: 'abilityDescriptionsGrid',
                                        columns: [
                                            new Ext.grid.CheckboxSelectionModel(),
                                            {
                                                xtype: 'gridcolumn',
                                                header: 'Name',
                                                sortable: true,
                                                resizable: true,
                                                width: 100,
                                                dataIndex: 'string',
                                                id: 'abilityDescriptionsName',
                                                editor: {
                                                    xtype: 'textfield',
                                                    fieldLabel: 'Label'
                                                }
                                            },
                                            {
                                                xtype: 'gridcolumn',
                                                header: 'Print Layout',
                                                sortable: true,
                                                resizable: true,
                                                width: 100,
                                                dataIndex: 'string',
                                                editor: {
                                                    xtype: 'textfield',
                                                    fieldLabel: 'Label'
                                                }
                                            }
                                        ],
                                        store: new Ext.data.Store({  
                                           url : 'teacher_tools/gradebook_data.json.php',  
                                           baseParams: {command: ''},     
                                           reader: new Ext.data.JsonReader({root: 'template'}, [
                                              {name: 'templatename'}, 
                                           ]),
                                           autoLoad : false
                                        })                                         
                                    }
                                ]
                            }
                        ]
                    }
                ]
            }
        ],
        fbar: {
            xtype: 'toolbar',
            items: [
                {
                    xtype: 'button',
                    text: 'Submit'
                },
                {
                    xtype: 'button',
                    text: 'Close'
                }
            ]
        }

    

});
