// $Id: menus.js,v 1.6 2010/05/27 23:16:53 www Exp $
// Javascript to generate the navigation menus.

var debugWindow;
var siteGroup = 'musyc';

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

// positions, sizes
var homeNavImgHeight      = 22;
var homeNavImgHeight_NS   = 16;
var dropdownImgHeight     = 17;

// Widths of the links on the navigation bar:
var initialSpaceWidth  = 10;
var homeWidth          = 43;
var aboutWidth         = 50;
var peopleWidth        = 54;
var technicalWidth     = 68;

// Widths of the bodies of the dropdown menus:
var defaultDropdownWidth       = 100;
var aboutDropdownWidth        = 130;
var peopleDropdownWidth        = 130;
var technicalDropdownWidth = 140;
var myAccountWidth               = 90;
var myGroupsWidth               = 90;
var myAccountDropdownWidth               = 110;
var loginWidth                 = 60;

var homeDropdownVOffset     = 22;
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":"#000066",
		    "bgOVER":"#000066"};

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

/*
var item_color = {"bgON":"#000066",
		  "bgOVER":"#000066"};
*/

var item_color = {"bgON":"#eee",
		  "bgOVER":"#eee",
                  "shadow":"#006"};

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 item_css = {"ON":"clsItemOn",
		"OVER":"clsItemOver"};

var label_item_css = {"ON":"clsItemOn",
		      "OVER":"clsItemOn"};

var my_account_css = {"ON":"clsMyAccountOn",
		   "OVER":"clsMyAccountOver"};

var my_account_css_NS = {"ON":"clsMyAccountOnNS",
		      "OVER":"clsMyAccountOverNS"};

var login_css = {"ON":"clsLoginOn",
		   "OVER":"clsLoginOver"};

var login_css_NS = {"ON":"clsLoginOnNS",
		      "OVER":"clsLoginOverNS"};

var my_account_disabled_css = {"ON":"clsMyAccountOn",
			    "OVER":"clsMyAccountOn"};

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 ITEM_STYLE = {"border":0,
		  "shadow":2,
		  "color":item_color,
		  "css":item_css};

var LABEL_ITEM_STYLE = {"border":0,
		  "shadow":0,
		  "color":item_color,
		  "css":label_item_css};

var MY_ACCOUNT_STYLE = {"border":0,
		     "shadow":0,
		     "color":navbar_color,
		     "css":my_account_css};

/*
var FOO_STYLE = {"border":5,
		     "shadow":0,
		     "color":navbar_color,
		     "css":my_account_css};
*/

var LOGIN_STYLE = {"border":0,
		   "shadow":0,
		   "color":navbar_color,
		   "css":login_css};

var MY_ACCOUNT_DISABLED_STYLE = {"border":0,
			      "shadow":0,
			      "color":navbar_space_color,
			      "css":my_account_disabled_css};

