	
// do not remove, else ssl warnings shall follow
Ext.BLANK_IMAGE_URL = root + '/scripts/ext-2.0/resources/images/default/s.gif';

	var selected_row_id = null;
	var input_timer;
	var focussed_input_id;
	var filterMenu;
	var savedFilters = null;
	var currentFilter = 0;
	

	
	function loadSavedFilter( id )
	{		
		if ( id < 1 )
		{
			clearSavedFilters( );
			return;
		}
		
		Ext.Ajax.request({
			url: 	root + 'filters/load-saved-filter',
			params: { type: type, id: id },
			success: function( response ) {
				currentFilter = id;
				
				var response = response.responseText;
				var data = Ext.util.JSON.decode(response);
				var filters = data.filters;

				var filterPlugin = Ext.getCmp('list-grid').plugins[0];
				filterPlugin.setFilters( filters );
			}  
		});
	}
	
	function saveFilter( item )
	{
		if ( currentFilter > 0 && Ext.getDom('filter_input').value != 'Saved filters' )
		{
			Ext.Msg.show({
				title: 		'Save',
				msg: 		'Do you want to update the filter ' + Ext.getDom('filter_input').value + ' or save a new filter?',
				buttons: 	{
					yes: 	'Update filter',
					no: 	'Save new',
					cancel: 'Cancel' 
				},
				fn: function( button )
				{
					if ( button == 'yes' )
					{
						// update filter
						processSaveFilter( item.id, true );
					} 
					else if ( button == 'no' )
					{
						// save new
						saveNamedFilter(  );
					}
					return;
				}
			});
		} else {
			saveNamedFilter(  );
		}
		
		return;
		
	}
	
	function saveNamedFilter( )
	{
		Ext.Msg.prompt('Save filter', 'Please provide a name for this filter', function( button, text) {
			if ( button == 'ok')
			{
				processSaveFilter( text, false );	
			}
		});
	}
	
	function processSaveFilter( name, update )
	{
		var grid = Ext.getCmp('list-grid');
		var filterPlugin = grid.plugins[0];
		
		var fields = filterPlugin.formFields;
		var submit = {};
		submit.type = type;
		submit.name = name;
		
		for (var i=0; i < fields.length; i++)
		{
			var key = 'filters[' + fields[i].getName() + ']';
			submit[key] = fields[i].getValue();
			
			var display_key = 'filters_display[' + fields[i].getName() + ']';
			submit[display_key] = fields[i].lastSelectionText;
		}

		var existing = false;
		if ( update )
		{
			existing = currentFilter;
			submit.update = currentFilter;
		}
		
		Ext.Ajax.request({
			url: 	root + 'filters/save-filter',
			params: submit,
			success: function( response ) {
				// get the select
				var response = response.responseText;
				var data = Ext.util.JSON.decode(response);

				if ( ! existing )
				{
					var num = filterMenu.items.getCount();
					
					var item = new Ext.menu.Item({
						text: name,
						id: data.id
					})
					
					currentFilter = data.id;
					
					Ext.getDom('filter_input').value = name;
					filterMenu.insert( num -3, item );
					getFilters( true );
				}
				
			}
		});

	}
	
	function clearSavedFilters( )
	{		
		// clear filter inputs
		var grid = Ext.getCmp('list-grid');
		grid.plugins[0].resetFields();

		Ext.Ajax.request({
			url: root + 'filters/clear-filter',
			params: { type: type }
		});
		
		currentFilter = 0;
		Ext.getDom('filter_input').value = 'Saved filters';

	}
	
	function deleteSavedFilter( item )
	{
		
		Ext.Msg.confirm( 'Delete?', 'Are you sure you want to delete the filter: ' + Ext.getDom('filter_input').value, function(button) {
			if ( button == 'yes' )
			{
				Ext.Ajax.request({
					url: root + 'filters/delete-filter',
					params: { type: type, id: currentFilter }
				});
	

				// pop out the deleted one
				var items = filterMenu.items.items;

				for (var i=0; i < items.length; i++)
				{
					var item = items[i];
					if (item.id == currentFilter)
					{
						filterMenu.remove( item );
						continue;
					}
				}
				
				Ext.getDom('filter_input').value = 'Saved filters';
				clearSavedFilters( );
				//getFilters( true );
				
			}
		});
	}
	
	function getFilters( refresh )
	{
		if ( typeof(refresh) == 'undefined' )
		{
			refresh = false;
		}
		
		// check cache
		if ( savedFilters && ! refresh )
		{
			showFilterMenu( );
		}
		else
		{
			Ext.Ajax.request({
				url: root + 'filters/get-filters',
				params: {type: type},
				success: function(result) {
					var response = result.responseText;
					savedFilters = Ext.util.JSON.decode(response);
					if ( ! refresh )
					{
						showFilterMenu( );
					}
				}
			});
		}
	}
	
	function showFilterMenu(  )
	{
		if ( ! savedFilters )
		{
			return false;
		}
		
		
		if ( filterMenu )
		{
			filterMenu.show( Ext.get('filter_input') );
			return;
		}
		
		filterMenu = new Ext.menu.Menu({
			id: 'filterMenu',
			items: savedFilters,
			cls: 'no-icon-menu',
			defaults: {
				style: 'overflow: hidden'
			},
			width: Ext.get('filter_input').getWidth() + 17
		});
		
		filterMenu.addSeparator();
		
		filterMenu.add({
			text: 'Save current filter...',
			id: 'save'
		});
		
		filterMenu.add({
			text: 'Delete current filter...',
			id: 'delete'
		});
		
		filterMenu.on('click', function(  menu, item, e ) {
			if ( item.id == 'save' )
			{
				saveFilter( item );
			}
			else if ( item.id == 'delete' )
			{
				deleteSavedFilter( item );
			}
			else
			{
				loadSavedFilter( item.id );
				Ext.getDom('filter_input').value =  item.text;
				Ext.getDom('filter_input').title = item.text;
			}
		});
		
		filterMenu.show( Ext.get('filter_input') );
	}
