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

//  var ItemStyleName = new ItemStyle( Length, Spacing, 'Popout Indicator', Indicator Position, Padding, 'Out Background', 'Over Background', 'Out Font Class', 'Over Font Class', 'Out Border Class', 'Over Border Class', Out Opacity, Over Opacity, 'Link Cursor', 'Default Cursor');

var hBar = new ItemStyle(60, 20, '&gt;', -10, 0, '#006400', '#008B00', 'highText', 'lowText',
 '', '', 'null', 'null', 'hand', 'default');

var subM = new ItemStyle(22, 0, '&gt;', -15, 3, '#008B00', '#00CD00', 'highTextSub', 'lowTextSub',
 'itemBorder', 'itemBorder', 'null', 'null', 'hand', 'default');

var subML = new ItemStyle(22, 0, '&gt;', -15, 3, '#E0E0E0', '#EDEDED', 'highTextSubL', 'lowTextSubL',
 'itemBorder', 'itemBorder', 'null', 'null', 'hand', 'default');

var subBlank = new ItemStyle(22, 1, '&gt;', -15, 3, '#00CD00', '#00CD00', 'lowText', 'highText',
 'itemBorderBlank', 'itemBorder', null, null, 'hand', 'default');

var button = new ItemStyle(22, 1, '&gt;', -15, 2, '#00CD00', '#00CD00', 'buttonText', 'buttonHover',
 'buttonBorder', 'buttonBorderOver', 80, 95, 'crosshair', 'default');

