//newmenu.js
//contains page-building and runtime functions for
//explore nav
//requires standard.js
//
var _nav = new Array();
var NAV_LEFT, NAV_TOP;
var last_casc1, last_subarrow;
var last_casc2 = "";
var subarrow_on = new Image();
var subarrow_off = new Image();
subarrow_on.src = "/gifs/popnav/nav_subarrow.gif";
subarrow_off.src = "/gifs/popnav/nav_subarrow_off.gif";


// Color Schemes
Separator = "#FFFFFF";			// Separator for Main Nav Menus
NavBackground = "#33cccc";		// 6699CC
NavHighlight = "#006699";

Cascade1Background = "#33cccc";
Cascade1Highlight = "#006699";

Cascade2Background = "#33cccc";
Cascade2Highlight = "#006699";


//NavItem class
//top-level explore item
//contains an instance of CascadeMenu, which is an
//array of cascade items for this nav item
//
//arguments:
//content - [string] name of nav item for display
//top_level - [boolean] specifies whether this nav item is
//      top level (true) and has arrow graphic and is dark blue
//      or not (false) and has no arrow and is light blue
//opened - [boolean] specifies whether this nav item is opened
//      (true) and has down-turned arrow.  only has effect if
//      top_level is also true
function NavItem( content, top_level, opened ){
        this.content = content;
        this.isTopLevel = top_level;
        this.isOpened = opened;
        this.cascade = new CascadeMenu();
        _nav[_nav.length] = this;
        return this;
}
 
//CascadeMenu class
//general cascade object for 1st and 2nd level cascades
//takes no arguments, contains array of cascadeitems
//has addMember method which adds cascade items to members array
function CascadeMenu(){
        this.members = new Array();
        this.addMember = AddMember;
        return this;
}
 
//CascadeItem class
//individual cascade items contained by CascadeMenu's members
//array. contains optional CascadeMenu instance if has_cascade
//for 2nd level cascade menus
//
//arguments:
//content - [string] name of nav item for display
//href - [string] url to link to, if any.  pass "#" if item goes nowhere
//has_cascade - [boolean] true if this item has a 2nd level cascade
function CascadeItem(content, href, has_cascade){
        this.content = content;
        this.href = href;
        this.has_cascade = has_cascade;
        if (has_cascade){
                this.cascade = new CascadeMenu();
        }
}
 
//AddMember method
//adds members to CascadeMenu objects
//passes arguments to CascadeItem
function AddMember(content,href,has_cascade){
        var my_index = this.members.length;
        this.members[my_index] = new CascadeItem(content,href,has_cascade);
        return this.members[my_index];
}
 