if (document.layers) {
    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};

    MY_ACCOUNT_STYLE = {"border":0,
		     "shadow":0,
		     "color":navbar_color,
		     "css":my_account_css_NS};

    LOGIN_STYLE = {"border":0,
		   "shadow":0,
		   "color":navbar_color,
		   "css":login_css_NS};

    MY_ACCOUNT_DISABLED_STYLE = {"border":0,
			      "shadow":0,
			      "color":navbar_space_color,
			      "css":my_account_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,
                    navLeft,
		    user,
		    group,
		    mygroups,
		    groupHasCalendar,
		    userHasCalendars,
		    usingHTTPS,
		    myAccountProtocol,	// Either "http", "https" or "disabled"
		    sslPortExtension,
		    proxy_targets,
                    is_webmaster,
                    is_admin
		    ) {

    navImgTop            = navTop;
    if (document.layers) {
	// To support Netscape 4.7:
	navImgTop            = navTop + 4;
	homeNavImgHeight     = homeNavImgHeight_NS;
	homeDropdownVOffset  = homeDropdownVOffset_NS;
    }

    var allNavsWidth = homeWidth
		     + aboutWidth
		     + peopleWidth
		     + technicalWidth;

    var userPartWidth = myAccountWidth + myGroupsWidth + loginWidth;

    var middleSpaceWidth = 800 - allNavsWidth - userPartWidth - navLeft;

    var homeSectionXPos      = navLeft;
    var homeSectionYPos      = navImgTop;

    var httpURL;
    var httpsURL;

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

    var aboutSubItems = [
		{style:ITEM_STYLE,
		 size:[dropdownImgHeight,defaultDropdownWidth],
		 itemoff:[dropdownImgHeight,0]},
		{code:"overview",   url:httpURL + "/about/overview/MuSyCOverview.pdf"},
		{code:"org chart",  url:httpURL + "/about/org_chart/"},
		{code:"sponsors",   url:httpURL + "/about/sponsors/"},
		{code:"partners",   url:httpURL + "/about/partners/"},
		{code:"universities",   url:httpURL + "/about/universities/"},
                {code:"contact us", url:httpURL + "/about/contact_us/"},
		// {code:"workspaces", url:httpURL + "/" + siteGroup},
                {code:"site map",   url:httpURL + "/sitemap.html"},
		{code:"faq",        url:httpURL + "/" + siteGroup + "/faq"}
	    ];

    var peopleSubItems = [
		{style:ITEM_STYLE,
		 size:[dropdownImgHeight,peopleDropdownWidth],
		 itemoff:[dropdownImgHeight,0]},
		{code:"directory",
		 url:httpURL + "/people/directory/index.htm"},
		{code:"research team",
		 url:httpURL + "/admininfo/theme_teams/"},
		{code:"advisors",
		 url:httpURL + "/people/advisors/index.htm"},
		{code:"org chart",  url:httpURL + "/about/org_chart/index.htm"}
	    ];

    if (user != "") {
        peopleSubItems[peopleSubItems.length] = 
            {code:"students", url:"/students/summary"};
        peopleSubItems[peopleSubItems.length] = 
            {code:"awards", url:"/admininfo/awards/"};
    }

    if (user != "") {
        var technicalSubItems = [
		{style:ITEM_STYLE,
		    size:[dropdownImgHeight,technicalDropdownWidth],
		    itemoff:[dropdownImgHeight,0]},
		{code:"publications",
		    url:httpURL + "/pubs/"},
		{code:"workshops",
		    url:httpURL + "/pubs/workshops"},
		{code:"reports",
		    url:httpURL + "/pubs/reports"},
		{code:"talks",
		    url:httpURL + "/pubs/talks/"},
		{code:"posters",
		    url:httpURL + "/pubs/posters/"},
//		{code:"demos",
//		    url:httpURL + "/pubs/presentations/demos/"},
		{code:"downloads",
		    url:httpURL + "/pubs/downloads/"}
	    ];

//        technicalSubItems[technicalSubItems.length] = 
//            {code:"patents", url:"/admininfo/patents/"};
        technicalSubItems[technicalSubItems.length] = 
            {code:"pub count", url:"/admininfo/pubcount/"};
    }

    var HOME_MENU_ITEMS = [
	{pos:[homeSectionXPos,homeSectionYPos],
	 size:[homeNavImgHeight, homeWidth],
	 itemoff:[0,homeWidth],
	 leveloff:[homeDropdownVOffset,0],
	 style:NAVBAR_STYLE},
	{code:"&nbsp;",
	 format:{
	    size:[homeNavImgHeight,initialSpaceWidth],
	    itemoff:[0,0],
            leveloff:[homeDropdownVOffset,0],
	    style:NAVBAR_SPACE_STYLE}},
	{code:"home", url:httpURL + "/index.html",
		    format:{size:[homeNavImgHeight,homeWidth],
                            itemoff:[0,initialSpaceWidth]}},
	{code:"about", url:httpURL + "/about/overview/MuSyCOverview.pdf",
		    format:{size:[homeNavImgHeight,aboutWidth],
			    itemoff:[0,homeWidth],
			    leveloff:[homeDropdownVOffset,0]},
            sub: aboutSubItems
	},
	{code:"people", url:httpURL + "/people/directory/index.htm",
			format:{size:[homeNavImgHeight,peopleWidth],
				itemoff:[0,aboutWidth],
				leveloff:[homeDropdownVOffset,0]},
            sub: peopleSubItems
	}
    ];

    //
    // Redirect to login if not logged in already.
    //
    if (user != "") {
        HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = 
        {code:"technical", url:httpURL + "/pubs/",
            format:{size:[homeNavImgHeight,technicalWidth],
                      itemoff:[0,peopleWidth],
                      leveloff:[homeDropdownVOffset,0]},
            sub: technicalSubItems
        }
    } else {
        HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = 
        {code:"technical", url:httpURL + "/login/",
            format:{size:[homeNavImgHeight,technicalWidth],
                      itemoff:[0,peopleWidth],
                      leveloff:[homeDropdownVOffset,0]},
            sub: technicalSubItems
        }
    }

    //
    // Add the space before "my-account login":
    //
    HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	code:"&nbsp;",
	format:{
	    size:[homeNavImgHeight,middleSpaceWidth],
	    itemoff:[0,technicalWidth],
            leveloff:[homeDropdownVOffset,0],
	    style:NAVBAR_SPACE_STYLE
	}
    };

    //
    // Add 'my account', 'logout' if user logged in, else space and 'login':
    //
    if (user == "") {
        HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
            code:"&nbsp;",
            format:{
                size:[homeNavImgHeight,myAccountWidth],
                itemoff:[0,middleSpaceWidth],
                style:NAVBAR_SPACE_STYLE
            }
        };
	HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	    code:"login",
	    url:httpURL + "/login/",
	    format:{
		size:[homeNavImgHeight,loginWidth],
		itemoff:[0,myAccountWidth],
		style:LOGIN_STYLE
	    }
	};
    } else {

        //
        // Construct array of my-account menu items:
        //
        switch(myAccountProtocol) {
            case 'http':
            case 'https':
                var myAccountSubItems =
                           [{style:ITEM_STYLE,
                             size:[dropdownImgHeight,myAccountDropdownWidth],
                             itemoff:[dropdownImgHeight,0]}];
                myAccountSubItems[myAccountSubItems.length] = {
                    code:"profile",
                    url:httpURL + "/options/account/profile/"
                };
                myAccountSubItems[myAccountSubItems.length] = {
                    code:"change password",
                    url:httpURL + "/options/account/password/"
                };

                if (is_webmaster || is_admin) {
                    myAccountSubItems[myAccountSubItems.length] = {
                        code:"musycadmin",
                        url:httpURL + "/musycadmin/"
                    };
                    myAccountSubItems[myAccountSubItems.length] = {
                        code:"user db interface",
                        url:httpURL + "/admininfo/users/"
                    };
                    myAccountSubItems[myAccountSubItems.length] = {
                        code:"user db check",
                        url:httpURL + "/admininfo/dbcheck/"
                    };
                }

                if (proxy_targets != null && proxy_targets.length > 0) {
                    if (proxy_targets[0] == "any user") {
                        myAccountSubItems[myAccountSubItems.length] = {
                            code:"masquerade",
                            url:httpURL + "/options/power/masquerade/"
                        }
                    } else {
                        myAccountSubItems[myAccountSubItems.length] = {
                            code:"masquerade as ...",
                            url:"javascript:;",
                            format:{
                                style:LABEL_ITEM_STYLE
                            }
                        };
                        for (var i = 0; i < proxy_targets.length; i++) {
                            myAccountSubItems[myAccountSubItems.length] = {
                                code:"&nbsp;&nbsp;&nbsp;&nbsp;" + proxy_targets[i],
                                url:httpURL + "/options/account/profile/?masqName="
                                            + proxy_targets[i]
                            };
                        }
                    }
                }

                HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
                    code:"my account",
                    url:httpURL + "/options/account/profile/",
                    format:{
                        size:[homeNavImgHeight,myAccountWidth],
                        itemoff:[0,middleSpaceWidth],
                        style:MY_ACCOUNT_STYLE
                    },
                    sub: myAccountSubItems
                };

                break;
            default:
                break;
        }

	HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	    code:"my groups",
	    url:httpURL + "/mygroups/",
	    format:{
		size:[homeNavImgHeight,myAccountWidth],
		itemoff:[0,myAccountWidth],
		style:MY_ACCOUNT_STYLE
	    }
	};

	HOME_MENU_ITEMS[HOME_MENU_ITEMS.length] = {
	    code:"logout",
	    url:httpURL + "/logout/",
	    format:{
		size:[homeNavImgHeight,loginWidth],
		itemoff:[0,myAccountWidth],
		style:MY_ACCOUNT_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 homeMenu = new COOLjsMenu("HomeMenu", HOME_MENU_ITEMS);
}
