// $Id: menus.js,v 1.7 2005/11/12 01:56:12 www Exp $
// Javascript to generate the navigation menus.

// positions, sizes
var groupNavImgHeight    = 20;
var groupNavImgHeight_NS = 19;
var homeNavImgHeight      = 20;
var homeNavImgHeight_NS   = 16;
var dropdownImgHeight     = 17;

// Widths of the links on the navigation bar:
var groupWidth         = 100;
var mygroupsWidth      = 102;
var homeWidth          = 43;
var aboutWidth         = 45;
var peopleWidth        = 51;
var pubsWidth          = 81;
var calendarWidth      = 64;

var mygroupsMenuWidth = mygroupsWidth;
// var mygroupsMenuWidth_NS = 68;
var mygroupsMenuWidth_NS = 90;

// Widths of the bodies of the dropdown menus:
var defaultDropdownWidth       = 100;
var peopleDropdownWidth        = 130;
var calendarDropdownWidth      = 155;
var searchWidth                = 43;
var optionsWidth               = 50;
var loginWidth                 = 44;

var groupDropdownVOffset    = 20;
var groupDropdownVOffset_NS = 20;
var homeDropdownVOffset     = 20;
var homeDropdownVOffset_NS  = 18;

//keywords
var code     = "code";
var format   = "format";
var itemoff  = "itemoff";
var leveloff = "leveloff";
var pos      = "pos";
var size     = "size";
var style    = "style";
var sub      = "sub";
var url      = "url";

//styles
// var navbar_color = {"border":"#666666",	// not used
// 		    "shadow":"#DBD8D1",	// not used
// 		    "bgON":"#CCCC99",
// 		    "bgOVER":"#666699"};

var navbar_color = {"bgON":"#CCCC99",
		    "bgOVER":"#003366"};

var navbar_space_color = {"bgON":"#CCCC99",
			  "bgOVER":"#CCCC99"};

var item_color = {"bgON":"#003366",
		  "bgOVER":"#003366"};

var groupbar_color = {"bgON":"#FFFFCC",
		      "bgOVER":"#003366"};

var groupbar_space_color = {"bgON":"#FFFFCC",
			    "bgOVER":"#FFFFCC"};

var navbar_css = {"ON":"clsNavbarOn",
		  "OVER":"clsNavbarOver"};

var navbar_css_NS = {"ON":"clsNavbarOnNS",
		     "OVER":"clsNavbarOverNS"};

var navbar_space_css = {"ON":"clsNavbarOn",
		        "OVER":"clsNavbarOn"};

var navbar_space_css_NS = {"ON":"clsNavbarOnNS",
		           "OVER":"clsNavbarOnNS"};

var groupbar_css = {"ON":"clsGroupbarOn",
		    "OVER":"clsGroupbarOver"};

var groupbar_css_NS = {"ON":"clsGroupbarOnNS",
		       "OVER":"clsGroupbarOverNS"};

var groupbar_space_css = {"ON":"clsGroupbarOn",
		          "OVER":"clsGroupbarOn"};

var groupbar_space_css_NS = {"ON":"clsGroupbarOnNS",
		             "OVER":"clsGroupbarOnNS"};

var welcome_css = {"ON":"clsWelcomeOn",
		   "OVER":"clsWelcomeOn"};

var welcome_css_NS = {"ON":"clsGroupbarOnNS",
		      "OVER":"clsGroupbarOnNS"};

var mygroups_css = {"ON":"clsMygroupsOn",
		    "OVER":"clsMygroupsOver"};

var mygroups_css_NS = {"ON":"clsMygroupsOnNS",
		       "OVER":"clsMygroupsOverNS"};

var mygroups_space_css = {"ON":"clsMygroupsOn",
			  "OVER":"clsMygroupsOn"};

var mygroups_space_css_NS = {"ON":"clsMygroupsOnNS",
			     "OVER":"clsMygroupsOnNS"};

var item_css = {"ON":"clsItemOn",
		"OVER":"clsItemOver"};

var options_css = {"ON":"clsOptionsOn",
		   "OVER":"clsOptionsOver"};

var options_css_NS = {"ON":"clsOptionsOnNS",
		      "OVER":"clsOptionsOverNS"};

var options_disabled_css = {"ON":"clsOptionsOn",
			    "OVER":"clsOptionsOn"};

