// UDMv4.42 //
/***************************************************************\

  ULTIMATE DROP DOWN MENU Version 4.42 by Brothercake
  http://www.udm4.com/

  This script may not be used or distributed without license

\***************************************************************/




//*** DO NOT REMOVE //start or //stop OR SIMILAR COMMENTS




//compile style rules
if(um.b)
{
	//cpstart
	
	//start
	
	//get background syntax method
	um.bk=function(udmP)
	{
		//using a regex literal here
		//because mac/ie5.0 appears not to 
		//garbage collect the RegExp constructor properly
		return (/(gif|png|mng|jpg|jpeg|jpe|bmp)/i.test(udmP))?'background-image:url('+um.baseSRC+udmP+');':(udmP=='none')?'':um.t[33]+'background-color:'+udmP+';';
	};

	//pstart
	
	//shortcuts to commonly used-strings
	//this is to reduce code size and obfuscate the algorithms
	//since the replacement will be something like '+um.t[0]+'
	//only strings longer than 11 bytes will always make a saving
	//or 12 bytes for index [10] or later
	//OFFLEFT
	um.t=['margin-left:','padding-top:','@media screen,projection{','margin-top:0;','padding-left:','border-width:','border-color:','border-style:','margin-left:0;','display:none;','margin-right:','text-decoration:','position:absolute;','margin-bottom:','visibility:hidden;','cursor:default !important;','position:static;','display:block;','@media Screen,Projection{','position:relative;','* html .udm ul ',' a:hover .udmA',' a:focus .udmA',' a:visited .udmA','',' a:visited:hover',' a.nohref:focus',' a.nohref:hover','width:auto;height:auto;','cursor:pointer !important;','background-repeat:no-repeat;background-position:','.udm:not(:nth-child(n))',' a.nohref .udmA','background-image:none;','* html .udm li a',' a.udmR:visited',' a.udmR .udmA',' a.udmY:visited',' a.udmY .udmA','display:block;visibility:visible;height:0;','overflow:scroll;','overflow:visible;'];
	
	//style rules array
	var j=0;um.r=[];

	//cpstop

	//arrow direction
	um.ad=(um.a)?'left':'right';


	//cpstart
	
	//RTL directionality
	um.dra=(um.dir=='right');

	//tame the lists (http://www.alistapart.com/stories/taminglists/)
	um.r[j++]='.udm,.udm li,.udm ul{margin:0;padding:0;list-style-type:none;}';
	
	//when using RTL mode
	if(um.dra)
	{
		//with a relatively positioned hnav
		//expression for ie5.0 is needed for correct positioning
		//when scripting is disabled and expression doesn't run it uses 100% left positioning
		//which will only be correct if the page has 0 body margins
		//negate for later versions using the Property + Empty Comment hack 
		//http://www.dithered.com/css_filters/css_only/selector_empty_comment.html
		if(um.h&&um.rp){um.r[j++]='* html .udm{left:100%;left:expression(this.offsetWidth);left/**/:0 !important;}';}
		
		//direction ensures correct alignment and orientation of menu elements on RTL pages
		//it doesn't normally affect the text flow because the page encoding and dir attribute takes care of that
		um.r[j++]='.udm,.udm li,.udm ul{unicode-bidi:bidi-override;direction:ltr;}';
		
		//however on an XML page those things may not be present, 
		//and in such a situation the writing mode would be set in CSS
		//but setting ltr on the menu element will override that
		//therefore the writing mode of anchors and their descendents has to be re-asserted
		//have to hide this from win/ie5.0 using the Property + Empty Comment hack 
		//http://www.dithered.com/css_filters/css_only/selector_empty_comment.html
		//otherwise it screws up horribly in a variety of ways
		//this of course means that you might end up with LTR text 
		//if you're viewing a doc that doesn't have a DIR attribute (XML that isn't XHTML)
		//but since IE5.0 doesn't properly support XML ... that's hopefully no great loss
		//because almost-certainly, nobody will be using that build to view a non-XHTML XML doc
		um.r[j++]='.udm a *,.udm a {unicode-bidi/**/:bidi-override;direction/**/:rtl;}';
	}

	//***test
	//um.r[j++]='.udm{background-color:#f99;}';
	//um.r[j++]='.udm{border:1px solid blue;}';

	//can't have a right aligned h-nav
	um.na=(um.h)?'left':um.e[1];
	
	//and we can only have left-aligned text in an h-nav, which is to avoid a bug in Opera 5 and 6
	//but it makes sense - since h-nav cells have auto width, the text alignment is irrelevant
	//** it will only be a problem with set-width cells where the text alignment may be noticeable
	um.txl=(um.h)?'left':um.e[35];
	
	//main nav position
	//links have an ever-increasing z-index, to allow for interlaced border rollovers
	//if that gets higher than menu z-index, the rollovers will start to overlap the menus
	//so the menu z-index is very high to make that unlikely to happen
	//text align is to prevent align or text-align from cascading as menu alignment in IE6
	um.r[j++]='.udm{position:'+um.e[3]+';'+um.na+':0;'+um.e[2]+':0;z-index:'+(um.e[6]+19000)+';width:'+um.e[16]+';'+um.t[15]+'border:none;text-align:left;}';
		
	//when using position:fixed
	if(um.e[3]=='fixed')
	{
		//apply position:absolute for ie
		um.r[j++]='* html .udm{'+um.t[12]+'}';

		//apply position:absolute for moz, opera, safari and konqueror
		um.r[j++]='ul[id="udm"]{'+um.t[12]+'}';
	
		//re-apply position:fixed for moz>=1.3b, opera, safari and konqueror
		//this, which I'm calling the "commented selector hack", exploits bug 60290: 
		//"comments should be allowed between simple selectors"
		//http://www.codingforums.com/showthread.php?t=29035
		//the ideal threshold was 1.0RC2, but this is acceptable 
		um.r[j++]='ul/**/[id="udm"]{position:fixed;}';
	}
	
	//list item display characteristics for horizontal nav
	if(um.h)
	{
		
		//don't float if continuation strip is "none" [**RTL**]
		um.hfl=(um.hstrip[0]=='none')?'none':um.dir;
		
		
		//nav has 100% width and is floated if continuation strip is visible
		//it has to be not floated when no continuation strip
		//so you have a get-out method for mac/ie5
		//where with a floated hnav in a table the surrounding <td> has no height
		um.r[j++]='.udm{'+um.bk(um.hstrip[0])+'float:'+um.hfl+';width:100%;}';

		//if there's a continuation strip we can compensate for moz float issue
		//which won't otherwise be necessary, because there'll be no float in the first place
		//and anyway the issue wouldn't manifest - it's okay to have no height if it's not visible
		if(um.hstrip[0]!='none')
		{
			//floating it makes the nav have no height in early mozilla builds [**RTL**] 
			//but not floating it gives it height, strangely enough
			//this is the exact opposite of the expected behavior, that later builds exhibit
			um.r[j++]='ul[class="udm"]{float:none;}';
			um.r[j++]='ul/**/[class="udm"]{float:'+um.dir+';}';
			//nav y position is margin, but margin-position doesn't work in mac/ie5, 
			//so it uses top, which behaves like margin in mac/ie5 under certain circumstances
			//not sure exactly what circumstances ... but it always works in this case
			um.r[j++]='.udm{margin-'+um.e[2]+':0;'+um.e[2]+':'+um.e[5]+';}';
			um.r[j++]=um.t[2]+'.udm{margin-'+um.e[2]+':'+um.e[5]+';'+um.e[2]+':0}}';
			//re-assert mac/ie5 rules for osx/msn
			//need to surround it in @media to prevent moz throwing a parsing exception over the syntax
			um.r[j++]=um.t[2]+um.t[31]+'{margin-'+um.e[2]+':0;'+um.e[2]+':'+um.e[5]+';}}';
		}
		//else if there is no continuation strip
		else
		{
			//apart from mac/ie5 we're going to float it anyway [**RTL**]
			//which is necessary for it to work in konqueror
			//otherwise strange things happen - links become unclickable
			//but you can click a region about 10em above the navbar!
			//it also cures a quirk with moz1.4 relpos in a table
			//where <td> loses height onmouseover if nav isn't floated
			//** actually this breaks kde2 - makes nav not show up at all
			//** but I can't find or come up with of a CSS hack to differentiate 2 from 3
			//** and anyway nobody uses konqueror 2 anymore ... it's highly unstable 
			um.r[j++]=um.t[2]+'.udm{float:'+um.dir+';}}';
			//but not msn, because it has a different problem with
			//relpos hnav in table-based layout
			um.r[j++]=um.t[2]+um.t[31]+'{float:none;}}';
			
			//relative positioning
			if(um.rp)
			{
				//nav y position is padding
				um.r[j++]='.udm{padding-'+um.e[2]+':'+um.e[5]+';}';
			}
			//absolute positioning
			else
			{
				//nav y position is margin
				um.r[j++]='.udm{margin-'+um.e[2]+':'+um.e[5]+';}';
			}
		}
		
		
		//for mac/ie5, msn, safari 1.0 and konqueror 
		//offset is done with first-child margin-right for RTL text
		//(but since x-value is already a negative we have to string replace it into a positive) 
		//or margin left for ltr text
		if(um.dra)
		{
			um.r[j++]='.udm>li:first-child{margin-right:'+um.e[4].replace('-','')+';}';
		}
		else
		{
			um.r[j++]='.udm>li:first-child{'+um.t[0]+um.e[4]+';}';
		}
		//nullify margin for everyone else
		//mac/ie5, msn, safari 1.0 and konqueror won't see this negation
		//neither will opera 5 and 6, but that's okay
		//because they don't support element:first-child
		//so they won't have applied the margin anyway
		um.r[j++]=um.t[18]+'.udm>li:first-child{'+um.t[8]+'margin-right:0;}}';
		//re-assert for osx/msn
		um.r[j++]=um.t[2]+um.t[31]+'>li:first-child{'+um.t[0]+um.e[4]+';}}';

		//otherwise offset is done with list-item left
		um.r[j++]='.udm li{left:'+um.e[4]+';}';
		//we don't want mac/ie5 to see position relative
		//or menus will go underneath the navbar
		um.r[j++]=um.t[2]+'.udm li{'+um.t[19]+'}}';
		//recompensate menus
		um.r[j++]='.udm ul li{left:0;}';
		//now negate this rule for safari and konqueror (and mozilla and msn)
		um.r[j++]='ul[class^="udm"] li{left:0;'+um.t[16]+'}';
		//then re-assert it for mozilla by using the same selector,
		//but inside a hack that hides it from safari 1.0 and konqueror
		um.r[j++]=um.t[18]+'ul[class^="udm"] li{left:'+um.e[4]+';'+um.t[19]+'}}';
		//and then re-assert position static for osx/msn
		um.r[j++]=um.t[2]+um.t[31]+' li{'+um.t[16]+'}}';
		
		//however konqueror requires position relative for the child-menu positioning to be correct
		//so re-apply it using a mixed-case @media to hide it from Safari 1.0 (to avoid sticky rollovers problem)
		//and a CSS2 attribute selector to hide it from all versions of IE (to avoid z-ordering problem)
		//including the commented selector hack to hide it from old gecko, also to avoid z-ordering problems
		//it shouldn't otherwise affect the menu positioning, because that's all done in script
		//but we do have to compensate the submenu item left position
		//so that the navbar item offset positioning doesn't affect it
		um.r[j++]=um.t[18]+'.udm/**/[class="udm"] ul li{'+um.t[19]+'left:0;}}';
		//but osx/msn can see that, and has the same problem as IE, so negate it with mot-my-child
		um.r[j++]=um.t[2]+'.udm ul li:not(:nth-child(n)){'+um.t[16]+'}}';

		//items have auto width [**RTL**]
		um.r[j++]='.udm li{'+um.t[17]+'width:auto;float:'+um.dir+';}';


		//mac/ie5 and opera 5 and 6 needs float on links [**RTL**] 
		//mac/ie5 also needs position:static, which doesn't do opera 5 and 6 any harm
		//all browsers need white-space so the cells are the correct width for rigid width calculations
		//** but white-space property isn't support in win/ie5.0
		//** so if window is initially too small and rigid overflow is in use
		//** the nav might semi-collapse .. some items might overlap or be shunted down a bit
		um.r[j++]='.udm li a{'+um.t[16]+um.t[17]+'float:'+um.dir+';white-space:nowrap;}';
		
		//revert for other browsers (we don't want mac/ie5 or opera 5 or 6 to see this)
		um.r[j++]=um.t[2]+'.udm l\\i a{'+um.t[19]+'float:none;}}';
		//but konqueror < 3.2 doesn't get past that hack
		//this selector applies to konqueror, safari, moz0.8 and osx/msn
		um.r[j++]='ul[class^="udm"] li a{'+um.t[19]+'float:none;}';
		//win/ie5 doesn't get past that hack either (but we don't want mac/ie5 to see this)
		um.r[j++]=um.t[2]+um.t[34]+'{'+um.t[19]+'float:none;}}';
		//osx/msn can see the substring-matching attribute selector 
		//but it needs mac/ie5's rules, so re-apply them using the "not-my-child" hack
		//http://www.jasonkarldavis.com/articles/notmychild/
		//need to surround it in @media to prevent moz throwing a parsing exception over the syntax [**RTL**]
		um.r[j++]=um.t[2]+'.udm li a:not(:nth-child(n)){'+um.t[16]+'float:'+um.dir+';}}';
		//if this is using RTL text we need to re-implement static positioning for win/ie5.5+
		//I have no idea why - but that was one of the things fucking it up and making each item stretch to 100%
		if(um.dra){um.r[j++]=um.t[2]+um.t[34]+'{'+um.t[16]+'}}';}
		
		
		//stop
		
		//re-compensate submenus
		um.r[j++]='.udm ul li a{'+um.t[19]+'float:none !important;white-space:normal;}';

		//start

		//border-collapse when margin is=="0"
		if(um.nc)
		{
			//in opera 5 and 6 we have to apply border collapse to <a>
			//because if it's less than -1px applied to <li> the h-nav collapses
			//we also have to do that for safari 1.0, konqueror, mac/ie5 and msn
			//because they're using <li> margin for positioning
			
			//so, apply margins to <a>
			um.r[j++]='.udm li a{'+um.t[0]+'-'+um.e[18]+'px;}';
			//apply margins to <li> for all except opera 5 and 6
			//mac/ie5, msn, safari 1.0 and konqueror
			um.r[j++]=um.t[18]+'.udm li{'+um.t[0]+'-'+um.e[18]+'px !important;}}';
			um.r[j++]=um.t[18]+'.udm li a{'+um.t[8]+'}}';
			//re-assert <a> margins for msn
			um.r[j++]=um.t[2]+um.t[31]+' li:first-child{'+um.t[0]+um.e[4]+' !important;}}';
			um.r[j++]=um.t[2]+um.t[31]+' li:first-child a{'+um.t[0]+'-'+um.e[18]+'px;}}';
			//stop
			//recompensate menus
			um.r[j++]=um.t[2]+um.t[31]+' ul li:first-child{'+um.t[0]+'0 !important;}}';
			//re-apply <li> margins for safari (and msn, gecko and konqueror)
			//but not to first-child <li> that's used for positioning
			//this is necessary only for Safari, because otherwise border-collapse 
			//doesn't work on links that have a px width specified in external CSS
			//the head:first-child+body selector is to hide it from MSN,  
			//in which it causes some kind of problem (can't remember exactly what)
			um.r[j++]='head:first-child+body ul[class^="udm"] li:not(:first-child){'+um.t[0]+'-'+um.e[18]+'px;}';
			
			//recompensate submenus 
			um.r[j++]='.udm ul li{'+um.t[0]+'0 !important;}';
			//increase specificity for safari and moz0.8 (and konqueror)
			um.r[j++]='ul[class^="udm"] ul li{'+um.t[0]+'0 !important;}';
			//start
		}
		
		//non-collapsed navbar margins
		else
		{
			//this uses <li> because <a> causes arrow insertion problem in win/ie
			//adding first-child selector as well to increase specifity
			//over the first-child margin left navbar offset compensation we did earlier
			um.r[j++]='.udm li,.udm li:first-child{'+um.t[10]+um.e[17]+'px;}';
			//if this is using RTL text then 
			//invert margin by using margin-left instead of margin-right
			//we can't do this generally because it isn't needed
			//and would fuck up h-nav positioning because of the use of first-child margin-left
			if(um.dra)
			{
				um.r[j++]='* html .udm li{'+um.t[10]+'0;'+um.t[0]+um.e[17]+'px;}';
			}
			//stop
			//recompensate submenus
			um.r[j++]='.udm ul li{'+um.t[8]+um.t[10]+'0;}';
			//echo margin-right to margin-bottom
			if(um.hstrip[1]=='yes')
			{
				//this uses <a> because <li> doesn't work in win/ie6 or opera 7
				um.r[j++]='.udm li a{'+um.t[13]+um.e[17]+'px;}';
				um.r[j++]='.udm ul li a{'+um.t[13]+'0;}';
				//but <a> doesn't work in konqueror
				//this will apply to konqi, and also to safari and most moz 
				//which don't need it, but it doesn't do any harm
				um.r[j++]='ul[class^="udm"] li a{'+um.t[13]+'0;}';
				um.r[j++]='ul[class^="udm"] li{'+um.t[13]+um.e[17]+'px;}';
				um.r[j++]='ul[class^="udm"] ul li{'+um.t[13]+'0;}';
			}
			//start
		}

	}
	
	
	
	
	//list item display characteristic for vertical nav
	else
	{
		//relative positioning
		if(um.rp)
		{
			//position is static to prevent some instability quirk 
			//in moz >=1.4 with relpos in a table layout
			//it shouldn't make any other difference, 
			//because nav x and y position is padding 
			um.r[j++]='.udm{'+um.t[16]+'padding-'+um.e[1]+':'+um.e[4]+';padding-'+um.e[2]+':'+um.e[5]+';}';
		}
		//absolute positioning
		else
		{
			//nav x and y position is margin
			um.r[j++]='.udm{margin-'+um.e[1]+':'+um.e[4]+';margin-'+um.e[2]+':'+um.e[5]+';}';
		}
				
		//items have defined width and static positioning
		//or absolute position with popup alignment
		//using relative positiong would expose 
		//a z-index related bug in all versions of IE
		//and a :hover related bug in Safari
		um.ps=(um.p)?'absolute':'static';
		um.r[j++]='.udm li{'+um.t[17]+'width:'+um.e[16]+';position:'+um.ps+';}';

		//however for menus of a vertical nav, or child-menus of popup menus, 
		//konqueror requires it for the menu positioning to be correct
		//so re-apply position:relative on list-items
		//using a mixed-case @media to hide it from Safari 1.0
		//and a CSS2 attribute selector to hide it from all versions of IE
		//including the commented selector hack to hide it from old gecko, also to avoid z-ordering problems
		//it shouldn't otherwise affect the menu positioning, because that's all done in script
		um.ps=(um.p)?'static':'relative';
		um.r[j++]=um.t[18]+'.udm/**/[class="udm"] li{position:'+um.ps+';}}';
		um.r[j++]=um.t[18]+'.udm/**/[class="udm"] ul li{'+um.t[19]+'}}';

		//however it does re-expose the IE z-index problem in MSN
		//so re-apply static positioning using the "not-my-child" hack
		//http://www.jasonkarldavis.com/articles/notmychild/
		//need to surround it in @media to prevent moz throwing a parsing exception over the syntax
		um.r[j++]=um.t[2]+'.udm li:not(:nth-child(n)),.udm ul li:not(:nth-child(n)){'+um.t[16]+'}}';
		

		//links have relative position and block display
		um.r[j++]='.udm li a{'+um.t[19]+um.t[17]+'}';


		//border-collapse when margin is=="0"
		if(um.nc)
		{
			um.r[j++]='.udm a{margin-top:-'+um.e[18]+'px;}';
		}
		//normal navbar margins
		else
		{
			//this uses <li> because <a> doesn't work in konqueror
			um.r[j++]='.udm li{'+um.t[13]+um.e[17]+'px;}';
			//stop
			//recompensate submenus
			um.r[j++]='.udm ul li{'+um.t[13]+'0;}';
			//start
		}
		
	}
	
	//cpstop
	
	//stop
	//prevent anchor margin shift from cascading
	//don't need to prevent <li> because ul-li margin is already going to be defined
	um.r[j++]='.udm ul a{margin:0;}';

	//menu item border-collapse when margin is=="0"
	if(um.mc)
	{
		//indent items with negative margin
		um.r[j++]='.udm ul li{margin-top:-'+um.e[62]+'px;}';
		//re-compensate with margin top on first-child
		//but since win/ie doesn't support first-child
		//it's going to be added dynamically
		um.r[j++]='.udm ul li:first-child{margin-top:0px;}';
	}
	else
	{
		//top/bottom margins
		//margin is used so that the margin space is still part of the <a> event target
		//otherwise menus will close prematurely when mousing over a margin in between
		um.r[j++]='.udm ul li{'+um.t[13]+um.e[61]+'px !important;}';

		//browsers use margin top on first-child
		//but since win/ie doesn't support first-child
		//it's going to be added dynamically
		um.r[j++]='.udm ul li:first-child{margin-top:'+um.e[61]+'px;}';

		//left/right margin is on anchors so that you can move mouse left-right onto menu without it closing
		um.r[j++]='.udm ul a{margin-top:0;margin-right:'+um.e[61]+'px !important;margin-bottom:0;'+um.t[0]+um.e[61]+'px !important;}';
	}





	//cascading style rules for menus
	um.r[j++]='.udm ul{'+um.bk(um.e[56])+um.t[15]+'width:'+um.e[54]+';height:auto;'+um.t[5]+um.e[51]+'px;'+um.t[6]+um.e[52]+';'+um.t[7]+um.e[53]+';'+um.t[12]+'z-index:'+(um.e[6]+19100)+';padding:'+um.e[55]+'px;'+um.e[57]+'}';
	um.r[j++]='.udm ul li{'+um.t[15]+'width:100%;'+um.t[16]+'float:none;}';

	//horizontal menus
	//um.r[j++]='.udm ul{width:200%;}';
	//um.r[j++]='.udm ul li{width:auto;float:left !important;}';
	//um.r[j++]='.udm ul li a{white-space:nowrap;}';
	
	
	
	
	//*** OFFLEFT
	//apply menu display and visibility in a separate rule, otherwise Opera 5.0x doesn't apply it 
	um.r[j++]='.udm ul{'+um.t[9]+um.t[14]+'}';
	
	//use offleft positioning instead of display/visibility, 
	//so that the menus are still accessible to screenreaders
	//the height and overflow:scroll is to reduce the amount of rendered output, 
	//which speeds up the onload process
	//(using clip or overflow:hidden would also hide them from screenreaders)
	//but there are rendering or positioning problems 
	//in mac/ie5, osx/msn, old gecko and opera < 7.5
	//in fact it fucks up opera 7.23 completely - parts of the browser UI freeze up (!?)
	//so the styles are hidden from opera < 7.5 using the html[xmlns] selector
	//http://www.dithered.com/css_filters/css_only/xmlns_attribute_selector.html
	//this means that it won't happen on pages without an xmlns attribute
	//in other words - on HTML 4 pages, any browser-based screenreader using Opera 7.5+ won't get the submenus
	//other browsers aren't affected because all are included in later selectors somewhere
	//opera's own speech/reading capabilities are not affected either, 
	//because it generates events that open the menus, resetting all of this
	//and afaik there isn't any other browser-based reader that uses opera
	//so the likelihood is that this hole won't affect anybody at all
	//nonetheless it's still unfortunate, but it's practicably unavoidable - 
	//the only other way to differentiate opera versions like this is the selector:lang(xx) pseudo-class, 
	//but then we'd need a new custom varible to specify the user's language code
	//the styles are also hidden from old gecko builds using the commented selector hack
	//and from konqueror < 3.2 using the backslash hack, because it makes the navbar collapse
	um.r[j++]='html/**/[xmlns] .udm u\\l{'+um.t[39]+um.t[40]+'left:-10000px;}';

	//but that selector doesn't work in ie, so re-apply it 
	//using the * html selector, hidden from mac/ie5 using @media
	//using offtop positioning for ie, because offleft causes problems in RTL mode
	//but we can't use offtop for everyone, because it causes problems in safari
	um.r[j++]=um.t[2]+um.t[20]+'{'+um.t[39]+um.t[40]+'top:-10000px;}}';
	
	//and strangely, it doesn't reliably work in gecko *later* than 0.9 (a retrograde bug?)
	//so re-apply it using a substring-matching attribute selector, 
	//also hidden from old builds with the commented selector hack 
	//this is convenient actually, because we can use this opportunity 
	//to use overflow:visible for safari 1.2 and konqueror 3.2+, 
	//because overflow:scroll causes a mad rendering instability 
	//but it's ie and opera who mostly need the benefit of it - 
	//the difference is hardly noticeable in saf, kde and moz
	//the extra class selector is to increase specificity over the html[xmlns] selector
	//the style are also hidden from konqueror < 3.2 using the backslash hack, because it makes the navbar collapse
	//the offleft positioning is em here, because px causing an insane rendering bug in FF1.0
	//it shouldn't be a problem - the use of px is for opera's benefit, so it doesn't generate an h-scroll
	um.r[j++]='ul.udm/**/[class^="udm"] u\\l{'+um.t[39]+um.t[41]+'left:-100em;}';
	
	//but msn can see both of those, so negate the necessary styles using "not-my-child"
	//not necessary to reset height and overflow, because they get reset on menu use
	//including * html again to give it enough specificity
	//and surrounded in @media so moz doesn't throw a parsing exception over the syntax
	um.r[j++]=um.t[2]+'* html .udm:not(:nth-child(n)) ul{'+um.t[9]+um.t[14]+'left:auto;top:auto;}}';




	
	//if either arrows are in use
	//***DON'T REMOVE THIS CONDITION - PHP PARSER NEEDS IT
	if(um.e[45]!='none'||um.e[89]!='none')
	{
		//main arrow styles //finely position arrows using left and right margins
		//arrows are initially hidden so you don't see them moving into position
		//which you otherwise might since the positioning is tied to img.onload
		um.r[j++]='.udm a .udmA{visibility:hidden;margin:0 '+um.e[26]+'px;'+um.t[17]+um.t[29]+um.t[12]+um.ad+':0;top:0;text-align:'+um.ad+';border:none;cursor:inherit !important;}';
		um.r[j++]='.udm a .udmA img{display:block;}';
		um.r[j++]='.udm ul a .udmA{margin:0 '+um.e[70]+'px;}';

		//if this is using right alignment
		if(um.a)
		{
			//"set link height to 1%" hack for ie, so that arrow positioning works properly
			//only do it for v-nav and for menus because it makes h-nav cells 100% each
			um.r[j++]='* html .udm '+((um.h)?'ul ':'')+'a{height:1%;}';
			//so for h-nav items which aren't using RTL text use expression to set link width
			//which is another way of making arrow positioning work properly
			//it seems unecessary for rtl text and fucks it up anyway - makes items stretch to 100% each and stack under each other
			if(um.h&&um.dir!='right')
			{
				//this is unecessary for win/ie5.0 and fucks it up anyway
				//so it's hidden from ie5.0 using the Selector + Empty Comment hack
				//http://www.dithered.com/css_filters/css_only/selector_empty_comment.html
				um.r[j++]='.udm a/**/ {width:expression("auto",this.runtimeStyle.width=(!document.compatMode||compatMode=="BackCompat")?"100%":(this.parentNode.offsetWidth-(isNaN(parseInt(this.currentStyle.marginRight))?0:parseInt(this.currentStyle.marginRight))-(isNaN(parseInt(this.currentStyle.marginLeft))?0:parseInt(this.currentStyle.marginLeft))-(isNaN(parseInt(this.currentStyle.paddingRight))?0:parseInt(this.currentStyle.paddingRight))-(isNaN(parseInt(this.currentStyle.paddingLeft))?0:parseInt(this.currentStyle.paddingLeft))-(isNaN(parseInt(this.currentStyle.borderRightWidth))?0:parseInt(this.currentStyle.borderRightWidth))-(isNaN(parseInt(this.currentStyle.borderLeftWidth))?0:parseInt(this.currentStyle.borderLeftWidth))));}';
				um.r[j++]='.udm ul a{width:auto;}';
			}
		}

		//if this is using left alignment
		else
		{
			//win/ie needs extra arrow indent to allow for borders 
			//mac/ie5 doesn't need protecting from this because it doesn't have arrows
			um.r[j++]='* html .udm a .udmA{'+um.ad+':'+um.e[18]+'px;top:'+um.e[18]+'px;}';
			um.r[j++]=um.t[20]+'a .udmA{'+um.ad+':'+(um.e[62]+um.e[61])+'px;top:'+um.e[62]+'px;}';
		}
	}




	//dropshadow styles
	if(um.e[58]!='none')
	{
		//apply margins 
		//negative margin is only negative in an x direction
		//so remove any "-" symbol when applying margin-top // but it might be 0 and you can't .replace a number
		um.r[j++]='.udm .udmS{'+um.t[0]+um.e[59]+';margin-top:'+(um.e[59]==0?0:um.e[59].replace('-',''))+';}';
		//invert left margin for RTL text
		//um.r[j++]='.udm .udmS{'+um.t[0]+(um.dra?'-':'')+um.e[59]+';margin-top:'+um.e[59]+';}';

		//apply other rules
		um.r[j++]='.udm .udmS{'+um.bk(um.e[58])+um.t[15]+um.t[12]+'z-index:'+(um.e[6]+19050)+';'+um.t[28]+'left:0px;top:0px;'+um.t[9]+um.e[60]+'}';

		//if dropshadow additional CSS contains a filter
		if(/filter\:progid\:DXImageTransform\.Microsoft\.Shadow/.test(um.e[60]))
		{
			//apply 0 shadow offset for win/ie55
			//this is so that a dropshadow filter can be applied
			//while other browsers see the normal shadow layer
			//also apply plain background color to save rendering unecessary images
			//this is hidden from win/ie5.0 using the Selector + Empty Comment hack
			//http://www.dithered.com/css_filters/css_only/selector_empty_comment.html
			um.r[j++]=um.t[2]+'* html .udm .udmS/**/ {'+um.t[33]+'background:#ccc;'+um.t[8]+um.t[3]+'}}';
		}
	}


	//cpstart
	

	//start
	//cascading style rules for links
	//the !important in the padding top/bottom is to prevent a mouseover displacement in moz1.0-1.3
	//but it isn't on padding left/right because that would stop arrow-compensation padding from working
	um.r[j++]='.udm a,.udm a:link,.udm a.nohref{'+um.bk(um.e[28])+um.t[29]+'z-index:'+um.e[6]+';text-align:'+um.txl+';'+um.t[7]+um.e[21]+';'+um.t[6]+um.e[20]+';'+um.t[4]+um.e[26]+'px;padding-right:'+um.e[26]+'px;'+um.t[1]+um.e[27]+'px !important;padding-bottom:'+um.e[27]+'px !important;'+um.t[11]+um.e[34]+';color:'+um.e[36]+';'+um.t[5]+um.e[18]+'px;font-style:'+um.e[39]+';font-family:'+um.e[32]+';font-weight:'+um.e[33]+' !important;}';
	um.r[j++]='.udm a,.udm a.nohref{font-size:'+um.e[31]+';}';
	//stop
	//if either arrows are in use
	//***DON'T REMOVE THIS CONDITION - PHP PARSER NEEDS IT
	if(um.e[45]!='none'||um.e[89]!='none')
	{
		um.r[j++]='.udm a .udmA,.udm a:link .udmA,.udm'+um.t[32]+'{font-family:'+um.e[32]+';font-weight:'+um.e[33]+' !important;}';
	}
	//start
	//additional css values automatically apply to :visited as well
	//if condition is because empty string creates css-syntax error in moz0.9.8 on win98se
	if(um.e[42]!=''){um.r[j++]='.udm li a,.udm li a:link,.udm li a.nohref,.udm li a:visited{'+um.e[42]+'}';}

	//visited links
	um.r[j++]='.udm li a:visited{'+um.bk(um.e[30])+um.t[5]+um.e[18]+'px;color:'+um.e[38]+';font-style:'+um.e[41]+';'+um.t[7]+um.e[25]+';'+um.t[6]+um.e[24]+';'+um.e[44]+'}';

	//rollover classes // this also contains :active for win/ie's benefit - since it applies :active styles to :focus it makes it so that pure CSS focus rollovers happen
	um.r[j++]='.udm li a.udmR,.udm li a.udmY,.udm li'+um.t[35]+',.udm li'+um.t[37]+',.udm li a:hover,.udm li a:focus,.udm li'+um.t[27]+',.udm li'+um.t[26]+'{font-style:'+um.e[40]+';'+um.bk(um.e[29])+um.t[11]+um.e[34]+';color:'+um.e[37]+';'+um.t[6]+um.e[22]+';'+um.t[7]+um.e[23]+';'+um.t[5]+um.e[18]+'px;'+um.e[43]+'}';
	um.r[j++]='* html .udm li a:active{font-style:'+um.e[40]+';'+um.bk(um.e[29])+um.t[11]+um.e[34]+';color:'+um.e[37]+';'+um.t[6]+um.e[22]+';'+um.t[7]+um.e[23]+';'+um.t[5]+um.e[18]+'px;'+um.e[43]+'}';
	//stop



	//cpstop
	

	//cascading style rules for menu links
	//the !important in the padding top/bottom is to prevent a mouseover displacement in moz1.0-1.3
	//but it isn't on padding left/right because that would stop arrow-compensation padding from working
	um.r[j++]='.udm ul a,.udm ul a:link,.udm ul a.nohref{'+um.bk(um.e[72])+'text-align:'+um.e[79]+';'+um.t[5]+um.e[62]+'px;'+um.t[7]+um.e[65]+';'+um.t[6]+um.e[64]+';'+um.t[4]+um.e[70]+'px;padding-right:'+um.e[70]+'px;'+um.t[1]+um.e[71]+'px !important;padding-bottom:'+um.e[71]+'px !important;'+um.t[11]+um.e[78]+';color:'+um.e[80]+';font-style:'+um.e[83]+';font-size:'+um.e[75]+';font-family:'+um.e[76]+';font-weight:'+um.e[77]+' !important;}';
	//if menu arrows are in use
	//***DON'T REMOVE THIS CONDITION - PHP PARSER NEEDS IT
	if(um.e[89]!='none')
	{
		um.r[j++]='.udm ul a .udmA,.udm ul a:link .udmA,.udm ul'+um.t[32]+'{font-family:'+um.e[76]+';font-weight:'+um.e[77]+' !important;}';
	}
	//additional css values automatically apply to :visited as well
	//if condition is because empty string creates css-syntax error in moz0.9.8 on win98se
	if(um.e[86]!=''){um.r[j++]='.udm ul li a,.udm ul li a:link,.udm ul li a.nohref,.udm ul li a:visited{'+um.e[86]+'}';}

	//visited links 
	um.r[j++]='.udm ul li a:visited,'+um.t[20]+'li a:visited{'+um.bk(um.e[74])+'color:'+um.e[82]+';font-style:'+um.e[85]+';'+um.t[5]+um.e[62]+'px;'+um.t[7]+um.e[69]+';'+um.t[6]+um.e[68]+';'+um.e[88]+'}';

	//rollover classes
	um.r[j++]='.udm ul li a.udmR,.udm ul li a.udmY,.udm ul li'+um.t[35]+',.udm ul li'+um.t[37]+',.udm ul li a:hover,.udm ul li a:focus,.udm ul li'+um.t[27]+',.udm ul li'+um.t[26]+',.udm ul li'+um.t[25]+'{font-style:'+um.e[84]+';'+um.bk(um.e[73])+um.t[11]+um.e[78]+';color:'+um.e[81]+';'+um.t[6]+um.e[66]+';'+um.t[7]+um.e[67]+';'+um.t[5]+um.e[62]+'px;'+um.e[87]+'}';
	um.r[j++]='* html .udm ul li a:active{font-style:'+um.e[84]+';'+um.bk(um.e[73])+um.t[11]+um.e[78]+';color:'+um.e[81]+';'+um.t[6]+um.e[66]+';'+um.t[7]+um.e[67]+';'+um.t[5]+um.e[62]+'px;'+um.e[87]+'}';



	//cpstart


	//start
	//default cursor on inert items
	um.r[j++]='.udm a.nohref,.udm ul a.nohref{cursor:default !important;}';
	//stop




	//cpstop

	

	//navbar heading elements
	um.r[j++]='.udm h1,.udm h2,.udm h3,.udm h4,.udm h5,.udm h6{display:block;background:none;margin:0;padding:0;border:none;font-size:1em;font-weight:normal;text-decoration:none;}';
	
	//with an h-nav
	if(um.h)
	{
		//opera 5 needs inline display on heading elements
		um.r[j++]='.udm h3,.udm h4,.udm h5,.udm h6{display:inline;}';
		//revert for other browsers
		um.r[j++]='.udm h\\3,.udm h\\4,.udm h\\5,.udm h\\6{display:block;}';
		//but konqueror < 3.2 doesn't get past that hack [this selector applies to konqueror, safari, moz0.8 and osx/msn]
		um.r[j++]='ul[class^="udm"] h3,ul[class^="udm"] h4,ul[class^="udm"] h5,ul[class^="udm"] h6{display:block;}';
		//and neither does win/ie5
		um.r[j++]='* html .udm h3,* html .udm h4,* html .udm h5,* html .udm h6{display:block;}';


		//computed width for headings implemented with a one-time use expression()
		//the first expression uses parentNode.offsetWidth because it will be defined as "auto"
		//* this allows cells to expand, but not contract beyond initial width
		//the second expression uses parentNode.currentStyle.width which relies on a set width value being there
		//which it will be, so using currentStyle means it will expand with "em" width, if that's what is used
		//need to surround it in @media to prevent moz throwing a parsing exception over the syntax
		//win/ie5.0 needs them, but there's no point ie5.5+ evaluating them 
		//that would be wasteful, so counteract them with a rule 
		//that's hidden from ie5.0 using the Property + Empty Comment hack 
		//http://www.dithered.com/css_filters/css_only/property_empty_comment.html
		um.r[j++]=um.t[2]+'.udm h3,.udm h4,.udm h5,.udm h6{width:expression("auto",this.runtimeStyle.width=this.parentNode.offsetWidth);width/**/:auto;}}';
		um.r[j++]=um.t[2]+'.udm ul h3,.udm ul h4,.udm ul h5,.udm ul h6{width:expression("auto",this.runtimeStyle.width=this.parentNode.currentStyle.width);width/**/:auto;}}';
	}
	//with a v-nav
	else
	{
		//100% width for headings
		//this would break h-nav in ie - 100% of the whole document width for each one
		um.r[j++]='.udm h1,.udm h2,.udm h3,.udm h4,.udm h5,.udm h6{width:100%;}';
	}


	//cpstart

	//start
	//these are to compensate for win/ie's problem where excess margins are rendered 
	//with a block-level <li> that has a block-level <a> inside it
	
	//display inline, targeted at win/ie5.0 but which would break later versions
	um.r[j++]=um.t[2]+'* html .udm li{display:inline;}}';
	
	//display block and float, targeted at win/ie5.5 and ie6 but which would break 5.0 [**RTL**]
	//hidden from ie5.0 using the Property + Empty Comment hack 
	//http://www.dithered.com/css_filters/css_only/property_empty_comment.html
	um.floats=(um.h)?um.dir:um.e[1];
	um.r[j++]=um.t[2]+'* html .udm li,* html .udm ul li{display/**/:block;float/**/:'+um.floats+';}}';
	//also hidden from OSX, so re-assert for that
	um.r[j++]=um.t[2]+um.t[31]+' li,'+um.t[31]+' ul li{display:block;float:'+um.floats+';}}';
	
	//clear:none is needed for win/ie5.0 to prevent h-nav items from stacking up vertically
	if(um.h){um.r[j++]=um.t[2]+'* html .udm li,'+um.t[20]+'li{clear:none;}}';}


	//cpstop


	//stop
	//add explicit select-element visibility if hiding is being used
	if(um.e[13]=='default'||um.e[13]=='hide')
	{
		um.r[j++]='select{visibility:visible;}';
	}
	
	//iframe for covering windowed controls in win/ie5.5+
	if(um.e[13]=='default'||um.e[13]=='iframe')
	{
		um.r[j++]='.udm .udmC{'+um.t[12]+'left:0;top:0;z-index:'+(um.e[6]+19020)+';'+um.t[28]+'filter:alpha(opacity=0);}';
	}




	//apply ad-hoc menu classes if there are any
	if(um.vl>0)
	{
		for(i in um.v)
		{
			//pstop
			//if member is not a function
			//this is to prevent Array prototypes from being included
			//which might be present in other scripting
			if(typeof um.v[i]!='function')
			{
				//pstart
				//apply width borders and background
				um.r[j++]='.udm ul.'+i+'{width:'+um.v[i][2]+';'+um.t[6]+um.v[i][0]+';'+um.t[7]+um.v[i][1]+';'+um.bk(um.v[i][3])+um.v[i][4]+'}';
				//dropshadow margins
				//negative margin is only negative in an x direction
				//so remove any "-" symbol when applying margin-top
				//dont need to check for "0" here because "0" will still be a string
				//** not really sure why ... it doesn't matter, but it's still slightly disconcerting
				um.r[j++]='.udm span.'+i+'{'+um.t[0]+um.v[i][6]+';margin-top:'+um.v[i][6].replace('-','')+';}';
				//if dropshadow additional CSS contains a filter
				if(/filter\:progid\:DXImageTransform\.Microsoft\.Shadow/.test(um.v[i][7]))
				{
					//apply 0 shadow offset for win/ie55
					//this is hidden from win/ie5.0 using the Selector + Empty Comment hack
					//http://www.dithered.com/css_filters/css_only/selector_empty_comment.html
					um.r[j++]=um.t[2]+'* html .udm span.'+i+'/**/ {'+um.t[8]+um.t[3]+'}}';
				}
				//dropshadow CSS
				//if condition is because string with only filter rule
				//(if background is "none")
				//creates css-syntax error in moz0.9.8 on win98se
				if(um.v[i][5]!='none'){um.r[j++]='.udm span.'+i+'{'+um.bk(um.v[i][5])+'filter:none;'+um.v[i][7]+'}';}
				//pstop
			}
			//pstart
		}
	}


	//apply ad-hoc menu item classes if there are any
	if(um.wl>0)
	{
		for(i in um.w)
		{
			//pstop
			//if member is not a function
			//this is to prevent Array prototypes from being included
			//which might be present in other scripting
			if(typeof um.w[i]!='function')
			{
				//pstart
				//store background because we'll need it twice
				um.bg=um.bk(um.w[i][6]);
				//links
				um.r[j++]='.udm li.'+i+' a,.udm li.'+i+' a:link,.udm li.'+i+' a.nohref{'+um.t[6]+um.w[i][0]+';'+um.t[7]+um.w[i][1]+';'+um.t[5]+um.e[62]+'px;'+um.bg+um.t[11]+um.w[i][12]+';text-align:'+um.w[i][13]+';color:'+um.w[i][14]+';font-style:'+um.w[i][17]+';font-size:'+um.w[i][9]+';}';
				um.r[j++]='.udm li.'+i+' a,.udm li.'+i+' a:link,.udm li.'+i+um.t[32]+',.udm li.'+i+' a,.udm li.'+i+um.t[32]+'{font-family:'+um.w[i][10]+';font-weight:'+um.w[i][11]+' !important;}';
				//additional css values automatically apply to :visited as well
				//if condition is because empty string creates css-syntax error in moz0.9.8 on win98se
				if(um.w[i][20]!=''){um.r[j++]='.udm ul li.'+i+' a,.udm ul li.'+i+' a:link,.udm ul li.'+i+' a.nohref,.udm ul li.'+i+' a:visited{'+um.w[i][20]+'}';}
				//visited styles // the second selector is to increase specificity in win/ie5
				um.r[j++]='.udm ul li.'+i+' a:visited,'+um.t[20]+'li.'+i+' a:visited{'+um.bk(um.w[i][8])+'color:'+um.w[i][16]+';font-style:'+um.w[i][19]+';'+um.t[5]+um.e[62]+'px;'+um.t[6]+um.w[i][4]+';'+um.t[7]+um.w[i][5]+';'+um.w[i][22]+'}';
				//rollovers
				um.r[j++]='.udm ul li.'+i+' a.udmR,.udm ul li.'+i+' a.udmY,.udm ul li.'+i+um.t[35]+',.udm ul li.'+i+um.t[37]+',.udm ul li.'+i+' a:hover,.udm ul li.'+i+' a:focus,.udm ul li.'+i+um.t[27]+',.udm ul li.'+i+um.t[26]+',.udm ul li.'+i+um.t[25]+'{'+um.bk(um.w[i][7])+um.t[11]+um.w[i][12]+';color:'+um.w[i][15]+';'+um.t[5]+um.e[62]+'px;'+um.t[6]+um.w[i][2]+';'+um.t[7]+um.w[i][3]+';font-style:'+um.w[i][18]+';'+um.w[i][21]+'}';
				um.r[j++]='* html .udm li.'+i+' a:active{'+um.bk(um.w[i][7])+um.t[11]+um.w[i][12]+';color:'+um.w[i][15]+';'+um.t[5]+um.e[62]+'px;'+um.t[6]+um.w[i][2]+';'+um.t[7]+um.w[i][3]+';font-style:'+um.w[i][18]+';'+um.w[i][21]+'}';
				//pstop
			}
			//pstart
		}
	}



	//pstop



	//store rules array length
	um.rLen=um.r.length;


	//create style node for DOM 2 CSS group and Opera 7.3 or later
	if(um.ss||um.o73)
	{
		//create style node
		um.at={'type':'text/css','media':'screen,projection'};
		//the html: "namespace" is for Opera's benefit
		//because early implementations of XHTML mode in Opera 7 required it for created elements
		um.stn=um.createElement('html:style',um.at);
		
		//append to head
		document.getElementsByTagName('head')[0].appendChild(um.stn);
		
		//apply rules with DOM 2 CSS
		if(um.ss)
		{
			//if the stylesheets collection length=0
			//then creating or appending the stylesheet didn't work
			//this happens in netscape 6.1, and probably other early moz builds, 
			//if there are no other stylesheets already on the page (** why??)
			//so if it does, set um.ss to false so that it uses document.write instead
			//of course that means if this happens in the XML DOM
			//none of the CSS will be written in that browser at all
			if(document.styleSheets.length==0)
			{
				um.ss=false;
			}
			//otherwise
			else
			{
				//retrieve the stylesheet object we just created
				um.sy=document.styleSheets.item(document.styleSheets.length-1);
				
				//insert rules
				i=0;
				do
				{
					um.sy.insertRule(um.r[i++],um.sy.cssRules.length);
				}
				while(i<um.rLen);
			}
		}
	
		//document.write doesn't work in XHTML, and O7 doesn't support document.styleSheets
		//so apply rules for Opera 7.3 by creating text nodes inside a <style> element
		//we can't use this method exclusively because it doesn't work in older moz builds
		else if(um.o73)
		{
			//insert rules as text nodes
			i=0;
			do
			{
				um.stn.appendChild(document.createTextNode(um.r[i++]));
			}
			while(i<um.rLen);
		}
	}
		
	//apply rules with document.write
	if(!(um.ss||um.o73))
	{
		//compile rules
		um.styStr='';
		i=0;
		do
		{
			um.styStr+=um.r[i++];
		}
		while(i<um.rLen);
		
		//write rules
		document.write('<style type="text/css" media="screen,projection">'+um.styStr+'</style>');
	}





}
