/*
Copyright (c) 2008, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.net/yui/license.txt
version: 2.6.0
*/
/* Menu & MenuBar styles */

.yuimenu {

    top: -999em;
    left: -999em;

}

.yuimenubar {

    position: static;

}

.yuimenu .yuimenu,
.yuimenubar .yuimenu {

    position: absolute;

}

.yuimenubar li, 
.yuimenu li {

    list-style-type: none;    

}

.yuimenubar ul, 
.yuimenu ul,
.yuimenubar li, 
.yuimenu li,
.yuimenu h6,
.yuimenubar h6 { 

    margin: 0;
    padding: 0;

}

.yuimenuitemlabel,
.yuimenubaritemlabel {

    text-align: left;
    white-space: nowrap;

}


/* 
    The following style rule trigger the "hasLayout" property in 
    IE (http://msdn2.microsoft.com/en-us/library/ms533776.aspx) for a
    MenuBar instance's <ul> element, allowing both to clear their floated 
    child <li> elements.
*/

.yuimenubar ul {

    *zoom: 1;

}


/* 
    Remove the "hasLayout" trigger for submenus of MenuBar instances as it 
    is unnecessary. 
*/

.yuimenubar .yuimenu ul {

    *zoom: normal;

}

/*
    The following style rule allows a MenuBar instance's <ul> element to clear
    its floated <li> elements in Firefox, Safari and and Opera.
*/

.yuimenubar>.bd>ul:after {

    content: ".";
    display: block;
    clear: both;
    visibility: hidden;
    height: 0;
    line-height: 0;

}

.yuimenubaritem {

    float: left;

}

.yuimenubaritemlabel,
.yuimenuitemlabel {

    display: block;

}

.yuimenuitemlabel .helptext {

    font-style: normal;
    display: block;
    
    /*
        The value for the left margin controls how much the help text is
        offset from the text of the menu item.  This value will need to 
        be customized depending on the longest text label of a menu item.
    */
    
    margin: -1em 0 0 10em;
    
}

/*
    PLEASE NOTE: The <div> element used for a menu's shadow is appended 
    to its root element via JavaScript once it has been rendered.  The 
    code that creates the shadow lives in the menu's public "onRender" 
    event handler that is a prototype method of YAHOO.widget.Menu.  
    Implementers wishing to remove a menu's shadow or add any other markup
    required for a given skin for menu should override the "onRender" method.
*/

.yui-menu-shadow {

    position: absolute;
    visibility: hidden;
    z-index: -1;

}

.yui-menu-shadow-visible {

    top: 2px;
    right: -3px;
    left: -3px;
    bottom: -3px;
    visibility: visible;

}


/*

There are two known issues with YAHOO.widget.Overlay (the superclass class of 
Menu) that manifest in Gecko-based browsers on Mac OS X:

    1) Elements with scrollbars will poke through Overlay instances floating 
       above them.
    
    2) An Overlay's scrollbars and the scrollbars of its child nodes remain  
       visible when the Overlay is hidden.

To fix these bugs in Menu (a subclass of YAHOO.widget.Overlay):

    1) The "overflow" property of a Menu instance's shadow element and child 
       nodes is toggled between "hidden" and "auto" (through the application  
       and removal of the "hide-scrollbars" and "show-scrollbars" CSS classes)
       as its "visibility" configuration property is toggled between 
       "false" and "true."
    
    2) The "display" property of <select> elements that are child nodes of the 
       Menu instance's root element is set to "none" when it is hidden.

PLEASE NOTE:  
  
    1) The "hide-scrollbars" and "show-scrollbars" CSS classes classes are 
       applied only for Gecko on Mac OS X and are added/removed to/from the 
       Overlay's root HTML element (DIV) via the "hideMacGeckoScrollbars" and 
       "showMacGeckoScrollbars" methods of YAHOO.widget.Overlay.
    
    2) There may be instances where the CSS for a web page or application 
       contains style rules whose specificity override the rules implemented by 
       the Menu CSS files to fix this bug.  In such cases, is necessary to 
       leverage the provided "hide-scrollbars" and "show-scrollbars" classes to 
       write custom style rules to guard against this bug.

** For more information on this issue, see:

   + https://bugzilla.mozilla.org/show_bug.cgi?id=187435
   + SourceForge bug #1723530

*/

.hide-scrollbars * {

	overflow: hidden;

}

.hide-scrollbars select {

	display: none;

}


/*

The following style rule (".yuimenu.show-scrollbars") overrides the 
".show-scrollbars" rule defined in container-core.css which sets the 
"overflow" property of a YAHOO.widget.Overlay instance's root HTML element to 
"auto" when it is visible.  Without this override, a Menu would have scrollbars
when one of its submenus is visible.

*/

.yuimenu.show-scrollbars,
.yuimenubar.show-scrollbars {

	overflow: visible; 

}

.yuimenu.hide-scrollbars .yui-menu-shadow,
.yuimenubar.hide-scrollbars .yui-menu-shadow {

    overflow: hidden;

}

.yuimenu.show-scrollbars .yui-menu-shadow,
.yuimenubar.show-scrollbars .yui-menu-shadow {

    overflow: auto;

}