var nav_item_h = 20;//height of top-level nav items
var close_img = "/gifs/popnav/nav_arrow_rt.gif";
var open_img = "/gifs/popnav/nav_arrow_dn.gif";
var blank_img = "<IMG SRC='/gifs/popnav/spacer.gif' WIDTH=1 HEIGHT=1>";
//MakeNavLayers function
//way-too-big function that loops through all nav objects
//and writes out layers for netscape and divs for IE
//note: contains a lot of HTML
function MakeNavLayers(){
        var main_nav = '';
        var main_act = '<MAP NAME="main_nav_map">';
        var curr_top = 0;
        var num_opened = 0;
        var openbg_top = -1;
        var openbg_h = 0;
        main_nav += '<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="128">';
        //top spacing row follows; adjust here for horizontal spacing changes
        main_nav += '<TR><TD WIDTH=10 nowrap></TD>';
        main_nav += '<TD WIDTH=1 nowrap></TD>';
        main_nav += '<TD WIDTH=114 nowrap></TD>';
        main_nav += '<TD WIDTH=1 nowrap></TD>';
        main_nav += '<TD WIDTH=1 nowrap></TD>';
        main_nav += '<TD WIDTH=1 nowrap></TD></TR>';
        for(var i = 0; i < _nav.length; i++){
                //add the table rows for main nav
                main_nav += '<TR><TD COLSPAN=5 BGCOLOR="' + Separator + '"><IMG SRC="/gifs/popnav/spacer.gif" WIDTH=1 HEIGHT=1></TD>';
                main_nav += '<TD BGCOLOR="' + NavHighlight + '" width=1></TD></TR>';
                if (_nav[i].isTopLevel){
                        main_nav += '<TR><TD align="center"><IMG SRC="';
                        main_nav += _nav[i].isOpened ? open_img : close_img;
                        main_nav += '" WIDTH=5 HEIGHT=9 BORDER=0 ALT=""></TD>';
                        main_nav += '<TD></TD>';
                        main_nav += '<TD><FONT CLASS="lineOff">'+ _nav[i].content +'</FONT></TD>';
//                        main_nav += '<TD COLSPAN=2><IMG NAME="subarrow_'+ i +'"SRC="/gifs/popnav/nav_subarrow_off.gif" WIDTH=4 HEIGHT=17></TD>';
                        main_nav += '<TD COLSPAN=2><img src="/gifs/popnav/spacer.gif" height="17" width="1"></TD>';
                        main_nav += '<TD BGCOLOR="' + NavHighlight + '" width=1></TD></TR>';
                        if (_nav[i].isOpened){
                                if (num_opened > 0)
                                        alert("Warning: more than one open top-level nav item");
                                if (num_opened == 0)
                                        num_opened = 1;
                        }
                } else {
                        main_nav += '<TR>\n';
                        main_nav += '<TD COLSPAN=2></TD>';
                        main_nav += '<TD><FONT CLASS="lineOff">'+ _nav[i].content +'</FONT></TD>';
                        main_nav += '<TD COLSPAN=2><IMG NAME="subarrow_'+ i +'"SRC="/gifs/popnav/nav_subarrow_off.gif" WIDTH=4 HEIGHT=17></TD>';
                        main_nav += '<TD BGCOLOR="' + NavHighlight + '" width=1></TD></TR>';
                        if (openbg_top == -1)
                                openbg_top = curr_top;
                        openbg_h += nav_item_h;
                }
 
                //add to activation map for this item
                main_act += ReturnMapArea(0,curr_top,128,nav_item_h,"#",'TopOver('+i+','+ (NAV_TOP + curr_top) +');',"");
 
                //build first level cascade for this nav item
                var sub1_id = 'casc1_' + i;
                var sub1_cont = '';
                var sub1_act = '<MAP NAME="'+ sub1_id + '_map">';
 
                //loop through this item's cascade items
                if(_nav[i].cascade.members.length > 0){
                        sub1_cont += '<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=185>\n';
                        for (var j = 0; j < _nav[i].cascade.members.length; j++)
{
                                var sub1_top = j * nav_item_h;
 
                                sub1_cont += '<TR BGCOLOR="' + Cascade1Highlight + '">\n';
                                sub1_cont += '<TD>'+ blank_img +'</TD>\n';
                                sub1_cont += '<TD width=8></TD>\n';
                                sub1_cont += '<TD width=155></TD>\n';
                                sub1_cont += '<TD>'+ blank_img +'</TD>\n';
                                sub1_cont += '</TR>';
                                sub1_cont += '<TR>\n';
                                sub1_cont += '<TD BGCOLOR="' +Cascade1Highlight + '" HEIGHT=17 width=1></TD>\n';
                                sub1_cont += '<TD></TD>';
                                sub1_cont += '<TD nowrap><FONT CLASS="cascade">'+ _nav[i].cascade.members[j].content +'</FONT></TD>';
                                sub1_cont += '<TD BGCOLOR="' + Cascade1Highlight + '" width=1></TD>\n';
                                sub1_cont += '</TR>\n';
 
                                //check for 2nd level cascades
                                if (_nav[i].cascade.members[j].has_cascade){
                                        var my_cascade = _nav[i].cascade.members[j].cascade;
                                        var sub2_id = 'casc2_' + i + "_" + j;
                                        var sub2_cont = '';
                                       var sub2_act = '<MAP NAME="'+ sub2_id + '_map">';
 
                                        //loop through this item's cascade items
                                        sub2_cont += '<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0 WIDTH=185>\n';
                                        for (var k = 0; k < my_cascade.members.length; k++){
                                                sub2_cont += '<TR BGCOLOR="' + Cascade2Highlight + '">\n';
                                                sub2_cont += '<TD width=1></TD>\n';
                                                sub2_cont += '<TD width=8></TD>\n';
                                                sub2_cont += '<TD width=175></TD>\n';
                                                sub2_cont += '<TD width=1></TD>\n';
                                                sub2_cont += '</TR>';
                                                sub2_cont += '<TR>\n';
                                                sub2_cont += '<TD BGCOLOR="' + Cascade2Highlight + '" HEIGHT=17 width=1>' + blank_img + '</TD>\n';
                                                sub2_cont += '<TD></TD>';
                                                sub2_cont += '<TD nowrap><FONT CLASS="cascade">'+ my_cascade.members[k].content +'</FONT></TD>';
                                                sub2_cont += '<TD BGCOLOR="' + Cascade2Highlight + '" width=1>' + blank_img + '</TD>\n';
                                                sub2_cont += '</TR>\n';
 
                                                var sub2_top = k * nav_item_h;
                                                sub2_act += ReturnMapArea(0,sub2_top,185,nav_item_h,my_cascade.members[k].href,'Cascade2Over(\'casc2_'+ k +'\','+ (NAV_TOP + curr_top + sub1_top + sub2_top) +')','');
                                        }
                                        sub2_cont += '<TR BGCOLOR="' + Cascade2Highlight + '">\n';
                                        sub2_cont += '<TD COLSPAN=4 width=1></TD>\n';
                                        sub2_cont += '</TR>\n';
                                        sub2_cont += '</TABLE>\n';
                                        //write out second-level cascade
                                        mkLay(sub2_id,185,nav_item_h,(NAV_LEFT + 312),(NAV_TOP + curr_top + sub1_top),3,false,sub2_cont,"","");
 
                                        sub2_act += "</MAP>\n";
                                        sub2_act += '<IMG SRC="/gifs/popnav/spacer.gif" WIDTH=185 HEIGHT='+ (sub2_top + nav_item_h) +' USEMAP="#'+ sub2_id +'_map" BORDER=0>';
                                        //write out first-level cascade activation layer
                                        mkLay(sub2_id + "_act",10,10,(NAV_LEFT + 312),(NAV_TOP + curr_top + sub1_top),4,false,sub2_act,"","");
                                        //make first-level cascade bg layer
                                        mkLay(sub2_id +"_bg",185,(my_cascade.members.length * nav_item_h),(NAV_LEFT + 312),(NAV_TOP + curr_top + sub1_top),1,false,blank_img,"BGCOLOR=" + Cascade2Background,"background-color: " + Cascade2Background + ";");
 
                                        last_casc2 = sub2_id;
                                }
 
                                //add to first-level cascade activation layer
                                sub1_act += ReturnMapArea(0,sub1_top,185,nav_item_h,_nav[i].cascade.members[j].href,'Cascade1Over('+ j +','+ (NAV_TOP + curr_top + sub1_top) +','+ _nav[i].cascade.members[j].has_cascade +','+ i +')','');
                        }
 
                        sub1_cont += '<TR BGCOLOR="' + Cascade1Highlight + '">\n';
                        sub1_cont += '<TD COLSPAN=4 width=1></TD>\n';
                        sub1_cont += '</TR>\n';
                        sub1_cont += '</TABLE>\n';
 
                        //write out first-level cascade
                        mkLay(sub1_id,185,nav_item_h,(NAV_LEFT + 127),(NAV_TOP + curr_top),3,false,sub1_cont,"","");
 
                        sub1_act += "</MAP>\n";
                        sub1_act += '<IMG SRC="/gifs/popnav/spacer.gif" WIDTH=185 HEIGHT='+ (sub1_top + nav_item_h) +' USEMAP="#'+ sub1_id +'_map" BORDER=0>';
                        //write out first-level cascade activation layer
                        mkLay(sub1_id + "_act",10,10,(NAV_LEFT + 127),(NAV_TOP + curr_top),4,false,sub1_act,"","");
                        //make first-level cascade bg layer
                        mkLay(sub1_id +"_bg",185,(_nav[i].cascade.members.length * nav_item_h),(NAV_LEFT + 127),(NAV_TOP + curr_top),1,false,blank_img,"BGCOLOR=" + Cascade1Background,"background-color: " + Cascade1Background + ";");
 
                        last_casc1 = sub1_id;
                        last_subarrow = "subarrow_" + i;
                }
                curr_top += nav_item_h;
        }
        mkLay("nav_bg_off",128,curr_top,NAV_LEFT,NAV_TOP,1,true,blank_img,"BGCOLOR=" + NavBackground,"background-color: " + NavBackground + ";");
        //make alternate bgcolor for open items if there are any
        if (openbg_top != -1)
                mkLay("nav_openbg",128,openbg_h,NAV_LEFT,(NAV_TOP + openbg_top),2,true,blank_img,"BGCOLOR=#" + Cascade1Background,"background-color: " + Cascade1Background + ";");

        mkLay("nav_highlight",128,nav_item_h,NAV_LEFT,NAV_TOP,3,false,blank_img,"BGCOLOR=" + NavHighlight,"background-color:" + NavHighlight + ";");
 
        main_nav += '<TR><TD BGCOLOR="' + NavHighlight + '" COLSPAN=6 width=1></TD></TR>';
        main_nav += '</TABLE>';
        //make nav layers
        mkLay("nav_layers",10,10,NAV_LEFT,(NAV_TOP - 1),50,true,main_nav,"","");
 
        main_act += "</MAP>\n";
        main_act += '<IMG SRC="/gifs/popnav/spacer.gif" WIDTH="128" HEIGHT='+ (nav_item_h * _nav.length) +' USEMAP="#main_nav_map" BORDER=0>';
        mkLay("nav_act_" + i,10,10,NAV_LEFT,(NAV_TOP - 1),51,true,main_act,"","");
 
        //make deactivation layer
        mkLay("closer",10,10,0,0,0,false,'<A HREF="#" onmouseover="CloseAll()"><IMG SRC="/gifs/popnav/spacer.gif" WIDTH=700 HEIGHT=800 BORDER=0></A>',"","");
 
        //make first-level cascade highlight layer
        mkLay("casc1_highlight",185,nav_item_h,(NAV_LEFT+127),NAV_TOP,2,false,blank_img,"BGCOLOR=" + Cascade1Highlight,"background-color: " + Cascade1Highlight + ";");
        //make second-level cascade highlight layer
        mkLay("casc2_highlight",185,nav_item_h,(NAV_LEFT+312),NAV_TOP,2,false,blank_img,"BGCOLOR=" + Cascade2Highlight,"background-color: " + Cascade2Highlight + ";");
}
 
