<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>app/assistants/preferences-assistant.js</filename>
    </added>
    <added>
      <filename>app/assistants/stage-lightweight-search-assistant.js</filename>
    </added>
    <added>
      <filename>app/views/preferences/preferences-scene.html</filename>
    </added>
    <added>
      <filename>images/theme/menu-icon-home.png</filename>
    </added>
    <added>
      <filename>images/theme/menu-icon-trends.png</filename>
    </added>
    <added>
      <filename>images/theme/palm-group.png</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -4,6 +4,14 @@ function LoginAssistant(argFromPusher) {
 	   to the scene controller (this.controller) has not be established yet, so any initialization
 	   that needs the scene controller should be done in the setup function below. */
 	
+	if (argFromPusher &amp;&amp; argFromPusher.firstload) {
+		if (sc.app.prefs.get('always-go-to-my-timeline')) {
+			Mojo.Controller.stageController.pushScene('my-timeline');	
+		} else {
+			alert('NO always-go-to-my-timeline');
+		}
+	}
+	
 	scene_helpers.addCommonSceneMethods(this);
 }
 
@@ -22,19 +30,17 @@ LoginAssistant.prototype.setup = function() {
 
 	this.scroller = this.controller.getSceneScroller();
 	
+	this.initAppMenu();
 	
 	/*
 		Initialize the model
 	*/
-	var username = sc.app.prefs.get('username');
-	var password = sc.app.prefs.get('password');
-
 	// alert(username+&quot;:&quot;+password)
 	this.model = {
-		'username':username,
-		'password':password,
+		'username':false,
+		'password':false,
 		'search':'',
-		'always-go-to-my-timeline':sc.app.prefs.get('always-go-to-my-timeline')
+		'always-go-to-my-timeline':false
 	};
 	
 	this.spinnerModel = {
@@ -46,13 +52,13 @@ LoginAssistant.prototype.setup = function() {
 	 * Panels that use jQuery (but listen with Mojo)
 	 */
 	$('login-panel').hide();
-	Mojo.Event.listen($('show-login-button'), Mojo.Event.tap, this.toggleLoginPanel.bind(this));
-
-	// $('search-panel').hide();
-	Mojo.Event.listen($('show-search-button'), Mojo.Event.tap, this.toggleSearchPanel.bind(this));
-
-	// $('trends-panel').hide();
-	// Mojo.Event.listen($('show-trends-button'), Mojo.Event.tap, this.toggleTrendsPanel.bind(this));
+	var thisA = this;
+	jQuery('#login-toggle').bind(Mojo.Event.tap, function() {
+		thisA.togglePanel('#login-panel', '#login-toggle');
+	});
+	jQuery('#search-toggle').bind(Mojo.Event.tap, function() {
+		thisA.togglePanel('#search-panel', '#search-toggle');
+	});
 	
 	
 	/**
@@ -109,7 +115,7 @@ LoginAssistant.prototype.setup = function() {
 	*/
 	this.controller.setupWidget('search',
 	    this.atts = {
-	        hintText: 'enter search terms',
+	        // hintText: 'enter search terms',
 	        label: &quot;search terms&quot;,
 			enterSubmits: true,
 			modelProperty:		'search',
@@ -135,7 +141,6 @@ LoginAssistant.prototype.setup = function() {
 	*/
 	Mojo.Event.listen($('login-button'), Mojo.Event.tap, this.handleLogin.bind(this));
 	Mojo.Event.listen($('search-button'), Mojo.Event.tap, this.handleSearch.bind(this));
-	Mojo.Event.listen($('status-panel'), Mojo.Event.tap, this.hideStatusPanel.bind(this));
 	
 	/*
 		listen for trends data updates
@@ -165,16 +170,108 @@ LoginAssistant.prototype.setup = function() {
 }
 
 
+
+LoginAssistant.prototype.activate = function(argFromPusher) {
+	/* put in event handlers here that should only be in effect when this scene is active. For
+	   example, key handlers that are observing the document */
+
+	this.model.username = sc.app.prefs.get('username');
+	this.model.password = sc.app.prefs.get('password');
+	this.model['always-go-to-my-timeline'] = sc.app.prefs.get('always-go-to-my-timeline');
+	this.controller.modelChanged( this.model );
+	 
+
+	var thisA = this;
+
+	jQuery('.trend-item').live(Mojo.Event.tap, function() {
+		var term = jQuery(this).attr('data-searchterm');
+		thisA.searchFor(term);
+	});
+
+
+	/*
+		What to do if we succeed
+		Note that we pass the assistant object as data into the closure
+	*/				
+	jQuery().bind('verify_credentials_succeeded', {'thisAssistant':this}, function(e) {
+		sc.app.twit.setCredentials(e.data.thisAssistant.model.username, e.data.thisAssistant.model.password);
+
+		sc.app.prefs.set('username', e.data.thisAssistant.model.username);
+		sc.app.prefs.set('password', e.data.thisAssistant.model.password);
+		
+		
+		sc.app.lastFriendsTimelineId = 1;
+		
+		e.data.thisAssistant.hideInlineSpinner('#spinner-container');
+		
+		/*
+			@todo Save username and password as encrypted vals
+		*/
+
+		// Mojo.Controller.stageController.swapScene(&quot;my-timeline&quot;, this);
+		// findAndSwapScene(&quot;my-timeline&quot;, this);
+		Mojo.Controller.stageController.pushScene('my-timeline');
+	});
+	
+	/*
+		What to do if we fail
+	*/
+	jQuery().bind('verify_credentials_failed', {'thisAssistant':this}, function(e) {
+		
+		
+		/*
+			If we return to this scene from another
+			and fail the login, e.data.thisAssistant will not have
+			its controller property. WHY?
+		*/
+		
+		e.data.thisAssistant.stopInlineSpinner('#spinner-container', 'Login failed!');
+	});
+	
+}
+
+
+LoginAssistant.prototype.deactivate = function(event) {
+	/* remove any event handlers you added in activate and do any other cleanup that should happen before
+	   this scene is popped or another scene is pushed on top */
+	
+	this.model.username = '';
+	this.model.password = '';
+	this.controller.modelChanged( this.model );
+	// this.hideStatusPanel();
+	
+	jQuery().unbind('verify_credentials_succeeded');
+	jQuery().unbind('verify_credentials_failed');
+	
+	jQuery('#goToMyTimelineCheckbox', this.scroller).unbind(Mojo.Event.tap);
+	
+	jQuery('.trend-item').die(Mojo.Event.tap);
+	
+}
+
+LoginAssistant.prototype.cleanup = function(event) {
+	/* this function should do any cleanup needed before the scene is destroyed as 
+	   a result of being popped off the scene stack */
+}
+
+
+
+
+
+
+
+
+
 LoginAssistant.prototype.togglePanel = function(panel_selector, button_selector, onOpen, onClose) {
 	if (jQuery(panel_selector).is(':visible')) { // is open, we need to close
 		
-		jQuery(panel_selector).hide('blind', 'fast');
+		jQuery(panel_selector).fadeOut('fast');
 		jQuery(button_selector).removeClass('open').addClass('closed');
 		if (onClose) { onClose(); }
 		
 	} else { // is closed, we need to open
 		
-		jQuery(panel_selector).show('blind', 'fast');
+		jQuery(panel_selector).fadeIn('fast');
 		jQuery(button_selector).removeClass('closed').addClass('open');
 		if (onOpen) { onOpen(); }
 		
@@ -231,65 +328,13 @@ LoginAssistant.prototype.handleLogin = function(event) {
 
 LoginAssistant.prototype.handleSearch = function(event) {
 	if (this.model &amp;&amp; this.model.search) {
-		findAndSwapScene(&quot;search-twitter&quot;, {
+		Mojo.Controller.stageController.pushScene(&quot;search-twitter&quot;, {
 			searchterm:this.model.search
 		});
 	}
 }
 
 
-/**
- * turn the spinner on, and optionally set the message
- * @param {string} message 
- */
-LoginAssistant.prototype.spinnerOn = function(message) {
-	if (message) {
-		this.setSpinnerLabel(message);
-	}
-	
-	this.showStatusPanel();
-	
-	this.spinnerModel.spinning = true;
-	this.controller.modelChanged( this.spinnerModel );
-}
-
-/**
- * Turns off the spinner. does NOT hide the status panel. Optionally sets message
- * @param {string} message
- */
-LoginAssistant.prototype.spinnerOff = function(message) {
-	if (message) {
-		this.setSpinnerLabel(message);
-	}
-	this.spinnerModel.spinning = false;
-	this.controller.modelChanged( this.spinnerModel );
-}
-
-/**
- * @param {string} text
- */ 
-LoginAssistant.prototype.setSpinnerLabel = function(text) {
-	$('status-label').update(text);
-}
-
-/**
- * show the status panel 
- */
-LoginAssistant.prototype.showStatusPanel = function() {
-	if (!jQuery('#status-panel').is(':visible')) {
-		jQuery('#status-panel').fadeIn(500);
-	}
-}
-
-/**
- * hide the status panel 
- */
-LoginAssistant.prototype.hideStatusPanel = function(event) {
-	if (jQuery('#status-panel').is(':visible')) {
-		jQuery('#status-panel').fadeOut(500);
-	}
-}
-
 LoginAssistant.prototype.propertyChanged = function(event) {
 	dump(&quot;********* property Change *************&quot;);
 }
@@ -298,88 +343,4 @@ LoginAssistant.prototype.propertyChanged = function(event) {
 
 
 
-LoginAssistant.prototype.activate = function(event) {
-	/* put in event handlers here that should only be in effect when this scene is active. For
-	   example, key handlers that are observing the document */
-		// 
-	// dump('getScenes()');
-	// dump(Mojo.Controller.stageController.getScenes());
-	// dump('activeScene()');
-	// dump(Mojo.Controller.stageController.activeScene());
-	// dump('topScene()');
-	// dump(Mojo.Controller.stageController.topScene());
-
-
-	var thisA = this;
-
-	jQuery('.trend-item').live(Mojo.Event.tap, function() {
-		var term = jQuery(this).attr('data-searchterm');
-		thisA.searchFor(term);
-	});
-
-
-	/*
-		What to do if we succeed
-		Note that we pass the assistant object as data into the closure
-	*/				
-	jQuery().bind('verify_credentials_succeeded', {'thisAssistant':this}, function(e) {
-		sc.app.twit.setCredentials(e.data.thisAssistant.model.username, e.data.thisAssistant.model.password);
 
-		sc.app.prefs.set('username', e.data.thisAssistant.model.username);
-		sc.app.prefs.set('password', e.data.thisAssistant.model.password);
-		
-		
-		sc.app.lastFriendsTimelineId = 1;
-		
-		e.data.thisAssistant.hideInlineSpinner('#spinner-container');
-		
-		/*
-			@todo Save username and password as encrypted vals
-		*/
-
-		// Mojo.Controller.stageController.swapScene(&quot;my-timeline&quot;, this);
-		findAndSwapScene(&quot;my-timeline&quot;, this);
-	});
-	
-	/*
-		What to do if we fail
-	*/
-	jQuery().bind('verify_credentials_failed', {'thisAssistant':this}, function(e) {
-		
-		
-		/*
-			If we return to this scene from another
-			and fail the login, e.data.thisAssistant will not have
-			its controller property. WHY?
-		*/
-		
-		e.data.thisAssistant.stopInlineSpinner('#spinner-container', 'Login failed!');
-	});
-	
-
-
-}
-
-
-LoginAssistant.prototype.deactivate = function(event) {
-	/* remove any event handlers you added in activate and do any other cleanup that should happen before
-	   this scene is popped or another scene is pushed on top */
-	
-	this.model.username = '';
-	this.model.password = '';
-	this.controller.modelChanged( this.model );
-	this.hideStatusPanel();
-	
-	jQuery().unbind('verify_credentials_succeeded');
-	jQuery().unbind('verify_credentials_failed');
-	
-	jQuery('#goToMyTimelineCheckbox', this.scroller).unbind(Mojo.Event.tap);
-	
-	jQuery('.trend-item').die(Mojo.Event.tap);
-	
-}
-
-LoginAssistant.prototype.cleanup = function(event) {
-	/* this function should do any cleanup needed before the scene is destroyed as 
-	   a result of being popped off the scene stack */
-}</diff>
      <filename>app/assistants/login-assistant.js</filename>
    </modified>
    <modified>
      <diff>@@ -10,11 +10,13 @@ function ManageFollowersAssistant() {
 
 ManageFollowersAssistant.prototype.setup = function() {
 	
+	this.initAppMenu();
+	
 	this.setupCommonMenus({
 		viewMenuItems: [
 			{
 				items: [
-					{label:$L('Search Twitter'), command:'scroll-top'},
+					{label:$L('Manage Followers'), command:'scroll-top'},
 					// {label: $L('Show me'), iconPath:'images/theme/menu-icon-triangle-down.png', submenu:'filter-menu'},
 				]
 			},
@@ -28,10 +30,10 @@ ManageFollowersAssistant.prototype.setup = function() {
 		cmdMenuItems: [{ items:
 			[
 				{},
-				{label:$L('Home'),        command:'home', shortcut:'H'},
+				// {label:$L('Home'),        iconPath:'images/theme/menu-icon-home.png', command:'home', shortcut:'H'},
 				{label:$L('My Timeline'), icon:'conversation', command:'my-timeline', shortcut:'T'},
 				{label:$L('Search'),      icon:'search', command:'search', shortcut:'S'},
-				{label:$L('Followers'),   command:'followers', shortcut:'L', disabled:true},
+				{label:$L('Followers'),   icon:'remove-vip', command:'followers', shortcut:'L', disabled:true},
 				{}
 			]
 		}]</diff>
      <filename>app/assistants/manage-followers-assistant.js</filename>
    </modified>
    <modified>
      <diff>@@ -22,6 +22,7 @@ MessageDetailAssistant.prototype.setup = function() {
 
 	// alert('MessageDetailAssistant.prototype.setup');
 	
+	this.initAppMenu();
 	
 	this.setupCommonMenus({
 		viewMenuItems: [
@@ -30,10 +31,13 @@ MessageDetailAssistant.prototype.setup = function() {
 					{label:$L('Back'),        icon:'back', command:'back'},
 					{label:$L('Message Detail'), command:'scroll-top'}
 				]
+			},
+			{
+				items: [
+					{label:$L('Compose'),  icon:'compose', command:'compose', shortcut:'N'},
+				]
 			}
-		],
-		cmdMenuItems: [
-			{label:$L('Compose'),  icon:'compose', command:'compose', shortcut:'N'},
+			
 		]
 	});
 	
@@ -57,22 +61,7 @@ MessageDetailAssistant.prototype.activate = function(event) {
 	/* put in event handlers here that should only be in effect when this scene is active. For
 	   example, key handlers that are observing the document */
 	
-	// alert('MessageDetailAssistant.prototype.activate');
-	
-	// dump('getScenes()');
-	// dump(Mojo.Controller.stageController.getScenes());
-	// dump('activeScene()');
-	// dump(Mojo.Controller.stageController.activeScene());
-	// dump('topScene()');
-	// dump(Mojo.Controller.stageController.topScene());
-	// dump('isChildWindow()');
-	// dump(Mojo.Controller.stageController.isChildWindow());
-	
-
-
-	
-	sc.app.twit.getOne(this.status_id);
-	
+	sc.app.twit.getOne(this.status_id);	
 
 	
 	var thisA = this; // for closures</diff>
      <filename>app/assistants/message-detail-assistant.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,19 +1,34 @@
+/**
+ * events raised here:
+ * 'my_timeline_refresh' 
+ */
+
+
 function MyTimelineAssistant(argFromPusher) {
 	/* this is the creator function for your scene assistant object. It will be passed all the 
 	   additional parameters (after the scene name) that were passed to pushScene. The reference
 	   to the scene controller (this.controller) has not be established yet, so any initialization
 	   that needs the scene controller should be done in the setup function below. */
 	scene_helpers.addCommonSceneMethods(this);
+	
+	/*
+		this property will hold the setInterval return
+	*/
+	this.refresher = null;
 }
 
 
 
 MyTimelineAssistant.prototype.setup = function() {
 	
-	// alert('MyTimelineAssistant.prototype.setup');
 	
 	/* this function is for setup tasks that have to happen when the scene is first created */
 
+	this.initAppMenu();
+
+	this.initTwit();
+
+
 	this.setupCommonMenus({
 		viewMenuItems: [
 			{
@@ -33,10 +48,10 @@ MyTimelineAssistant.prototype.setup = function() {
 		cmdMenuItems: [{ items:
 			[
 				{},
-				{label:$L('Home'),        command:'home', shortcut:'H'},
+				// {label:$L('Home'),        iconPath:'images/theme/menu-icon-home.png', command:'home', shortcut:'H'},
 				{label:$L('My Timeline'), icon:'conversation', command:'my-timeline', shortcut:'T', disabled:true},
 				{label:$L('Search'),      icon:'search', command:'search', shortcut:'S'},
-				{label:$L('Followers'),   command:'followers', shortcut:'L'},
+				{label:$L('Followers'),   icon:'remove-vip', command:'followers', shortcut:'L'},
 				{}
 			]
 		}]
@@ -64,19 +79,6 @@ MyTimelineAssistant.prototype.activate = function(event) {
 	/* put in event handlers here that should only be in effect when this scene is active. For
 	   example, key handlers that are observing the document */
 	
-	// alert('MyTimelineAssistant.prototype.activate');
-	
-	// dump('getScenes()');
-	// dump(Mojo.Controller.stageController.getScenes());
-	// dump('activeScene()');
-	// dump(Mojo.Controller.stageController.activeScene());
-	// dump('topScene()');
-	// dump(Mojo.Controller.stageController.topScene());
-	// dump('isChildWindow()');
-	// dump(Mojo.Controller.stageController.isChildWindow());
-	
-	
-	
 	this.addPostPopup();
 
 	
@@ -90,6 +92,7 @@ MyTimelineAssistant.prototype.activate = function(event) {
 		dump(response);
 		// e.data.thisAssistant.spinnerOff();
 		this.hideInlineSpinner('#my-timeline');
+		this.startRefresher();
 	});
 	
 	// jQuery().bind('new_friends_timeline_data', { thisAssistant:this }, function(e, tweets) {
@@ -107,47 +110,54 @@ MyTimelineAssistant.prototype.activate = function(event) {
 			var rendertweets = tweets;
 			
 			jQuery.each( rendertweets, function() {
-				// dump(this)
-				this.text = makeItemsClickable(this.text);
 				
 				/*
-					Render the tweet
+					check to see if this item exists
 				*/
-				if (this.SC_is_dm) {
-					var itemhtml = Mojo.View.render({object: this, template: 'shared/dm'});
+				if (!e.data.thisAssistant.getEntryElementByStatusId(this.id)) {
+					// dump(this)
+					this.text = makeItemsClickable(this.text);
+
+					/*
+						Render the tweet
+					*/
+					if (this.SC_is_dm) {
+						var itemhtml = Mojo.View.render({object: this, template: 'shared/dm'});
+					} else {
+						var itemhtml = Mojo.View.render({object: this, template: 'shared/tweet'});
+					}
+
+					/*
+						make jQuery obj
+					*/
+					var jqitem = jQuery(itemhtml);
+
+					/*
+						attach data object to item html
+					*/
+					jqitem.data('item', this);
+
+					if (this.SC_is_reply) {
+						jqitem.addClass('reply');
+					}
+
+					if (this.SC_is_dm) {
+						jqitem.addClass('dm');
+					}
+
+					/*
+						put item on timeline
+					*/
+					jQuery('#my-timeline', e.data.thisAssistant.scroller).prepend(jqitem);
 				} else {
-					var itemhtml = Mojo.View.render({object: this, template: 'shared/tweet'});
+					dump('Tweet ('+this.id+') already is in timeline');
 				}
-				
-				/*
-					make jQuery obj
-				*/
-				var jqitem = jQuery(itemhtml);
-				
-				/*
-					attach data object to item html
-				*/
-				jqitem.data('item', this);
-				
-				if (this.SC_is_reply) {
-					jqitem.addClass('reply');
-				}
-				
-				if (this.SC_is_dm) {
-					jqitem.addClass('dm');
-				}
-				
-				/*
-					put item on timeline
-				*/
-				jQuery('#my-timeline').prepend(jqitem);
-			});
-			
+			});			
 			
 			e.data.thisAssistant.scrollToNew();
 			
 		} else {
-			Mojo.log(&quot;no new tweets&quot;);
+			dump(&quot;no new tweets&quot;);
 		}
 
 		/*
@@ -174,16 +184,16 @@ MyTimelineAssistant.prototype.activate = function(event) {
 
 		// e.data.thisAssistant.spinnerOff();
 		e.data.thisAssistant.hideInlineSpinner('#my-timeline');
+		e.data.thisAssistant.startRefresher();
 	});
 
 	
-	
-	
+	jQuery().bind('my_timeline_refresh', { thisAssistant:this }, function(e) {
+		e.data.thisAssistant.refresh();
+	});
 	
 	/*
 		listen for clicks on user avatars
-		Note that these will hear clicks across all active scenes, not just
-		this one.
 	*/
 	jQuery('div.timeline-entry&gt;.user', this.scroller).live(Mojo.Event.tap, function(e) {
 		var userid = jQuery(this).attr('data-user-screen_name');
@@ -212,23 +222,13 @@ MyTimelineAssistant.prototype.activate = function(event) {
 		return false;
 	});
 	
-	/*
-		the &quot;hold&quot; event might be a little too short, and interfere with normal clicks, so not using
-	*/
-	// jQuery('#my-timeline&gt;div.timeline-entry').live(Mojo.Event.hold, function(e) {
-	// 	var statusid = jQuery(this).attr('data-status-id');
-	// 	Mojo.Controller.stageController.pushScene('message-detail', statusid);
-	// });
-
-
 	
 	/*
 		Make request to Twitter
 	*/
 	this.getData();
 	
-
-	
+	this.startRefresher();
 
 	
 }
@@ -238,20 +238,22 @@ MyTimelineAssistant.prototype.deactivate = function(event) {
 	/* remove any event handlers you added in activate and do any other cleanup that should happen before
 	   this scene is popped or another scene is pushed on top */
 	
-	// alert('MyTimelineAssistant.prototype.deactivate');
-	
 	this.removePostPopup();
 	
 	jQuery().unbind('error_user_timeline_data');
 	jQuery().unbind('new_combined_timeline_data');
 	jQuery().unbind('update_succeeded');
 	jQuery().unbind('update_failed');
+	jQuery().unbind('my_timeline_refresh');
 	
 	jQuery('div.timeline-entry&gt;.user', this.scroller).die(Mojo.Event.tap);
 	jQuery('.username.clickable', this.scroller).die(Mojo.Event.tap);
 	jQuery('.hashtag.clickable', this.scroller).die(Mojo.Event.tap);
 	jQuery('div.timeline-entry&gt;.status&gt;.meta', this.scroller).die(Mojo.Event.tap);
 	jQuery('a[href]', this.scroller).die(Mojo.Event.tap);
+	
+	
+
 }
 
 MyTimelineAssistant.prototype.cleanup = function(event) {
@@ -260,21 +262,55 @@ MyTimelineAssistant.prototype.cleanup = function(event) {
 }
 
 
-MyTimelineAssistant.prototype.getData = function() {
-	// this.spinnerOn();
+
+// MyTimelineAssistant.prototype.initTwit = function() {
+// };
+
+
+MyTimelineAssistant.prototype.getEntryElementByStatusId = function(id) {
+	
+	var el = jQuery('#my-timeline div.timeline-entry[data-status-id='+id+']', this.scroller).get(0);
 	
+	return el;
+	
+};
+
+
+
+
+MyTimelineAssistant.prototype.getData = function() {
 	sc.helpers.markAllAsRead('#my-timeline&gt;div.timeline-entry');
 	this.showInlineSpinner('#my-timeline', 'Looking for new tweets&#8230;');
-	// /*
-	// 	this is just to avoid network requests
-	// */
-	// jQuery.getJSON('user_timeline.json', function(data, textStatus) {
-	// 	jQuery().trigger('new_friends_timeline_data', [data]);
-	// });
-	
-	sc.app.twit.getCombinedTimeline();
+	
+	this.twit.getCombinedTimeline();
 };
 
-MyTimelineAssistant.prototype.refresh = function() {
+
+MyTimelineAssistant.prototype.refresh = function(e) {
+	this.stopRefresher();
 	this.getData();
-};
\ No newline at end of file
+};
+
+
+
+
+MyTimelineAssistant.prototype.startRefresher = function() {
+	dump('Starting refresher');
+	/*
+		Set up refresher
+	*/
+	
+	this.refresher = setInterval(function() {
+			jQuery().trigger('my_timeline_refresh');
+		}, sc.app.prefs.get('network-refreshinterval')
+	);
+	// this.refresher = setInterval(this.refresh.call(this), 5000)
+}
+
+MyTimelineAssistant.prototype.stopRefresher = function() {
+	dump('Stopping refresher');
+	/*
+		Clear refresher
+	*/
+	clearInterval(this.refresher);
+}</diff>
      <filename>app/assistants/my-timeline-assistant.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,3 +1,8 @@
+/**
+ * events raised here:
+ * 'search_twitter_refresh' 
+ */
+
 function SearchTwitterAssistant(args) {
 	/* this is the creator function for your scene assistant object. It will be passed all the 
 	   additional parameters (after the scene name) that were passed to pushScene. The reference
@@ -6,50 +11,130 @@ function SearchTwitterAssistant(args) {
 	
 	scene_helpers.addCommonSceneMethods(this);
 	
-	if (args.searchterm) {
+	if (args &amp;&amp; args.searchterm) {
 		this.passedSearch = args.searchterm;
 	}
+	if (args &amp;&amp; args.lightweight) {
+		
+		
+		/*
+			we may be in a new stage, so need to init prefs if they don't exist
+		*/
+		this.initPrefs();
+		
+		this.lightweight = true;
+		
+
+	}
+	
+	/*
+		this property will hold the setInterval return
+	*/
+	this.refresher = null;
 }
 
+
+SearchTwitterAssistant.prototype.initPrefs = function() {
+
+	
+	/*
+		load our prefs
+		default_preferences is from default_preferences.js, loaded in index.html
+	*/
+	if (!sc.app.prefs) {
+		
+		/*
+			We can't go to the login screen until the 
+			prefs have fully loaded
+		*/
+		var thisSA = this;
+		jQuery().bind('spazprefs_loaded', function() {
+
+			var username = sc.app.prefs.get('username');
+			var password = sc.app.prefs.get('password');
+
+			if (!sc.app.twit) {
+				sc.app.twit = new scTwit();
+
+				if (username &amp;&amp; password) {
+					sc.app.twit.setCredentials(username, password);
+				}
+			}		
+
+		});
+		
+		sc.app.prefs = new scPrefs(default_preferences);
+		sc.app.prefs.load();
+	}
+};
+
+
 SearchTwitterAssistant.prototype.setup = function() {
 	/* this function is for setup tasks that have to happen when the scene is first created */
 		
 	/* use Mojo.View.render to render view templates and add them to the scene, if needed. */
+
 	
+	var thisA = this;	
 	
-	this.setupCommonMenus({
-		viewMenuItems: [
-			{
-				items: [
-					{label:$L('Search Twitter'), command:'scroll-top', 'class':&quot;palm-header left&quot;},
-					// {label: $L('Show me'), iconPath:'images/theme/menu-icon-triangle-down.png', submenu:'filter-menu'},
-				]
-			},
-			{
-				items: [
-					{label:$L('Compose'),  icon:'compose', command:'compose', shortcut:'N'},
-					{label:$L('Update'),   icon:'sync', command:'refresh', shortcut:'R'}					
-				]
-			}
-		],
-		cmdMenuItems: [{ items:
-			[
-				{},
-				{label:$L('Home'),        command:'home', shortcut:'H'},
-				{label:$L('My Timeline'), icon:'conversation', command:'my-timeline', shortcut:'T'},
-				{label:$L('Search'),      icon:'search', command:'search', shortcut:'S', disabled:true},
-				{label:$L('Followers'),   command:'followers', shortcut:'L'},
-				{}
+	this.initTwit();
+	
+	this.initAppMenu();
+	
+	if (this.lightweight) {
+		this.setupCommonMenus({
+			viewMenuItems: [
+				{
+					items: [
+						{label:$L('Search Twitter'), command:'scroll-top', 'class':&quot;palm-header left&quot;},
+						// {label: $L('Show me'), iconPath:'images/theme/menu-icon-triangle-down.png', submenu:'filter-menu'},
+					]
+				},
+				{
+					items: [
+						{label:$L('Trends'),   iconPath:'images/theme/menu-icon-trends.png', command:'search-trends', shortcut:'R'},
+					]
+				}
 			]
-		}]
-	});
+		});
+		
+	} else {
+		this.setupCommonMenus({
+			viewMenuItems: [
+				{
+					items: [
+						{label:$L('Search Twitter'), command:'scroll-top', 'class':&quot;palm-header left&quot;},
+						// {label: $L('Show me'), iconPath:'images/theme/menu-icon-triangle-down.png', submenu:'filter-menu'},
+					]
+				},
+				{
+					items: [
+						{label:$L('Compose'),  icon:'compose', command:'compose', shortcut:'N'},
+						{label:$L('Trends'),   iconPath:'images/theme/menu-icon-trends.png', command:'search-trends', shortcut:'R'},
+						{label:$L('New Search'), icon:'new', command:'new-search-card', shortcut:'S'}					
+					]
+				}
+			],
+			cmdMenuItems: [{ items:
+				[
+					{},
+					// {label:$L('Home'),        iconPath:'images/theme/menu-icon-home.png', command:'home', shortcut:'H'},
+					{label:$L('My Timeline'), icon:'conversation', command:'my-timeline', shortcut:'T'},
+					{label:$L('Search'),      icon:'search', command:'search', shortcut:'S', disabled:true},
+					{label:$L('Followers'),   icon:'remove-vip', command:'followers', shortcut:'L'},
+					{}
+				]
+			}]
+		});
+		
+	}
 
 	this.scroller = this.controller.getSceneScroller();
 	
 	this.searchBoxAttr = {
 		&quot;hintText&quot;:	      'Enter search terms&#8230;',
-		&quot;filterFunction&quot;: this.search.bind(this),
 		&quot;focusMode&quot;:      Mojo.Widget.focusSelectMode,
+		&quot;fieldName&quot;:'search-twitter'
 		// &quot;changeOnKeyPress&quot;:true
 		
 	};
@@ -61,49 +146,14 @@ SearchTwitterAssistant.prototype.setup = function() {
 	this.controller.setupWidget('search-twitter-textfield', this.searchBoxAttr, this.searchBoxModel);
 	
 	
-	// this.comboBoxAttr = {
-	// 	&quot;hintText&quot;:		'Enter search terms&#8230;',
-	// 	&quot;filterFunction&quot;:this.search.bind(this),
-	// 	&quot;template&quot;:		'combobox/combobox-listitem'
-	// };
-	// this.comboBoxModel = {
-	// 	
-	// }
-	// 
-	// this.controller.setupWidget('search-twitter-combobox', this.comboBoxAttr, this.comboBoxModel);
-	// 
-	/* add event handlers to listen to events from widgets */
-	Mojo.Event.listen($('search-twitter-textfield'), Mojo.Event.propertyChange, this.search.bind(this));
-	
-
-	
-}
+	jQuery('#submit-search-button').bind(Mojo.Event.tap, function() {
+		thisA.search.call(thisA, thisA.searchBoxModel.value);
+	});
 
-SearchTwitterAssistant.prototype.search = function(e) {
-	dump(&quot;search called&quot;);
-	
-	/*
-		clear any existing results
-	*/
-	jQuery('#search-timeline').empty();
 	
-	// this.spinnerOn();
-	this.showInlineSpinner('#search-timeline', 'Looking for results&#8230;');
-	
-	
-	if (sch.isString(e)) {
-		dump(e);
-		sc.app.twit.search(e);
-	} else {
-		dump(e);
-		sc.app.twit.search(e.value);		
-	}
 }
 
 
-SearchTwitterAssistant.prototype.refresh = function() {
-	this.search(this.searchBoxModel.value);
-};
 
 
 SearchTwitterAssistant.prototype.activate = function(event) {
@@ -137,10 +187,10 @@ SearchTwitterAssistant.prototype.activate = function(event) {
 	
 	jQuery().bind('new_search_timeline_data', { thisAssistant:this }, function(e, tweets) {
 
-		dump(e.data.thisAssistant);
-
-		dump('seach\'s tweets:');
-		dump(tweets);
+		// dump(e.data.thisAssistant);
+		// 
+		// dump('search\'s tweets:');
+		// dump(tweets);
 
 		/*
 			reverse the tweets for collection rendering (faster)
@@ -148,7 +198,7 @@ SearchTwitterAssistant.prototype.activate = function(event) {
 		var rendertweets = tweets;
 
 		jQuery.each( rendertweets, function() {
-			dump(this)
+			// dump(this)
 			this.text = makeItemsClickable(this.text);
 			
 			var itemhtml = Mojo.View.render({object: this, template: 'search-twitter/search-item'});
@@ -158,14 +208,14 @@ SearchTwitterAssistant.prototype.activate = function(event) {
 			*/
 			var jqitem = jQuery(itemhtml);
 			
-			dump('data for item:');
-			dump(jQuery.data(jqitem.get(0)));
+			// dump('data for item:');
+			// dump(jQuery.data(jqitem.get(0)));
 			/*
 				attach data object to item html
 			*/
 			jqitem.data('item', this);
 			
-			dump(jqitem.attr('class'))
+			// dump(jqitem.attr('class'))
 			
 			// dump(this.user.screen_name +&quot; is from &quot;+ this.SC_timeline_from);
 			
@@ -182,14 +232,12 @@ SearchTwitterAssistant.prototype.activate = function(event) {
 		sch.updateRelativeTimes('#search-timeline&gt;div.timeline-entry&gt;.status&gt;.meta&gt;.date', 'data-created_at');
 		// e.data.thisAssistant.spinnerOff();
 		e.data.thisAssistant.hideInlineSpinner('#search-timeline');
-
+		e.data.thisAssistant.startRefresher();
 		
 	});
 	
 	/*
 		listen for clicks on user avatars
-		Note that these will hear clicks across all active scenes, not just
-		this one.
 	*/
 	jQuery('div.timeline-entry&gt;.user', this.scroller).live(Mojo.Event.tap, function(e) {
 		var userid = jQuery(this).attr('data-user-screen_name');
@@ -210,6 +258,23 @@ SearchTwitterAssistant.prototype.activate = function(event) {
 		var statusid = jQuery(this).attr('data-status-id');
 		Mojo.Controller.stageController.pushScene('message-detail', statusid);
 	});
+	
+	jQuery('#search-twitter-textfield', this.scroller).bind('focus', function(e) {
+		jQuery('#submit-search-button').fadeIn('fast');
+	});
+
+	jQuery('#search-twitter-textfield', this.scroller).bind('blur', function(e) {
+		jQuery('#submit-search-button').fadeOut('fast');
+	});
+	
+	
+	jQuery().bind('search_twitter_refresh', { thisAssistant:this }, function(e) {
+		e.data.thisAssistant.refresh();
+	});
+	
+	
+	this.startRefresher();
+
 }
 
 
@@ -217,7 +282,8 @@ SearchTwitterAssistant.prototype.deactivate = function(event) {
 	/* remove any event handlers you added in activate and do any other cleanup that should happen before
 	   this scene is popped or another scene is pushed on top */
 	
-	Mojo.Event.stopListening($('search-twitter-textfield'), Mojo.Event.propertyChange, this.search);
+	// Mojo.Event.stopListening($('search-twitter-textfield'), Mojo.Event.propertyChange, this.search);
+	Mojo.Event.stopListening($('submit-search-button'), Mojo.Event.tap, this.search);	
 	
 	jQuery().unbind('new_search_timeline_data');
 	
@@ -233,3 +299,65 @@ SearchTwitterAssistant.prototype.cleanup = function(event) {
 	/* this function should do any cleanup needed before the scene is destroyed as 
 	   a result of being popped off the scene stack */
 }
+
+
+
+SearchTwitterAssistant.prototype.search = function(e) {
+	dump(&quot;search called&quot;);
+	
+		
+	if (sch.isString(e)) {
+		dump(e);
+		this.twit.search(e);
+		/*
+			clear any existing results
+		*/
+		jQuery('#search-timeline').empty();
+
+		// this.spinnerOn();
+		this.showInlineSpinner('#search-timeline', 'Looking for results&#8230;');
+		
+	} else if (e.value) {
+		dump(e);
+		this.twit.search(e.value);		
+		/*
+			clear any existing results
+		*/
+		jQuery('#search-timeline').empty();
+
+		// this.spinnerOn();
+		this.showInlineSpinner('#search-timeline', 'Looking for results&#8230;');
+		
+		jQuery('#submit-search-button').hide();
+	}
+}
+
+
+SearchTwitterAssistant.prototype.refresh = function() {
+	this.stopRefresher();
+	this.search(this.searchBoxModel.value);
+};
+
+
+
+
+SearchTwitterAssistant.prototype.startRefresher = function() {
+	dump('Starting refresher');
+	/*
+		Set up refresher
+	*/
+	
+	this.refresher = setInterval(function() {
+			jQuery().trigger('search_twitter_refresh');
+		}, sc.app.prefs.get('network-refreshinterval')
+	);
+	// this.refresher = setInterval(this.refresh.call(this), 5000)
+}
+
+SearchTwitterAssistant.prototype.stopRefresher = function() {
+	dump('Stopping refresher');
+	/*
+		Clear refresher
+	*/
+	clearInterval(this.refresher);
+}</diff>
      <filename>app/assistants/search-twitter-assistant.js</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,8 @@
 function StageAssistant () {
-	
-
+	this.firstload = true;	
+}
 
 
-	
-	
-}
 
 StageAssistant.prototype.setup = function() {
 	// this.controller.pushScene('my-timeline');
@@ -13,6 +10,10 @@ StageAssistant.prototype.setup = function() {
 	// this.controller.pushScene('user-detail', 'poop');
 	
 	
+	sc.app.search_cards = [];
+	sc.app.new_search_card = 0;
+	
+	
 	/*
 		We can't go to the login screen until the 
 		prefs have fully loaded
@@ -29,13 +30,15 @@ StageAssistant.prototype.setup = function() {
 			sc.app.twit.setCredentials(username, password);
 		}
 		
-		
-		if (sc.app.prefs.get('always-go-to-my-timeline')) {
-			thisSA.controller.pushScene('my-timeline');	
+		if (thisSA.firstload) {
+			dump('FIRSTLOAD ----------------------');
+			thisSA.controller.pushScene('login', {'firstload':true});
+			thisSA.firstload = false;
 		} else {
-			thisSA.controller.pushScene('login');	
+			thisSA.controller.pushScene('login');
 		}
 		
+		
 	});
 	
 	/*</diff>
      <filename>app/assistants/stage-assistant.js</filename>
    </modified>
    <modified>
      <diff>@@ -4,8 +4,6 @@ function UserDetailAssistant(argFromPusher) {
 	   to the scene controller (this.controller) has not be established yet, so any initialization
 	   that needs the scene controller should be done in the setup function below. */
 	
-	dump(argFromPusher);
-	
 	scene_helpers.addCommonSceneMethods(this);	
 	
 	if (sc.helpers.isString(argFromPusher) || sc.helpers.isNumber(argFromPusher)) {
@@ -23,7 +21,7 @@ function UserDetailAssistant(argFromPusher) {
 
 UserDetailAssistant.prototype.setup = function() {
 	
-	// alert('UserDetailAssistant.prototype.setup');
+	this.initAppMenu();
 	
 	this.setupCommonMenus({
 		viewMenuItems: [
@@ -32,11 +30,14 @@ UserDetailAssistant.prototype.setup = function() {
 					{label:$L('Back'),        icon:'back', command:'back'},
 					{label:$L('User Detail'), command:'scroll-top'}
 				]
+			},
+			{
+				items: [
+					{label:$L('Compose'),  icon:'compose', command:'compose', shortcut:'N'},
+				]
 			}
+			
 		],
-		cmdMenuItems: [
-			{label:$L('Compose'),  icon:'compose', command:'compose', shortcut:'N'},
-		]
 	});
 
 	this.scroller = this.controller.getSceneScroller();
@@ -54,15 +55,7 @@ UserDetailAssistant.prototype.setup = function() {
 	
 	jQuery().bind('new_user_timeline_data', { thisAssistant:this }, function(e, tweets) {
 
-		dump(e.data.thisAssistant);
-
-		dump('user\'s tweets:');
-		dump(tweets);
-
 		this.userobj = tweets[0].user;
-		dump('user\'s info:');
-		dump(this.userobj);
-
 		this.userRetrieved = true;		
 
 		var itemhtml = Mojo.View.render({object:this.userobj, template: 'user-detail/user-detail'});
@@ -77,7 +70,6 @@ UserDetailAssistant.prototype.setup = function() {
 		rendertweets.reverse();
 
 		jQuery.each( rendertweets, function() {
-			dump(this)
 			this.text = makeItemsClickable(this.text);
 		});
 
@@ -108,20 +100,6 @@ UserDetailAssistant.prototype.activate = function(event) {
 	/* put in event handlers here that should only be in effect when this scene is active. For
 	   example, key handlers that are observing the document */
 	
-	// alert('UserDetailAssistant.prototype.activate');
-	
-	// dump('getScenes()');
-	// dump(Mojo.Controller.stageController.getScenes());
-	// dump('activeScene()');
-	// dump(Mojo.Controller.stageController.activeScene());
-	// dump('topScene()');
-	// dump(Mojo.Controller.stageController.topScene());
-	// dump('isChildWindow()');
-	// dump(Mojo.Controller.stageController.isChildWindow());
-	
-	
-	
-
 	var thisA = this; // for closures
 
 	jQuery('#user-detail-actions #view-user-posts', this.scroller).live(Mojo.Event.tap, function(e) {</diff>
      <filename>app/assistants/user-detail-assistant.js</filename>
    </modified>
    <modified>
      <diff>@@ -9,6 +9,29 @@ var scene_helpers = {}
  */
 scene_helpers.addCommonSceneMethods = function(assistant) {
 	
+	
+	assistant.initAppMenu = function(opts) {
+		// the initial app/scene commands set into the class's appMenuModel for the beverage:
+		this.appMenuAttr  = {
+			omitDefaultItems: true
+		};
+		
+		this.appMenuModel = {
+			visible: true,
+			
+			items: [
+				Mojo.Menu.editItem,
+				{ label: $L('About Spaz'),		command: 'appmenu-about' },
+				Mojo.Menu.helpItem,
+				Mojo.Menu.prefsItem,
+				{ label: $L('Log-in'),			command: 'appmenu-login' }
+			]
+		};
+
+		// good to go, set up the almighty Application Menu:
+		this.controller.setupWidget(Mojo.Menu.appMenu, this.appMenuAttr, this.appMenuModel);
+	};
+	
 
 	/**
 	 * opts is an object with key:val pairs, like so
@@ -23,66 +46,37 @@ scene_helpers.addCommonSceneMethods = function(assistant) {
 			this.scroller = this.controller.getSceneScroller();
 		}
 		
+		/*
+			View menu at top of screen
+		*/
 		if (opts.viewMenuItems) {
 			var viewMenuItems = opts.viewMenuItems;
-		} else {
-			var viewMenuItems = [
-				{
-					items: [
-						{label: $L(opts.viewMenuLabel), command:'scroll-top'},
-						{label: $L('Filter timeline'), iconPath:'images/theme/menu-icon-triangle-down.png', submenu:'filter-menu'},
-					]
-				},
-				{
-					items: [
-						{label:$L('Compose'),  icon:'compose', command:'compose', shortcut:'N'},
-						{label:$L('Update'),   icon:'sync', command:'refresh', shortcut:'R'}					
-					]
-				}
-			];
+			this.viewMenuModel = {
+				label: $L('viewmenu'), 
+				items: viewMenuItems,
+			};
+			this.controller.setupWidget(Mojo.Menu.viewMenu, undefined, this.viewMenuModel);
 		}
 		
-		/*
-			View menu at top of screen
-		*/
-		this.viewMenuModel = {
-			label: $L('viewmenu'), 
-			items: viewMenuItems,
-		};
-		this.controller.setupWidget(Mojo.Menu.viewMenu, undefined, this.viewMenuModel);
+
 		
 		
 
 
 
-
+		/*
+			Command menu at bottom of screen
+		*/
 		if (opts.cmdMenuItems) {
 			var cmdMenuItems = opts.cmdMenuItems;
-		} else {
-			var cmdMenuItems = [{ items:
-				[
-					{},
-					{label:$L('Home'),        command:'home', shortcut:'H'},
-					{label:$L('My Timeline'), icon:'conversation', command:'my-timeline', shortcut:'T'},
-					{label:$L('Search'),      icon:'search', command:'search', shortcut:'S'},
-					{label:$L('Followers'),   command:'followers', shortcut:'L'},
-					{}
-				]
-			}]
+			this.cmdMenuModel = {
+				visible:true,
+				items: cmdMenuItems
+			};
+			this.controller.setupWidget(Mojo.Menu.commandMenu, undefined, this.cmdMenuModel);
 		}
 
 
-		/*
-			Command menu at bottom of screen
-		*/
-		this.cmdMenuModel = {
-			visible:true,
-			items: cmdMenuItems
-		};
-		
-		
-		
-		this.controller.setupWidget(Mojo.Menu.commandMenu, undefined, this.cmdMenuModel);
 
 
 		this.timelineFilterMenuModel = {
@@ -119,7 +113,14 @@ scene_helpers.addCommonSceneMethods = function(assistant) {
 	};
 
 
-
+	assistant.createStage = function(sceneName, sceneArgs, stageName) {
+		// &quot;nocache:true&quot; tells sysmanager to not use the card caching strategy on compose cards
+		var params = {name: stageName, nocache: true };
+		var callback = function(stageController) {
+			stageController.pushScene(sceneName, sceneArgs, stageName);
+		};
+		Mojo.Controller.getAppController().createStageWithCallback(params, callback);
+	};
 
 	/**
 	 *  
@@ -141,17 +142,27 @@ scene_helpers.addCommonSceneMethods = function(assistant) {
 					Navigation
 				*/
 				case 'home':
-					// dump('is child window:'+Mojo.Controller.StageController.isChildWindow(this));
 					findAndSwapScene(&quot;login&quot;, this);
 					break;
 				case 'my-timeline':
-					// dump('is child window:'+Mojo.Controller.StageController.isChildWindow(this));
 					findAndSwapScene(&quot;my-timeline&quot;, this);
 					break;
 				case 'search':
-					// dump('is child window:'+Mojo.Controller.StageController.isChildWindow(this));
 					findAndSwapScene(&quot;search-twitter&quot;, this);
-					break;	
+					break;
+				case 'new-search-card':
+
+					sc.app.new_search_card++;
+					this.createStage('search-twitter', { 'lightweight':true }, 'stage-lightweight-search'+sc.app.new_search_card);
+
+					// findAndSwapScene(&quot;search-twitter&quot;, this);
+					break;
+				case 'followers':
+					findAndSwapScene(&quot;manage-followers&quot;, this);
+					break;
+				case 'preferences':
+					findAndSwapScene(&quot;preferences&quot;, this);
+					break;
 
 				/*
 					Compose a new message
@@ -199,7 +210,9 @@ scene_helpers.addCommonSceneMethods = function(assistant) {
 					this.refresh(); // need to have a &quot;refresh&quot; method defined for each scene asst
 					break;
 
-
+				case 'search-trends':
+					Mojo.Controller.notYetImplemented();
+					break;
 
 			}
 		}
@@ -332,6 +345,19 @@ scene_helpers.addCommonSceneMethods = function(assistant) {
 		
 		
 	}
+	
+	
+	assistant.initTwit = function() {
+		var username = sc.app.prefs.get('username');
+		var password = sc.app.prefs.get('password');
+
+		this.twit = new scTwit();
+
+		if (username &amp;&amp; password) {
+			this.twit.setCredentials(username, password);
+		}
+	};
+	
 
 
 	/**
@@ -661,7 +687,8 @@ scene_helpers.addCommonSceneMethods = function(assistant) {
 	 * 
 	 */
 	assistant.searchFor = function(terms) {
-		findAndSwapScene(&quot;search-twitter&quot;, {
+		// findAndSwapScene(&quot;search-twitter&quot;, {
+		Mojo.Controller.stageController.pushScene(&quot;search-twitter&quot;, {
 			'searchterm': terms
 		});
 	}
@@ -748,14 +775,7 @@ scene_helpers.addCommonSceneMethods = function(assistant) {
 	
 	
 	assistant.newMsgBanner = function(count) {
-		
-		var params = {
-			messageText:count+' new messages in your timeline',
-			soundClass: null,
-			soundFile:  null,
-			icon:       'icon.png'
-		};
-		
+				
 		var launchArgs = {
 			'from':'newMessagesBanner'
 		};
@@ -763,10 +783,8 @@ scene_helpers.addCommonSceneMethods = function(assistant) {
 		var category = 'newMessages';
 		
 		var appController = Mojo.Controller.getAppController();
-		// appController.showBanner(params, launchArgs, category);
-		appController.showBanner(&quot;There are some new messages&quot;, {});
-		// dump('SHOWED NEW MESSAGE BANNER');
-		
+
+		appController.showBanner(&quot;There are &quot;+count+&quot; new messages&quot;, launchArgs, category);
 	}
 	
 	</diff>
      <filename>app/helpers/scene.js</filename>
    </modified>
    <modified>
      <diff>@@ -5,79 +5,76 @@
 
 &lt;div id=&quot;login-scene&quot;&gt;
 
-	&lt;div id=&quot;main&quot; class=&quot;palm-hasheader&quot;&gt;
-		&lt;div class=&quot;palm-header left&quot; id=&quot;main-hdr&quot;&gt;
-		  Spaz:Home
-		&lt;/div&gt;
-	&lt;/div&gt;
-
 
-	&lt;div id=&quot;show-login-button&quot; class=&quot;spaz-button-wide closed&quot;&gt;Log-in&lt;/div&gt;
-
-	&lt;div id=&quot;login-panel&quot; class='spaz-drawer'&gt;&lt;!-- &lt;/div&gt; --&gt;
-
-		&lt;div class='palm-row' id=&quot;username-row&quot;&gt;
-			&lt;div class=&quot;palm-row-wrapper&quot;&gt;
-				&lt;div class=&quot;textfield-group&quot; x-mojo-focus-highlight=&quot;true&quot;&gt;
-					&lt;div class=&quot;title&quot;&gt;
-						&lt;div class=&quot;label&quot;&gt;
-							username
+	&lt;div class=&quot;palm-group&quot;&gt;
+		&lt;div class=&quot;palm-group-title&quot; id=&quot;login-toggle&quot; x-mojo-loc=''&gt;Log-in To My Account&lt;/div&gt;
+		&lt;div class=&quot;palm-list&quot; id=&quot;login-panel&quot;&gt;
+			&lt;div class=&quot;palm-row single&quot;&gt;
+				&lt;div class=&quot;palm-row-wrapper&quot;&gt;
+					&lt;div class=&quot;textfield-group&quot; x-mojo-focus-highlight=&quot;true&quot;&gt;
+						&lt;div class=&quot;title&quot;&gt;
+							&lt;div class=&quot;label&quot;&gt;
+								username
+							&lt;/div&gt;
+							&lt;div id=&quot;username&quot; name=&quot;username&quot; x-mojo-element=&quot;TextField&quot;&gt;&lt;/div&gt;
 						&lt;/div&gt;
-						&lt;div id=&quot;username&quot; name=&quot;username&quot; x-mojo-element=&quot;TextField&quot;&gt;&lt;/div&gt;
 					&lt;/div&gt;
 				&lt;/div&gt;
 			&lt;/div&gt;
-			&lt;div class=&quot;palm-row-wrapper&quot;&gt;
-				&lt;div class=&quot;textfield-group&quot; x-mojo-focus-highlight=&quot;true&quot;&gt;
-					&lt;div class=&quot;title&quot;&gt;
-						&lt;div class=&quot;label&quot;&gt;
-							password
+			&lt;div class=&quot;palm-row single&quot;&gt;
+				&lt;div class=&quot;palm-row-wrapper&quot;&gt;
+					&lt;div class=&quot;textfield-group&quot; x-mojo-focus-highlight=&quot;true&quot;&gt;
+						&lt;div class=&quot;title&quot;&gt;
+							&lt;div class=&quot;label&quot;&gt;
+								password
+							&lt;/div&gt;
+							&lt;div id=&quot;password&quot; name=&quot;password&quot; x-mojo-element=&quot;PasswordField&quot;&gt;&lt;/div&gt;
 						&lt;/div&gt;
-						&lt;div id=&quot;password&quot; name=&quot;password&quot; x-mojo-element=&quot;PasswordField&quot;&gt;&lt;/div&gt;
 					&lt;/div&gt;
 				&lt;/div&gt;
+			&lt;/div&gt;			
+			
+			
+
+	   		&lt;div class=&quot;palm-row single&quot;&gt;
+				&lt;button class=&quot;palm-button&quot; id=&quot;login-button&quot;&gt;Login&lt;/button&gt;
+				&lt;div style=&quot;overflow:auto; text-align:center&quot;&gt;
+					&lt;div x-mojo-element=&quot;CheckBox&quot; id=&quot;goToMyTimelineCheckbox&quot;&gt;&lt;/div&gt;
+					&lt;div class=&quot;checkbox-label&quot;&gt;Always go to My Timeline&lt;/div&gt;
+				&lt;/div&gt;
+				&lt;div id=&quot;spinner-container&quot;&gt;&lt;/div&gt;
 			&lt;/div&gt;
-		&lt;/div&gt;
 
-		&lt;button class=&quot;palm-button&quot; id=&quot;login-button&quot;&gt;Login&lt;/button&gt;
-		&lt;div style=&quot;overflow:auto&quot;&gt;
-			&lt;div x-mojo-element=&quot;CheckBox&quot; id=&quot;goToMyTimelineCheckbox&quot;&gt;&lt;/div&gt;
-			&lt;label for=&quot;always-go-to-my-timeline&quot;&gt;Always go to My Timeline&lt;/label&gt;
+
 		&lt;/div&gt;
-		&lt;div id=&quot;spinner-container&quot;&gt;&lt;/div&gt;
-		
 	&lt;/div&gt;
 
-	&lt;div id=&quot;show-search-button&quot; class=&quot;spaz-button-wide&quot;&gt;Search Twitter&lt;/div&gt;
 
-	&lt;div id=&quot;search-panel&quot; class='spaz-drawer'&gt;
-		&lt;div class='palm-row' id=&quot;search-row&quot;&gt;
-			&lt;div class=&quot;palm-row-wrapper&quot;&gt;
-				&lt;div class=&quot;textfield-group&quot; x-mojo-focus-highlight=&quot;true&quot;&gt;
+	&lt;div class=&quot;palm-group&quot;&gt;
+		&lt;div class=&quot;palm-group-title&quot; id=&quot;search-toggle&quot; x-mojo-loc=''&gt;Search Twitter&lt;/div&gt;
+		&lt;div class=&quot;palm-list&quot; id=&quot;search-panel&quot;&gt;
+	   		&lt;div class=&quot;palm-row single&quot;&gt;
+				&lt;div class=&quot;palm-row-wrapper textfield-group&quot; x-mojo-focus-highlight=&quot;true&quot;&gt;
 					&lt;div class=&quot;title&quot;&gt;
-						&lt;div class=&quot;label&quot;&gt;
-							search terms
-						&lt;/div&gt;
-						&lt;div id=&quot;search&quot; name=&quot;search&quot; x-mojo-element=&quot;TextField&quot;&gt;&lt;/div&gt;
+							&lt;div class=&quot;label&quot;&gt;
+								search terms
+							&lt;/div&gt;
+	      				&lt;div id=&quot;search&quot; name=&quot;search&quot;  x-mojo-element=&quot;TextField&quot;&gt;&lt;/div&gt;
 					&lt;/div&gt;
 				&lt;/div&gt;
 			&lt;/div&gt;
-		&lt;/div&gt;
-		&lt;button class=&quot;palm-button&quot; id=&quot;search-button&quot;&gt;Search&lt;/button&gt;
-		
-	&lt;!-- &lt;/div&gt;
 
-	&lt;div id=&quot;show-trends-button&quot; class=&quot;spaz-button-wide closed&quot;&gt;Current Trends&lt;/div&gt;
+	   		&lt;div class=&quot;palm-row single&quot;&gt;
+				&lt;button class=&quot;palm-button&quot; id=&quot;search-button&quot;&gt;Search&lt;/button&gt;
+			&lt;/div&gt;
 
-	&lt;div id=&quot;trends-panel&quot; class='spaz-drawer'&gt; --&gt;
-		&lt;h3&gt;Trends&lt;/h3&gt;
-		&lt;div id=&quot;trends-list&quot; class=&quot;spaz-button-group&quot;&gt;
-		&lt;/div&gt;
-	&lt;/div&gt;
+			&lt;div class=&quot;palm-group&quot;&gt;
+				&lt;div class=&quot;palm-group-title&quot; x-mojo-loc=''&gt;Current Trends on Twitter&lt;/div&gt;
+				&lt;div class=&quot;palm-list&quot; id=&quot;trends-list&quot;&gt;
+				&lt;/div&gt;
+			&lt;/div&gt;
 
-	&lt;div id=&quot;status-panel&quot;&gt;
-		&lt;div x-mojo-element=&quot;Spinner&quot; id=&quot;activity-spinner&quot;&gt;&lt;/div&gt;
-		&lt;span id=&quot;status-label&quot;&gt;&lt;/span&gt;
+		&lt;/div&gt;
 	&lt;/div&gt;
-
+		
 &lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/login/login-scene.html</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1,3 @@
-&lt;div class=&quot;trend-item spaz-button-wide&quot; data-searchterm='#{searchterm}'&gt;#{name}&lt;/div&gt;
\ No newline at end of file
+&lt;div class=&quot;palm-row-wrapper&quot;&gt;
+	&lt;div class=&quot;spaz-row trend-item single&quot; data-searchterm='#{searchterm}'&gt;#{name}&lt;/div&gt;
+&lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/login/trend-item.html</filename>
    </modified>
    <modified>
      <diff>@@ -11,17 +11,18 @@
 
 &lt;div x-mojo-element=&quot;Spinner&quot; id=&quot;search-twitter-spinner&quot; class=&quot;spaz-activity-spinner&quot;&gt;&lt;/div&gt;
 
-&lt;div class='palm-row' id=&quot;username-row&quot;&gt;
+&lt;div class='palm-row single' id=&quot;username-row&quot;&gt;
 	&lt;div class=&quot;palm-row-wrapper&quot;&gt;
 		&lt;div class=&quot;textfield-group&quot; x-mojo-focus-highlight=&quot;true&quot;&gt;
 			&lt;div class=&quot;title&quot;&gt;
 				&lt;div class=&quot;label&quot;&gt;
 					Search
 				&lt;/div&gt;
-				&lt;div id=&quot;search-twitter-textfield&quot; name=&quot;search-twitter&quot; x-mojo-element=&quot;TextField&quot;&gt;&lt;/div&gt;
+				&lt;div id=&quot;search-twitter-textfield&quot; x-mojo-element=&quot;TextField&quot;&gt;&lt;/div&gt;
 			&lt;/div&gt;
-		
 		&lt;/div&gt;
+		&lt;button class=&quot;palm-button&quot; id=&quot;submit-search-button&quot;&gt;Search&lt;/button&gt;
 	&lt;/div&gt;
-&lt;/div&gt;	
+&lt;/div&gt;
+
 &lt;div id=&quot;search-timeline&quot; class=&quot;timeline&quot;&gt;&lt;/div&gt;
\ No newline at end of file</diff>
      <filename>app/views/search-twitter/search-twitter-scene.html</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@
 	 	&lt;div class=&quot;text&quot;&gt;
 			#{text}
 		&lt;/div&gt;
-		&lt;div class=&quot;meta&quot; data-status-id=&quot;#{id}&quot;&gt;&lt;span class=&quot;date&quot; data-created_at=&quot;#{created_at}&quot;&gt;#{relative_time}&lt;/span&gt; &amp;#x2192;&lt;/div&gt;  
+		&lt;div class=&quot;meta&quot; data-status-id=&quot;#{id}&quot;&gt;&lt;span class=&quot;date&quot; data-created_at=&quot;#{created_at}&quot;&gt;#{relative_time}&lt;/span&gt;&lt;/div&gt;  
 	&lt;/div&gt;
 &lt;/div&gt;
 </diff>
      <filename>app/views/shared/tweet.html</filename>
    </modified>
    <modified>
      <diff>@@ -10,9 +10,9 @@ var default_preferences = {
     'wilhelm-enabled': true,
 
     'network-refreshinterval': 300000,
-    'network-autoadjustrefreshinterval': true,
+    'network-searchrefreshinterval': 300000,
 
-    'debug-enabled': false,
+    'network-autoadjustrefreshinterval': true,
 
     'timeline-scrollonupdate': true,
     'timeline-maxentries': 300,</diff>
      <filename>default_preferences.js</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>icon.png</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>images/theme/meta-link-bg.png</filename>
    </modified>
    <modified>
      <diff>@@ -7,7 +7,7 @@
 	&lt;title&gt;Dreadnaught&lt;/title&gt;
 	
 	&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;
-		var use_palmhost_proxy = true;
+		var use_palmhost_proxy = false;
 	&lt;/script&gt;
 	
 	&lt;script src=&quot;default_preferences.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
@@ -54,6 +54,8 @@
 	&lt;script src=&quot;app/assistants/user-detail-assistant.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
 	&lt;script src=&quot;app/assistants/message-detail-assistant.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
 	&lt;script src=&quot;app/assistants/search-twitter-assistant.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
+	&lt;script src=&quot;app/assistants/manage-followers-assistant.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
+	&lt;script src=&quot;app/assistants/preferences-assistant.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
 
 
 	&lt;!-- application stylesheet should come in after the one loaded by the framework --&gt;</diff>
      <filename>index.html</filename>
    </modified>
    <modified>
      <diff>@@ -1 +1 @@
-Subproject commit 046b3b42de26827bbea665d47b95db093275588f
+Subproject commit d341df7251cdb3f5945794e903d5b97a4726b5eb</diff>
      <filename>spazcore</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 /* Put Application specific CSS here. */
 
-BODY, div[x-mojo-element=Scroller] {	
+BODY, BODY&gt;div[x-mojo-element=Scroller] {	
 /*	background-image: url('../images/theme/page-bg-dark-splash.png');*/
 	background-color:#111111;
 	color:#CCCCCC;
@@ -16,8 +16,9 @@ BODY {
 	border-bottom:2px solid #111100;
 }
 .command-menu .palm-menu-fade {
-	background: transparent url(&quot;../images/theme/command-menu-gradient.png&quot;) no-repeat !important;
-	border-top:2px solid #222200;	
+/*	background: transparent url(&quot;../images/theme/command-menu-gradient.png&quot;) no-repeat !important;*/
+	background: transparent !important;
+/*	border-top:2px solid #222200;	*/
 }
 
 a:link {
@@ -48,7 +49,9 @@ a:link {
 }
 
 
-
+.palm-group {
+	-webkit-border-image: url(../images/theme/palm-group.png) 40 18 14 18;	
+}
 
 
 
@@ -135,7 +138,7 @@ div.timeline-entry {
 			width:48px;
 			height:48px;
 			border:2px double #333;
-			-webkit-box-shadow:0px 1px 5px #333;
+/*			-webkit-box-shadow:0px 1px 5px #333;*/
 			background-image:url('../images/theme/details-image-generic.png');
 			opacity:.9;
 		}
@@ -149,7 +152,7 @@ div.timeline-entry {
 			font-variant: uppercase;
 			font-family:&quot;Coconut Condensed&quot;;
 			margin-bottom: .2em;
-			text-shadow: 0px 1px 5px #666;
+/*			text-shadow: 0px 1px 5px #666;*/
 		}
 		div.timeline-entry .status .text {
 			font-size:10pt;
@@ -232,17 +235,22 @@ div.timeline-entry {
 	}
 
 	.palm-row .label {
-		color:#9BB8CF;
-		text-shadow: #999 0 1px 5px;
+/*		color:#9BB8CF;*/
+		text-shadow: none;
 	}
 	
 	.palm-row .truncating-text {
-		color:#FFF;
+/*		color:#FFF;*/
 	}
 		.palm-row .focused input[type='text'] {
-			color:#000;
+/*			color:#000;*/
 		}
 	
+	.checkbox-label {
+		margin:18px 0 0 0;
+		font-size:12pt;
+		color:#FFF;
+	}
 
 	#trends-list {}
 	#trends-list&gt;li {
@@ -277,6 +285,10 @@ div.spaz-drawer {
 	margin:0;
 }
 
+#login-button, #search-button {
+	margin:0px !important;
+}
+
 
 
 /*
@@ -307,7 +319,7 @@ div.spaz-drawer {
 		width:48px;
 		height:48px;
 		border:2px double #333;
-		-webkit-box-shadow:0px 1px 5px #000;
+/*		-webkit-box-shadow:0px 1px 5px #000;*/
 		background-image:url('../images/theme/details-image-generic.png');
 		opacity:.9;
 		display:block;
@@ -393,7 +405,7 @@ div.spaz-drawer {
 		width:48px;
 		height:48px;
 		border:2px double #333;
-		-webkit-box-shadow:0px 1px 5px #000;
+/*		-webkit-box-shadow:0px 1px 5px #000;*/
 		background-image:url('../images/theme/details-image-generic.png');
 		opacity:.9;
 		display:block;
@@ -441,7 +453,7 @@ div.spaz-drawer {
 			border-style: solid;
 			border-color: transparent !important;
 			background:none !important;
-			-webkit-box-shadow:none;
+/*			-webkit-box-shadow:none;*/
 		}
 			#user-timeline .user {
 				display:none;
@@ -543,7 +555,7 @@ div.spaz-view-menu-container {
 	position:fixed;	
 	width:  100%;
 	background-color:rgba(0,0,0,1);
-	-webkit-box-shadow:0px 1px 5px #000;
+/*	-webkit-box-shadow:0px 1px 5px #000;*/
 
 }
 
@@ -619,6 +631,22 @@ div.spaz-button-group {
 		div.spaz-button-wide.open:active {
 			-webkit-border-image: url(../images/theme/spaz-button-reveal-active.png) 0 18 0 17;
 		}
+
+
+div.spaz-row {
+	height: 32px;
+	margin: 2px 2px;
+/*	background-color: rgba(51,51,51,.8);*/
+/*	padding: 8px 16px;*/
+	color:  #FFECCD;
+	font-family:&quot;Coconut Condensed&quot;;
+	font-size:12pt;
+	line-height:24pt;
+/*	-khtml-border-radius:16px;*/
+	border-width: 0 18px 0 17px;
+/*	background-color:#444444;*/
+	-webkit-border-image: url(../images/theme/spaz-button-bg.png) 0 18 0 17;
+}
 	
 	
 .spaz-activity-spinner {</diff>
      <filename>stylesheets/Dreadnaught.css</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>scene-map.graffle</filename>
    </removed>
    <removed>
      <filename>spaz-colors.act</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>aff1470f168edd7feb2caffe15807bf0cc12745c</id>
    </parent>
  </parents>
  <author>
    <name>Ed Finkler</name>
    <email>funkatron@gmail.com</email>
  </author>
  <url>http://github.com/funkatron/spaz-webos/commit/a276ee0b078e9ecb395cd104eaa2c1684f522a34</url>
  <id>a276ee0b078e9ecb395cd104eaa2c1684f522a34</id>
  <committed-date>2009-02-27T08:09:47-08:00</committed-date>
  <authored-date>2009-02-27T08:09:47-08:00</authored-date>
  <message>- I should really push more often. Added spawning of search cards. lots of little UI changes. new icon</message>
  <tree>3f894f9656e1251118e6aa30753e4d6ae15e31ed</tree>
  <committer>
    <name>Ed Finkler</name>
    <email>funkatron@gmail.com</email>
  </committer>
</commit>
