/// $Id: menus.js,v 1.14 2009/01/05 04:39:48 www Exp $
// Javascript to generate the navigation menus.

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

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

var mygroupsMenuWidth = mygroupsWidth;
var mygroupsMenuWidth_NS = 68;

// Widths of the bodies of the dropdown menus:
var defaultDropdownWidth       = 100;
var peopleDropdownWidth        = 110;
// var presentationDropdownWidth = 138;
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":"#99CCFF",
		    "bgOVER":"#CCCC99"};

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

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

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

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

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
		     // + presentationsWidth
		     + pubsWidth
		     + calendarWidth;

    var searchOptLogWidth = searchWidth
			  + optionsWidth
			  + loginWidth;

    var middleSpaceWidth = 800 - allNavsWidth
			       - searchOptLogWidth;

    // Fudge-factor html to adjust the home-menu fonts for NS 4.7 (shudder)
    var nsAdjBegin = "";
    var nsAdjEnd = "";

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

    var homeSectionXPos      = groupWidth + mygroupsWidth;

    document.write("<table width=\"100%\""
		    + "border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
		    + "<tr>"
		    + "<td><img src=\"/images/menus/nav_menu_backdrop.gif\"/></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 Chess Website" message.
	GROUP_MENU_ITEMS[GROUP_MENU_ITEMS.length] = {
	    code:nsAdjBegin + "Welcome to the Chess Website"
			    + nsAdjEnd,
	    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 = new Array();
	    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 {
		    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:nsAdjBegin + "home" + nsAdjEnd,
		url:httpURL + "/",
		format:{size:[homeNavImgHeight,homeWidth]}},
	{code:nsAdjBegin + "about" + nsAdjEnd,
		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:"charter",    url:httpURL + "/charter.htm"},
		{code:"research",   url:httpURL + "/research.htm"},
		{code:"education",   url:httpURL + "/education.htm"},
		{code:"conferences",url:httpURL + "/conferences.htm"},
		{code:"links",      url:httpURL + "/links.htm"},
		{code:"faq",        url:httpURL + "/chess/faq"}
	    ]
	},
	{code:nsAdjBegin + "people" + nsAdjEnd,
		url:httpURL + "/people/project_personnel/",
		format:{size:[homeNavImgHeight,peopleWidth],
			itemoff:[0,aboutWidth],
			leveloff:[homeDropdownVOffset,0]},
	    sub:[
		{style:ITEM_STYLE,
		 size:[dropdownImgHeight,peopleDropdownWidth],
		 itemoff:[dropdownImgHeight,0]},
		{code:"personnel",
		 url:httpURL + "/people/project_personnel/"},
		{code:"directory",
		 url:httpURL + "/people/directory/"}
	    ]
	},
	{code:nsAdjBegin + "publications" + nsAdjEnd,
		url:httpURL + "/pubs/",
		format:{size:[homeNavImgHeight,pubsWidth],
			      itemoff:[0,peopleWidth],
			      leveloff:[homeDropdownVOffset,0]},
	    sub:[
		{style:ITEM_STYLE,
		 size:[dropdownImgHeight,defaultDropdownWidth],
		 itemoff:[dropdownImgHeight,0]},
		{code:"papers",        url:httpURL + "/pubs/?pubpage=papers"},
		{code:"presentations", url:httpURL + "/pubs/?pubpage=presentations"},
		{code:"downloads",     url:httpURL + "/downloads.htm"},
		{code:"search",        url:httpURL + "/pubs/search/"}
	    ]
	}
    ];

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

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

    //
    // Add the "calendar" menu:
    //
    HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	code:nsAdjBegin + "calendar" + nsAdjEnd,
	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:nsAdjBegin + "&nbsp;" + nsAdjEnd,
	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>");
}
