// Cascading Popup Menus v5.2 - Single Frame Menu example script.









var hBar = new ItemStyle(40, 10, '', 0, 0, '#333366', '#669999', 'itemText', 'itemText', '', '',

 null, null);



var subM = new ItemStyle(22, 0, '&gt;', -15, 3, '#333366', '#669999', 'itemText', 'itemText',

 'itemBorder', 'itemBorder', null, null);





// Create a PopupMenu() object, and pass its own name so it can reference itself later on.

// We also use a 'with' block to work with its properties and functions below.



var pMenu = new PopupMenu('pMenu');

with (pMenu)

{



// The example 'root' menu is horizontal (false), positioned at (x = 10, y = 0), is 17px high,

// and items use the colours and dimensions in the 'hBar' ItemStyle defined above by default.

// If you want a vertical menu, change "false" to "true", and raise 17 to about 100 for the width.

// Most of these are 'sm:' items popping out submenus, except the last 'js:' JavaScript command to

// pop open a new window. It also has its own ItemStyle and width specified, longer than the rest.



// **** ROOT MENU ****

        startMenu('root', false, 'page.elmPos("menu_pos").x', 'page.elmPos("menu_pos").y-35', 30);

    //  startMenu('root', false, '(page.winW()/2 - pMenu.menu.root[0].menuW/2) ', 50, 30); // Centres.

         addItem('<center>Austrian UN Priorities</center>', 'mPriorities', 'sm:', hBar, 80, 0);

         addItem('<center>Statements at the UN</center>', 'mStatements','sm:', hBar, 90, 0);

         addItem('<center>News and Press Releases</center>', 'mNews','sm:', hBar, 95, 0);

         addItem('<center>Useful Information</center>', 'mInfo', 'sm:', hBar, 75, 0);

         addItem('<center>Important Links</center>', 'mLinks', 'sm:', hBar, 70, 0);

         addItem('<center>Our Team</center>', 'http://www.un.int/austria/whoswho.shtml', '', hBar, 60, 0);  

         addItem('<center>Home</center>', 'http://www.un.int/austria/index.shtml', '', hBar, 40, 0);



// **** AUSTRIAN UN PRIORITIES MENU  **** 



   startMenu('mPriorities', true, 0, 30, 160, subM);

         addItem('Austria and the United Nations', 'http://www.un.int/austria/priorities.shtml','',subM, 35);

         addItem('Human Rights', 'http://www.un.int/austria/hrights.shtml', '');

         addItem('Peacekeeping and Conflict Prevention', 'http://www.un.int/austria/peacekee.shtml', '', subM, 35);

         addItem('Fight Against Terrorism', 'http://www.un.int/austria/terrorism.shtml', '', subM);

         addItem('Development Cooperation', 'http://www.un.int/austria/development.shtml', '', subM);

         addItem('Sustainable Development', 'http://www.un.int/austria/susdev.shtml', '', subM);

         addItem('Drug and Crime Prevention', 'http://www.un.int/austria/crime.shtml', '', subM);

         addItem('Disarmament', 'http://www.un.int/austria/disarm.shtml', '', subM);

         addItem('International Law', 'http://www.un.int/austria/intlaw.shtml', '', subM);

         addItem('Dialogue Among Civilizations', 'http://www.un.int/austria/dialogue.shtml', '', subM, 35);

         addItem('Year of the Mountains', 'http://www.un.int/austria/yotm.shtml', '', subM);

         addItem('Membership in UN Bodies', 'http://www.un.int/austria/UNbodies.shtml', '', subM);

 

// ****  Speeches and Statements menu. **** 



   startMenu('mStatements', true, 0, 30, 130, subM);

         addItem('From the year 2004', 'http://www.un.int/austria/Statements/sas04.shtml', '', subM);
		 
         addItem('From the year 2003', 'http://www.un.int/austria/Statements/sas03.shtml', '', subM);

         addItem('From the year 2002', 'http://www.un.int/austria/Statements/sas02.shtml', '', subM);

         addItem('From the year 2001', 'http://www.un.int/austria/Statements/sas01.shtml', '', subM);

         addItem('From the year 2000', 'http://www.un.int/austria/Statements/sas00.shtml', '', subM);

         addItem('From the year 1999', 'http://www.un.int/austria/Statements/sas99.shtml', '', subM);

         addItem('From the year 1998', 'mFromYear', 'sm:', subM);



//  **** News & Press Releases menu. **** 



       startMenu('mNews', true, 0, 30, 80, subM);

             addItem('In Vienna', 'window.open("http://www.bmaa.gv.at/view.php3?f_id=1424&LNG=en&version=")', 'js:', subM);

             addItem('In New York', 'http://www.un.int/austria/News/index.shtml', '', subM);



//  **** Useful Info menu **** 

      startMenu('mInfo', true, 0, 30, 160, subM);

           addItem('Facts about Austria' , 'window.open("http://www.bmaa.gv.at/oesterreich/index.html.en")', 'js:', subM);

           addItem('Austrian Foreign Policy', 'mPolicy', 'sm:', subM);  

        // REM BY ROB 7-17-2002 //       addItem('Austrian EU Presidency - 1998', 'http://www.un.int/austria/Statements/sas98EU_index.shtml','', subM, 35);

           addItem('About the United Nations', 'window.open("http://www.un.org/aboutun/index.html")', 'js:', subM);

           addItem('UN Documents in German', 'window.open("http://www.un.org/Depts/german/")', 'js:', subM);

           addItem('UN News Centre', 'window.open("http://www.un.org/News/")', 'js:', subM);

           addItem('EU at the UN - Themes', 'window.open("http://www.europa-eu-un.org/themes.asp")', 'js:', subM);

           addItem('EU at the UN - Search', 'window.open("http://www.europa-eu-un.org/search.asp")', 'js:', subM);   

           addItem('About the European Union', 'window.open("http://europa.eu.int/index_en.htm")', 'js:', subM);                   

           addItem('Austria in the EU', 'window.open("http://www.bmaa.gv.at/wirtschaft/index.html.en")', 'js:', subM);        

		   addItem('Human Security Network', 'http://www.un.int/austria/hsn.shtml', '', subM);



// **** Important Links **** 

      startMenu('mLinks', true, 0, 30, 120, subM);

             addItem('&nbsp;&nbsp;&nbsp; Austria', 'mAT_Links', 'sm:', subM, 22, 0, '&lt;', 0, 3); 

             addItem('&nbsp;&nbsp;&nbsp;European Union', 'mEU_Links', 'sm:', subM, 22, 0, '&lt;', 0, 3); 

             addItem('&nbsp;&nbsp;&nbsp;United Nations', 'mUN_Links', 'sm:', subM, 22, 0, '&lt;', 0, 3); 

  

// **** Important Links -> Austria sub_menu **** 

       startMenu('mAT_Links', true, -160, 0, 160, subM);

             addItem('Official Government Website', 'window.open("http://www.austria.gv.at/e/")', 'js:', subM, 35, 0);

             addItem('Ministry for Foreign Affairs', 'window.open("http://www.bmaa.gv.at/index.html.en")', 'js:', subM);

             addItem('Information Service Washington', 'window.open("http://www.austria.org")', 'js:', subM, 35, 0);

             addItem('Consulate General, New York', 'window.open("http://www.austria-ny.org/page1.html")', 'js:', subM, 35, 0);

             addItem('Cultural Forum, New York', 'window.open("http://www.acfny.org")', 'js:', subM);

             addItem('Trade Commission, New York', 'window.open("http://www.austriantradeus.org")', 'js:', subM, 35);

             addItem('Tourist Office, New York', 'window.open("http://www.austria-tourism.at/us")', 'js:', subM); 

  

// ****  Important Links -> European Union sub_menu **** 

       startMenu('mEU_Links', true, -150, 0, 150, subM);

             addItem('EU at the UN, New York', 'window.open("http://www.europa-eu-un.org")', 'js:', subM);

             addItem('Current EU Presidency in New York', 'window.open("http://greeceun.org/")', 'js:', subM, 35, 0);

             addItem('EU Partners in New York', 'window.open("http://www.europa-eu-un.org/article.asp?id=1011")', 'js:', subM);

             addItem('Council of the EU, Brussels', 'window.open("http://ue.eu.int")', 'js:', subM, 35, 0);

             addItem('European Commission, Brussels', 'window.open("http://europa.eu.int/comm/index_en.htm")', 'js:', subM, 35, 0);

             addItem('European Parliament', 'window.open("http://www.europarl.eu.int/")', 'js:', subM);



// ****  Important Links -> United Nations sub_menu **** 

       startMenu('mUN_Links', true, -150, 0, 150, subM);

             addItem('UN Headquarters in New York', 'window.open("http://www.un.org")', 'js:', subM, 35);

             addItem('UN Headquarters in Geneva', 'window.open("http://www.unog.ch")', 'js:', subM, 35, 0);

             addItem('UN Headquarters in Vienna', 'window.open("http://www.un.or.at")', 'js:', subM, 35, 0);

             addItem('List of UN Websites', 'window.open("http://www.unsystem.org/en")', 'js:', subM);

             addItem('Missions to UN, New York', 'window.open("http://www.un.int")', 'js:', subM);





//  **** 1998 SUB-MENU  **** 

       startMenu('mFromYear', true, 130, 0, 100, subM);

             addItem('On Behalf of the EU', 'http://www.un.int/austria/Statements/sas98EU_index.shtml', '', subM, 35, 0);

             addItem('On Behalf of Austria', 'http://www.un.int/austria/Statements/sas98UN.shtml', '', subM, 35, 0);



//  **** Policy SUB-MENU  **** 

       startMenu('mPolicy', true, 160, 0, 50, subM);

             addItem('<center>2000</center>', 'http://www.un.int/austria/policy/00/index.shtml', '', subM);

             addItem('<center>2001</center>', 'http://www.un.int/austria/policy/01/index.shtml', '', subM);







//////////////////\\\\\\\\\\\\\\\\\\

//    END OF MENU INFORMATION     \\

//////////////////\\\\\\\\\\\\\\\\\\









// You can also customise hide or show delays (in milliseconds) to the menus. Defaults are:

//showDelay = 0;

//hideDelay = 500;

// Specify hideDelay as zero if you want to disable autohiding, and showDelay as a couple of

// hundred if you don't want the menus showing instantaneously when moused over.

//

// You can assign 'oncreate' events to specific menus. By default, the script has only one for

// the root menu that shows it when it is created. You may wish to change it to something like the

// following, which uses the animation function to show the menu, or delay its show altogether.

//menu.root[0].oncreate = function() { pMenu.doVis('root', true) }



// End of 'with (pMenu)' block. That's one menu object created!



}







