text: define("dijit/form/_ComboBoxMenu", [
  	"dojo/_base/declare", // declare
  	"dojo/dom-class", // domClass.add domClass.remove
  	"dojo/dom-construct", // domConstruct.create
  	"dojo/dom-style", // domStyle.get
  	"dojo/keys", // keys.DOWN_ARROW keys.PAGE_DOWN keys.PAGE_UP keys.UP_ARROW
  	"../_WidgetBase",
  	"../_TemplatedMixin",
  	"./_ComboBoxMenuMixin",
  	"./_ListMouseMixin"
  ], function(declare, domClass, domConstruct, domStyle, keys,
  			_WidgetBase, _TemplatedMixin, _ComboBoxMenuMixin, _ListMouseMixin){
  
  /*=====
  	var _WidgetBase = dijit._WidgetBase;
  	var _TemplatedMixin = dijit._TemplatedMixin;
  	var _ComboBoxMenuMixin = dijit.form._ComboBoxMenuMixin;
  	var _ListMouseMixin = dijit.form._ListMouseMixin;
  =====*/
  
  	// module:
  	//		dijit/form/_ComboBoxMenu
  	// summary:
  	//		Focus-less menu for internal use in `dijit.form.ComboBox`
  
  	return declare("dijit.form._ComboBoxMenu",[_WidgetBase, _TemplatedMixin, _ListMouseMixin, _ComboBoxMenuMixin], {
  		// summary:
  		//		Focus-less menu for internal use in `dijit.form.ComboBox`
  		//              Abstract methods that must be defined externally:
  		//                      onChange: item was explicitly chosen (mousedown somewhere on the menu and mouseup somewhere on the menu)
  		//                      onPage: next(1) or previous(-1) button pressed
  		// tags:
  		//		private
  
  		templateString: "<div class='dijitReset dijitMenu' data-dojo-attach-point='containerNode' style='overflow: auto; overflow-x: hidden;'>"
  				+"<div class='dijitMenuItem dijitMenuPreviousButton' data-dojo-attach-point='previousButton' role='option'></div>"
  				+"<div class='dijitMenuItem dijitMenuNextButton' data-dojo-attach-point='nextButton' role='option'></div>"
  				+"</div>",
  
  		baseClass: "dijitComboBoxMenu",
  
  		postCreate: function(){
  			this.inherited(arguments);
  			if(!this.isLeftToRight()){
  				domClass.add(this.previousButton, "dijitMenuItemRtl");
  				domClass.add(this.nextButton, "dijitMenuItemRtl");
  			}
  		},
  
  		_createMenuItem: function(){
  			return domConstruct.create("div", {
  				"class": "dijitReset dijitMenuItem" +(this.isLeftToRight() ? "" : " dijitMenuItemRtl"),
  				role: "option"
  			});
  		},
  
  		onHover: function(/*DomNode*/ node){
  			// summary:
  			//		Add hover CSS
  			domClass.add(node, "dijitMenuItemHover");
  		},
  
  		onUnhover: function(/*DomNode*/ node){
  			// summary:
  			//		Remove hover CSS
  			domClass.remove(node, "dijitMenuItemHover");
  		},
  
  		onSelect: function(/*DomNode*/ node){
  			// summary:
  			//		Add selected CSS
  			domClass.add(node, "dijitMenuItemSelected");
  		},
  
  		onDeselect: function(/*DomNode*/ node){
  			// summary:
  			//		Remove selected CSS
  			domClass.remove(node, "dijitMenuItemSelected");
  		},
  
  		_page: function(/*Boolean*/ up){
  			// summary:
  			//		Handles page-up and page-down keypresses
  
  			var scrollamount = 0;
  			var oldscroll = this.domNode.scrollTop;
  			var height = domStyle.get(this.domNode, "height");
  			// if no item is highlighted, highlight the first option
  			if(!this.getHighlightedOption()){
  				this.selectNextNode();
  			}
  			while(scrollamount<height){
  				var highlighted_option = this.getHighlightedOption();
  				if(up){
  					// stop at option 1
  					if(!highlighted_option.previousSibling ||
  						highlighted_option.previousSibling.style.display == "none"){
  						break;
  					}
  					this.selectPreviousNode();
  				}else{
  					// stop at last option
  					if(!highlighted_option.nextSibling ||
  						highlighted_option.nextSibling.style.display == "none"){
  						break;
  					}
  					this.selectNextNode();
  				}
  				// going backwards
  				var newscroll = this.domNode.scrollTop;
  				scrollamount += (newscroll-oldscroll)*(up ? -1:1);
  				oldscroll = newscroll;
  			}
  		},
  
  		handleKey: function(evt){
  			// summary:
  			//		Handle keystroke event forwarded from ComboBox, returning false if it's
  			//		a keystroke I recognize and process, true otherwise.
  			switch(evt.charOrCode){
  				case keys.DOWN_ARROW:
  					this.selectNextNode();
  					return false;
  				case keys.PAGE_DOWN:
  					this._page(false);
  					return false;
  				case keys.UP_ARROW:
  					this.selectPreviousNode();
  					return false;
  				case keys.PAGE_UP:
  					this._page(true);
  					return false;
  				default:
  					return true;
  			}
  		}
  	});
  });
  