var GROUPBAR_STYLE = {"border":0,
		      "shadow":0,
		      "color":groupbar_color,
		      "css":groupbar_css};

var GROUPBAR_SPACE_STYLE = {"border":0,
			    "shadow":0,
			    "color":groupbar_space_color,
			    "css":groupbar_space_css};

var WELCOME_STYLE = {"border":0,
		     "shadow":0,
		     "color":groupbar_space_color,
		     "css":welcome_css};

var MYGROUPS_STYLE = {"border":0,
		      "shadow":0,
		      "color":groupbar_color,
		      "css":mygroups_css};

var MYGROUPS_SPACE_STYLE = {"border":0,
			    "shadow":0,
			    "color":groupbar_space_color,
			    "css":mygroups_space_css};

var NAVBAR_STYLE = {"border":0,
		    "shadow":0,
		    "color":navbar_color,
		    "css":navbar_css};

var NAVBAR_SPACE_STYLE = {"border":0,
			  "shadow":0,
			  "color":navbar_space_color,
			  "css":navbar_space_css};

var ITEM_STYLE = {"border":0,
		  "shadow":0,
		  "color":item_color,
		  "css":item_css};

var OPTIONS_STYLE = {"border":0,
		     "shadow":0,
		     "color":navbar_color,
		     "css":options_css};

var OPTIONS_DISABLED_STYLE = {"border":0,
			      "shadow":0,
			      "color":navbar_space_color,
			      "css":options_disabled_css};

if (document.layers) {
    GROUPBAR_STYLE = {"border":0,
		      "shadow":0,
		      "color":groupbar_color,
		      "css":groupbar_css_NS};

    GROUPBAR_SPACE_STYLE = {"border":0,
			    "shadow":0,
			    "color":groupbar_space_color,
			    "css":groupbar_space_css_NS};

    WELCOME_STYLE = {"border":0,
		     "shadow":0,
		     "color":groupbar_space_color,
		     "css":welcome_css_NS};

    MYGROUPS_STYLE = {"border":0,
		      "shadow":0,
		      "color":groupbar_color,
		      "css":mygroups_css_NS};

    MYGROUPS_SPACE_STYLE = {"border":0,
			    "shadow":0,
			    "color":groupbar_space_color,
			    "css":mygroups_space_css_NS};

    NAVBAR_STYLE = {"border":0,
		    "shadow":0,
		    "color":navbar_color,
		    "css":navbar_css_NS};

    NAVBAR_SPACE_STYLE = {"border":0,
			  "shadow":0,
			  "color":navbar_space_color,
			  "css":navbar_space_css_NS};

    OPTIONS_STYLE = {"border":0,
		     "shadow":0,
		     "color":navbar_color,
		     "css":options_css_NS};

    OPTIONS_DISABLED_STYLE = {"border":0,
			      "shadow":0,
			      "color":navbar_space_color,
			      "css":options_css_NS};

};

// The menu bar is implemented as two COOLjsMenu "menus definitions" --
// one for the group and my-groups menus on the left, and the other for
// the rest of the menu bar, including the home menu and everything to the
// right of it.  To try to avoid confusion with nomenclature, I'm calling
// the former the "groupSection" and the latter the "homeSection" in variable
// names, to differentiate between, for example, the whole groupSection area
// and the individual group menu.