var pMenu = new PopupMenu('pMenu');
with (pMenu)
{
	var pr = './';
	if ((location.pathname.substr(0,7)) == '/photo/');
	{ var pr = "../"; }

	//  startMenu( 'Menuname', Orientation, Left Offset, Top Offset, Menu Breadth, Default ItemStyle, 'Parent Frame', Show onclick);
startMenu('root', false, 'window.page.winW()/2 - menuW/2', 120, 28, hBar);
	addItem('Home', 					 				pr+'index.php', '', '', 35);
	addItem('News',											 'mNews', 'sm:', '', 42);
	addItem('About HRCR',								 'mAbout', 'sm:', '', 50);
	addItem('HRCR Regs',								 'mRegs', 'sm:', '', 80);
	addItem('Events Calendar', 				pr+'events_calendar.php', '', '', 55);
	addItem('Championship<br>Points',	pr+'points_standing.php', '', '', 90);
	addItem('Results &amp; Reports',		 'mResultsReports', 'sm:', '', 68);
	addItem('Photo Gallery', 	 				pr+'./photo/index.php', '', '', 45);
	addItem('Members',									 'mMembers', 'sm:', '', 65);
	addItem('Committee', 			 				pr+'committee.php', '', '', 65);
	addItem('Links',										 'mLinks', 'sm:', '', 42);
//	addItem('Classifieds', 		 pr+'./classifieds/index.php', '', '', 60);

startMenu('mNews', true, 0, 30, 110, subM);
	addItem('Latest Notices . . . ', pr+'notices.php', '');
	addItem('Historic Times', 			 'mHistoricTimes', 'sm:');

startMenu('mAbout', true, 0, 30, 120, subM);
	addItem('HRCR Constitution', 'window.open("./documents/hrcr_regs/hrcr_constitution.pdf")', 'js:');

startMenu('mHistoricTimes', true, 112, 0, 60, subM);
	addItem('2010', 			 'mHistoricTimes2010', 'sm:');
	addItem('2009', 			 'mHistoricTimes2009', 'sm:');
	addItem('2008', 			 'mHistoricTimes2008', 'sm:');

startMenu('mHistoricTimes2010', true, 62, 0, 110, subM);
	addItem('August 2010', 		pr+'documents/historic_times/historic_times_2010_08.pdf');
	addItem('July 2010', 			pr+'documents/historic_times/historic_times_2010_07.pdf');
	addItem('June 2010', 			pr+'documents/historic_times/historic_times_2010_06.pdf');
	addItem('May 2010', 			pr+'documents/historic_times/historic_times_2010_05.pdf');
	addItem('April 2010', 		pr+'documents/historic_times/historic_times_2010_04.pdf');
	addItem('March 2010', 		pr+'documents/historic_times/historic_times_2010_03.pdf');
	addItem('February 2010', 	pr+'documents/historic_times/historic_times_2010_02.pdf');
	addItem('January 2010', 	pr+'documents/historic_times/historic_times_2010_01.pdf');

startMenu('mHistoricTimes2009', true, 62, 0, 110, subM);
	addItem('December 2009', 	pr+'documents/historic_times/historic_times_2009_12.pdf');
	addItem('November 2009', 	pr+'documents/historic_times/historic_times_2009_11.pdf');
	addItem('October 2009', 	pr+'documents/historic_times/historic_times_2009_10.pdf');
	addItem('September 2009', pr+'documents/historic_times/historic_times_2009_09.pdf');
	addItem('August 2009', 		pr+'documents/historic_times/historic_times_2009_08.pdf');
	addItem('July 2009', 			pr+'documents/historic_times/historic_times_2009_07.pdf');
	addItem('June 2009', 			pr+'documents/historic_times/historic_times_2009_06.pdf');
	addItem('May 2009', 			pr+'documents/historic_times/historic_times_2009_05.pdf');
	addItem('April 2009', 		pr+'documents/historic_times/historic_times_2009_04.pdf');
	addItem('March 2009', 		pr+'documents/historic_times/historic_times_2009_03.pdf');
	addItem('February 2009', 	pr+'documents/historic_times/historic_times_2009_02.pdf');
	addItem('January 2009', 	pr+'documents/historic_times/historic_times_2009_01.pdf');

startMenu('mHistoricTimes2008', true, 62, 0, 110, subM);
	addItem('December 2008', 	pr+'documents/historic_times/historic_times_2008_12.pdf');
	addItem('November 2008', 	pr+'documents/historic_times/historic_times_2008_11.pdf');
	addItem('October 2008', 	pr+'documents/historic_times/historic_times_2008_10.pdf');
	addItem('September 2008', pr+'documents/historic_times/historic_times_2008_09.pdf');
	addItem('August 2008', 		pr+'documents/historic_times/historic_times_2008_08.pdf');
	addItem('July 2008', 			pr+'documents/historic_times/historic_times_2008_07.pdf');
	addItem('June 2008', 			pr+'documents/historic_times/historic_times_2008_06.pdf');
	addItem('May 2008', 			pr+'documents/historic_times/historic_times_2008_05.pdf');
	addItem('April 2008', 		pr+'documents/historic_times/historic_times_2008_04.pdf');
	addItem('March 2008', 		pr+'documents/historic_times/historic_times_2008_03.pdf');
	addItem('February 2008', 	pr+'documents/historic_times/historic_times_2008_02.pdf');
	addItem('January 2008', 	pr+'documents/historic_times/historic_times_2008_01.pdf');

startMenu('mRegs', true, 0, 30, 150, subM);
	addItem('Motorsport SA /<br>Northern Regions', 'mNR', 'sm:', '', 35);
	addItem('Classic Thoroughbred Saloons', 		'mThoroughbred', 'sm:', '', 35);
	addItem('Marque Cars', 		'mMarqueCars', 'sm:');
	addItem('Saloon Cars', 		'mSaloonCars', 'sm:');
	addItem('Sports & GT', 		'mSportGT', 'sm:');
	addItem('Historic Technical Passport', './documents/hrcr_regs/hmc_htp_2010_1.pdf', '', '', 35);

startMenu('mNR', true, 152, 0, 180, subM);
	addItem('2010 Competitors Medical<br>Insurance Cover & Premiums', pr+'documents/hrcr_regs/2010_competitors_medical_insurance.pdf', '', '', 35);
	addItem('MSA Circuit Racing General<br>Circular 3/2009', pr+'documents/hrcr_regs/msa_circuit_3_2009.pdf', '', '', 35);
	addItem('MSA General Circular 9/2009', pr+'documents/hrcr_regs/msa_gen_9_2009.pdf');
	addItem('Circuit Racing Standards<br>and Commitments', 		pr+'documents/hrcr_regs/nrcr_standards_2009.pdf', '', '', 35);

startMenu('mThoroughbred', true, 152, 0, 200, subM);
	addItem('Regulations For Classic Thoroughbred Saloon Cars 2010', pr+'documents/hrcr_regs/2010/Classic_Thoroughbred_Saloon_Car_Regulations_2010.pdf', '', '', 35);
	addItem('Technical Regs For Classic Thoroughbred Saloon Cars 2010', pr+'documents/hrcr_regs/2010/Classic_Thoroughbred_Saloon_Car_Tech_Regs_2010.pdf', '', '', 35);

startMenu('mMarqueCars', true, 152, 0, 150, subM);
	addItem('General Regulations And Specifications For 2010', pr+'documents/hrcr_regs/2010/general_regulations_marque_cars_2010.pdf', '', '', 35);
	addItem('Marque Car Regs 2009', pr+'documents/hrcr_regs/2009/NR27_MARQUE_CARS_HANDICAP_150454.pdf');

startMenu('mSaloonCars', true, 152, 0, 270, subM);
	addItem('NR14 - Historic Saloon Cars Regulations 2010<br>Revised 23-02-2010', pr+'documents/hrcr_regs/2010/Historic_Saloon_Cars_Regulations-2010_rev_20100223.pdf', '', '', 35);
	addItem('Allocated Classes Feb 2010', pr+'documents/hrcr_regs/2010/Historic_Saloon_Cars_Classes_20100223.pdf');
	addItem('National Technical Regulations 2010<br>(Appendix A & B)', pr+'documents/hrcr_regs/2010/national_technical_regs_2010.pdf', '', '', 35);
	addItem('MSA NR Circular 14/2009<br>Regulations And Specifications 2009', pr+'documents/hrcr_regs/2009/NR14_HISTORIC_SALOON_CARS_150125.pdf', '', '', 35);
	addItem('MSA NR Circular 52/2009<br>Technical Regulations 2009', pr+'documents/hrcr_regs/2009/NR52_HISTORIC_SALOON_CARS_TECHNICAL_Revised_21012009.pdf', '', '', 35);

startMenu('mSportGT', true, 152, 0, 270, subM);
	addItem('NR31 - Historic Sports & GT Regulations 2010<br>Revised 23-02-2010', pr+'documents/hrcr_regs/2010/Historic_sports_gt_Regulations-2010_rev_20100223.pdf', '', '', 35);
	addItem('National Technical Regulations 2010<br>(Appendix C & D)', pr+'documents/hrcr_regs/2010/national_technical_regs_2010.pdf', '', '', 35);
	addItem('MSA NR Circular 31/2009<br>General Regulations 2009', pr+'documents/hrcr_regs/2009/NR31_HISTORIC_SPORTS_GT_150124.pdf', '', '', 35);
	addItem('MSA NR Circular 51/2009<br>Technical Regulations 2009', pr+'documents/hrcr_regs/2009/NR51_HISTORIC_SPORTS_GT_TECHNICAL_Revised_21012009.pdf', '', '', 35);
	addItem('MSA NR Circular 62/2009<br>Procedure for Class Changes', 		pr+'documents/hrcr_regs/msa_nr_62_2009.pdf', '', '', 35);
	addItem('MSA NR Circular 63/2009<br>Creation of Class X', 		pr+'documents/hrcr_regs/msa_nr_63_2009.pdf', '', '', 35);

startMenu('mHTP', true, 152, 0, 150, subM);
	//addItem('What is the MSA Historic Technical Passport?', 		pr+'documents/What_is_the_MSA_Historic_Technical_Passport.pdf', '', '', 35);
	addItem('The HTP (ver7 Final)', 		pr+'documents/hrcr_regs/hmc_htp_ver7_final.doc');
	//addItem('MSA NR Bulletin 38(08)-1',	pr+'documents/hrcr_regs/msa_NR_38_08_1.pdf');

	//addItem('Single Seaters',	'mSS', 'sm:');
	//addItem('MSA Documents', 	'mMSA', 'sm:');
	//addItem('FIA Appendix K',	'mFIA', 'sm:');

startMenu('mSS', true, 122, 0, 125, subM);
	addItem('Single Seaters 2009',	 pr+'documents/hrcr_regs/2009/NR28_HISTORIC_SINGLE_SEATER_ASSOCIATION_REGTEK_150126.pdf');

startMenu('mMSA', true, 122, 0, 155, subM);
	addItem('MSA Calendar 2009 (57MB)', 	pr+'documents/2009/06_Calendar_2009.pdf');
	addItem('General Competition Rules &amp; Appendices', pr+'documents/2009/01_GCRs_2009.pdf', '', '', 35);
	addItem('Circuit Racing Regulations', 		pr+'documents/2009/02_Circuit_2009.pdf');

startMenu('mFIA', true, 122, 0, 80, subM);
	addItem('Appendix K', 	pr+'documents/FIA_Appendix_K.pdf');
	addItem('AppK 2007', 		pr+'documents/FIA_AppK_2007.pdf');

startMenu('mResultsReports', true, 0, 30, 100, subM);
	addItem('Results 2010', 'mResults2010', 'sm:');
//	addItem('Results 2009', 'mResults2009', 'sm:');
//	addItem('Results 2008', 'mResults2008', 'sm:');

startMenu('mResults2010', true, 102, 0, 200, subM);
	addItem('Execuline Historic Tour Round 4<br> Midvaal 17 July 2010', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,566740")', 'js:', '', 35);
	addItem('Execuline Historic Tour Round 3<br> Zwartkops 29 May 2010', 	'window.open("http://www.tjtiming.co.za/event.php?id=19")', 'js:', '', 35);
	addItem('Execuline Historic Tour Round 2<br> Zwartkops 10 April 2010', 	'window.open("http://www.tjtiming.co.za/event.php?id=17")', 'js:', '', 35);
	addItem('Execuline Historic Tour Round 1<br> Midvaal 06 March 2010', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,508533")', 'js:', '', 35);

startMenu('mResults2009', true, 102, 0, 210, subM);
	addItem('Phakisa - Inland Championships<br>14 March 2009', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,392900")', 'js:', '', 35);

startMenu('mResults2008', true, 102, 0, 210, subM);
	addItem('Kyalami - Inland Championships<br>04 October 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,364353")', 'js:', '', 35);
	addItem('Zwartkops - Inland Championships<br>27 September 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,361778")', 'js:', '', 35);
	addItem('Kyalami - Inland Championships<br>30 August 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,350073")', 'js:', '', 35);
	addItem('Zwartkops - Inland Championships<br>09 August 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,341084")', 'js:', '', 35);
	addItem('Zwartkops - Inland Championships<br>26 July 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,334658")', 'js:', '', 35);
	addItem('Lichtenburg - Winter Races<br>12 July 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,328664")', 'js:', '', 35);
	addItem('Midvaal - Inland Championships<br>28 June 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,323071")', 'js:', '', 35);
	addItem('Phakisa - Inland Regional Races<br>17 May 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,304989")', 'js:', '', 35);
	addItem('Phakisa - Inland Regional Races<br>03 May 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,299413")', 'js:', '', 35);
	addItem('Lichtenburg - Y Rowden Memorial<br>19 April 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,294350")', 'js:', '', 35);
	addItem('Zwartkops - Inland Championships<br>29 March 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,287098")', 'js:', '', 35);
	addItem('Killarney - Springbok Series<br>09 February 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,276931")', 'js:', '', 35);
	addItem('Zwartkops - Piper Day<br>02 February 2008', 	'window.open("http://www.zatiming.co.za/index.php/54162/?orgID=54162&mylaps=type,event,eventid,276390")', 'js:', '', 35);

startMenu('mMembers', true, 0, 30, 120, subM);
	addItem('Member Login',				 'window.open("login.php")', 'js:');
	addItem('Membership Form',		 'membership_form.php');
	addItem('Points Standings',	pr+'points_standing.php');
	addItem('Class Changes',		pr+'class_changes.php');

startMenu('mPoints', true, 122, 0, 80, subM);
	addItem('Sports &amp; GT', pr+'documents/NorthernRegionsHistoricSports_ GT_20080407.xls');
	addItem('Touring Cars', pr+'documents/NorthernRegionsHistoricTouringCars_20080401.xls');
	addItem('Points Standing', pr+'points_standing.php', '', '', 35);

startMenu('mLinks', true, 0, 30, 110, subML);
	addItem('<img src="../images/logo_scc.gif" border="0" width="85" title="Sports Car Club">', 'window.open("http://www.sportscarclub.co.za/")','js:','',90);
	addItem('<img src="../images/crrasa_logo.gif" border="0" width="85" title="Classic Regularity Rally Association of South Africa">', 'window.open("http://www.crrasa.co.za/")','js:','',70);
	addItem('<img src="../images/ClassicCarRacing Logo.jpg" border="0" width="85" title="Western Province Classic Car Racing">', 'window.open("http://www.classiccarracing.co.za/")','js:','',100);
	addItem('<img src="../images/msa.jpg" border="0" width="85" title="Motorsport South Africa (MSA)">', 'window.open("http://www.motorsport.co.za/msa/")','js:','',50);
	addItem('<img src="../images/saracer_logo.jpg" border="0" width="100" title="SA Racer">', 'window.open("http://www.saracer.co.za/")','js:','',45);
	addItem('<img src="../images/ass_logo.jpg" border="0" width="100" title="AutoSimSport Media">', 'window.open("http://www.autosimsport.net/index2/index.php")','js:','',60);

	showDelay = 0;
	hideDelay = 1;
}

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

addDropShadow(pMenu, window.subM, [40,"#333333",6,6,-4,-4], [40,"#666666",7,7,-3,-3]);
addDropShadow(pMenu, window.subBlank, [40,"#333333",6,6,-4,-4], [40,"#666666",4,4,0,0]);

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)');
}







// ******************** FUNCTIONS CALLED BY THE EFFECTS SECTION ********************

// These 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 instead.



// 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}}
 if (e && this.MS && navigator.platform.indexOf('Mac')>-1 && e.tagName=='A')
 {
  e.onfocus = new Function('with(event){self.tmpX=clientX-offsetX;' +
   'self.tmpY=clientY-offsetY}');
  e.focus();x=tmpX;y=tmpY;e.blur()
 }
 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;
  // This next line is not strictly necessary, but it stops the one-in-a-hundred menu that
  // shows and doesn't hide on very quick mouseovers.
  if (!visNow && dir>0) dir = 0-dir;
  // 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 = dir>0 ? mD.zIndex + 1 : 1001;

  // Alpha fade in IE5.5+. Mozilla's opacity (pre-v1.7) isn't well suited 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. The syntax is:   lyr.clip(left, top, right, bottom);
  // As you can see in these examples, three are static at either zero or the edge of a menu item,
  // and either the top or bottom is a complicated formula based on the 'counter' variable which
  // counts from 0 to 100 and back again; this give a nice accelerating-sliding animation.
  // Feel free to experiment with your own animations, here are some samples (use one only):

  // Straightforward downwards clipping animation (default setting):
  lyr.clip(0, 0, menuW+2, (menuH+2)*Math.pow(Math.sin(Math.PI*counter/200),0.75) );
  // If you want, comment out the above line and enable this one to animate bottom-upwards:
  //lyr.clip(0, (menuH+2)-(menuH+2)*Math.pow(Math.sin(Math.PI*counter/200),0.75), menuW+2, menuH+2);
  // Another alternative: Move+clip sliding animation. Looks really cool :).
  //if (!counter) mD.origY = lyr.y();
  //var newY = (menuH+2)-(menuH+2)*Math.pow(Math.sin(Math.PI*counter/200),0.75);
  //lyr.clip(0, newY, menuW+2, menuH+2);
  //lyr.y(mD.origY - newY);

  // Increment the counter and if it hasn't reached the end (counter is 0% or 100%),
  // set the timer to call the animation 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; lyr.sty.zIndex = mD.zIndex }
  else if (counter<0) { counter = 0; lyr.vis('hidden') }
  else timer = setTimeout('menuAnim('+menuObj.myName+',"'+menuName+'",'+dir+')', 40);
 }
};




// 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+'%; 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];
   // Safari 1.2 bug: it inherits alpha values SIDEWAYS!?!? What were they thinking?
   var alpha = (s[0]!=null && navigator.userAgent.indexOf('AppleWebKit') == -1);
   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)+'; '+
    (alpha?'filter:alpha(opacity='+s[0]+'); -moz-opacity:'+s[0]+'%; 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;
 }
};