// CREATE ANOTHER MENU OBJECT here if you want multiple menus on a page, or you can just

// duplicate this entire file and rename 'pMenu' to something else.

// Every menu object MUST have a menu named 'root' in it, as that's always visible.



//var anotherMenu = new PopupMenu('anotherMenu');

//with (anotherMenu)

//{

// startMenu('root', .....);

// ... make menus here ...

//}



















// ******************** MENU EFFECTS ********************

//

// Now you've created a basic menu object, you can add optional effects like borders and

// shadows to specific menus. You can remove this section entirely if you want, the

// functions called are found at the bottom of this file.







// Border: Added to all menus in a named object using a specified ItemStyle. The syntax is:

//  addMenuBorder(menuObject, ItemStyle,

//   opacity of border, 'border colour', border width, 'padding colour', padding width);

// Opacity is a number from 0 to 100, or null for solid colour (just like the ItemStyles).



// addMenuBorder(pMenu, window.subBlank,  null, '#666666', 1, '#CCCCDD', 2);







// Dropshadow: added to specific ItemStyles again. The syntax is similar, but later on you

// pass arrays [...] for each layer of the shadow you want. I've used two grey layers

// here, but you can use as many or as few as you want. The syntax for the layers is:

//  [opacity, 'layer colour', X offset, Y offset, Width Difference, Height difference]

