var filters = new Object();
filters.platforms = {};
filters.applications = {};
filters.version = {};

var SearchRecord = Ext.data.Record.create([
	{name : 'series_title'},
	{name : 'series_url'},
	{name : 'series_id'},
	{name : 'tutorial_title'},
	{name : 'user_can_play_movie'},
	{name : 'key'},
	{name : 'platform'},
	{name : 'platforms_id'},
	{name : 'filename'},
	{name : 'application'},
	{name : 'app_name'},
	{name : 'app_version'},
	{name : 'topics'},
	{name : 'movie_rank'},
	{name : 'application_rank'},
	{name : 'app_id'}
]);

function build_search_results(){
	var store = new xd.GroupingStore({
		groupField:'application_rank',
		autoLoad: false,
		sortInfo: { field: 'application_rank', direction: 'DESC'},
		reader: new Ext.data.ArrayReader({},SearchRecord)
	});

	var empty_text = 'No results found. Please refine search.';
	if(has_preferred_filters){
     		empty_text += ' You can also try turning off preferred filters from the checkbox above.';
	}

	var filters_checkbox = preferred_filters_checkbox('View Only Preferred Tutorials');

	grouping_view.emptyText = empty_text;

	var grid = new xg.GridPanel({
		store: store,

		columns: [
			{id:'application_rank',header: "App Rank", sortable: true, dataIndex: 'application_rank', groupRenderer: renderApplicationTitle},
			{id:'tutorial_title',header: "Tutorial Title", width: 105, sortable: true, dataIndex: 'tutorial_title', renderer: renderTutorialTitle},
			{id:'key',header: "Key", width: 75, sortable: true, dataIndex: 'key'},
			{id:'platforms',header: "Platform", width: 80, sortable: true, dataIndex: 'platform'}
		],

		view: grouping_view,
		width: 700,
		autoHeight: true,
		frame: true,
		collapsible: false,
		disableSelection: true,
		enableColumnHide: false,
		enableColumnMove: false,
		trackMouseOver: false,
		loadMask: true,

		id: 'results_grid',
		autoExpandColumn: 'tutorial_title',
		title: 'Search Results: ',
		iconCls: 'icon-grid',
		renderTo: 'search_table',
		listeners: {
			'afterrender': function(result_grid){
				result_grid.loadMask.show();
				Ext.Ajax.request({
					url: proxy_url,
					success: function(transport){
						var rows = Ext.util.JSON.decode(transport.responseText);

						var the_store = result_grid.getStore();

						var recs = new Array;
						Ext.each(rows,function(row){
							var new_row = {
								'series_title' 		: row[0],
								'series_url' 		: row[1],
								'series_id' 		: row[2],
								'tutorial_title' 	: row[3],
								'user_can_play_movie' 	: row[4],
								'key' 			: row[5],
								'platform' 		: row[6],
								'platforms_id' 		: row[7],
								'filename' 		: row[8],
								'application' 		: row[9],
								'app_name' 		: row[10],
								'app_version' 		: row[11],
								'topics' 		: row[12],
								'movie_rank' 		: row[13],
								'application_rank' 	: row[14],
								'app_id' 		: row[15]

							}
							var rec = new the_store.recordType(new_row,row[5]);
							recs.push(rec);
						});
						the_store.add(recs);

						apply_filters();
						if(use_preferred_filters){
							filter_filters(use_preferred_filters);
						}
						result_grid.loadMask.hide();
					}
				});
			},
          	scope: this
		},
		tbar: [
				preferred_filters_edit_link,
				'->',
				filters_checkbox
		]
	});
}

function setup_search_forms() {
	var search_form = $('search_form');
	if(search_form == null){
     	search_form = $('search_form_sidebar');
	}
	// Override the submit action so we can append the filters
	search_form.observe('submit',function(event){
		Event.stop(event);

		if($('q').value == ''){
         	al_alert({ 
				msg: 'Please enter a keyword to search by keyword',
				title: 'Search Form Error',
				callback: function(){
					$('q').focus();
				}
			});
			return false;
		}

		// Only allow alphanumeric
		$('q').value = $('q').value.replace(/[^a-zA-Z 0-9]+/g,'');

		// Turn the filters into a hash with id as key.
		// This is passed to the results page where the filters are
		// applied post-search
		var search_filters = new Object();
		$$('#search_filters .filter').each(function(filter){
			// default_opt checks to make sure we are not on the first option
			// which is not actually a valid option
			var default_opt = new RegExp('^'+_get_filter_name(filter.id),'i');
			if(filter.value > '' && default_opt.test(filter.value) == false){
				search_filters[filter.id] = filter.value;
			}
		});
		$('applications_search_filter').value = '';
		$('platforms_search_filter').value = '';
		$('version_search_filter').value = '';
		$('filters').value = $H(search_filters).toJSON();
		this.submit();
	});
}

// Adjust the filter name. Called from browse_search_utility.js
// These have weird, random names so we do it case by case
function adjust_filter_name(filter_name){
	filter_name = filter_name.substring(0,filter_name.indexOf('_')); 
	switch(filter_name){
		case 'applications':
			filter_name = 'app_name';
			break;
		case 'version':
			filter_name = 'app_version';
			break;
		case 'platforms':
			filter_name = 'platform';
			break;
	}
	return filter_name;
}

function filter_filters(checked){
	filter_search_filters(checked);
}
