;(function (define) { 'use strict'; define(['backbone', 'js/search/base/routers/search_router', 'js/search/dashboard/views/search_form', 'js/search/base/collections/search_collection', 'js/search/dashboard/views/search_results_view'], function(Backbone, SearchRouter, SearchForm, SearchCollection, SearchListView) { return function () { var router = new SearchRouter(); var form = new SearchForm(); var collection = new SearchCollection([]); var results = new SearchListView({ collection: collection }); var dispatcher = _.clone(Backbone.Events); dispatcher.listenTo(router, 'search', function (query) { form.doSearch(query); }); dispatcher.listenTo(form, 'search', function (query) { results.showLoadingMessage(); collection.performSearch(query); router.navigate('search/' + query, { replace: true }); }); dispatcher.listenTo(form, 'clear', function () { collection.cancelSearch(); results.clear(); router.navigate(''); }); dispatcher.listenTo(results, 'next', function () { collection.loadNextPage(); }); dispatcher.listenTo(results, 'reset', function () { form.resetSearchForm(); }); dispatcher.listenTo(collection, 'search', function () { results.render(); }); dispatcher.listenTo(collection, 'next', function () { results.renderNext(); }); dispatcher.listenTo(collection, 'error', function () { results.showErrorMessage(); }); }; }); })(define || RequireJS.define);