docs: function (className, items, x, y, width, height, button) {
  		var chart = this,
  			navOptions = chart.options.navigation,
  			menuItemStyle = navOptions.menuItemStyle,
  			chartWidth = chart.chartWidth,
  			chartHeight = chart.chartHeight,
  			cacheName = 'cache-' + className,
  			menu = chart[cacheName],
  			menuPadding = mathMax(width, height), // for mouse leave detection
  			boxShadow = '3px 3px 10px #888',
  			innerMenu,
  			hide,
  			hideTimer,
  			menuStyle,
  			docMouseUpHandler = function (e) {
  				if (!chart.pointer.inClass(e.target, className)) {
  					hide();
  				}
  			};
  
  		// create the menu only the first time
  		if (!menu) {
  
  			// create a HTML element above the SVG
  			chart[cacheName] = menu = createElement(DIV, {
  				className: className
  			}, {
  				position: ABSOLUTE,
  				zIndex: 1000,
  				padding: menuPadding + PX
  			}, chart.container);
  
  			innerMenu = createElement(DIV, null,
  				extend({
  					MozBoxShadow: boxShadow,
  					WebkitBoxShadow: boxShadow,
  					boxShadow: boxShadow
  				}, navOptions.menuStyle), menu);
  
  			// hide on mouse out
  			hide = function () {
  				css(menu, { display: NONE });
  				if (button) {
  					button.setState(0);
  				}
  				chart.openMenu = false;
  			};
  
  			// Hide the menu some time after mouse leave (#1357)
  			addEvent(menu, 'mouseleave', function () {
  				hideTimer = setTimeout(hide, 500);
  			});
  			addEvent(menu, 'mouseenter', function () {
  				clearTimeout(hideTimer);
  			});
  
  
  			// Hide it on clicking or touching outside the menu (#2258, #2335, #2407)
  			addEvent(document, 'mouseup', docMouseUpHandler);
  			addEvent(chart, 'destroy', function () {
  				removeEvent(document, 'mouseup', docMouseUpHandler);
  			});
  
  
  			// create the items
  			each(items, function (item) {
  				if (item) {
  					var element = item.separator ?
  						createElement('hr', null, null, innerMenu) :
  						createElement(DIV, {
  							onmouseover: function () {
  								css(this, navOptions.menuItemHoverStyle);
  							},
  							onmouseout: function () {
  								css(this, menuItemStyle);
  							},
  							onclick: function () {
  								hide();
  								if (item.onclick) {
  									item.onclick.apply(chart, arguments);
  								}
  							},
  							innerHTML: item.text || chart.options.lang[item.textKey]
  						}, extend({
  							cursor: 'pointer'
  						}, menuItemStyle), innerMenu);
  
  
  					// Keep references to menu divs to be able to destroy them
  					chart.exportDivElements.push(element);
  				}
  			});
  
  			// Keep references to menu and innerMenu div to be able to destroy them
  			chart.exportDivElements.push(innerMenu, menu);
  
  			chart.exportMenuWidth = menu.offsetWidth;
  			chart.exportMenuHeight = menu.offsetHeight;
  		}
  
  		menuStyle = { display: 'block' };
  
  		// if outside right, right align it
  		if (x + chart.exportMenuWidth > chartWidth) {
  			menuStyle.right = (chartWidth - x - width - menuPadding) + PX;
  		} else {
  			menuStyle.left = (x - menuPadding) + PX;
  		}
  		// if outside bottom, bottom align it
  		if (y + height + chart.exportMenuHeight > chartHeight && button.alignOptions.verticalAlign !== 'top') {
  			menuStyle.bottom = (chartHeight - y - menuPadding)  + PX;
  		} else {
  			menuStyle.top = (y + height - menuPadding) + PX;
  		}
  
  		css(menu, menuStyle);
  		chart.openMenu = true;
  	}