/**
 * menuMatic
 * 
 * @version 0.68.3 (beta)
 * @author Jason J. Jaeger | greengeckodesign.com
 * @copyright 2008 Jason John Jaeger
 * @license MIT-style License Permission is hereby granted, free of charge, to
 *          any person obtaining a copy of this software and associated
 *          documentation files (the "Software"), to deal in the Software
 *          without restriction, including without limitation the rights to use,
 *          copy, modify, merge, publish, distribute, sublicense, and/or sell
 *          copies of the Software, and to permit persons to whom the Software
 *          is furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
var MenuMatic = new Class(
		{
			Implements : Options,
			options : {
				id : "nav",
				subMenusContainerId : "subMenusContainer",
				effect : "slide & fade",
				duration : 600,
				physics : Fx.Transitions.Pow.easeOut,
				hideDelay : 1000,
				stretchMainMenu : false,
				matchWidthMode : true,
				orientation : "horizontal",
				direction : {
					x : "right",
					y : "down"
				},
				tweakInitial : {
					x : 0,
					y : 0
				},
				tweakSubsequent : {
					x : 0,
					y : 0
				},
				center : false,
				opacity : 95,
				mmbFocusedClassName : null,
				mmbClassName : null,
				killDivider : null,
				fixHasLayoutBug : false,
				onHideAllSubMenusNow_begin : (function() {
				}),
				onHideAllSubMenusNow_complete : (function() {
				}),
				onInit_begin : (function() {
				}),
				onInit_complete : (function() {
				})
			},
			hideAllMenusTimeout : null,
			allSubMenus : [],
			subMenuZindex : 1,
			initialize : function(B) {
				this.setOptions(B);
				this.options.onInit_begin();
				if (this.options.opacity > 99) {
					this.options.opacity = 99.9
				}
				this.options.opacity = this.options.opacity / 100;
				Element.implement({
					getId : function() {
						if (!this.id) {
							var E = this.get("tag") + "-" + $time();
							while ($(E)) {
								E = this.get("tag") + "-" + $time()
							}
							this.id = E
						}
						return this.id
					}
				});
				this.options.direction.x = this.options.direction.x
						.toLowerCase();
				this.options.direction.y = this.options.direction.y
						.toLowerCase();
				if (this.options.direction.x === "right") {
					this.options.direction.xInverse = "left"
				} else {
					if (this.options.direction.x === "left") {
						this.options.direction.xInverse = "right"
					}
				}
				if (this.options.direction.y === "up") {
					this.options.direction.yInverse = "down"
				} else {
					if (this.options.direction.y === "down") {
						this.options.direction.yInverse = "up"
					}
				}
				var A = $(this.options.id).getElements("a");
				A
						.each(function(F, E) {
							F.store("parentLinks", F.getParent().getParents(
									"li").getFirst("a"));
							F.store("parentLinks",
									F.retrieve("parentLinks").erase(
											F.retrieve("parentLinks")
													.getFirst()));
							F.store("childMenu", F.getNext("ul")
									|| F.getNext("ol"));
							theSubMenuType = "subsequent";
							if ($(F.getParent("ul") || F.getParent("ol")).id === this.options.id) {
								theSubMenuType = "initial"
							}
							F.store("subMenuType", theSubMenuType);
							if (theSubMenuType === "initial"
									&& $(F.getNext("ul") || F.getNext("ol"))) {
								F.addClass("mainMenuParentBtn")
							} else {
								if ($(F.getNext("ul") || F.getNext("ol"))) {
									F.addClass("subMenuParentBtn")
								}
							}
						}.bind(this));
				var D = new Element("div", {
					id : this.options.subMenusContainerId
				}).inject($(document.body), "bottom");
				$(this.options.id).getElements("ul, ol").each(function(F, E) {
					new Element("div", {
						"class" : "smOW"
					}).inject(D).grab(F)
				}.bind(this));
				D.getElements("a").set("tabindex", "-1");
				A.each(function(G, E) {
					if (!G.retrieve("childMenu")) {
						return
					}
					G.store("childMenu", G.retrieve("childMenu").getParent(
							"div"));
					this.allSubMenus.include(G.retrieve("childMenu"));
					G.store("parentSubMenus", G.retrieve("parentLinks")
							.retrieve("childMenu"));
					var F = new MenuMaticSubMenu(this.options, this, G)
				}.bind(this));
				var C = $(this.options.id).getElements("a").filter(
						function(F, E) {
							return !F.retrieve("childMenu")
						});
				C
						.each(
								function(F, E) {
									F
											.addEvents({
												mouseenter : function(G) {
													this.hideAllSubMenusNow();
													if (this.options.mmbClassName
															&& this.options.mmbFocusedClassName) {
														$(F)
																.retrieve(
																		"btnMorph",
																		new Fx.Morph(
																				F,
																				{
																					duration : (this.options.duration / 2),
																					transition : this.options.physics,
																					link : "cancel"
																				}))
																.start(
																		this.options.mmbFocusedClassName)
													}
												}.bind(this),
												focus : function(G) {
													this.hideAllSubMenusNow();
													if (this.options.mmbClassName
															&& this.options.mmbFocusedClassName) {
														$(F)
																.retrieve(
																		"btnMorph",
																		new Fx.Morph(
																				F,
																				{
																					duration : (this.options.duration / 2),
																					transition : this.options.physics,
																					link : "cancel"
																				}))
																.start(
																		this.options.mmbFocusedClassName)
													}
												}.bind(this),
												mouseleave : function(G) {
													if (this.options.mmbClassName
															&& this.options.mmbFocusedClassName) {
														$(F)
																.retrieve(
																		"btnMorph",
																		new Fx.Morph(
																				F,
																				{
																					duration : (this.options.duration * 5),
																					transition : this.options.physics,
																					link : "cancel"
																				}))
																.start(
																		this.options.mmbClassName)
													}
												}.bind(this),
												blur : function(G) {
													if (this.options.mmbClassName
															&& this.options.mmbFocusedClassName) {
														$(F)
																.retrieve(
																		"btnMorph",
																		new Fx.Morph(
																				F,
																				{
																					duration : (this.options.duration * 5),
																					transition : this.options.physics,
																					link : "cancel"
																				}))
																.start(
																		this.options.mmbClassName)
													}
												}.bind(this),
												keydown : function(H) {
													var G = new Event(H);
													if (H.key === "up"
															|| H.key === "down"
															|| H.key === "left"
															|| H.key === "right") {
														H.stop()
													}
													if (H.key === "left"
															&& this.options.orientation === "horizontal"
															|| H.key === "up"
															&& this.options.orientation === "vertical") {
														if (F.getParent("li")
																.getPrevious(
																		"li")) {
															F
																	.getParent(
																			"li")
																	.getPrevious(
																			"li")
																	.getFirst(
																			"a")
																	.focus()
														} else {
															F
																	.getParent(
																			"li")
																	.getParent()
																	.getLast(
																			"li")
																	.getFirst(
																			"a")
																	.focus()
														}
													} else {
														if (H.key === "right"
																&& this.options.orientation === "horizontal"
																|| H.key === "down"
																&& this.options.orientation === "vertical") {
															if (F
																	.getParent(
																			"li")
																	.getNext(
																			"li")) {
																F
																		.getParent(
																				"li")
																		.getNext(
																				"li")
																		.getFirst(
																				"a")
																		.focus()
															} else {
																F
																		.getParent(
																				"li")
																		.getParent()
																		.getFirst(
																				"li")
																		.getFirst(
																				"a")
																		.focus()
															}
														}
													}
												}.bind(this)
											})
								}, this);
				this.stretch();
				this.killDivider();
				this.center();
				this.fixHasLayoutBug();
				this.options.onInit_complete()
			},
			fixHasLayoutBug : function() {
				if (Browser.Engine.trident && this.options.fixHasLayoutBug) {
					$(this.options.id).getParents().setStyle("zoom", 1);
					$(this.options.id).setStyle("zoom", 1);
					$(this.options.id).getChildren().setStyle("zoom", 1);
					$(this.options.subMenusContainerId).setStyle("zoom", 1);
					$(this.options.subMenusContainerId).getChildren().setStyle(
							"zoom", 1)
				}
			},
			center : function() {
				if (!this.options.center) {
					return
				}
				$(this.options.id).setStyles({
					left : "50%",
					"margin-left" : -($(this.options.id).getSize().x / 2)
				})
			},
			stretch : function() {
				if (this.options.stretchMainMenu
						&& this.options.orientation === "horizontal") {
					var C = parseFloat($(this.options.id).getCoordinates().width);
					var D = 0;
					var B = $(this.options.id).getElements("a");
					B.setStyles({
						"padding-left" : 0,
						"padding-right" : 0
					});
					B.each(function(F, E) {
						D += F.getSize().x
					}.bind(this));
					if (C < D) {
						return
					}
					var A = (C - D) / B.length;
					B.each(function(F, E) {
						F.setStyle("width", F.getSize().x + A)
					}.bind(this));
					B.getLast().setStyle("width", B.getLast().getSize().x - 1)
				}
			},
			killDivider : function() {
				if (this.options.killDivider
						&& this.options.killDivider.toLowerCase() === "first") {
					$($(this.options.id).getElements("li")[0]).setStyles({
						background : "none"
					})
				} else {
					if (this.options.killDivider
							&& this.options.killDivider.toLowerCase() === "last") {
						$($(this.options.id).getElements("li").getLast())
								.setStyles({
									background : "none"
								})
					}
				}
			},
			hideAllSubMenusNow : function() {
				this.options.onHideAllSubMenusNow_begin();
				$clear(this.hideAllMenusTimeout);
				$$(this.allSubMenus).fireEvent("hide");
				this.options.onHideAllSubMenusNow_complete()
			}
		});
var MenuMaticSubMenu = new Class(
		{
			Implements : Options,
			Extends : MenuMatic,
			options : {
				onSubMenuInit_begin : (function(A) {
				}),
				onSubMenuInit_complete : (function(A) {
				}),
				onMatchWidth_begin : (function(A) {
				}),
				onMatchWidth_complete : (function(A) {
				}),
				onHideSubMenu_begin : (function(A) {
				}),
				onHideSubMenu_complete : (function(A) {
				}),
				onHideOtherSubMenus_begin : (function(A) {
				}),
				onHideOtherSubMenus_complete : (function(A) {
				}),
				onHideAllSubMenus_begin : (function(A) {
				}),
				onHideAllSubMenus_complete : (function(A) {
				}),
				onPositionSubMenu_begin : (function(A) {
				}),
				onPositionSubMenu_complete : (function(A) {
				}),
				onShowSubMenu_begin : (function(A) {
				}),
				onShowSubMenu_complete : (function(A) {
				})
			},
			root : null,
			btn : null,
			hidden : true,
			myEffect : null,
			initialize : function(B, A, C) {
				this.setOptions(B);
				this.root = A;
				this.btn = C;
				this.childMenu = this.btn.retrieve("childMenu");
				this.subMenuType = this.btn.retrieve("subMenuType");
				this.childMenu = this.btn.retrieve("childMenu");
				this.parentSubMenus = $$(this.btn.retrieve("parentSubMenus"));
				this.parentLinks = $$(this.btn.retrieve("parentLinks"));
				this.parentSubMenu = $(this.parentSubMenus[0]);
				if (this.parentSubMenu) {
					this.parentSubMenu = this.parentSubMenu.retrieve("class")
				}
				this.childMenu.store("class", this);
				this.btn.store("class", this);
				this.childMenu.store("status", "closed");
				this.options.onSubMenuInit_begin(this);
				this.childMenu.addEvent("hide", function() {
					this.hideSubMenu()
				}.bind(this));
				this.childMenu.addEvent("show", function() {
					this.showSubMenu()
				}.bind(this));
				if (this.options.effect) {
					this.myEffect = new Fx.Morph($(this.childMenu).getFirst(),
							{
								duration : this.options.duration,
								transition : this.options.physics,
								link : "cancel"
							})
				}
				if (this.options.effect === "slide"
						|| this.options.effect === "slide & fade") {
					if (this.subMenuType == "initial"
							&& this.options.orientation === "horizontal") {
						this.childMenu.getFirst().setStyle("margin-top", "0")
					} else {
						this.childMenu.getFirst().setStyle("margin-left", "0")
					}
				} else {
					if (this.options.effect === "fade"
							|| this.options.effect === "slide & fade") {
						this.childMenu.getFirst().setStyle("opacity", 0)
					}
				}
				if (this.options.effect != "fade"
						&& this.options.effect != "slide & fade") {
					this.childMenu.getFirst().setStyle("opacity",
							this.options.opacity)
				}
				var D = $(this.childMenu).getElements("a").filter(
						function(F, E) {
							return !F.retrieve("childMenu")
						});
				D
						.each(
								function(F, E) {
									$(F).addClass("subMenuBtn");
									F
											.addEvents({
												mouseenter : function(G) {
													this.childMenu
															.fireEvent("show");
													this
															.cancellHideAllSubMenus();
													this.hideOtherSubMenus()
												}.bind(this),
												focus : function(G) {
													this.childMenu
															.fireEvent("show");
													this
															.cancellHideAllSubMenus();
													this.hideOtherSubMenus()
												}.bind(this),
												mouseleave : function(G) {
													this
															.cancellHideAllSubMenus();
													this.hideAllSubMenus()
												}.bind(this),
												blur : function(G) {
													this
															.cancellHideAllSubMenus();
													this.hideAllSubMenus()
												}.bind(this),
												keydown : function(H) {
													var G = new Event(H);
													if (H.key === "up"
															|| H.key === "down"
															|| H.key === "left"
															|| H.key === "right"
															|| H.key === "tab") {
														H.stop()
													}
													if (H.key === "up") {
														if (F.getParent("li")
																.getPrevious(
																		"li")) {
															F
																	.getParent(
																			"li")
																	.getPrevious(
																			"li")
																	.getFirst(
																			"a")
																	.focus()
														} else {
															if (this.options.direction.y === "down") {
																this.btn
																		.focus()
															} else {
																if (this.options.direction.y === "up") {
																	F
																			.getParent(
																					"li")
																			.getParent()
																			.getLast(
																					"li")
																			.getFirst(
																					"a")
																			.focus()
																}
															}
														}
													} else {
														if (H.key === "down") {
															if (F
																	.getParent(
																			"li")
																	.getNext(
																			"li")) {
																F
																		.getParent(
																				"li")
																		.getNext(
																				"li")
																		.getFirst(
																				"a")
																		.focus()
															} else {
																if (this.options.direction.y === "down") {
																	F
																			.getParent(
																					"li")
																			.getParent()
																			.getFirst(
																					"li")
																			.getFirst(
																					"a")
																			.focus()
																} else {
																	if (this.options.direction.y === "up") {
																		this.btn
																				.focus()
																	}
																}
															}
														} else {
															if (H.key === this.options.direction.xInverse) {
																this.btn
																		.focus()
															}
														}
													}
												}.bind(this)
											})
								}, this);
				$(this.btn).removeClass("subMenuBtn");
				if (this.subMenuType == "initial") {
					this.btn.addClass("mainParentBtn")
				} else {
					this.btn.addClass("subParentBtn")
				}
				$(this.btn)
						.addEvents(
								{
									mouseenter : function(E) {
										this.cancellHideAllSubMenus();
										this.hideOtherSubMenus();
										this.showSubMenu();
										if (this.subMenuType === "initial"
												&& this.options.mmbClassName
												&& this.options.mmbFocusedClassName) {
											$(this.btn)
													.retrieve(
															"btnMorph",
															new Fx.Morph(
																	$(this.btn),
																	{
																		duration : (this.options.duration / 2),
																		transition : this.options.physics,
																		link : "cancel"
																	}))
													.start(
															this.options.mmbFocusedClassName)
										}
									}.bind(this),
									focus : function(E) {
										this.cancellHideAllSubMenus();
										this.hideOtherSubMenus();
										this.showSubMenu();
										if (this.subMenuType === "initial"
												&& this.options.mmbClassName
												&& this.options.mmbFocusedClassName) {
											$(this.btn)
													.retrieve(
															"btnMorph",
															new Fx.Morph(
																	$(this.btn),
																	{
																		duration : (this.options.duration / 2),
																		transition : this.options.physics,
																		link : "cancel"
																	}))
													.start(
															this.options.mmbFocusedClassName)
										}
									}.bind(this),
									mouseleave : function(E) {
										this.cancellHideAllSubMenus();
										this.hideAllSubMenus()
									}.bind(this),
									blur : function(E) {
										this.cancellHideAllSubMenus();
										this.hideAllSubMenus()
									}.bind(this),
									keydown : function(E) {
										E = new Event(E);
										if (E.key === "up" || E.key === "down"
												|| E.key === "left"
												|| E.key === "right") {
											E.stop()
										}
										if (!this.parentSubMenu) {
											if (this.options.orientation === "horizontal"
													&& E.key === this.options.direction.y
													|| this.options.orientation === "vertical"
													&& E.key === this.options.direction.x) {
												if (this.options.direction.y === "down") {
													this.childMenu.getFirst()
															.getFirst("li")
															.getFirst("a")
															.focus()
												} else {
													if (this.options.direction.y === "up") {
														this.childMenu
																.getFirst()
																.getLast("li")
																.getFirst("a")
																.focus()
													}
												}
											} else {
												if (this.options.orientation === "horizontal"
														&& E.key === "left"
														|| this.options.orientation === "vertical"
														&& E.key === this.options.direction.yInverse) {
													if (this.btn.getParent()
															.getPrevious()) {
														this.btn.getParent()
																.getPrevious()
																.getFirst()
																.focus()
													} else {
														this.btn.getParent()
																.getParent()
																.getLast()
																.getFirst()
																.focus()
													}
												} else {
													if (this.options.orientation === "horizontal"
															&& E.key === "right"
															|| this.options.orientation === "vertical"
															&& E.key === this.options.direction.y) {
														if (this.btn
																.getParent()
																.getNext()) {
															this.btn
																	.getParent()
																	.getNext()
																	.getFirst()
																	.focus()
														} else {
															this.btn
																	.getParent()
																	.getParent()
																	.getFirst()
																	.getFirst()
																	.focus()
														}
													}
												}
											}
										} else {
											if (E.key === "tab") {
												E.stop()
											}
											if (E.key === "up") {
												if (this.btn.getParent("li")
														.getPrevious("li")) {
													this.btn.getParent("li")
															.getPrevious("li")
															.getFirst("a")
															.focus()
												} else {
													if (this.options.direction.y === "down") {
														this.parentSubMenu.btn
																.focus()
													} else {
														if (this.options.direction.y === "up") {
															this.btn
																	.getParent(
																			"li")
																	.getParent()
																	.getLast(
																			"li")
																	.getFirst(
																			"a")
																	.focus()
														}
													}
												}
											} else {
												if (E.key === "down") {
													if (this.btn
															.getParent("li")
															.getNext("li")) {
														this.btn
																.getParent("li")
																.getNext("li")
																.getFirst("a")
																.focus()
													} else {
														if (this.options.direction.y === "down") {
															this.btn
																	.getParent(
																			"li")
																	.getParent()
																	.getFirst(
																			"li")
																	.getFirst(
																			"a")
																	.focus()
														} else {
															if (this.options.direction.y === "up") {
																this.parentSubMenu.btn
																		.focus()
															}
														}
													}
												} else {
													if (E.key === this.options.direction.xInverse) {
														this.parentSubMenu.btn
																.focus()
													} else {
														if (E.key === this.options.direction.x) {
															if (this.options.direction.y === "down") {
																this.childMenu
																		.getFirst()
																		.getFirst(
																				"li")
																		.getFirst(
																				"a")
																		.focus()
															} else {
																if (this.options.direction.y === "up") {
																}
															}
														}
													}
												}
											}
										}
									}.bind(this)
								});
				this.options.onSubMenuInit_complete(this)
			},
			matchWidth : function() {
				if (this.widthMatched || !this.options.matchWidthMode
						|| this.subMenuType === "subsequent") {
					return
				}
				this.options.onMatchWidth_begin(this);
				var A = this.btn.getCoordinates().width;
				$(this.childMenu).getElements("a").each(
						function(E, D) {
							var C = parseFloat($(this.childMenu).getFirst()
									.getStyle("border-left-width"))
									+ parseFloat($(this.childMenu).getFirst()
											.getStyle("border-right-width"));
							var B = parseFloat(E.getStyle("padding-left"))
									+ parseFloat(E.getStyle("padding-right"));
							var F = C + B;
							if (A > E.getCoordinates().width) {
								E.setStyle("width", A - F);
								E.setStyle("margin-right", -C)
							}
						}.bind(this));
				this.width = this.childMenu.getFirst().getCoordinates().width;
				this.widthMatched = true;
				this.options.onMatchWidth_complete(this)
			},
			hideSubMenu : function() {
				if (this.childMenu.retrieve("status") === "closed") {
					return
				}
				this.options.onHideSubMenu_begin(this);
				if (this.subMenuType == "initial") {
					if (this.options.mmbClassName
							&& this.options.mmbFocusedClassName) {
						$(this.btn).retrieve("btnMorph",
								new Fx.Morph($(this.btn), {
									duration : (this.options.duration),
									transition : this.options.physics,
									link : "cancel"
								})).start(this.options.mmbClassName).chain(
								function() {
									$(this.btn).removeClass(
											"mainMenuParentBtnFocused");
									$(this.btn).addClass("mainMenuParentBtn")
								}.bind(this))
					} else {
						$(this.btn).removeClass("mainMenuParentBtnFocused");
						$(this.btn).addClass("mainMenuParentBtn")
					}
				} else {
					$(this.btn).removeClass("subMenuParentBtnFocused");
					$(this.btn).addClass("subMenuParentBtn")
				}
				this.childMenu.setStyle("z-index", 1);
				if (this.options.effect
						&& this.options.effect.toLowerCase() === "slide") {
					if (this.subMenuType == "initial"
							&& this.options.orientation === "horizontal"
							&& this.options.direction.y === "down") {
						this.myEffect.start({
							"margin-top" : -this.height
						}).chain(function() {
							this.childMenu.style.display = "none"
						}.bind(this))
					} else {
						if (this.subMenuType == "initial"
								&& this.options.orientation === "horizontal"
								&& this.options.direction.y === "up") {
							this.myEffect.start({
								"margin-top" : this.height
							}).chain(function() {
								this.childMenu.style.display = "none"
							}.bind(this))
						} else {
							if (this.options.direction.x === "right") {
								this.myEffect.start({
									"margin-left" : -this.width
								}).chain(function() {
									this.childMenu.style.display = "none"
								}.bind(this))
							} else {
								if (this.options.direction.x === "left") {
									this.myEffect.start({
										"margin-left" : this.width
									}).chain(function() {
										this.childMenu.style.display = "none"
									}.bind(this))
								}
							}
						}
					}
				} else {
					if (this.options.effect == "fade") {
						this.myEffect.start({
							opacity : 0
						}).chain(function() {
							this.childMenu.style.display = "none"
						}.bind(this))
					} else {
						if (this.options.effect == "slide & fade") {
							if (this.subMenuType == "initial"
									&& this.options.orientation === "horizontal"
									&& this.options.direction.y === "down") {
								this.myEffect.start({
									"margin-top" : -this.height,
									opacity : 0
								}).chain(function() {
									this.childMenu.style.display = "none"
								}.bind(this))
							} else {
								if (this.subMenuType == "initial"
										&& this.options.orientation === "horizontal"
										&& this.options.direction.y === "up") {
									this.myEffect.start({
										"margin-top" : this.height,
										opacity : 0
									}).chain(function() {
										this.childMenu.style.display = "none"
									}.bind(this))
								} else {
									if (this.options.direction.x === "right") {
										this.myEffect
												.start(
														{
															"margin-left" : -this.width,
															opacity : 0
														})
												.chain(
														function() {
															this.childMenu.style.display = "none"
														}.bind(this))
									} else {
										if (this.options.direction.x === "left") {
											this.myEffect
													.start(
															{
																"margin-left" : this.width,
																opacity : 0
															})
													.chain(
															function() {
																this.childMenu.style.display = "none"
															}.bind(this))
										}
									}
								}
							}
						} else {
							this.childMenu.style.display = "none"
						}
					}
				}
				this.childMenu.store("status", "closed");
				this.options.onHideSubMenu_complete(this)
			},
			hideOtherSubMenus : function() {
				this.options.onHideOtherSubMenus_begin(this);
				if (!this.btn.retrieve("otherSubMenus")) {
					this.btn.store("otherSubMenus", $$(this.root.allSubMenus
							.filter(function(A) {
								return !this.btn.retrieve("parentSubMenus")
										.contains(A)
										&& A != this.childMenu
							}.bind(this))))
				}
				this.parentSubMenus.fireEvent("show");
				this.btn.retrieve("otherSubMenus").fireEvent("hide");
				this.options.onHideOtherSubMenus_complete(this)
			},
			hideAllSubMenus : function() {
				this.options.onHideAllSubMenus_begin(this);
				$clear(this.root.hideAllMenusTimeout);
				this.root.hideAllMenusTimeout = (function() {
					$clear(this.hideAllMenusTimeout);
					$$(this.root.allSubMenus).fireEvent("hide")
				}).bind(this).delay(this.options.hideDelay);
				this.options.onHideAllSubMenus_complete(this)
			},
			cancellHideAllSubMenus : function() {
				$clear(this.root.hideAllMenusTimeout)
			},
			showSubMenu : function(A) {
				if (this.childMenu.retrieve("status") === "open") {
					return
				}
				this.options.onShowSubMenu_begin(this);
				if (this.subMenuType == "initial") {
					$(this.btn).removeClass("mainMenuParentBtn");
					$(this.btn).addClass("mainMenuParentBtnFocused")
				} else {
					$(this.btn).removeClass("subMenuParentBtn");
					$(this.btn).addClass("subMenuParentBtnFocused")
				}
				this.root.subMenuZindex++;
				this.childMenu.setStyles({
					display : "block",
					visibility : "hidden",
					"z-index" : this.root.subMenuZindex
				});
				if (!this.width || !this.height) {
					this.width = this.childMenu.getFirst().getCoordinates().width;
					this.height = this.childMenu.getFirst().getCoordinates().height;
					this.childMenu.setStyle("height", this.height, "border");
					if (this.options.effect === "slide"
							|| this.options.effect === "slide & fade") {
						if (this.subMenuType == "initial"
								&& this.options.orientation === "horizontal") {
							this.childMenu.getFirst().setStyle("margin-top",
									"0");
							if (this.options.direction.y === "down") {
								this.myEffect.set({
									"margin-top" : -this.height
								})
							} else {
								if (this.options.direction.y === "up") {
									this.myEffect.set({
										"margin-top" : this.height
									})
								}
							}
						} else {
							if (this.options.direction.x === "left") {
								this.myEffect.set({
									"margin-left" : this.width
								})
							} else {
								this.myEffect.set({
									"margin-left" : -this.width
								})
							}
						}
					}
				}
				this.matchWidth();
				this.positionSubMenu();
				if (this.options.effect === "slide") {
					this.childMenu.setStyles({
						display : "block",
						visibility : "visible"
					});
					if (this.subMenuType === "initial"
							&& this.options.orientation === "horizontal") {
						if (A) {
							this.myEffect.set({
								"margin-top" : 0
							}).chain(function() {
								this.showSubMenuComplete()
							}.bind(this))
						} else {
							this.myEffect.start({
								"margin-top" : 0
							}).chain(function() {
								this.showSubMenuComplete()
							}.bind(this))
						}
					} else {
						if (A) {
							this.myEffect.set({
								"margin-left" : 0
							}).chain(function() {
								this.showSubMenuComplete()
							}.bind(this))
						} else {
							this.myEffect.start({
								"margin-left" : 0
							}).chain(function() {
								this.showSubMenuComplete()
							}.bind(this))
						}
					}
				} else {
					if (this.options.effect === "fade") {
						if (A) {
							this.myEffect.set({
								opacity : this.options.opacity
							}).chain(function() {
								this.showSubMenuComplete()
							}.bind(this))
						} else {
							this.myEffect.start({
								opacity : this.options.opacity
							}).chain(function() {
								this.showSubMenuComplete()
							}.bind(this))
						}
					} else {
						if (this.options.effect == "slide & fade") {
							this.childMenu.setStyles({
								display : "block",
								visibility : "visible"
							});
							this.childMenu.getFirst().setStyles({
								left : 0
							});
							if (this.subMenuType === "initial"
									&& this.options.orientation === "horizontal") {
								if (A) {
									this.myEffect.set({
										"margin-top" : 0,
										opacity : this.options.opacity
									}).chain(function() {
										this.showSubMenuComplete()
									}.bind(this))
								} else {
									this.myEffect.start({
										"margin-top" : 0,
										opacity : this.options.opacity
									}).chain(function() {
										this.showSubMenuComplete()
									}.bind(this))
								}
							} else {
								if (A) {
									if (this.options.direction.x === "right") {
										this.myEffect.set({
											"margin-left" : 0,
											opacity : this.options.opacity
										}).chain(function() {
											this.showSubMenuComplete()
										}.bind(this))
									} else {
										if (this.options.direction.x === "left") {
											this.myEffect.set({
												"margin-left" : 0,
												opacity : this.options.opacity
											}).chain(function() {
												this.showSubMenuComplete()
											}.bind(this))
										}
									}
								} else {
									if (this.options.direction.x === "right") {
										this.myEffect.set({
											"margin-left" : -this.width,
											opacity : this.options.opacity
										});
										this.myEffect.start({
											"margin-left" : 0,
											opacity : this.options.opacity
										}).chain(function() {
											this.showSubMenuComplete()
										}.bind(this))
									} else {
										if (this.options.direction.x === "left") {
											this.myEffect.start({
												"margin-left" : 0,
												opacity : this.options.opacity
											}).chain(function() {
												this.showSubMenuComplete()
											}.bind(this))
										}
									}
								}
							}
						} else {
							this.childMenu.setStyles({
								display : "block",
								visibility : "visible"
							}).chain(function() {
								this.showSubMenuComplete(this)
							}.bind(this))
						}
					}
				}
				this.childMenu.store("status", "open")
			},
			showSubMenuComplete : function() {
				this.options.onShowSubMenu_complete(this)
			},
			positionSubMenu : function() {
				this.options.onPositionSubMenu_begin(this);
				this.childMenu.setStyle("width", this.width);
				this.childMenu.getFirst().setStyle("width", this.width);
				if (this.subMenuType === "subsequent") {
					if (this.parentSubMenu
							&& this.options.direction.x != this.parentSubMenu.options.direction.x) {
						if (this.parentSubMenu.options.direction.x === "left"
								&& this.options.effect
								&& this.options.effect.contains("slide")) {
							this.myEffect.set({
								"margin-left" : this.width
							})
						}
					}
					this.options.direction.x = this.parentSubMenu.options.direction.x;
					this.options.direction.xInverse = this.parentSubMenu.options.direction.xInverse;
					this.options.direction.y = this.parentSubMenu.options.direction.y;
					this.options.direction.yInverse = this.parentSubMenu.options.direction.yInverse
				}
				var C;
				var A;
				if (this.subMenuType == "initial") {
					if (this.options.direction.y === "up") {
						if (this.options.orientation === "vertical") {
							C = this.btn.getCoordinates().bottom - this.height
									+ this.options.tweakInitial.y
						} else {
							C = this.btn.getCoordinates().top - this.height
									+ this.options.tweakInitial.y
						}
						this.childMenu.style.top = C + "px"
					} else {
						if (this.options.orientation == "horizontal") {
							this.childMenu.style.top = this.btn
									.getCoordinates().bottom
									+ this.options.tweakInitial.y + "px"
						} else {
							if (this.options.orientation == "vertical") {
								C = this.btn.getPosition().y
										+ this.options.tweakInitial.y;
								if ((C + this.childMenu.getSize().y) >= $(
										document.body).getScrollSize().y) {
									A = (C + this.childMenu.getSize().y)
											- $(document.body).getScrollSize().y;
									C = C - A - 20
								}
								this.childMenu.style.top = C + "px"
							}
						}
					}
					if (this.options.orientation == "horizontal") {
						this.childMenu.style.left = this.btn.getPosition().x
								+ this.options.tweakInitial.x + "px"
					} else {
						if (this.options.direction.x == "left") {
							this.childMenu.style.left = this.btn.getPosition().x
									- this.childMenu.getCoordinates().width
									+ this.options.tweakInitial.x + "px"
						} else {
							if (this.options.direction.x == "right") {
								this.childMenu.style.left = this.btn
										.getCoordinates().right
										+ this.options.tweakInitial.x + "px"
							}
						}
					}
				} else {
					if (this.subMenuType == "subsequent") {
						if (this.options.direction.y === "down") {
							if ((this.btn.getCoordinates().top
									+ this.options.tweakSubsequent.y + this.childMenu
									.getSize().y) >= $(document.body)
									.getScrollSize().y) {
								A = (this.btn.getCoordinates().top
										+ this.options.tweakSubsequent.y + this.childMenu
										.getSize().y)
										- $(document.body).getScrollSize().y;
								this.childMenu.style.top = (this.btn
										.getCoordinates().top + this.options.tweakSubsequent.y)
										- A - 20 + "px"
							} else {
								this.childMenu.style.top = this.btn
										.getCoordinates().top
										+ this.options.tweakSubsequent.y + "px"
							}
						} else {
							if (this.options.direction.y === "up") {
								if ((this.btn.getCoordinates().bottom
										- this.height + this.options.tweakSubsequent.y) < 1) {
									this.options.direction.y = "down";
									this.options.direction.yInverse = "up";
									this.childMenu.style.top = this.btn
											.getCoordinates().top
											+ this.options.tweakSubsequent.y
											+ "px"
								} else {
									this.childMenu.style.top = this.btn
											.getCoordinates().bottom
											- this.height
											+ this.options.tweakSubsequent.y
											+ "px"
								}
							}
						}
						if (this.options.direction.x == "left") {
							this.childMenu.style.left = this.btn
									.getCoordinates().left
									- this.childMenu.getCoordinates().width
									+ this.options.tweakSubsequent.x + "px";
							if (this.childMenu.getPosition().x < 0) {
								this.options.direction.x = "right";
								this.options.direction.xInverse = "left";
								this.childMenu.style.left = this.btn
										.getPosition().x
										+ this.btn.getCoordinates().width
										+ this.options.tweakSubsequent.x + "px";
								if (this.options.effect === "slide"
										|| this.options.effect === "slide & fade") {
									this.myEffect.set({
										"margin-left" : -this.width,
										opacity : this.options.opacity
									})
								}
							}
						} else {
							if (this.options.direction.x == "right") {
								this.childMenu.style.left = this.btn
										.getCoordinates().right
										+ this.options.tweakSubsequent.x + "px";
								var D = this.childMenu.getCoordinates().right;
								var B = document.getCoordinates().width
										+ window.getScroll().x;
								if (D > B) {
									this.options.direction.x = "left";
									this.options.direction.xInverse = "right";
									this.childMenu.style.left = this.btn
											.getCoordinates().left
											- this.childMenu.getCoordinates().width
											+ this.options.tweakSubsequent.x
											+ "px";
									if (this.options.effect === "slide"
											|| this.options.effect === "slide & fade") {
										this.myEffect.set({
											"margin-left" : this.width,
											opacity : this.options.opacity
										})
									}
								}
							}
						}
					}
				}
				this.options.onPositionSubMenu_complete(this)
			}
		});