// Opacity is from 0 to 100 (or null to make it solid), and the X/Y offsets are the

// distance in pixels from the menu's top left corner to that shadow layer's corner.

// The width/height differences are added or subtracted to the current menu size, for

// instance the first layer of this shadow is 4px narrower and shorter than the menu

// it is shadowing.



addDropShadow(pMenu, window.subM,

 [40,"#333333",6,6,-4,-4], [40,"#666666",4,4,0,0]);

addDropShadow(pMenu, window.subBlank,

 [40,"#333333",6,6,-4,-4], [40,"#666666",4,4,0,0]);







// Animation: We add this to the 'pMenu' menu object for supported browsers.

// IE4/Mac and Opera 5/6 don't support clipping, and Mozilla versions prior to 1.x (such as

// Netscape 6) are too slow to support it, so I'm doing some browser sniffing.

// If you don't want animation, delete this entirely, and the menus will act normally.

// Change the speed if you want... it's the last number, between -100 and 100, and is

// defined as the percentage the animation moves each frame (defaults are 10 and 15).



if ((navigator.userAgent.indexOf('rv:0.')==-1) &&

    !(isOp&&!document.documentElement) && !(isIE4&&!window.external))

{

 pMenu.showMenu = new Function('mN','menuAnim(this, mN, 10)');

 pMenu.hideMenu = new Function('mN','menuAnim(this, mN, -15)');



 // Alternatively: try the IE5.5+/Windows filters. If you are doing this make sure that you either

 // enable translucency in the ItemStyles or disable it in the dropshadows otherwise it looks weird.

 // Comment the above two lines out and uncomment this:

 //pMenu.showMenu = function(mN)

 //{ menuFilterShow(this, mN, 'progid:DXImageTransform.Microsoft.GradientWipe(' +

 //   'GradientSize=0.75,duration=0.5,wipestyle=1,motion=forward)') }

 

 // There's a good list of transitions and documentation available from:

 //  http://msdn.microsoft.com/workshop/author/filter/reference/reference.asp

 // for a whole lot more PowerPoint-like effects you can use.



 // Add animation to other menu objects like this...

 //anotherMenu.showMenu = new Function('mN','menuAnim(this, mN, 10)');

 //anotherMenu.hideMenu = new Function('mN','menuAnim(this, mN, -10)');

}







