/******************************************************************************************
 * This popup could have dual use as an "add" and "edit" popup for lesson plan assignments 
 *
 */
var addAssignmentPopup = new Ext.Window({
    layout: 'fit',
    width: 465,
    height: 180,
    closeAction:'hide',
    modal: true,
    //plain: true,
    resizable: false,
    items: [
        {
            xtype: 'form',
            border: false,
            padding: 10,
            labelWidth: 60,
            monitorValid: true,
            id: 'gb_assignment_form',
            items: [
                {
                    xtype: 'textfield',
                    fieldLabel: 'Title',
                    anchor: '100%',
                    allowBlank: false,
                    id: 'gb_title'
                },
                {
                    xtype: 'container',
                    layout: 'hbox',
                    items: [
                        {
                            xtype: 'container',
                            flex: 1,
                            layout: 'form',
                            labelWidth: 60,
                            margins: '0 5 0 0',
                            items: [
                                {
                                    xtype: 'combo',
                                    fieldLabel: 'Category',
                                    anchor: '100%',
                                    valueField: 'catid',
                                    displayField: 'category',
                                    editable: false,
                                    typeAhead: true,
                                    triggerAction: 'all',
                                    allowBlank: false,
                                    id: 'gb_category',
                                    store: new Ext.data.Store({  
                                        url : 'teacher_tools/gradebook_data.json.php',  
                                        baseParams: {command: 'getCategories'},     
                                        reader: new Ext.data.JsonReader({root: 'getCategories'}, [
                                            {name: 'category'},
                                            {name: 'catid'}
                                        ]),
                                        autoLoad : false
                                    })
                                }
                            ]
                        },
                        {
                            xtype: 'container',
                            flex: 1,
                            layout: 'form',
                            labelWidth: 70,
                            margins: '0 0 0 5',
                            items: [
                                {
                                    xtype: 'datefield',
                                    fieldLabel: 'Date',
                                    anchor: '100%',
                                    allowBlank: false,
                                    id: 'gb_date'
                                }
                            ]
                        }
                    ]
                },
                {
                    xtype: 'container',
                    layout: 'hbox',
                    items: [
                        {
                            xtype: 'container',
                            flex: 1,
                            layout: 'form',
                            labelWidth: 60,
                            margins: '0 5 0 0',
                            items: [
                                {
                                    xtype: 'numberfield',
                                    fieldLabel: 'Weight',
                                    anchor: '100%',
                                    disabled: true,
                                    allowBlank: false,
                                    id: 'gb_weight'
                                }
                            ]
                        },
                        {
                            xtype: 'container',
                            flex: 1,
                            layout: 'form',
                            labelWidth: 70,
                            margins: '0 0 0 5',
                            items: [
                                {
                                    xtype: 'numberfield',
                                    fieldLabel: 'Total points',
                                    anchor: '100%',
                                    disabled: true,
                                    allowBlank: false,
                                    id: 'gb_points'
                                }
                            ]
                        }
                    ]
                },
                {
                    xtype: 'checkbox',
                    boxLabel: 'Make up?',
                    id: 'gb_makeup'
                }

            ],
           listeners: {
               clientValidation: function(form, isValid) {
                   if (isValid) {
                       Ext.getCmp('gb_assignment_submit').enable();
                   } else {
                       Ext.getCmp('gb_assignment_submit').disable();
                   }
               }
           }
        }
    ],
    fbar: {
        xtype: 'toolbar',
        buttonAlign: 'left',
        items: [
            {
                xtype: 'button',
                text: 'Delete',
                id: 'gb_delete',
                handler: function(btn){ 
                    var popup = this.ownerCt.ownerCt;
                    var store = Ext.getCmp('gradebookGrid').assignments;
                    var record = store.getAt(store.find(store.reader.meta.idProperty, Ext.getCmp('gb_assignment_form').taskid));

                    Ext.Msg.show({
                        title:'Delete Assignment', 
                        msg: 'Are you sure you want to delete this assignment for '+record.data.task+'?<br /><b>Note:</b> This will delete all the grades entered for this assignment', 
                        buttons: Ext.Msg.YESNO, 
                        scope: btn,
                        icon: Ext.MessageBox.WARNING,
                        fn: function(btn) {
                            if (btn == 'yes') {
                                Ext.getCmp('gradebookGrid').assignments.remove(record);
                                Ext.getCmp('gradebookGrid').assignments.save();
                                popup.hide();
                            }
                        }
                    });
                }
            },
            {
                xtype: 'tbfill'
            },
            {
                xtype: 'button',
                text: 'Submit',
                //disabled: true,
                id: 'gb_assignment_submit',
                handler: function(btn){ 
                    var popup = this.ownerCt.ownerCt;
         
                    //save new, or changed, assignment
                    var form = Ext.getCmp('gb_assignment_form');
                    var record = form.getForm().getValues();
                    var grid = Ext.getCmp('gradebookGrid');
         
                    if (popup.isNew) {
                        var task = Ext.data.Record.create(grid.assignments.fields.items);
                        grid.assignments.add(new task({
                           task: record.gb_title, 
                           taskdate: record.gb_date, 
                           makeup: ( record.gb_makeup!=undefined ? record.gb_makeup : false ), 
                           points: record.gb_points, 
                           weight: record.gb_weight, 
                           category: record.gb_category
                        }));
                    } else {
                        var task = grid.assignments.getAt(grid.assignments.find(grid.assignments.reader.meta.idProperty, form.taskid));
                        task.set('task', record.gb_title);
                        task.set('taskdate', record.gb_date);
                        task.set('makeup', ( record.gb_makeup!=undefined ? record.gb_makeup : false ));
                        task.set('points', record.gb_points);
                        task.set('weight', record.gb_weight);
                        task.set('category', record.gb_category);
            
                        grid.assignments.save();
                    }
                    popup.hide();
                }
            },
            {
                xtype: 'button',
                text: 'Close',
                handler: function(btn){ 
                    this.ownerCt.ownerCt.hide();
                }
            }
        ]
    },
    //functions
    showWithArgs: function (isNewAssignment, category, task) {
        //update interface to either the "add" or "edit" interface
        this.isNew = isNewAssignment;
          
      var categorycombo = Ext.getCmp('gb_category');
      categorycombo.store.baseParams.courseid = SchoolDynamics.currentCourseID;
      categorycombo.store.baseParams.quarter = SchoolDynamics.currentQtr;
      categorycombo.store.load();
      
      var course = Ext.getCmp('gradebookcourseid').store.getById(Ext.getCmp('gradebookcourseid').getValue()).data;
      var form = Ext.getCmp('gb_assignment_form');
      form.gradingMethod = course.gradingMethod;
      
      var gbweight = Ext.getCmp('gb_weight');
      var bgpoints = Ext.getCmp('gb_points');
      switch (form.gradingMethod) {
         case 'truepoints':
            gbweight.disable();
            bgpoints.enable();
            break;
         case 'percent':
            gbweight.enable();
            bgpoints.disable();
            break;
         case 'autocalc':
            gbweight.enable();
            bgpoints.enable();
            break;
         default:
            gbweight.disable();
            bgpoints.disable();
      }
      
      switch (category) {
         case 'midterm':
            categorycombo.setValue('Mid-Term Exam');
            categorycombo.disable();
            break;
         case 'final':
            categorycombo.setValue('Final Exam');
            categorycombo.disable();
            break;
         default:
            categorycombo.reset();
            categorycombo.enable();
      }
      
      
      var formfields = form.getForm().items;
      
      if (this.isNew) {
         this.setTitle('Add Assignment');
         Ext.getCmp('gb_delete').hide();
         form.taskid = undefined;
         
         Ext.each(formfields.items, function(field) {
            if (field.id=='gb_weight') {
               field.originalValue = 1;
            } else if (field.id=='gb_date') {
               field.originalValue = new Date();
            } else {
               field.originalValue = "";
            }
         });
         form.getForm().reset();
         
      } else {
         this.setTitle('Manage Assignment');
         Ext.getCmp('gb_delete').show();
         
         //load data
         formfields.item('gb_title').setValue(task.data.task);
         formfields.item('gb_date').setValue(task.data.taskdate);
         formfields.item('gb_category').setValue(task.data.category);
         formfields.item('gb_points').setValue(task.data.points);
         formfields.item('gb_weight').setValue(task.data.weight);
         formfields.item('gb_makeup').setValue(task.data.makeup);
         Ext.getCmp('gb_assignment_form').taskid = task.data.taskid;
         
      }
      
      Ext.getCmp('gb_title').focus();
      this.show();
   }
});
