Ext.namespace('Zarafa.contact.ui');

/**
 * @class Zarafa.contact.ui.MemberBox
 * @extends Zarafa.common.recipientfield.ui.RecipientBox
 * @xtype zarafa.memberbox
 *
 * Special {@link Zarafa.common.ui.Box box} which is used
 * for displaying Distlist Member records in the {@link Zarafa.contact.ui.MemberBoxField}.
 * This works similar to the {@link Zarafa.common.recipientfield.ui.RecipientBox} regarding
 * resolving, but it will mark any non-distlist member user as invalid.
 */
Zarafa.contact.ui.MemberBox = Ext.extend(Zarafa.common.recipientfield.ui.RecipientBox, {
	/**
	 * Check if the given {@link Ext.data.Record record} is valid. This function can be
	 * overridden by the childclasses to indicate if the given record is valid.
	 *
	 * This class will check if the distlist_type is valid.
	 *
	 * @param {Zarafa.core.data.MAPIRecord} record The record to check
	 * @return {Boolean} True if the record is valid
	 * @protected
	 */
	isValidRecord : function(record)
	{
		var distlistType = record.get('distlist_type');

		if(Ext.isDefined(Zarafa.core.mapi.DistlistType.getName(distlistType))) {
			return true;
		}

		return false;
	},

	/**
	 * Function which can be overriden to provide custom formatting for the given {@link Ext.data.Record}
	 * to the {@link #update} function. The data object returned here is used by the {@link #textTpl template}
	 * to render the contents of the box.
	 * @param {Ext.data.Record} record The record which is going to be rendered
	 * @return {Object} The data object which can be passed to {@link #textTpl}.
 	 * @private
	 */
	prepareData: function(record)
	{
		var prepared = Zarafa.contact.ui.MemberBox.superclass.prepareData.apply(this, arguments);

		prepared.distlist_type = record.get('distlist_type');

		return prepared;
	},

	/**
	 * Function which can be overriden to provide custom icon rendering for the given {@link Ext.data.Record}
	 * to the {@link #iconEl} element. The string returned here is the CSS class which will be set on the
	 * {@link #iconEl}.
	 * @param {Ext.data.Record} record The record which is going to be rendered
	 * @return {String} The CSS class which must be applied to the {@link #iconEl}.
	 * @private
	 */
	prepareIcon : function(record)
	{
		if (this.isValidRecord(record)) {
			return Zarafa.common.ui.IconClass.getIconClass(record);
		}
	}
});

Ext.reg('zarafa.memberbox', Zarafa.contact.ui.MemberBox);