// Custom mouse events (for things like click handler, status messages, select box hiding...):

//

// If you want, you can assign functions to handle menu mouse events like mouse over/out/click.

// 'with (this)' means use the properties of the menu object, and they're passed the current

// menu name (mN) and item number (iN) you can use to determine the source of the event.

// To uncomment and activate, delete the /* and */ at the start and end.



/*

pMenu.onclick = function(mN, iN) { with (this)

{

 // Do actions depending on the item that the mouse was over at the time of the click.

 // You may with to use nested IFs or 'switch' statements etc. if you're familiar with JS.



 if (mN == 'root')

 {

  if (iN == 1) window.status = 'Congratulations, you\'ve mastered clicking!';

  if (iN == 2) location.href = 'edit.html';

  if (iN == 3) location.href = 'help.html';

  // For frameset navigation, use this syntax:

  //targetFrameName.location.href = 'blah.html';

 }

}}



// Set the status message to the URL if the 'action type' is nothing, and clear on mouseout.

// By now, you either have my 'JS Object Browser' script from my site or you need it... try

// embedding in an IFrame and typing 'pMenu' into its Go To field to see the menu internals.

pMenu.onmouseover = function(mN, iN) { with (this)

{

 with (menu[mN][iN]) if (type!='sm:' && type!='js:') window.status = href;

}}

pMenu.onmouseout = function() { window.status = '' }

*/







// Custom item arrangement: rearrange items within your menu, or alter overall menu size.

// Individual items have .iX and .iY which are positions and .iW and .iH which are dimensions.

// I recommend doing this *before* calling the border or shadow commands too :).



//with (pMenu.menu)

//{

// mFile[0].menuW += 20;

