7033f67074594c3d9cc3487f079456928fdf3260
angie
  Tue Apr 12 13:46:14 2016 -0700
Major change to hgGateway: the contents are replaced by a new page designed by a graphic artist.
It has icons for selecting popular species, an autocomplete input for typing in species or common names,
as well as a phylogenetic tree display that shows the relationships of the species that we host.
It has a menu for selecting the assembly of the selected species' genome and the usual assembly
description.

refs #15277

diff --git src/hg/lib/web.c src/hg/lib/web.c
index ad378a5..3a66aea 100644
--- src/hg/lib/web.c
+++ src/hg/lib/web.c
@@ -305,31 +305,30 @@
 webStartWrapper(theCart, db, format, args, TRUE, TRUE);
 va_end(args);
 }
 
 void webStartHeader(struct cart *theCart, char *db, char *headerText, char *format, ...)
 /* Print out pretty wrapper around things when not from cart.
  * Include headerText in the html header. */
 {
 va_list args;
 va_start(args, format);
 webStartWrapperGatewayHeader(theCart, db, headerText, format, args, TRUE, TRUE,
 			     FALSE);
 va_end(args);
 }
 
-
 void webEndSection()
 /* Close down a section */
 {
 puts(
     "" "\n"
     "	</TD><TD WIDTH=15></TD></TR></TABLE>" "\n"
 //    "<BR>"
     "	</TD></TR></TABLE>" "\n"
     "	</TD></TR></TABLE>" "\n"
     "	" );
 puts("</div>");
 }
 
 void webStartSectionTables()
 /* Put up start of nepharious table layout stuff. (Normally done by webStartWrap). */
@@ -419,30 +418,60 @@
 
 void webEnd()
 /* output the footer of the HTML page */
 {
 if(!webInTextMode)
     {
     webEndSectionTables();
 #ifndef GBROWSE
     googleAnalytics();
 #endif /* GBROWSE */
     puts( "</BODY></HTML>");
     webPopErrHandlers();
     }
 }
 
+void webStartJWest(struct cart *cart, char *db, char *title)
+/* Start HTML with new banner design by jWest (with modifications). */
+{
+puts("Content-type:text/html\n");
+printf(
+#include "jWestBanner.h"
+       , title, title);
+webPushErrHandlersCartDb(cart, db);
+htmlWarnBoxSetup(stdout);
+
+// Add hotlinks bar
+char *navBar = menuBar(cart, db);
+if (navBar)
+    {
+    puts(navBar);
+    // Override nice-menu.css's menu background and fonts:
+    puts("<link rel=\"stylesheet\" href=\"../style/jWest.afterNiceMenu.css\">");
+    }
+webHeadAlreadyOutputed = TRUE;
+errAbortSetDoContentType(FALSE);
+}
+
+void webEndJWest()
+/* End HTML that was started with webStartJWest. */
+{
+googleAnalytics();
+puts("</body></html>");
+webPopErrHandlers();
+}
+
 static boolean gotWarnings = FALSE;
 
 void webVaWarn(char *format, va_list args)
 /* Warning handler that closes out page and stuff in
  * the fancy form. */
 {
 gotWarnings = TRUE;
 boolean needStart = !webHeadAlreadyOutputed;
 if (needStart)
     {
     // All callers of this (via webPushErrHandlersCartDb) have skipped Content-type
     // because they want to output text unless we hit this condition:
     puts("Content-type:text/html\n");
     cartWebStart(errCart, errDb, "Error");
     }