//CloseAll
//closes all opened explore items
//called by giant mouseover layer activated by any rollover
function CloseAll(){
        visLay("nav_highlight",false);
        visLay(last_casc1, false);
        visLay(last_casc1 + '_bg', false);
        visLay(last_casc1 + '_act', false);
        visLay("casc1_highlight",false);
        SwitchImg(last_subarrow,subarrow_off,"document.layers['nav_layers'].");
 
        if (last_casc2 != ""){
                visLay(last_casc2, false);
                visLay(last_casc2 + '_bg', false);
                visLay(last_casc2 + '_act', false);
        }
        visLay("casc2_highlight",false);
 
        visLay("closer",false);
}
 
//TopOver
//handles toplevel mouseovers
function TopOver(which,y){
        //first turn stuff off
        visLay(last_casc1, false);
        visLay(last_casc1 + '_bg', false);
        visLay(last_casc1 + '_act', false);
        visLay("casc1_highlight",false);
        if (last_casc2 != ""){
                visLay(last_casc2, false);
                visLay(last_casc2 + '_bg', false);
                visLay(last_casc2 + '_act', false);
        }
        visLay("casc2_highlight",false);
        SwitchImg(last_subarrow,subarrow_off,"document.layers['nav_layers'].");
 
        //then turn stuff on
        LayerPos('nav_highlight',null,y);
        visLay('nav_highlight',true);
        var my_cascade = 'casc1_' + which;
        last_casc1 = my_cascade;
 
        visLay(my_cascade, true);
        visLay(my_cascade + '_bg', true);
        visLay(my_cascade + '_act', true);
        var my_subarrow = 'subarrow_' + which;
        last_subarrow = my_subarrow;
        SwitchImg(my_subarrow,subarrow_on,"document.layers['nav_layers'].");
        visLay('closer',true);
}
 
