diff --git a/www/js/search.js b/www/js/search.js
index 071f7b832d00305f5f90a49c9fedb57e505750cd..a94e16e99fc65c8bcd11f2efec346fea00e09b75 100644
--- a/www/js/search.js
+++ b/www/js/search.js
@@ -16,6 +16,7 @@
 		resultSel = '.search-results',
 		googleSel = '.google-results',
 		
+		evtStateChange = 'statechange',
 		wrapperMain = '#search_wrapper',
 		wrapperWeb = '#search_results',
 		wrapperDir = '#directory_results',
@@ -71,14 +72,28 @@
 			};
 			Directory.prototype._renderState = function(duration) {
 				var $innerRes = $('.results', $(this._renderTo)),
+					$showRes, failState,
 					depFilter = '.departments';
+				
+				if (!$innerRes.length) {
+					return;
+				}
 			
 				$innerRes.slideUp(duration);
 				if (this._viewState === 0) {
-					$innerRes.not(depFilter).slideDown();
+					$showRes = $innerRes.not(depFilter);
+					failState = 1;
 				} else {
-					$innerRes.filter(depFilter).slideDown();
+					$showRes = $innerRes.filter(depFilter);
+					failState = 0;
+				}
+				
+				if (!$showRes.length && typeof duration !== "undefined") {
+					this.changeViewState(failState);
+					return;
 				}
+				
+				$showRes.slideDown();
 			};
 			Directory.prototype.cancelSearch = function() {
 				this._searchCanceled = true;
@@ -106,8 +121,12 @@
 					return;
 				}
 				
+				var prevState = this._viewState;
+				
 				this._viewState = state;
 				this._renderState();
+				
+				$(this._renderTo).trigger(evtStateChange, [state, prevState]);
 			};
 			Directory.prototype.clearAllResults = function() {
 				$(this._renderTo).empty();
@@ -205,11 +224,22 @@
 			$(function() {
 				var $q = $(inputSel),
 					
+					resSel = '.results-group',
 					tabsSel = '.result-tab',
 					selCls = 'selected',
 					stateClsPfx = 'state-',
 					
 					$resTabs = $('.result-tab'),
+					tabStateChange = function(e, state, prevState) {
+						var $tab = $(this).find(tabsSel);
+						
+						e.stopPropagation();
+						
+						$tab.removeClass(stateClsPfx + prevState);
+						$tab.addClass(stateClsPfx + state);
+						
+						$tab.children().removeClass(selCls).eq(state).addClass(selCls);
+					},
 					
 					googleOrigin = /^https?:\/\/www\.google\.com$/,
 					
@@ -247,21 +277,13 @@
 						return;
 					}
 						
-					var i = $(this).index(), 
-						j = $(this).siblings('.' + selCls).index(),
-						$tab = $(this).closest(tabsSel),
-						$par = $(this).parents('.results-group');
-					
-					$tab.removeClass(stateClsPfx + j);
-					$tab.addClass(stateClsPfx + i);
-					
-					$(this).siblings().removeClass(selCls);
-					$(this).addClass(selCls);
+					var i = $(this).index(),
+						$par = $(this).parents(resSel);
 					
 					if ($par.is(wrapperDir)) {
 						directorySearch.changeViewState(i);
 					} else if ($par.is(wrapperWeb)) {
-						$(activeSearch.root).closest(googleSel).slideUp();
+						$(activeSearch.root).closest(googleSel).slideUp().trigger(evtStateChange, [i, 0 + !i]);
 						if (i === 0) {
 							activeSearch = localSearch;
 						} else {
@@ -272,6 +294,8 @@
 					}
 				});
 				
+				$(resSel).on(evtStateChange, tabStateChange);
+				
 				// listen for the submit event
 				$(formSel).submit(function(e) {
 					e.preventDefault();