// mFile[0].menuH += 20;

// mFile[1].iX += 5;

// mFile[2].iX += 2;

// mFile[2].iW -= 2;

// mFile[3].iX += 5;

// mFile[4].iX += 10;

// mFile[4].iW += 10;

// mFile[4].iY += 3;

//}

















// FUNCTIONS CALLED BY THE EFFECTS SECTION: Can be deleted if you're not using them.

// Alternatively, if you're using several menu data files, you may want to move them to the

// "core" script file.





// This is the "positioning from page anchors" code used by the advanced positioning expressions.

page.elmPos=function(e,p)

{

 var x=0,y=0,w=p?p:this.win;

 e=e?(e.substr?(isNS4?w.document.anchors[e]:getRef(e,w)):e):p;

 if(isNS4){if(e&&(e!=p)){x=e.x;y=e.y};if(p){x+=p.pageX;y+=p.pageY}}

 else while(e){x+=e.offsetLeft;y+=e.offsetTop;e=e.offsetParent}

 return{x:x,y:y};

}







// Animation:

//

// Each menu object you create by default shows and hides its menus instantaneously.

// However you can override this behaviour with custom show/hide animation routines,

// as we have done in the "Menu Effects" section. Feel free to edit this, or delete

// this entire function if you're not using it. Basically, make functions to handle

// menuObj.showAnim() and .hideAnim(), both of which are passed menu names.

//

// Customisers: My lyr.clip() command gets passed the parameters (x1, y1, x2, y2)

// so you might want to adjust the direction etc. Oh, and I'm adding 2 to the dimensions

// to be safe due to different box models in some browsers.

// Another idea: add some if/thens to test for specific menu names...?



function menuAnim(menuObj, menuName, dir)

{

 // The array index of the named menu (e.g. 'mFile') in the menu object (e.g. 'pMenu').

 var mD = menuObj.menu[menuName][0];

 // Add timer and counter variables to the menu data structure, we'll need them.

 if (!mD.timer) mD.timer = 0;

 if (!mD.counter) mD.counter = 0;



 with (mD)

 {

  // Stop any existing animation.

  clearTimeout(timer);



  // If the litNow() array doesn't show this menu as lit, and we're still showing it,

  // force a quick hide (this stops miscellaneous timer errors).

  //if (dir>0 && !menuObj.litNow[menuObj.menu[menuName][0].parentMenu]) dir = -100;



  // If the layer doesn't exist (cross-frame navigation) quit.

  if (!lyr || !lyr.ref) return;

  // Show the menu if that's what we're doing.

  if (dir>0) lyr.vis('visible');

  // Also raise showing layers above hiding ones.

  lyr.sty.zIndex = 1001 + dir;



  // Alpha fade in IE5.5+. Mozilla's opacity isn't well suited to this as it's an inheritable

  // property rather than a block-level filter, and it's slow, but uncomment and try it perhaps.

  // WARNING: This looks funny if you're mixing opaque and translucent items e.g. solid menus

  // with dropshadows. If you're going to use it, either disable dropshadows or set the opacity

  // values for your items to numbers instead of null.

  //if (isIE && window.createPopup) lyr.alpha(counter&&(counter<100) ? counter : null);



  // Clip the visible area. Tweak this if you want to change direction/acceleration etc.

  // As you can see, the visibile clipping region is from (0, 0) which is the top left corner,

  // to the right edge of the menu 'menuW+2', and a complicated formula that sets the bottom

  // edge of the clipping region based on the 'counter' variable so it accelerates.

  lyr.clip(0, 0, menuW+2, (menuH+2)*Math.pow(Math.sin(Math.PI*counter/200),0.75) );



  // Increment the counter and if it hasn't reached the end (counter is 0% or 100%),

  // set the timer to call the showMenu/hideMenu function again in 40ms to contine the animation.

  // Note that we hide the menu div on animation end in that direction.

  counter += dir;

  if (counter>100) counter = 100;

  else if (counter<0) { counter = 0; lyr.vis('hidden') }

  else timer = setTimeout(menuObj.myName+'.'+(dir>0?'show':'hide')+'Menu("'+menuName+'")', 40);

 }

}







