<!doctype html>
<html>
<head>
	<title>Menu Visual Test: Default</title>
	<link rel="stylesheet" href="../visual.css" type="text/css" />
	<link rel="stylesheet" href="../../../themes/base/jquery.ui.all.css" type="text/css" title="ui-theme" />
	<script type="text/javascript" src="../../../jquery-1.7.1.js"></script>
	<script type="text/javascript" src="../../../ui/jquery.ui.core.js"></script>
	<script type="text/javascript" src="../../../ui/jquery.ui.widget.js"></script>
	<script type="text/javascript" src="../../../ui/jquery.ui.position.js"></script>
	<script type="text/javascript" src="../../../ui/jquery.ui.button.js"></script>
	<script type="text/javascript" src="../../../ui/jquery.ui.menu.js"></script>
	<script type="text/javascript" src="http://jqueryui.com/themeroller/themeswitchertool/"></script>
	<script type="text/javascript">
	$(function() {
		$.fn.themeswitcher && $('<div/>').css({
			position: "absolute",
			right: 10,
			top: 10
		}).appendTo(document.body).themeswitcher();
		
		$.widget("ui.drilldown", {
			_init: function() {
				var self = this;
				this.active = this.element.find(">ul").attr("tabindex", 0);
				
				// hide submenus and create indicator icons
				this.element.find("ul").hide().prev("a").prepend('<span class="ui-icon ui-icon-carat-1-e"></span>').end().filter(":first").show();	
				
				this.element.find("ul").menu({
					// disable built-in key handling
					input: $(),
					focus: function(event, ui) {
						self.activeItem = ui.item;
					},
					select: function(event, ui) {
						if (this != self.active[0]) {
							return;
						}
						var nested = $(">ul", ui.item);
						if (nested.length) {
							self._open(nested);
						} else {
							self.element.find("h3").text(ui.item.text());
							self.options.select.apply(this, arguments);
						}
					}
				});
				
				this.back = this.element.children(":last").button({
					icons: {
						primary: "ui-icon-carat-1-w"
					}
				}).click(function() {
					self.up();
					return false;
				}).hide();
			},
			
			_open: function(submenu) {
				this.active = submenu.show().css({
					opacity: 0
				}).position({
					my: "left top",
					at: "right top",
					of: this.widget()
				}).position({
					my: "left top",
					at: "left top",
					of: this.widget(),
					using: function(to) {
						$(this).animate({
							left: to.left,
							top: to.top,
							opacity: 1
						});
					}
				});
				this.back.show();
			},
			
			up: function() {
				if (this.active.parent()[0] == this.element[0]) {
					return;
				}
				this.active.position({
					my: "left top",
					at: "right top",
					of: this.widget(),
					using: function(to) {
						$(this).animate({
							left: to.left,
							top: to.top,
							opacity: 0
						});
					}
				});
				this.active = this.active.parent().parent().show();
				this.activeItem = this.active.data("menu").active;
				if (!this.active.parent().parent().is(":ui-menu")) {
					this.back.hide();
				}
			},
			
			down: function(event) {
				var nested = this.activeItem.find(">ul");
				if (nested.length) {
					this._open(nested);
					nested.menu("focus", event, nested.children(":first"))
				}
			},
			
			show: function() {
			},
			
			hide: function() {
			},
			
			widget: function() {
				return this.element.find(">ul");
			}
		});
		
		var drilldown = $("#drilldown").drilldown({
			select: function(event, ui) {
				$("#log").append("<div>Selected " + ui.item.text() + "</div>");
			}
		});
		
		drilldown.drilldown("widget").keydown(function(event) {
			var menu = drilldown.data("drilldown").active.data("menu");
			if (menu.widget().is(":hidden"))
				return;
			event.stopPropagation();
			switch (event.keyCode) {
			case $.ui.keyCode.PAGE_UP:
				menu.previousPage();
				break;
			case $.ui.keyCode.PAGE_DOWN:
				menu.nextPage();
				break;
			case $.ui.keyCode.UP:
				menu.previous();
				break;
			case $.ui.keyCode.LEFT:
				drilldown.drilldown("up");
				break;
			case $.ui.keyCode.RIGHT:
				drilldown.drilldown("down");
				break;
			case $.ui.keyCode.DOWN:
				menu.next();
				event.preventDefault();
				break;
			case $.ui.keyCode.ENTER:
			case $.ui.keyCode.TAB:
				menu.select();
				drilldown.drilldown("hide");
				event.preventDefault();
				break;
			case $.ui.keyCode.ESCAPE:
				drilldown.drilldown("hide", event);
				break;
			default:
				clearTimeout(menu.filterTimer);
				var prev = menu.previousFilter || "";
				var character = String.fromCharCode(event.keyCode);
				var skip = false;
				if (character == prev) {
					skip = true;
				} else {
					character = prev + character;
				}
				
				var match = menu.widget().children("li").filter(function() {
					return new RegExp("^" + character, "i").test($("a", this).text());
				});
				var match = skip && match.index(menu.active.next()) != -1 ? match.next() : match;
				if (!match.length) {
					character = String.fromCharCode(event.keyCode);
					match = menu.widget().children("li").filter(function() {
						return new RegExp("^" + character, "i").test($(this).text());
					});
				}
				if (match.length) {
					menu.focus(event, match);
					if (match.length > 1) {
						menu.previousFilter = character;
						menu.filterTimer = setTimeout(function() {
							delete menu.previousFilter;
						}, 1000);
					} else {
						delete menu.previousFilter;
					}
				} else {
					delete menu.previousFilter;
				}
			}
		});
	});
	</script>
	<style>
		body { font-size:62.5%; }
		.ui-menu { width: 200px; height: 170px; }
		.ui-menu .ui-menu { position: absolute; }
		.ui-menu .ui-icon { float: right; }
	</style>
</head>
<body>
	
<div id="drilldown">
	<h3>Make a selection...</h3>
	<ul>
		<li>
			<a href="#">Amsterdam</a>
			<ul>
				<li><a href="#">Aberdeen</a></li>
				<li><a href="#">Ada</a></li>
				<li>
					<a href="#">Adamsville</a>
					<ul>
						<li><a href="#">Anaheim</a></li>
						<li>
							<a href="#">Cologne</a>
							<ul>
								<li><a href="#">Mberdeen</a></li>
								<li><a href="#">Mda</a></li>
								<li><a href="#">Mdamsville</a></li>
								<li><a href="#">Mddyston</a></li>
								<li><a href="#">Mmesville</a></li>
							</ul>
						</li>
						<li><a href="#">Frankfurt</a></li>
					</ul>
				</li>
				<li><a href="#">Addyston</a></li>
				<li><a href="#">Amesville</a></li>
			</ul>
		</li>
		<li><a href="#">Anaheim</a></li>
		<li><a href="#">Cologne</a></li>
		<li><a href="#">Frankfurt</a></li>
		<li>
			<a href="#">Magdeburg</a>
			<ul>
				<li><a href="#">Mberdeen</a></li>
				<li><a href="#">Mda</a></li>
				<li><a href="#">Mdamsville</a></li>
				<li><a href="#">Mddyston</a></li>
				<li><a href="#">Mmesville</a></li>
			</ul>
		</li>
		<li><a href="#">Munich</a></li>
		<li><a href="#">Utrecht</a></li>
		<li><a href="#">Zurich</a></li>
	</ul>
	<a href="#">Go back</a>
</div>

<div class="ui-widget" style="clear: left; margin-top:2em; font-family:Arial">
	Log:
	<div id="log" style="height: 400px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
</div>

</body>
</html>