gradebookMissingGrid = function(){
    
    var chkboxMakeUp  = new Ext.grid.CheckColumn({header: "Make Up?",dataIndex: 'makeup',width: 75});
  
   var percentRenderer = function(value, metaData, record, rowIndex, colIndex, store) {
      if (record.data.pointscourse) {
         metaData.css = 'notEditable';
      }
      return value;
   }
   var pointsRenderer = function(value, metaData, record, rowIndex, colIndex, store) {
      if (!record.data.pointscourse) {
         metaData.css = 'notEditable';
      }
      return value;
   }
    var columns = [
        {header: "Course", width: 170, sortable: true, menuDisabled: true, dataIndex: 'title', renderer: QTipRenderer},
        {header: "Date", width: 100, sortable: true, dataIndex: 'taskdate'},
        {header: "Category", width: 100, sortable: true, menuDisabled: true, dataIndex: 'category', renderer: QTipRenderer},
        {header: "Task", id: 'missingGradesTask', sortable: true, menuDisabled: true,  dataIndex: 'task'},
        {header: "Student Name", width: 150, sortable: false, menuDisabled: true, dataIndex: 'studentname'},
        {header: "Percent", width: 60, sortable: false, menuDisabled: true, align: 'center', renderer: percentRenderer, editor: new Ext.form.NumberField({minValue: 0}), dataIndex: 'percent'},
        {header: "Points", width: 60, sortable: false, menuDisabled: true, align: 'center', renderer: pointsRenderer, editor: new Ext.form.NumberField({minValue: 0}), dataIndex: 'points'},
        {header: "Total Points", width: 75, sortable: false, align: 'center', menuDisabled: true, /*editor: new Ext.form.NumberField({minValue: 0}),*/ dataIndex: 'totalpts'},
        chkboxMakeUp
    ];

    gradebookMissingGrid.superclass.constructor.call(this, {
      store: new Ext.data.Store({
         url : 'teacher_tools/gradebook_data.json.php',
         baseParams: {command: 'missinggrades'},
         reader: new Ext.data.JsonReader({
            root: 'grades',
            idProperty: 'taskid'
         }, [
            {name: 'taskid'},
            {name: 'studentid'},
            {name: 'title'},
            {name: 'taskdate'}, 
            {name: 'category'},
            {name: 'task'}, 
            {name: 'studentname'}, 
            {name: 'percent'},
            {name: 'points'},
            {name: 'totalpts'},
            {name: 'makeup', type:'bool'},
            {name: 'pointscourse', type:'bool'}
         ]),
         autoLoad: false,
         autoSave: false,
         writer: new Ext.data.JsonWriter({
            writeAllFields: true
         }),
         listeners: {
            beforeload: function(store, options) { //only make a server call when all baseparams are set
               if (store.baseParams.courseid != undefined && store.baseParams.quarter != undefined) {
                  store.save();
                  return true;
               } else {
                  return false;
               }
            }
         }
      }),
      columns: columns,
      plugins:[chkboxMakeUp],
      title:'Missing Grades', 
      border: false,
      layout: 'fit',
      autoScroll: true,
      autoExpandColumn: 'missingGradesTask',  
      id: 'gradebook_missing_grid',
      tbar: new Ext.Toolbar(
         {
         hideMode: 'offsets',
         items: [
           {
             xtype: 'label',
             text: 'Course:',
             style: 'margin-left: 5px;'
           },
           new SchoolDynamics.coursesViewAllCombo({
               id:'missinggradecourseid',
               listeners: {
                  select : function(combo, record, index){
                        myGrid = Ext.getCmp('gradebook_missing_grid');
                        myGrid.store.baseParams.courseid = SchoolDynamics.currentCourseID = record.data.courseid;
                        combo.setValue(record.data.courseid); //for automated call to this event to work
                        myGrid.store.load();
                  }
               }
           }),
           {
             xtype: 'tbseparator',
             style: 'margin-left: 5px; padding-left: 15px;'
           },
            new SchoolDynamics.quarterCombo({
                id:'gbmissingquarter',
                listeners: {
                    select : function(combo, record, index){
                        myGrid = Ext.getCmp('gradebook_missing_grid');
                        myGrid.store.baseParams.quarter = SchoolDynamics.currentQtr = record.data.field1;
                        combo.setValue(record.data.field1); //for automated call to this event to work
                        myGrid.store.load();
                    }
                }
            }),
           {
             xtype: 'tbseparator',
             style: 'margin-left: 5px; padding-left: 15px;'
           },
           {
             xtype: 'button',
             text: 'Assign zeros for missing grades',
             iconCls: 'assign',
             style: 'margin-left: 5px;',
             listeners: {
               click: function(button){
                 Ext.Msg.show({
                    title:'Confirm',
                    msg: 'Are you sure you want to assign a zero to all missing grades in this grading period?',
                    buttons: Ext.Msg.YESNO,
                    fn: function(button){
                        Ext.getCmp('gradebook_missing_grid').store.each(function(record) {
                           record.set( (record.data.pointscourse?'points':'percent'), 0);
                        });
                    },
                    icon: Ext.MessageBox.QUESTION
                   })
                 }
               }              
             }  
           ]
         }
      ),
      listeners: {
         activate: function (tab) {
            if (SchoolDynamics.currentCourseID != undefined && SchoolDynamics.currentCourseID != '') {
               var coursecombo = Ext.getCmp('gradebookcourseid');
               coursecombo.fireEvent('select', coursecombo, new Ext.data.Record({courseid:SchoolDynamics.currentCourseID}));
            }
            var quartercombo = Ext.getCmp('gbmissingquarter');
            quartercombo.fireEvent('select', quartercombo, new Ext.data.Record({quarter:SchoolDynamics.currentQtr}));
         },
         beforeedit: function(object) {
            if ( (object.field=='points' && !object.record.data.pointscourse) || (object.field=='percent' && object.record.data.pointscourse) ) {
               return false;
            } else {
              return true;
            }
         },
         deactivate: function(panel) {
            panel.store.save();
         }
      }
    });
}

Ext.extend(gradebookMissingGrid, Ext.grid.EditorGridPanel);
