/**
 * @class Roo.gui.SearchCriteriaPanel
 * @extends Ext.form.FormPanel
 *
 * The SearchPlanIdPanel is located in the left bar of the page, allowing to search plans by several criteria
 *
 * @author ssmeman
 * @version 1.0
 */

/**
 * @constructor
 * @param {Object} config Configuration options
 */

Roo.gui.SearchCriteriaPanel = Ext.extend(Ext.form.FormPanel, {
	//texts used on elements of this panel
	titleText: messages.searchCriteriaPanel.title()
	,comboLoadingText: messages.combo.loadingText()
	,provincie_emptyText: messages.searchCriteriaPanel.provincie.emptyText()
	,gemeente_emptyText: messages.searchCriteriaPanel.gemeente.emptyText()
	,planType_emptyText: messages.searchCriteriaPanel.planType.emptyText()
	,planStatus_emptyText: messages.searchCriteriaPanel.planStatus.emptyText()
	,planVanafDatum_emptyText: messages.searchCriteriaPanel.planVanafDatum.emptyText()
	,planTotDatum_emptyText: messages.searchCriteriaPanel.planTotDatum.emptyText()
	,buttonSearch: messages.button.searchText()
	,buttonErase: messages.button.eraseText()
	,datefield_format: messages.datefield.format()
	,tabBestemmingsplannen: messages.application.juridisch.title()

	//soft config (can be changed from outside)
	,id: 'searchCriteriaPanel'

	,initComponent:function() {
		this.addEvents(
			'selectedPlan'
			,'foundPlans'
			,'searchedPlanCriteria'
		);

		var provincieStore = new Ext.data.Store({
			proxy: new Ext.ux.data.DwrProxy({
				api: {read: SearchService.listGemeentenProvincies}
				,listeners: {
					'beforeload': function(dataProxy, params) {
						params[dataProxy.loadArgsKey] = [Roo.currentTabFilter.name];
					}
				}
				,scope: this
			})
			,reader: new Ext.data.JsonReader({}, Ext.data.Record.create([
				{name: 'id', mapping: 'cbsCode' }
				,{name: 'name', mapping: 'naam' }
				,{name: 'tdn', mapping: 'tdnCode'}
			]))
		});
		var gemeenteStore = new Ext.data.Store({
			proxy: new Ext.ux.data.DwrProxy({
				api: {read: SearchService.findGemeenten}
				,listeners: {
					'beforeload': function(dataProxy, params){
						var record = provincieStore.query(Ext.getCmp('searchCriteriaPanel_provincieCbsCode').valueField, Ext.getCmp('searchCriteriaPanel_provincieCbsCode').getValue()).itemAt(0);
						if( record ) {
							params[dataProxy.loadArgsKey] = [record.json];
						}
						else {
							return false;
						}
					}
				}
				,scope: this
			})
			,reader: new Ext.data.JsonReader({}, Ext.data.Record.create([
				{name: 'id', mapping:'cbsCode' }
				,{name: 'name', mapping:'naam' }
				,{name: 'tdn', mapping: 'tdnCode'}
				,{name: 'provincieCbs', mapping: 'provincieCbsCode'}
			]))
		});

		var planTypeStore = new Ext.data.Store({
			proxy: new Ext.ux.data.DwrProxy({
				api: {read: SearchService.findPlanTypes}
				,listeners: {
					'beforeload': function(dataProxy, params){
						params[dataProxy.loadArgsKey] = [ Roo.currentTabFilter.name ];
					}
				}
			})
			,reader: new Ext.data.JsonReader({}, Ext.data.Record.create([
				{name: 'titel', mapping:'titel' }
				,{name: 'type', mapping: 'type'}
			]))
		});

		var planStatusStore = new Ext.data.Store({
			proxy: new Ext.ux.data.DwrProxy({
				api: {read: SearchService.findPlanStatuses}
				,listeners: {
					'beforeload': function(dataProxy, params){
						params[dataProxy.loadArgsKey] = [ Roo.currentTabFilter.name ];
					}
				}
			})
			,reader: new Ext.data.JsonReader({}, Ext.data.Record.create([
				{name: 'titel', mapping:'titel' }
				,{name: 'naam', mapping: 'naam'}
			]))
		});

		Ext.apply(this, {
			title: this.titleText
			,defaultType: 'combo'
			,animCollapse: false
			,autoHeight: true
			,defaults: {
				allowBlank: true
				,hideLabel: true
				,animCollapse: false
				,width: 170
				,listWidth: 185
				,loadingText: this.comboLoadingText
				,triggerAction: 'all'
				,editable: false
			}

			,items:[{
				xtype: 'label'
				,text: 'Zoek op criteria'
			},{
				id: 'searchCriteriaPanel_provincieCbsCode'
				,valueField: 'id'
				,displayField: 'name'
				,emptyText: this.provincie_emptyText
				,store: provincieStore
			},{
				id: 'searchCriteriaPanel_gemeenteCbsCode'
				,valueField: 'id'
				,displayField: 'name'
				,emptyText: this.gemeente_emptyText
				,store: gemeenteStore
			},{
				id: 'searchCriteriaPanel_planType'
				,valueField: 'type'
				,displayField: 'titel'
				,emptyText: this.planType_emptyText
				,store: planTypeStore
			},{
				id: 'searchCriteriaPanel_planStatus'
				,valueField: 'naam'
				,displayField: 'titel'
				,emptyText: this.planStatus_emptyText
				,store: planStatusStore
			},{
				xtype: 'datefield'
				,id: 'searchCriteriaPanel_planVanafDatum'
				,emptyText: this.planVanafDatum_emptyText
				,editable:true
				,format: this.datefield_format
				,hideTrigger: false
			},{
				xtype: 'datefield'
				,id: 'searchCriteriaPanel_planTotDatum'
				,emptyText: this.planTotDatum_emptyText
				,editable:true
				,format: this.datefield_format
				,hideTrigger: false
			}]
			,buttons: [{
				text: this.buttonSearch
				,handler: this.onSearch
			},{
				text: this.buttonErase
				,handler: function(t,e) {
					t.findParentByType('searchCriteriaPanel').getForm().reset();
				}
			}]
			,keys: {
				key: Ext.EventObject.ENTER
				,scope: this
				,handler: function() {
					this.onSearch(this.buttons[0],null);
				}
			}
		}); // e/o apply


		// call parent initComponent
		Roo.gui.SearchCriteriaPanel.superclass.initComponent.apply(this, arguments);

		this.provincieCombo = this.getComponent(1);
		this.gemeenteCombo = this.getComponent(2);
		this.planTypeCombo = this.getComponent(3);
		this.planStatusCombo = this.getComponent(4);

		this.provincieCombo.on({
			scope: this
			,select: function(combo, record, index) {
				this.gemeenteCombo.lastQuery = '';
				this.gemeenteCombo.reset();
				this.gemeenteCombo.store.removeAll();
				this.gemeenteCombo.store.reload();
			}
		});

		this.gemeenteCombo.on({
			scope: this
			,beforequery: function(queryEvent) {
				if (!this.provincieCombo.value) {
					Ext.MessageBox.alert(messages.msg.titleWarning(), messages.searchCriteriaPanel.gemeente.noProvincieSelected());
					return false;
				}
			}
		});

		eventHub.on({
			scope: this
			,'searchedLocation': this.onClear
			,'searchedPlanName': this.onClear
			,'searchedPlanId': this.onClear
			,'changedFilter': function(parameters) {
				console.log('SearchCriteriaPanel - changed filter');
				console.dir(parameters);

				// Reset the form on tab changes
				switch(parameters.panelTitle) {
					case this.tabBestemmingsplannen:
						if(parameters.lastFilterName === 'ACTUEEL' || parameters.lastFilterName === 'JURIDISCH') {
							this.planStatusCombo.store.reload();
							this.planStatusCombo.reset();
							break;
						}
					default:
						Ext.getCmp('searchCriteriaPanel').getForm().reset();

						this.planTypeCombo.store.reload();
						this.planStatusCombo.store.reload();
						this.provincieCombo.store.reload();
						break;
				}
			}
		});

	} // e/o function initComponent

	,onSearch: function(t,e) {
		var parent = t.findParentByType('searchCriteriaPanel');
		var values = parent.getForm().getValues();

		var params = {};

		for(p in values) {
			var field = parent.getForm().findField(p);

			if (field.getRawValue().length > 0 ) {
				params[p.substring(p.lastIndexOf('_')+1)] = field.getValue();
			}
		}

		Ext.getCmp('searchCriteriaPanel').fireEvent('searchedPlanCriteria');

		plansStore.load({
			params: {
				query: params
			}
			,callback: function(records, options, success) {
				if (success) {
					if(records.length == 1 && records[0].json.planTooMuch == true) {
						//do nothing
					} else if (records.length == 0) {
						Ext.Msg.alert(messages.msg.titleInfo(), messages.searchCriteriaPanel.noResults());
					} else if (records.length == 1) {
						Ext.getCmp('searchCriteriaPanel').fireEvent('selectedPlan', records[0].json);
					} else  {
						var str = [];

						if(params.provincieCbsCode)
							str[str.length] = Ext.getCmp('searchCriteriaPanel_provincieCbsCode').getRawValue();
						if(params.gemeenteCbsCode)
							str[str.length] = Ext.getCmp('searchCriteriaPanel_gemeenteCbsCode').getRawValue();
						if(params.planType)
							str[str.length] = params.planType.titel;
						if(params.planStatus)
							str[str.length] = params.planStatus.titel;
						if(params.planVanafDatum)
							str[str.length] = 'vanaf:'+ Ext.getCmp('searchCriteriaPanel_planVanafDatum').getRawValue();
						if(params.planTotDatum)
							str[str.length] = 'tot:' + Ext.getCmp('searchCriteriaPanel_planTotDatum').getRawValue();

						var txt = '';
						for(var i=0; i<str.length; i++) {
							if(i>0){
								txt = txt + '; ';
							}
							txt =  txt + str[i];
						}

						Ext.getCmp('searchCriteriaPanel').fireEvent('foundPlans', records, txt);
					}
				} else {
					Ext.Msg.alert(messages.msg.titleError(), messages.searchCriteriaPanel.noPlansFound());
				}
			}
		});
	}
	,onClear: function() {
		Ext.getCmp('searchCriteriaPanel').getForm().reset();
	}
});	// e/o extend

// register xtype
Ext.reg('searchCriteriaPanel', Roo.gui.SearchCriteriaPanel);
// }}}