// Here's the alternative IE5.5+ filter animation function, which is unused by default.

function menuFilterShow(menuObj, menuName, filterName)

{

 var mD = menuObj.menu[menuName][0];

 with (mD.lyr)

 {

  sty.filter = filterName;

  var f = ref.filters, doF = (f&&f.length&&f[0]);

  if (doF) f[0].Apply();

  vis('visible');

  if (doF) f[0].Play();

 }

}







// Borders and Dropshadows:

//

// Here's the menu border and dropshadow functions we call above. Edit ot delete if you're

// not using them. Basically, they assign a string to pMenu.menu.menuName[0].extraHTML, which

// is written to the document with the menus as they are created -- the string can contain

// anything you want, really. They also adjust the menu dimensions and item positions

// to suit. Dig out the Object Browser script and open up "pMenu" for more info.



function addMenuBorder(mObj, iS, alpha, bordCol, bordW, backCol, backW)

{

 // Loop through the menu array of that object, finding matching ItemStyles.

 for (var mN in mObj.menu)

 {

  var mR=mObj.menu[mN], dS='<div style="position:absolute; background:';

  if (mR[0].itemSty != iS) continue;

  // Loop through the items in that menu, move them down and to the right a bit.

  for (var mI=1; mI<mR.length; mI++)

  {

   mR[mI].iX += bordW+backW;

   mR[mI].iY += bordW+backW;

  }

  // Extend the total dimensions of menu accordingly.

  mW = mR[0].menuW += 2*(bordW+backW);

  mH = mR[0].menuH += 2*(bordW+backW);



  // Set the menu's extra content string with divs/layers underneath the items.

  if (isNS4) mR[0].extraHTML += '<layer bgcolor="'+bordCol+'" left="0" top="0" width="'+mW+

   '" height="'+mH+'" z-index="980"><layer bgcolor="'+backCol+'" left="'+bordW+'" top="'+

   bordW+'" width="'+(mW-2*bordW)+'" height="'+(mH-2*bordW)+'" z-index="990"></layer></layer>';

  else mR[0].extraHTML += dS+bordCol+'; left:0px; top:0px; width:'+mW+'px; height:'+mH+

   'px; z-index:980; '+(alpha!=null?'filter:alpha(opacity='+alpha+'); -moz-opacity:'+(alpha/100):'')+

   '">'+dS+backCol+'; left:'+bordW+'px; top:'+bordW+'px; width:'+(mW-2*bordW)+'px; height:'+

   (mH-2*bordW)+'px; z-index:990"></div></div>';

 }

}



function addDropShadow(mObj, iS)

{

 // Pretty similar to the one above, just loops through list of extra parameters making

 // dropshadow layers (from arrays) and extending the menu dimensions to suit.

 for (var mN in mObj.menu)

 {

  var a=arguments, mD=mObj.menu[mN][0], addW=addH=0;

  if (mD.itemSty != iS) continue;

  for (var shad=2; shad<a.length; shad++)

  {

   var s = a[shad];

   if (isNS4) mD.extraHTML += '<layer bgcolor="'+s[1]+'" left="'+s[2]+'" top="'+s[3]+'" width="'+

    (mD.menuW+s[4])+'" height="'+(mD.menuH+s[5])+'" z-index="'+(arguments.length-shad)+'"></layer>';

   else mD.extraHTML += '<div style="position:absolute; background:'+s[1]+'; left:'+s[2]+

    'px; top:'+s[3]+'px; width:'+(mD.menuW+s[4])+'px; height:'+(mD.menuH+s[5])+'px; z-index:'+

    (a.length-shad)+'; '+(s[0]!=null?'filter:alpha(opacity='+s[0]+'); -moz-opacity:'+(s[0]/100):'')+

    '"></div>';

   addW=Math.max(addW, s[2]+s[4]);

   addH=Math.max(addH, s[3]+s[5]);

  }

  mD.menuW+=addW; mD.menuH+=addH;

 }

}

