Index: /trunk/gsdl/src/recpt/documentaction.cpp
===================================================================
--- /trunk/gsdl/src/recpt/documentaction.cpp	(revision 4892)
+++ /trunk/gsdl/src/recpt/documentaction.cpp	(revision 4893)
@@ -286,62 +286,106 @@
 // reponse contains 1 metadata field (Title)
 void documentaction::set_navbarmacros (displayclass &disp, FilterResponse_t &response, 
-				       bool has_search_button, cgiargsclass &args) {
-
-  text_t topparent;
-  text_t &arg_d = args["d"];
-  text_t navigationbar = "<!-- Navigation Bar -->\n";
-
-  get_top (args["cl"], topparent);
-  int numc = response.docInfo.size();
-  ResultDocInfo_tarray::iterator dochere = response.docInfo.begin();
-  ResultDocInfo_tarray::iterator docend = response.docInfo.end();
-
-  navigationbar += "<nobr>\n";
-  if (has_search_button) {
-    if (args["a"] == "q") {
-      navigationbar += "_icontabsearchgreen_";
-    } else {
-      navigationbar += "_imagesearch_";
-    }
-  }
-  
-  if (has_search_button || numc == 0) navigationbar += "_imagespacer_";
-  
-  bool first = true;
-  while (dochere != docend) {
-
-    if (!first) navigationbar += "_imagespacer_";
-
-    text_t title = (*dochere).metadata["Title"].values[0];
-
-    bool unknown = false;
-
-    // test the _XXXwidth_ macro to see if image macros are
-    // defined for this type of classification - if not we'll
-    // just display the text
-    text_t tmpwidth;
-    disp.expandstring ("document", "_" + title + "width_", tmpwidth);
-    if (tmpwidth == ("_" + title + "width_")) unknown = true;
-
-    // if we're inside a document all the classification buttons should be enabled
-    if (arg_d.empty() && ((*dochere).OID == topparent)) {
-      if (unknown) navigationbar += "&nbsp;" + title + "&nbsp;";
-      else navigationbar += "_icontab" + title + "green_";
-    } else {
-
-      // set the _httpbrowseXXX_ macro for this classification
-      if (unknown) navigationbar += "&nbsp;<a href=\"_httpdocument_&cl=" + 
-		     (*dochere).OID + "\">" + title + "</a>&nbsp;";
-      else {
-        navigationbar += "_image" + title + "_";
-        disp.setmacro ("httpbrowse" + title, "Global", "_httpdocument_&cl=" + (*dochere).OID);
-      }
-    }
-    dochere ++;
-    first = false;
-  }
-  navigationbar += "\n</nobr>\n";
-  navigationbar += "<!-- End of Navigation Bar -->\n";
-  disp.setmacro ("navigationbar", "Global", navigationbar);
+				       bool has_search_button, cgiargsclass &args,
+				       ColInfoResponse_t &cinfo) {
+
+
+   bool use_pulldown = false;
+   text_tmap::iterator it = cinfo.format.find("NavigationBar");
+   if (it != cinfo.format.end()) {
+      if (it->second == "pulldown") {
+	 use_pulldown = true;
+      }
+   }
+
+   text_t topparent;
+   text_t &arg_d = args["d"];
+   text_t navigationbar = "<!-- Navigation Bar -->\n";
+
+   get_top (args["cl"], topparent);
+   int numc = response.docInfo.size();
+   ResultDocInfo_tarray::iterator dochere = response.docInfo.begin();
+   ResultDocInfo_tarray::iterator docend = response.docInfo.end();
+
+   if (!use_pulldown) {
+      navigationbar += "<nobr>\n";
+      if (has_search_button) {
+	 if (args["a"] == "q") {
+	    navigationbar += "_icontabsearchgreen_";
+	 } else {
+	    navigationbar += "_imagesearch_";
+	 }
+      }
+  
+      if (has_search_button || numc == 0) navigationbar += "_imagespacer_";
+  
+      bool first = true;
+      while (dochere != docend) {
+	 
+	 if (!first) navigationbar += "_imagespacer_";
+	 
+	 text_t title = (*dochere).metadata["Title"].values[0];
+	 
+	 bool unknown = false;
+	 
+	 // test the _XXXwidth_ macro to see if image macros are
+	 // defined for this type of classification - if not we'll
+	 // just display the text
+	 text_t tmpwidth;
+	 disp.expandstring ("document", "_" + title + "width_", tmpwidth);
+	 if (tmpwidth == ("_" + title + "width_")) unknown = true;
+	 
+	 // if we're inside a document all the classification buttons should be enabled
+	 if (arg_d.empty() && ((*dochere).OID == topparent)) {
+	    if (unknown) navigationbar += "&nbsp;" + title + "&nbsp;";
+	    else navigationbar += "_icontab" + title + "green_";
+	 } else {
+	    
+	    // set the _httpbrowseXXX_ macro for this classification
+	    if (unknown) navigationbar += "&nbsp;<a href=\"_httpdocument_&cl=" + 
+			    (*dochere).OID + "\">" + title + "</a>&nbsp;";
+	    else {
+	       navigationbar += "_image" + title + "_";
+	       disp.setmacro ("httpbrowse" + title, "Global", "_httpdocument_&cl=" + (*dochere).OID);
+	    }
+	 }
+	 dochere ++;
+	 first = false;
+      }
+      navigationbar += "\n</nobr>\n";
+      navigationbar += "<!-- End of Navigation Bar -->\n";
+
+   } else {
+
+      navigationbar = "<form method=\"get\" name=\"navform\">\n";
+      navigationbar += "<select name=\"navbar\" onChange=\"location.href=";
+      navigationbar += "document.navform.navbar.options[document.navform.navbar.selectedIndex].value\">\n";
+
+      if (args["a"] != "q" && args["cl"].empty()) {
+	 navigationbar += "<option value=\"\" selected></option>\n";
+      }
+      
+      if (has_search_button) {
+	 navigationbar += "<option value=\"_httpquery_\"";
+	 if (args["a"] == "q") {
+	    navigationbar += " selected";
+	 }
+	 navigationbar += ">_texticontabsearchgreen_</option>\n";
+      }
+
+      while (dochere != docend) {
+	 text_t title = dochere->metadata["Title"].values[0];	 
+	 navigationbar += "<option value=\"_httpdocument_&cl=" + dochere->OID + "\"";
+	 if (topparent == dochere->OID) {
+	    navigationbar += " selected";
+	 }
+	 navigationbar += ">" + title + "</option>\n";
+	 dochere++;
+      }
+
+      navigationbar += "</select>\n";
+      navigationbar += "</form>\n";
+   }
+
+   disp.setmacro ("navigationbar", "Global", navigationbar);
 }
 
@@ -448,5 +492,5 @@
 
 	// set _navigationbar_ macro
-	set_navbarmacros (disp, response, has_search_button, args);
+	set_navbarmacros (disp, response, has_search_button, args, cinfo);
    
       }
Index: /trunk/gsdl/src/recpt/documentaction.h
===================================================================
--- /trunk/gsdl/src/recpt/documentaction.h	(revision 4892)
+++ /trunk/gsdl/src/recpt/documentaction.h	(revision 4893)
@@ -48,5 +48,6 @@
 
   void set_navbarmacros (displayclass &disp, FilterResponse_t &response, 
-			 bool has_search_button, cgiargsclass &args);
+			 bool has_search_button, cgiargsclass &args,
+			 ColInfoResponse_t &cinfo);
 
   virtual void output_text (ResultDocInfo_t &docinfo, format_t *formatlistptr,
