//____________________ Global utilities for all menus ___________________ //
ExpandingMenu.prototype.setMenuResponse = function(argObj) {
    // This particular response function must be called after parent-child relationships established.
    var menuSelected = this.htmlElement.id + "Obj" ;
    var responseFunVar = " " ;
    for ( var menuNum = 0; menuNum < argObj.menusNotSelected.length ; menuNum++ ) {
        responseFunVar += " " + argObj.menusNotSelected[menuNum] + ".setInitialCondition( " + argObj.menusNotSelected[menuNum] + ".itemManager[0] ); " ;
    }
    // Collapse menu selected if you clicked on a child (expand if you didn't).
    if ( this.itemManager[argObj.item].linkType == "child" ) {
        responseFunVar += " " + menuSelected + ".setInitialCondition(" + menuSelected + ".itemManager[0] );" ;
        responseFunVar += " " + menuSelected + ".itemManager[" + argObj.item + "].htmlElement.style.display = 'block' ; " ;
        responseFunVar += " " + menuSelected + ".itemManager[" + argObj.item + "].htmlElement.style.color = 'rgb(0%, 40%, 80%)' ; "; // Emulates visited link color (middyblue).
        responseFunVar += " " + menuSelected + ".itemManager[" + argObj.item + "].htmlElement.style.border = 'rgb(10%, 40%, 60%) solid 1px' ; " ; // logo shadow.
        
    }
    for ( var menuNum = 0; menuNum < argObj.menusNotSelected.length ; menuNum++ ) {
        responseFunVar += " " + argObj.menusNotSelected[menuNum] + ".hideAllContent(); " ;
    }
    return responseFunVar ;
}
ExpandingMenu.prototype.prepareMenu = function() {
    //Associate superlinks with sublinks. UPGRADE: NEW FEATURE--add to ExpandingMenu.js as example.
    // Assume the first link may be a parent.
    menuParentCandidateObj = this.itemManager[0] ;
    for (var item=1; item < this.itemManager.length; item++) {
        // If the link id has no hyphen, then assume it may be a parent.
        if (this.itemManager[item].htmlElement.id.indexOf("-") == -1 ) {
            menuParentCandidateObj = this.itemManager[item] ;
             // _parentCandidate = this.itemManager[item].htmlElement.id ; debug("_parentCandidate") ;
        }
        // If the link id has a hyphen, associate it with the parent.
        else {
            menuParentCandidateObj.associateChildren(  [ this.itemManager[item] ]  ) ;
             // _childCandidate = this.itemManager[item].htmlElement.id ; debug("_childCandidate") ;
        }
    }
    //Here we automate these assignments for each particular application.
    //Associate all the content using a formulaic approach.
    for (var counter=0; counter < this.itemManager.length; counter++) {
        var contentIdStr = "content-" + this.itemManager[counter].htmlElement.id;
        this.itemManager[counter].associateContent( document.getElementById(contentIdStr) );
    }
    // Set classes and custom menu response using formulaic approach based on id nomenclature.
    // UPGRADE: think of a way to use className here. The problem is applying styles without knowing which class the target has.
    for (var item=0; item < this.itemManager.length; item++) {
        var itemClassesObj = {
            argBachelorUnselected: "menulink-bachelor-unselected", 
            argBachelorSelected: "menulink-bachelor-selected", 
            argParentCollapsedUnselected: "menulink-parent-collapsed-unselected",
            argParentCollapsedSelected: "menulink-parent-collapsed-selected",
            argParentExpandedUnselected: "menulink-parent-expanded-unselected",
            argParentExpandedSelected: "menulink-parent-expanded-selected",
            argChildUnselected: "menulink-child-unselected",
            argChildSelected: "menulink-child-selected",
            argMouseover: "this.style.cursor = 'pointer'; this.style.border = 'rgb(10%, 40%, 60%) solid 1px' ; " ,
            argMouseout: "this.style.cursor = 'default'; this.style.border = '#99d9e8 solid 1px'; "
        } // mouseover color = logo shadow 
        /* Use if you want a special style for parent menu items.
        if (this.itemManager[item].linkType != "child") {
            itemClassesObj.argMouseover = "this.style.cursor = 'pointer'; this.style.border = 'rgb(10%, 40%, 60%) solid 1px' ; " ; // logo shadow.
            itemClassesObj.argMouseout = "this.style.cursor = 'default';this.style.border = '#99d9e8 solid 1px'; " ;
        }
        */
        this.itemManager[item].setClasses( itemClassesObj ) ;
    }
    // Initialize the menu and choose an initial item to select.
    this.setInitialCondition( this.itemManager[0] );
}
function nextContent(anchorEle) {
    // nextContent should be called from <a> in content div.
    // UPGRADE: not sure this version will always leap across menus and all other obstacles. You could add a for loop to find the next content div.
    // First trap for spaces between content divs.
    if (anchorEle.parentNode.nextSibling.nodeType == 1) { // Must be a tag, not just text (white space).
        var menuItemObj = anchorEle.parentNode.nextSibling.menuItem;
    }
    else {
        var menuItemObj = anchorEle.parentNode.nextSibling.nextSibling.menuItem; 
    }
    menuItemObj.respond({ menuItemEle: menuItemObj.htmlElement }) ;
}
//____________________ Special functions for this page ___________________ //
// function hideSplashDescription(thing) {
//     document.getElementById("content-orient").style.display = 'none' ;
// }
function openInFullScreen(url) {
    window.moveTo(0,0);
    window.resizeTo(screen.availWidth,screen.availHeight);
    window.location = url ;
}
function instantiateMenus() {
	 //____________________ Instantiate a drop-down ___________________ //
	// UPGRADE: CONSOLIDATE BELOW INTO GLOBAL FUNCTIONS CALLED FOR PARTICULAR MENUS.
	menu = document.getElementById("navMenu0"); debug("menu", 5)
	navMenu0Obj = new ExpandingMenu({ menuId: "navMenu0", isTwoLevelMenu: true, useDefaultContentManagement: true} ) ;
	navMenu0Obj.prepareMenu() ;
	// Adjust menu settings on click. Note that responseFun has to be a string, else it triggers at the wrong times.
	for (var item=0; item < navMenu0Obj.itemManager.length; item++) {
	    navMenu0Obj.itemManager[item].responseFun = navMenu0Obj.setMenuResponse( { menusNotSelected: ["navMenu1Obj" , "navMenu2Obj", "navMenu3Obj"], item: item } ) ;
	    // if (item != 0) navMenu0Obj.itemManager[item].responseFun += "hideSplashDescription(item)" ;
	}
	//____________________ Instantiate drop-downs ___________________ //
	navMenu1Obj = new ExpandingMenu({ menuId: "navMenu1", isTwoLevelMenu: true, useDefaultContentManagement: true} ) ;
	navMenu1Obj.prepareMenu() ;
	// Adjust menu settings on click.
	for (var item=0; item < navMenu1Obj.itemManager.length; item++) {
	    navMenu1Obj.itemManager[item].responseFun = navMenu1Obj.setMenuResponse( { menusNotSelected: ["navMenu0Obj" , "navMenu2Obj", "navMenu3Obj"], item: item } ) ;
	}
	//____________________ Instantiate a drop-down ___________________ //
	navMenu2Obj = new ExpandingMenu({ menuId: "navMenu2", isTwoLevelMenu: true, useDefaultContentManagement: true} ) ;
	navMenu2Obj.prepareMenu() ;
	// Adjust menu settings on click.
	for (var item=0; item < navMenu2Obj.itemManager.length; item++) {
	    navMenu2Obj.itemManager[item].responseFun = navMenu2Obj.setMenuResponse( { menusNotSelected: ["navMenu0Obj" , "navMenu1Obj", "navMenu3Obj"], item: item } ) ;
	}
	//____________________ Instantiate a drop-down ___________________ //
	navMenu3Obj = new ExpandingMenu({ menuId: "navMenu3", isTwoLevelMenu: true, useDefaultContentManagement: true} ) ;
	navMenu3Obj.prepareMenu() ;
	// Adjust menu settings on click.
	for (var item=0; item < navMenu3Obj.itemManager.length; item++) {
	    navMenu3Obj.itemManager[item].responseFun = navMenu3Obj.setMenuResponse( { menusNotSelected: ["navMenu0Obj" , "navMenu1Obj", "navMenu2Obj"], item: item } ) ;
	}
	//____________________ Special response functions ___________________ //
	// EXAMPLE: navMenu3Obj.itemManager[1].responseFun += "openInFullScreen('theme_pool.php') ; "
	//____________________ Generate printable text ___________________ //
	// navMenu0Obj.generatePrintableText() ; Unused here.
	//____________________ DEBUG ___________________ //
	// alert(document.getElementById("share").menu)
}