function buildMenus(navTop,
		    user,
		    group,
		    mygroups,
		    groupMenuItems,
		    groupHasCalendar,
		    userHasCalendars,
		    usingHTTPS,
		    optionsProtocol,	// Either "http", "https" or "disabled"
		    sslPortExtension
		    ) {

    var allNavsWidth = groupWidth
		     + mygroupsWidth
		     + homeWidth
		     + aboutWidth
		     + peopleWidth
		     + pubsWidth
		     + calendarWidth;

    var searchOptLogWidth = searchWidth
			  + optionsWidth
			  + loginWidth;

    var middleSpaceWidth = 800 - allNavsWidth
			       - searchOptLogWidth;

    var homeSectionXPos      = groupWidth + mygroupsWidth;
    var homeSectionYPos      = navTop;

    if (document.layers) {
	// To support Netscape 4.7:
	navImgTop            = navTop + 2;
	mygroupsMenuWidth    = mygroupsMenuWidth_NS;
	welcomeWidth         = groupWidth + mygroupsMenuWidth_NS;
	homeSectionYPos      = navTop + 2;
	groupSectionXPos     = 0;
	groupSectionYPos     = navTop;
	groupNavImgHeight    = groupNavImgHeight_NS;
	homeNavImgHeight     = homeNavImgHeight_NS;
	homeDropdownVOffset  = homeDropdownVOffset_NS;
	groupDropdownVOffset = groupDropdownVOffset_NS;
    } else {
	navImgTop            = navTop;
	welcomeWidth         = groupWidth + mygroupsMenuWidth;
	groupSectionXPos     = 0;
	groupSectionYPos     = navTop;
    }

    document.write("<table width=\"100%\""
		    + "border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
		    + "<tr>"
		    + "<td><img src=\"/images/menus/nav_menu_backdrop.gif\"/></td>");
		    // + "<td>&nbsp;</td>");

    // Pad out the navigation bar to the width of the window, but the image to
    // use depends on the browser.  Sigh.
    var rightPaddingImage;
    if (document.layers) {
	rightPaddingImage = "/images/menus/main_menu_bk_NS-unsel.gif";
    } else {
	rightPaddingImage = "/images/menus/main_menu_bk-unsel.gif";
    }

    document.write("<td width=\"100%\" background=\""
		    + rightPaddingImage
		    + "\">&nbsp;</td></tr></table>");

    var httpURL;
    var httpsURL;

    if (usingHTTPS) {
	httpURL = "http://" + document.domain;
	httpsURL = "";
    } else {
	httpURL = "";
	httpsURL = "https://" + document.domain + sslPortExtension;
    }

    GROUP_MENU_ITEMS = [{pos:[groupSectionXPos,groupSectionYPos],
			 size:[groupNavImgHeight, groupWidth],
			 itemoff:[0,groupWidth],
			 leveloff:[groupDropdownVOffset,0],
			 style:GROUPBAR_STYLE}];

    if (user == null || user == "") {
	// Put up the "Welcome to the website" message.

	GROUP_MENU_ITEMS[GROUP_MENU_ITEMS.length] = {
	    code:"Welcome to the Embedded Website",
	    format:{
		size:[groupNavImgHeight,welcomeWidth],
		style:WELCOME_STYLE
	    }
	};
    } else {
	//
	// Group-specific menu:
	//
	if (group == null || group == "") {
	    GROUP_MENU_ITEMS[GROUP_MENU_ITEMS.length] =
	       {code:"&nbsp;",
		format:{size:[groupNavImgHeight, groupWidth],
			style:GROUPBAR_SPACE_STYLE}
	       };
	} else {
	    var groupSubItems = [];
	    if (groupMenuItems.length > 0) {
		groupSubItems[groupSubItems.length] =
		    {style:ITEM_STYLE,
		     size:[dropdownImgHeight,defaultDropdownWidth],
		     itemoff:[dropdownImgHeight,0]};
	    }
	    for (var i = 0; i < groupMenuItems.length; i++) {
		if (groupMenuItems[i] == "listinfo") {
		    groupSubItems[groupSubItems.length] =
					{code:"mail",
					  url:httpURL + "/" + group
						      + "/" + groupMenuItems[i]
						      + "/"};
		} else if (groupMenuItems[i] == "publications") {
		    groupSubItems[groupSubItems.length] = 
				      {code:"publications",
					url:httpURL
					+ "/pubs/search/?Action=Search&group="
					+ group
					+ "&groupname="
					+ group};
		} else {
		    groupSubItems[groupSubItems.length] = {
			code:groupMenuItems[i],
			url:httpURL + "/" + group
				    + "/" + groupMenuItems[i]
				    + "/"
		    };
		}
	    }
	    if (groupSubItems.length == 0) {
		GROUP_MENU_ITEMS[GROUP_MENU_ITEMS.length] = {
		    code:group,
		    url:"/" + group
		};
	    } else {
		GROUP_MENU_ITEMS[GROUP_MENU_ITEMS.length] = {
		    code:group,
		    url:"/" + group,
		    sub:groupSubItems
		};
	    }
	}

	// 
	// "My groups" menu:
	//
	if (mygroups == null || mygroups.length == 0) {
	    GROUP_MENU_ITEMS[GROUP_MENU_ITEMS.length] = {
		code:"&nbsp;",
		format:{
		    size:[groupNavImgHeight, mygroupsMenuWidth],
		    style:MYGROUPS_SPACE_STYLE
		}
	    };
	} else {
	    var myGroupsSubItems = [{style:ITEM_STYLE,
				     size:[dropdownImgHeight,
					   defaultDropdownWidth],
				     itemoff:[dropdownImgHeight,0]}];

	    for (var i = 0; i < mygroups.length; i++) {
		myGroupsSubItems[myGroupsSubItems.length] = {
		    code:mygroups[i],
		    url:httpURL + "/" + mygroups[i] + "/"
		};
	    }

	    GROUP_MENU_ITEMS[GROUP_MENU_ITEMS.length] = {
		code:"my groups",
		format:{
		    size:[groupNavImgHeight, mygroupsMenuWidth],
		    itemoff:[0,groupWidth],
		    style:MYGROUPS_STYLE
		},
		sub:myGroupsSubItems
	    };
	}
    }

    var HOME_MENU_ITEMS = [
	{pos:[homeSectionXPos,homeSectionYPos],
	 size:[homeNavImgHeight, homeWidth],
	 itemoff:[0,homeWidth],
	 leveloff:[homeDropdownVOffset,0],
	 style:NAVBAR_STYLE},
	{code:"home", url:httpURL + "/index.html",
		    format:{size:[homeNavImgHeight,homeWidth]}},
	{code:"about", url:httpURL + "/about/overview/index.htm",
		    format:{size:[homeNavImgHeight,aboutWidth],
			    itemoff:[0,homeWidth],
			    leveloff:[homeDropdownVOffset,0]},
	    sub:[
		{style:ITEM_STYLE,
		 size:[dropdownImgHeight,defaultDropdownWidth],
		 itemoff:[dropdownImgHeight,0]},
		{code:"history",   url:httpURL + "/history.htm"},
		{code:"overview",   url:httpURL + "/about/overview/index.htm"},
		{code:"admissions",   url:httpURL + "/admissions.htm"},
		{code:"research",   url:httpURL + "/research.htm"},
		{code:"faq",        url:httpURL + "/embedded/faq"}
	    ]
	},
	{code:"people", url:httpURL + "/people/directory/index.htm",
			format:{size:[homeNavImgHeight,peopleWidth],
				itemoff:[0,aboutWidth],
				leveloff:[homeDropdownVOffset,0]},
	    sub:[
		{style:ITEM_STYLE,
		 size:[dropdownImgHeight,peopleDropdownWidth],
		 itemoff:[dropdownImgHeight,0]},
		{code:"faculty",
		 url:"http://www.eecs.berkeley.edu/Research/Areas/DES/"},
		{code:"directory",
		 url:httpURL + "/people/directory/index.htm"}
	    ]
	}
    ];

    var pubSubItems = [
		{style:ITEM_STYLE,
		 size:[dropdownImgHeight,defaultDropdownWidth],
		 itemoff:[dropdownImgHeight,0]},
		{code:"downloads", url:httpURL + "/pubs/downloads/"},
		{code:"overview", url:httpURL + "/pubs/"},
		{code:"papers",   url:httpURL + "/pubs/?pubpage=All"}
	    ];
    if (group != null && group != "") {
	var spliceArray = new Array(pubSubItems[0]);
	spliceArray[1] = {code:group + " pubs", 
			  url:httpURL + "/pubs/search/?Action=Search&group="
				      + group
				      + "&groupname="
				      + group};
	for (i = 1; i < pubSubItems.length; i++) {
	    spliceArray[i+1] = pubSubItems[i];
	}
	pubSubItems = spliceArray;
	/* splice() not supported by IE until ver. 5.5 */
	// pubSubItems.splice(1, 0, {code:group + " pubs", 
	// 			  url:httpURL
	// 			      + "/pubs/search/?Action=Search&group="
	// 			      + group
	// 			      + "&groupname="
	// 			      + group});
    }
    HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	code:"publications", url:httpURL + "/pubs/",
	format:{
	    size:[homeNavImgHeight,pubsWidth],
	    itemoff:[0,peopleWidth],
	    leveloff:[homeDropdownVOffset,0]
	},
	sub:pubSubItems
    };

    var calendarTopURL;
    if (groupHasCalendar && group != "dopcenter" ) {
	calendarTopURL = httpURL + "/" + group + "/calendar/";
    } else { 
	calendarTopURL = httpURL + "/dopcenter/calendar/";
    }

    //
    // Construct array of calendar menu items:
    //
    var calendarSubItems = [{style:ITEM_STYLE,
			     size:[dropdownImgHeight,calendarDropdownWidth],
			     itemoff:[dropdownImgHeight,0]}];
    calendarSubItems[calendarSubItems.length] = {
	    code:"seminars",
	    url:httpURL + "/seminars.htm"
    };
    if (groupHasCalendar && group != "dopcenter") {
	calendarSubItems[calendarSubItems.length] = {
	    code:group + " calendar",
	    url:httpURL + "/" + group + "/calendar/"
	};
    }
    calendarSubItems[calendarSubItems.length] = {
	code:"DOP Center calendar",
	url:httpURL + "/dopcenter/calendar/"
    };
    if (userHasCalendars) {
	calendarSubItems[calendarSubItems.length] = {
	    code:"my calendars",
	    url:httpURL + "/embeddedj/gsrcCalendar.do?"
			+ "calendarName=mycalendars"
	};
    }

    //
    // Add the "calendar" menu:
    //
    HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	code:"calendar",
	url:calendarTopURL,
	format:{
	    size:[homeNavImgHeight,calendarWidth],
	    itemoff:[0,pubsWidth],
	    leveloff:[homeDropdownVOffset,0]
	},
	sub:calendarSubItems
    };

    //
    // Add the space before "search options login":
    //
    HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	code:"&nbsp;",
	format:{
	    size:[homeNavImgHeight,middleSpaceWidth],
	    itemoff:[0,calendarWidth],
	    style:NAVBAR_SPACE_STYLE
	}
    };

    //
    // Add the "search" link:
    //

    HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	code:"<small>search</small>",
	url:httpURL + "/search/",
	format:{
	    size:[homeNavImgHeight,searchWidth],
	    itemoff:[0,middleSpaceWidth],
	    style:OPTIONS_STYLE
	}
    };

    //
    // Add the "options" link:
    //

    if (optionsProtocol == "http") {
	HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	    code:"<small>options</small>",
	    url:httpURL + "/options/",
	    format:{
		size:[homeNavImgHeight,optionsWidth],
		itemoff:[0,searchWidth],
		style:OPTIONS_STYLE
	    }
	};
    } else if (optionsProtocol == "https") {
	HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	    code:"<small>options</small>",
	    url:httpsURL + "/options/",
	    format:{
		size:[homeNavImgHeight,optionsWidth],
		itemoff:[0,searchWidth],
		style:OPTIONS_STYLE
	    }
	};
    } else {
	if (optionsProtocol != "disabled") {
	    window.defaultStatus = "Illegal optionsProtocol: \""
				   + optionsProtocol + "\"";
	}
	HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	    code:"<small><font color=gray>options</font></small>",
	    format:{
		size:[homeNavImgHeight,optionsWidth],
		itemoff:[0,searchWidth],
		style:OPTIONS_DISABLED_STYLE
	    }
	};
    }

    //
    // Add the "login" or "logout" link:
    //
    if (user == "") {
	HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	    code:"<small>login</small>",
	    url:httpURL + "/login/",
	    format:{
		size:[homeNavImgHeight,loginWidth],
		itemoff:[0,optionsWidth],
		style:OPTIONS_STYLE
	    }
	};
    } else {
	HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	    code:"<small>logout</small>",
	    url:httpURL + "/logout/",
	    format:{
		size:[homeNavImgHeight,loginWidth],
		itemoff:[0,optionsWidth],
		style:OPTIONS_STYLE
	    }
	};
    }

    if (!document.layers) {
	HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	    code:"&nbsp;",
	    format:{
		size:[homeNavImgHeight,"100%"],
	        itemoff:[0,loginWidth],
	        style:NAVBAR_SPACE_STYLE
	    }
	};
    }

    var groupMenu = new COOLjsMenu("GroupMenu", GROUP_MENU_ITEMS);
    var homeMenu = new COOLjsMenu("HomeMenu", HOME_MENU_ITEMS);
}

var debugWindow;

function debug(msg) {
    /**
    window.defaultStatus = msg;
    **/
    if (debugWindow == null || debugWindow.document == null) {
	debugWindow = window.open();
    }
    debugWindow.document.write(msg + "<br>");
}
