manageAssignmentsGrid = function() {
	var assignSummary = new Ext.ux.grid.GridSummary();
	var colSelect = new Ext.grid.CheckboxSelectionModel();
	totalPercentage = 0;
	var columns = [
	colSelect,
	{
		header: "Assignment category",
		id: 'assignCatCol',
		sortable: true,
		dataIndex: 'category'
	},
	{
		header: "Percentage",
		sortable: true,
		dataIndex: 'percentage',
		width: 100,
		editor: new Ext.form.NumberField({}),
		renderer: function(v, meta) {
			var courseCombo = Ext.getCmp('assigncourses');
			var value = courseCombo.getValue();
			if (value != '') {
				var index = courseCombo.store.find('courseid', value);
				var gradingMethod = courseCombo.store.getAt(index).get('gradingMethod');
				if (gradingMethod !== undefined && gradingMethod != 'truepoints') {
					meta.css = 'textAlignRight';
					return ((v != undefined) ? v + '%' : '')
				} else {
					meta.css = 'textAlignRight notEditable';
					return 'N/A';
				}
			}
		},
		summaryType: 'sum',
		summaryRenderer: function(v) {
			var courseCombo = Ext.getCmp('assigncourses');
			var value = courseCombo.getValue();
			if (value != '') {
				var index = courseCombo.store.find('courseid', value);
				var gradingMethod = courseCombo.store.getAt(index).get('gradingMethod');
				if (gradingMethod != 'truepoints') {
					return '<span class="assignSummaryPercent' + ((v != 100) ? '' : '100') + '">' + v + '%</span>';
				}
			}
		}
	}];
	manageAssignmentsGrid.superclass.constructor.call(this, {
		hideMode: 'offsets',
		tbar: {
			xtype: 'toolbar',
			defaults: "style: 'marginLeft: 5'",
			items: [{
				xtype: 'button',
				text: 'Remove category',
				iconCls: 'delete',
				handler: function() {
					records = this.ownerCt.ownerCt.selModel.getSelections();
					for (i = 0; i < records.length; i++) {
						this.ownerCt.ownerCt.ownerCt.sendRowBack(records[i]);
					}
					Ext.getCmp('manageAssignmentsCatGrid').store.sort('category', 'ASC');
				}
			},
			{
				xtype: 'tbseparator'
			},
			{
				xtype: 'button',
				text: 'Copy',
				iconCls: 'copy',
				menu: {
					xtype: 'menu',
					items: [{
						xtype: 'menuitem',
						text: 'Copy category to this course in all other grading periods',
						iconCls: 'copy',
						handler: function() {
							this.ownerCt.doCopy('periods');
						}
					},
					{
						xtype: 'menuitem',
						text: 'Copy category to all other courses in current grading period',
						iconCls: 'copy',
						handler: function() {
							this.ownerCt.doCopy('courses');
						}
					},
					{
						xtype: 'menuitem',
						text: 'Copy category to all other courses and grading periods',
						iconCls: 'copy',
						handler: function() {
							this.ownerCt.doCopy('both');
						}
					}],
					doCopy: function(copyType) {
						var courseID = Ext.getCmp('assigncourses').getValue();
						var quarter = Ext.getCmp('assignquarter').getValue();
						var selections = Ext.getCmp('manageAssignmentsGrid').getSelectionModel().getSelections();
						var values = [];
						for (var i = 0; i < selections.length; i++) {
							item = new Object({
								description: selections[i].get('category'),
								percentage: selections[i].get('percentage')
							});
							values.push(item);
						}
						Ext.Ajax.request({
							url: 'teacher_tools/gradebook_data.json.php',
							method: 'POST',
							params: {
								command: "copyToCoursesPeriods",
								courseid: courseID,
								quarter: quarter,
								copyType: copyType,
								values: Ext.encode(values)
							},
							success: function() {},
							failure: function() {
								Ext.Msg.alert('Status', 'Unable to copy weights to other quarters.');
							}
						});
					}
				}
			},
			{
				xtype: 'tbseparator'
			},
			{
				text: 'Drop lowest grade',
				handler: function() {
					var courseID = Ext.getCmp('assigncourses').getValue();
					var quarter = Ext.getCmp('assignquarter').getValue();
					var selections = Ext.getCmp('manageAssignmentsGrid').getSelectionModel().getSelections();
					var categories = [];
					for (var i = 0; i < selections.length; i++) {
						categories.push(selections[i].get('category'));
					}
					Ext.Ajax.request({
						url: 'teacher_tools/gradebook_data.json.php',
						method: 'POST',
						params: {
							command: "dropLowestGrade",
							courseid: courseID,
							quarter: quarter,
							categories: Ext.encode(categories)
						},
						success: function(r) {
							var responseObj = Ext.decode(r.responseText);
							if (!responseObj.success) {
								Ext.Msg.alert('Error', 'The lowest grades were dropped for all selections except where they are not allowed: ' + responseObj.disallowedCategories.join());
							}
						},
						failure: function() {
							Ext.Msg.alert('Status', 'Unable to drop lowest grades');
						}
					});
				}
			}]
		},
		store: new Ext.data.Store({
			url: 'teacher_tools/gradebook_data.json.php',
			baseParams: {
				command: 'courseCategories'
			},
			reader: new Ext.data.JsonReader({
				root: 'assignedCategories',
				idProperty: 'category'
			}, [{
				name: 'category'
			},
			{
				name: 'drop'
			},
			{
				name: 'percentage'
			}]),
			autoLoad: false,
			autoSave: false,
			sortInfo: {
				field: 'category',
				direction: 'ASC'
			},
			writer: new Ext.data.JsonWriter({
				writeAllFields: true // write all fields, not just those that changed
			})
		}),
		autoExpandColumn: 'assignCatCol',
		columns: columns,
		sm: colSelect,
		plugins: [assignSummary],
		autoScroll: true,
		id: 'manageAssignmentsGrid',
		title: 'Assigned Categories',
		border: true,
		width: 450,
		listeners: {
			render: function(grid) {
				var firstGridDropTargetEl = this.getView().scroller.dom;
				var firstGridDropTarget = new Ext.dd.DropTarget(firstGridDropTargetEl, {
					ddGroup: 'maDDGroup',
					notifyDrop: function(ddSource, e, data) {
						for (row in data.selections) {
							if (typeof(data.selections[row]) != 'function') {
								grid.ownerCt.chooseRow(data.selections[row]);
							}
						}
						return true
					}
				});
			},
			beforeedit: function(object) {
				if (object.column == 2) {
					var courseCombo = Ext.getCmp('assigncourses');
					var value = courseCombo.getValue();
					var index = courseCombo.store.find('courseid', value);
					var gradingMethod = courseCombo.store.getAt(index).get('gradingMethod');
					if (gradingMethod == 'truepoints') {
						return false;
					}
					return true;
				}
			}
		}
	});
}
Ext.extend(manageAssignmentsGrid, Ext.grid.EditorGridPanel);

