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: 'missingGrades',
				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: false
			}),
			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: {
					setvalue: function(combo, value, oldValue) {
						myGrid = Ext.getCmp('gradebook_missing_grid');
						myGrid.store.baseParams.courseid = SchoolDynamics.currentCourseID = value;
						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: 'counter_reset',
				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;
				}
			},
			afteredit: function(e) {
				if (e.field == 'percent' && !e.record.get('pointscourse')) {
					if (SchoolDynamics.maxGrade === undefined) {
						Ext.Ajax.request({
							url: 'teacher_tools/gradebook_data.json.php',
							params: {
								command: 'getMaximumGrade'
							},
							success: function(r) {
								SchoolDynamics.maxGrade = Ext.decode(r.responseText).maximumGrade;
								if (e.value > SchoolDynamics.maxGrade) {
									e.record.reject();
								}
							}
						}, this);
					} else {
						if (e.value > SchoolDynamics.maxGrade) {
							e.record.reject();
						}
					}
				}
			},
			deactivate: function(panel) {
				panel.store.save();
			}
		}
	});
}
Ext.extend(gradebookMissingGrid, Ext.grid.EditorGridPanel);