//Cascade1Over
//1st level cascade mouseovers
function Cascade1Over(which,y,hasCascade,cascID){
        //first turn stuff off
        if (last_casc2 != ""){
                visLay(last_casc2, false);
                visLay(last_casc2 + '_bg', false);
                visLay(last_casc2 + '_act', false);
        }
        visLay("casc2_highlight",false);
 
 
        //then turn stuff on
        LayerPos("casc1_highlight",null,y);
        visLay("casc1_highlight",true);
 
        if (hasCascade){
                var my_cascade = 'casc2_' + cascID +"_" + which;
                last_casc2 = my_cascade;
                visLay(my_cascade, true);
                visLay(my_cascade + '_bg', true);
                visLay(my_cascade + '_act', true);
        }
 
        visLay('closer',true);
}
 
//Cascade2Over
//2nd level cascade mouseovers
function Cascade2Over(which,y){
        LayerPos("casc2_highlight",null,y);
        visLay("casc2_highlight",true);
}
 
//ReturnMapArea
//returns individual lines of an image map
//used to build activation layers
function ReturnMapArea(x,y,width,height,href,over,out){
        var my_map = '<AREA SHAPE="rect" COORDS="';
        my_map += x + ',' + y + ',' + (x + width) + ',' + (y + height);
        my_map += '" HREF="'+ href +'" onmouseover="'+ over +'" onmouseout="'+ out +'" onclick="return '+ (href != "#") +';">\n';
        return my_map;
}
 
function MakeExploreSpacer(drawrow){
        var str = "";
        if (drawrow) str += '<tr><td>';
        var str = '<IMG SRC="/gifs/popnav/dot.gif" WIDTH=1 HEIGHT='+ (_nav.length * nav_item_h + 1) +'>';
        if (drawrow) str += '</tr></td>';
        document.write(str);
}