SD.teacherTools.gradebook.addPopup('addAssignment', 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: 'category',
					displayField: 'category',
					editable: false,
					typeAhead: true,
					triggerAction: 'all',
					allowBlank: false,
					id: 'gb_category',
					store: new Ext.data.Store({
						url: 'schooldynamics_data.json.php',
						baseParams: {
							command: 'getCourseCategories'
						},
						reader: new Ext.data.JsonReader({
							root: 'getCourseCategories'
						}, [{
							name: 'category'
						}]),
						autoLoad: false,
						listeners: {
							load: function(store, records, options) {
								var taskTitle = Ext.getCmp('gb_title');
								switch (SD.teacherTools.gradebook.addAssignment.content.category || taskTitle.getValue()) {
								case 'Midterm':
								case 'Midterm Exam':
									store.insert(0, new Ext.data.Record({
										category: 'Midterm Exam'
									}));
									taskTitle.setValue('Midterm Exam');
									taskTitle.setReadOnly(true);
									break;
								case 'Final':
								case 'Final Exam':
									store.insert(0, new Ext.data.Record({
										category: 'Final Exam'
									}));
									taskTitle.setValue('Final Exam');
									taskTitle.setReadOnly(true);
									break;
								case 'Exam1':
									store.insert(0, new Ext.data.Record({
										category: 'Exam1'
									}));
									taskTitle.setValue('Exam1');
									taskTitle.setReadOnly(true);
									break;
								case 'Exam2':
									store.insert(0, new Ext.data.Record({
										category: 'Exam2'
									}));
									taskTitle.setValue('Exam2');
									taskTitle.setReadOnly(true);
									break;
								case 'Exam3':
									store.insert(0, new Ext.data.Record({
										category: 'Exam3'
									}));
									taskTitle.setValue('Exam3');
									taskTitle.setReadOnly(true);
									break;
								default:
									//store.combos[0].reset();
									store.combos[0].setValue(SD.teacherTools.gradebook.addAssignment.content.category);
									store.combos[0].setReadOnly(false);
									taskTitle.setReadOnly(false);
								}
							},
							add: function(store, records, index) {
								if (isExam(records[index].data.category)) {
									store.combos[0].setValue(records[index].data.category);
									store.combos[0].setReadOnly(true);
								}
							}
						}
					})
				}]
			},
			{
				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,
						quarter: Ext.getCmp('gradebookquarter').getValue()
					}));
				} 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 course = Ext.getCmp('gradebookcourseid').store.getById(Ext.getCmp('gradebookcourseid').getValue()).data;
		var form = Ext.getCmp('gb_assignment_form');
		form.getForm().reset();
		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();
		}
		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 = "";
				}
			});
		} 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;
		}
		SD.teacherTools.gradebook.addAssignment.content.category = category;
		var categorycombo = Ext.getCmp('gb_category');
		categorycombo.store.baseParams.courseid = SchoolDynamics.currentCourseID;
		categorycombo.store.baseParams.quarter = Ext.getCmp('gradebookquarter').getValue();
		categorycombo.store.load();
		Ext.getCmp('gb_title').focus();
		this.show();
	}
})
);

