/*! jQuery UI - v1.10.4 - 2014-02-16
* http://jqueryui.com
* Copyright 2014 jQuery Foundation and other contributors; Licensed MIT */
(function (t) {
t.widget("ui.menu", {
version: "1.10.4",
defaultElement: "
",
delay: 300,
options: {
icons: {submenu: "ui-icon-carat-1-e"},
menus: "ul",
position: {my: "left top", at: "right top"},
role: "menu",
blur: null,
focus: null,
select: null
},
_create: function () {
this.activeMenu = this.element, this.mouseHandled = !1, this.element.uniqueId().addClass("ui-menu ui-widget ui-widget-content ui-corner-all").toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length).attr({
role: this.options.role,
tabIndex: 0
}).bind("click" + this.eventNamespace, t.proxy(function (t) {
this.options.disabled && t.preventDefault()
}, this)), this.options.disabled && this.element.addClass("ui-state-disabled").attr("aria-disabled", "true"), this._on({
"mousedown .ui-menu-item > a": function (t) {
t.preventDefault()
}, "click .ui-state-disabled > a": function (t) {
t.preventDefault()
}, "click .ui-menu-item:has(a)": function (e) {
var i = t(e.target).closest(".ui-menu-item");
!this.mouseHandled && i.not(".ui-state-disabled").length && (this.select(e), e.isPropagationStopped() || (this.mouseHandled = !0), i.has(".ui-menu").length ? this.expand(e) : !this.element.is(":focus") && t(this.document[0].activeElement).closest(".ui-menu").length && (this.element.trigger("focus", [!0]), this.active && 1 === this.active.parents(".ui-menu").length && clearTimeout(this.timer)))
}, "mouseenter .ui-menu-item": function (e) {
var i = t(e.currentTarget);
i.siblings().children(".ui-state-active").removeClass("ui-state-active"), this.focus(e, i)
}, mouseleave: "collapseAll", "mouseleave .ui-menu": "collapseAll", focus: function (t, e) {
var i = this.active || this.element.children(".ui-menu-item").eq(0);
e || this.focus(t, i)
}, blur: function (e) {
this._delay(function () {
t.contains(this.element[0], this.document[0].activeElement) || this.collapseAll(e)
})
}, keydown: "_keydown"
}), this.refresh(), this._on(this.document, {
click: function (e) {
t(e.target).closest(".ui-menu").length || this.collapseAll(e), this.mouseHandled = !1
}
})
},
_destroy: function () {
this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeClass("ui-menu ui-widget ui-widget-content ui-corner-all ui-menu-icons").removeAttr("role").removeAttr("tabIndex").removeAttr("aria-labelledby").removeAttr("aria-expanded").removeAttr("aria-hidden").removeAttr("aria-disabled").removeUniqueId().show(), this.element.find(".ui-menu-item").removeClass("ui-menu-item").removeAttr("role").removeAttr("aria-disabled").children("a").removeUniqueId().removeClass("ui-corner-all ui-state-hover").removeAttr("tabIndex").removeAttr("role").removeAttr("aria-haspopup").children().each(function () {
var e = t(this);
e.data("ui-menu-submenu-carat") && e.remove()
}), this.element.find(".ui-menu-divider").removeClass("ui-menu-divider ui-widget-content")
},
_keydown: function (e) {
function i(t) {
return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&")
}
var s, n, a, o, r, l = !0;
switch (e.keyCode) {
case t.ui.keyCode.PAGE_UP:
this.previousPage(e);
break;
case t.ui.keyCode.PAGE_DOWN:
this.nextPage(e);
break;
case t.ui.keyCode.HOME:
this._move("first", "first", e);
break;
case t.ui.keyCode.END:
this._move("last", "last", e);
break;
case t.ui.keyCode.UP:
this.previous(e);
break;
case t.ui.keyCode.DOWN:
this.next(e);
break;
case t.ui.keyCode.LEFT:
this.collapse(e);
break;
case t.ui.keyCode.RIGHT:
this.active && !this.active.is(".ui-state-disabled") && this.expand(e);
break;
case t.ui.keyCode.ENTER:
case t.ui.keyCode.SPACE:
this._activate(e);
break;
case t.ui.keyCode.ESCAPE:
this.collapse(e);
break;
default:
l = !1, n = this.previousFilter || "", a = String.fromCharCode(e.keyCode), o = !1, clearTimeout(this.filterTimer), a === n ? o = !0 : a = n + a, r = RegExp("^" + i(a), "i"), s = this.activeMenu.children(".ui-menu-item").filter(function () {
return r.test(t(this).children("a").text())
}), s = o && -1 !== s.index(this.active.next()) ? this.active.nextAll(".ui-menu-item") : s, s.length || (a = String.fromCharCode(e.keyCode), r = RegExp("^" + i(a), "i"), s = this.activeMenu.children(".ui-menu-item").filter(function () {
return r.test(t(this).children("a").text())
})), s.length ? (this.focus(e, s), s.length > 1 ? (this.previousFilter = a, this.filterTimer = this._delay(function () {
delete this.previousFilter
}, 1e3)) : delete this.previousFilter) : delete this.previousFilter
}
l && e.preventDefault()
},
_activate: function (t) {
this.active.is(".ui-state-disabled") || (this.active.children("a[aria-haspopup='true']").length ? this.expand(t) : this.select(t))
},
refresh: function () {
var e, i = this.options.icons.submenu, s = this.element.find(this.options.menus);
this.element.toggleClass("ui-menu-icons", !!this.element.find(".ui-icon").length), s.filter(":not(.ui-menu)").addClass("ui-menu ui-widget ui-widget-content ui-corner-all").hide().attr({
role: this.options.role,
"aria-hidden": "true",
"aria-expanded": "false"
}).each(function () {
var e = t(this), s = e.prev("a"), n = t("").addClass("ui-menu-icon ui-icon " + i).data("ui-menu-submenu-carat", !0);
s.attr("aria-haspopup", "true").prepend(n), e.attr("aria-labelledby", s.attr("id"))
}), e = s.add(this.element), e.children(":not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role", "presentation").children("a").uniqueId().addClass("ui-corner-all").attr({
tabIndex: -1,
role: this._itemRole()
}), e.children(":not(.ui-menu-item)").each(function () {
var e = t(this);
/[^\-\u2014\u2013\s]/.test(e.text()) || e.addClass("ui-widget-content ui-menu-divider")
}), e.children(".ui-state-disabled").attr("aria-disabled", "true"), this.active && !t.contains(this.element[0], this.active[0]) && this.blur()
},
_itemRole: function () {
return {menu: "menuitem", listbox: "option"}[this.options.role]
},
_setOption: function (t, e) {
"icons" === t && this.element.find(".ui-menu-icon").removeClass(this.options.icons.submenu).addClass(e.submenu), this._super(t, e)
},
focus: function (t, e) {
var i, s;
this.blur(t, t && "focus" === t.type), this._scrollIntoView(e), this.active = e.first(), s = this.active.children("a").addClass("ui-state-focus"), this.options.role && this.element.attr("aria-activedescendant", s.attr("id")), this.active.parent().closest(".ui-menu-item").children("a:first").addClass("ui-state-active"), t && "keydown" === t.type ? this._close() : this.timer = this._delay(function () {
this._close()
}, this.delay), i = e.children(".ui-menu"), i.length && t && /^mouse/.test(t.type) && this._startOpening(i), this.activeMenu = e.parent(), this._trigger("focus", t, {item: e})
},
_scrollIntoView: function (e) {
var i, s, n, a, o, r;
this._hasScroll() && (i = parseFloat(t.css(this.activeMenu[0], "borderTopWidth")) || 0, s = parseFloat(t.css(this.activeMenu[0], "paddingTop")) || 0, n = e.offset().top - this.activeMenu.offset().top - i - s, a = this.activeMenu.scrollTop(), o = this.activeMenu.height(), r = e.height(), 0 > n ? this.activeMenu.scrollTop(a + n) : n + r > o && this.activeMenu.scrollTop(a + n - o + r))
},
blur: function (t, e) {
e || clearTimeout(this.timer), this.active && (this.active.children("a").removeClass("ui-state-focus"), this.active = null, this._trigger("blur", t, {item: this.active}))
},
_startOpening: function (t) {
clearTimeout(this.timer), "true" === t.attr("aria-hidden") && (this.timer = this._delay(function () {
this._close(), this._open(t)
}, this.delay))
},
_open: function (e) {
var i = t.extend({of: this.active}, this.options.position);
clearTimeout(this.timer), this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden", "true"), e.show().removeAttr("aria-hidden").attr("aria-expanded", "true").position(i)
},
collapseAll: function (e, i) {
clearTimeout(this.timer), this.timer = this._delay(function () {
var s = i ? this.element : t(e && e.target).closest(this.element.find(".ui-menu"));
s.length || (s = this.element), this._close(s), this.blur(e), this.activeMenu = s
}, this.delay)
},
_close: function (t) {
t || (t = this.active ? this.active.parent() : this.element), t.find(".ui-menu").hide().attr("aria-hidden", "true").attr("aria-expanded", "false").end().find("a.ui-state-active").removeClass("ui-state-active")
},
collapse: function (t) {
var e = this.active && this.active.parent().closest(".ui-menu-item", this.element);
e && e.length && (this._close(), this.focus(t, e))
},
expand: function (t) {
var e = this.active && this.active.children(".ui-menu ").children(".ui-menu-item").first();
e && e.length && (this._open(e.parent()), this._delay(function () {
this.focus(t, e)
}))
},
next: function (t) {
this._move("next", "first", t)
},
previous: function (t) {
this._move("prev", "last", t)
},
isFirstItem: function () {
return this.active && !this.active.prevAll(".ui-menu-item").length
},
isLastItem: function () {
return this.active && !this.active.nextAll(".ui-menu-item").length
},
_move: function (t, e, i) {
var s;
this.active && (s = "first" === t || "last" === t ? this.active["first" === t ? "prevAll" : "nextAll"](".ui-menu-item").eq(-1) : this.active[t + "All"](".ui-menu-item").eq(0)), s && s.length && this.active || (s = this.activeMenu.children(".ui-menu-item")[e]()), this.focus(i, s)
},
nextPage: function (e) {
var i, s, n;
return this.active ? (this.isLastItem() || (this._hasScroll() ? (s = this.active.offset().top, n = this.element.height(), this.active.nextAll(".ui-menu-item").each(function () {
return i = t(this), 0 > i.offset().top - s - n
}), this.focus(e, i)) : this.focus(e, this.activeMenu.children(".ui-menu-item")[this.active ? "last" : "first"]())), undefined) : (this.next(e), undefined)
},
previousPage: function (e) {
var i, s, n;
return this.active ? (this.isFirstItem() || (this._hasScroll() ? (s = this.active.offset().top, n = this.element.height(), this.active.prevAll(".ui-menu-item").each(function () {
return i = t(this), i.offset().top - s + n > 0
}), this.focus(e, i)) : this.focus(e, this.activeMenu.children(".ui-menu-item").first())), undefined) : (this.next(e), undefined)
},
_hasScroll: function () {
return this.element.outerHeight() < this.element.prop("scrollHeight")
},
select: function (e) {
this.active = this.active || t(e.target).closest(".ui-menu-item");
var i = {item: this.active};
this.active.has(".ui-menu").length || this.collapseAll(e, !0), this._trigger("select", e, i)
}
})
})(jQuery);