text: define( [
  	'backbone',
  	'bus'
  ],
  	function ( Backbone, bus ) {
  		"use strict";
  
  		return Backbone.Model.extend( {
  			defaults : {
  				requests : [],
  				ownerId : undefined,
  				sessionId : undefined
  			},
  
  			initialize : function () {
  				_.bindAll( this );
  				this.setSessionId();
  				this.subscriptions = [
  					bus.app.subscribe( "search.info", this.setOwner ).withContext( this ),
  					bus.app.subscribe( "search.requests", this.updateRequests ).withContext( this ),
  					bus.app.subscribe( "search.new.ask", this.addRequest ).withContext( this ),
  					bus.app.subscribe( "search.init", this.askForUpdate ).withContext( this )
  				];
  				this.askForUpdate();
  			},
  
  			askForUpdate : function () {
  				bus.app.publish( {
  					topic : "get.search.requests",
  					data : {}
  				} );
  				bus.app.publish( {
  					topic : "get.search.info",
  					data : {}
  				} );
  			},
  
  			dispose : function () {
  				_.each( this.subscriptions, function ( subscription ) {
  					subscription.unsubscribe();
  				} );
  				this.clear( { silent : true } );
  			},
  
  			setOwner : function ( data, env ) {
  				this.set( "ownerId", data.id );
  				this.setSessionId();
  			},
  
  			setSessionId : function () {
  				var self = this;
  				postal.utils.getSessionId(
  					function ( session ) {
  						self.set( "sessionId", session.id );
  					}
  				);
  			},
  
  			updateRequests : function ( data, env ) {
  				var reqs = _.sortBy( data, function ( item ) {
  					return item.searchTerm;
  				});
  				this.set( "requests", reqs );
  			},
  
  			addRequest : function ( data, env ) {
  				this.askForUpdate();
  			}
  		} );
  	} );