Ext.namespace('Zarafa.common.ui.grid');
/*
 * This file contains editors for editorgrid panel. These editors extends other Ext.form component to provide
 * custom functionality to grid inline editing.
 */

/**
 * @class Zarafa.common.ui.grid.PriorityPicker
 * @extends Ext.form.ComboBox
 * @xtype prioritypicker
 * 
 * Editor for Priority column.
 * Usage :
<pre><code>
		cm : new Ext.grid.ColumnModel([
				{
					...
					editor : Zarafa.common.ui.grid.PriorityPicker(),
					...
				},
				...
 </code></pre>
 * @constructor
 * @param {Object} object containing configuration properties for Zarafa.common.ui.grid.PriorityPicker editor.
 */
Zarafa.common.ui.grid.PriorityPicker = function (config)
{
	config = config || {};
	Ext.apply(this, config);
	Zarafa.common.ui.grid.PriorityPicker.superclass.constructor.call(this, arguments);
};

Ext.extend(Zarafa.common.ui.grid.PriorityPicker, Ext.form.ComboBox, {
	triggerAction : 'all',
	mode : 'local',
	lazyRenderer : true,
	scope : this,
	store : new Ext.data.ArrayStore({
		id : 0,
		fields : [
			'value',
			'displayText'
		],
		data : [
			[0, '<span class="importance_combobox icon_importance_nonurgent">'+ _('Low') +'</span>'],
			[1, '<span class="importance_combobox ">'+ _('Normal') +'</span>'],
			[2, '<span class="importance_combobox icon_importance_urgent">'+ _('High') +'</span>']
		]
	}),
	valueField : 'value',
	displayField : 'displayText',
	listeners : {
		'select' : function () { 
			// onSelection notify gridEditor that editing is complete.
			this.gridEditor.completeEdit();
		},
		'afterrender' : function () {
			// expand the list when this editor is rendered.
			this.expand();
		}
	}
});
Ext.reg('prioritypicker', Zarafa.common.ui.grid.PriorityPicker);

/**
 * @class Zarafa.common.ui.grid.CompleteSpinner
 * @extends Ext.ux.form.SpinnerField
 * @xtype completespinner
 * 
 * Editor for Percent Complete column.
 * Usage :
<pre><code>
		cm : new Ext.grid.ColumnModel([
				{
					...
					editor : Zarafa.common.ui.grid.CompleteSpinner(),
					...
				},
				...
 </code></pre>
 * @constructor
 * @param {Object} object containing configuration properties for Zarafa.common.ui.grid.CompleteSpinner editor.
 */
Zarafa.common.ui.grid.CompleteSpinner = function (config)
{
	config = config || {};
	Ext.apply(this, config);
	Ext.apply(this, {
		allowBlank : false,
		defaultValue : '0',
		incrementValue : 25,
		enableKeyEvents : true,
		minValue : '0',
		maxValue : '100'
	});
	Zarafa.common.ui.grid.CompleteSpinner.superclass.constructor.call(this, arguments);
};

Ext.extend(Zarafa.common.ui.grid.CompleteSpinner, Ext.ux.form.SpinnerField, {
	listeners : {
		'spinup' : function () {
			var value = this.incrementValue + (parseInt(this.getEl().dom.value.trim('%'), 10) - 1);
			if (this.maxValue >= value) {
				this.setValue(value);
			}
		},
		'spindown' : function () {
			var value = (parseInt(this.getEl().dom.value.trim('%'), 10) + 1) - this.incrementValue;
			if (this.minValue <= value) {
				this.setValue(value);
			}
		},
		'render' : function () {
			this.getEl().dom.value = parseInt(this.value) * 100;
		}
	}
});
Ext.reg('completespinner', Zarafa.common.ui.grid.CompleteSpinner);