function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

dojo.provide("noa.*");
dojo.provide("noa.SiteMap");
noa.SiteMap = {
    "#primaryNav" : [ {
	    controller : "noa.controller.navigation.GlowController"
    } ],
    "#globalSearch" : [ {
	    controller : "noa.controller.search.SearchController"
    } ]
};
dojo.provide("noa.behavior.search.DetectSupportCodeBehavior");
dojo.require("mojo.command.Behavior");
dojo
        .declare(
                "noa.behavior.search.DetectSupportCodeBehavior",
                mojo.command.Behavior,
                {
	                execute : function(F) {
		                var C = $(F.callerObj);
		                var A = $$("#textb_container input");
		                if (A.length > 0) {
			                var B = A[0].value
		                } else {
			                if (C) {
				                if (textInput = C
				                        .getElement("input[type=text]")) {
					                var B = textInput.value || null
				                }
			                }
		                }
		                if (/^\d{5,6}$/.test(B)) {
			                if (F.callerObj
			                        && (F.callerObj.declaredClass == "noa.controller.search.SearchMainController")) {
				                A[0].value = "";
				                return
			                }
			                if (F.eventObj) {
				                var E = (new Event(F.eventObj));
				                E.preventDefault();
				                E.stop()
			                }
			                try {
				                noa.controller.search.SearchMainController.haltSearch = true
			                } catch (D) {
			                }
			                window.location.href = "http://www.nintendo.com/consumer/lookUp.jsp?code="
			                        + B
		                }
	                }
                });
dojo.provide("noa.command.UpdateOverlabel");
dojo.require("mojo.command.Command");
dojo.declare("noa.command.UpdateOverlabel", mojo.command.Command, {
	execute : function(D) {
		var A = $(D.paramsObj.label) || D.callerObj;
		var C = $(mojo.queryFirst("#" + A.getProperty("for"))) || {
			value : ""
		};
		var B = D.paramsObj.focusField || false;
		if ((C.value !== "") || B) {
			A.setStyle("display", "none");
			C.setStyle("visibility", "visible")
		} else {
			A.setStyle("display", "block");
			C.setStyle("visibility", "hidden")
		}
		if (B) {
			C.focus()
		}
	}
});
dojo.provide("noa.command.animation.MorphStylesBehavior");
dojo.require("mojo.command.Command");
dojo
        .declare(
                "noa.command.animation.MorphStylesBehavior",
                mojo.command.Command,
                {
	                execute : function(C) {
		                var B = $type(C.paramsObj.elements) == "array" ? C.paramsObj.elements
		                        : [ C.paramsObj.elements ];
		                var A = B.map(function(D) {
			                return new Fx.Styles(D, C.paramsObj.options)
		                });
		                A.forEach(function(D) {
			                D.start(C.paramsObj.styles)
		                });
		                return A
	                }
                });
dojo.provide("noa.command.animation.QueueBehavior");
dojo.require("mojo.command.Command");
dojo.require("mojo.Model");
dojo.declare("noa.command.animation.QueueBehavior", mojo.command.Command, {
    _runningfx : false,
    execute : function(E) {
	    var E = E || this._requestObj;
	    var C = E.paramsObj.queue || "animationQueue";
	    if (!this._runningfx && mojo.Model.contains(C)) {
		    var D = this;
		    if (mojo.Model.get(C).length > 0) {
			    this._runningfx = true;
			    var A = mojo.Model.get(C).shift();
			    var B = dojo.connect(A(), "stop", function() {
				    D._runningfx = false;
				    D.execute();
				    dojo.disconnect(B)
			    })
		    } else {
			    this._runningfx = false
		    }
	    }
    }
});
dojo.provide("noa.command.glow.AnimateGlowBehavior");
dojo.require("mojo.command.Command");
dojo.declare("noa.command.glow.AnimateGlowBehavior", mojo.command.Command, {
	execute : function(A) {
		var N = 17;
		var F = 28;
		try {
			var E = new Event(A.getEvent())
		} catch (J) {
			var E = {
			    target : A.getEvent().target,
			    type : null
			}
		}
		var K = $(A.callerObj) || E.target;
		var L = A.paramsObj.transition;
		var B = A.contextObj.glowElement;
		if (mojo.Model.get("/glow").active_item == K
		        && (E.type == "mouseover" || E.type == "mouseout")) {
			return
		}
		if (mojo.Model.contains("/glow/animationQueue/currentAnimation")
		        && L == "in") {
			mojo.Model.get("/glow/animationQueue/currentAnimation").stop()
		}
		var I = function(S, Q) {
			if (S == "in") {
				var R = Q.getCoordinates();
				B.setStyles( {
				    top : R.top + R.height
				            - $(A.contextObj).getCoordinates().top,
				    width : R.width + (N * 2),
				    left : R.left - N - $(A.contextObj).getCoordinates().left
				});
				B.getElement("div.left").setStyle("width",
				        R.width + (N * 2) - 49);
				B.getElement("div.right").setStyle("margin-left",
				        R.width + (N * 2) - 49)
			}
			var O = new Fx.Style(B, "height", {
			    duration : (S == "in" ? 280 : 100),
			    transition : (S == "in" ? Fx.Transitions.Back.easeOut
			            : Fx.Transitions.linear)
			});
			var P = O.start(S == "in" ? F : 0);
			mojo.Model.set("/glow/animationQueue/currentAnimation", P);
			return P
		};
		if (!mojo.Model.contains("/glow/animationQueue")) {
			mojo.Model.set("/glow/animationQueue", [])
		}
		var G = mojo.Model.get("/glow/animationQueue");
		var M = new Array();
		for ( var D = 0, H = G.length; D < H; D++) {
			if (G[D].transition == "out") {
				M.push(G[D]);
				break
			}
		}
		if (B.getSize().size.y > 0) {
			var C = I.pass( [ "out" ]);
			C.transition = "out";
			M.push(C)
		}
		var C = I.pass( [ L, K ]);
		C.transition = L;
		M.push(C);
		if (A.paramsObj.transition == "out"
		        && mojo.Model.get("/glow").active_item) {
			var C = I.pass( [ "in", mojo.Model.get("/glow").active_item ]);
			C.transition = "in";
			M.push(C)
		}
		mojo.Model.set("/glow/animationQueue", M)
	}
});
dojo.provide("noa.command.glow.InitializeGlowBehavior");
dojo.require("mojo.command.Command");
dojo.declare("noa.command.glow.InitializeGlowBehavior", mojo.command.Command, {
	execute : function(G) {
		var E = G.paramsObj.navElement;
		var D = new Element("div", {
			"class" : "left"
		});
		var C = new Element("div", {
			"class" : "right"
		});
		var B = new Element("div", {
			"class" : "glow"
		});
		D.injectInside(B);
		C.injectAfter(D);
		B.injectAfter(E);
		G.contextObj.glowElement = B;
		var F = $(E).getElements("li.major a");
		var A = F.filter(function(H) {
			if (H.getStyle("text-decoration") == "underline") {
				return H
			}
		});
		A = A.length > 0 ? A[0] : null;
		mojo.Model.set("/glow", {
		    glowElement : B,
		    active_item : A
		});
		if (A) {
			mojo.Messaging.publish("/glow/turn/on", {
				target : A
			})
		}
	}
});
dojo.provide("noa.controller.navigation.GlowController");
dojo.require("mojo.controller.Controller");
dojo.declare("noa.controller.navigation.GlowController",
        mojo.controller.Controller, {
            addObservers : function() {
	            this.addObserver(this, "onInit", "InitializeGlow", function() {
		            return {
			            navElement : mojo.queryFirst("#primaryNav")
		            }
	            });
	            this.addObserver(mojo.Messaging.getTopic("/glow/turn/on"),
	                    "onPublish", "AnimateGlow", {
		                    transition : "in"
	                    });
	            this.addObserver(mojo.Messaging.getTopic("/glow/turn/off"),
	                    "onPublish", "AnimateGlow", {
		                    transition : "out"
	                    });
	            this.addObserver(this.getCommand("AnimateGlow"), "execute",
	                    "AnimationQueue", {
		                    queue : "/glow/animationQueue"
	                    });
	            this.addObserver("li.major a", "onmouseover", "AnimateGlow", {
		            transition : "in"
	            });
	            this.addObserver("li.major a", "onmouseout", "AnimateGlow", {
		            transition : "out"
	            })
            },
            addCommands : function() {
	            this.addCommand("MorphStyles",
	                    "noa.command.animation.MorphStylesBehavior");
	            this.addCommand("InitializeGlow",
	                    "noa.command.glow.InitializeGlowBehavior");
	            this.addCommand("AnimateGlow",
	                    "noa.command.glow.AnimateGlowBehavior");
	            this.addCommand("AnimationQueue",
	                    "noa.command.animation.QueueBehavior")
            },
            addIntercepts : function() {
            }
        });
dojo.provide("noa.command.search.GlobalSearchMetricsCommand");
dojo.require("mojo.command.Command");
dojo.declare("noa.command.search.GlobalSearchMetricsCommand",
		mojo.command.Command , {
	execute: function(requestObj) {
		s.events="event6";
		s.prop5 = requestObj.searchKeyword;
		s.eVar5 = requestObj.searchKeyword;
		void(s.t());
	}
});
dojo.provide("noa.controller.search.SearchController");
dojo.require("mojo.controller.Controller");
dojo.declare("noa.controller.search.SearchController",
        mojo.controller.Controller, {
            addObservers : function() {
	            this.addObserver(this, "onInit", "UpdateOverlabel", function() {
		            return {
			            label : mojo.queryFirst(".overlabel")
		            }
	            });
	            this.addObserver("#globalSearchKeyword", "onfocus",
	                    "UpdateOverlabel", function() {
		                    return {
		                        label : mojo.queryFirst(".overlabel"),
		                        focusField : true
		                    }
	                    });
	            this.addObserver("#globalSearchKeyword", "onblur",
	                    "UpdateOverlabel", function() {
		                    return {
			                    label : mojo.queryFirst(".overlabel")
		                    }
	                    });
	            this.addObserver(this.getContextElement(), "onsubmit",
	            		"Metrics", function() {
	            			return {
	            				searchKeyword: $('globalSearchKeyword').value
	            			}
	            		});
                    this.addObserver(this.getContextElement(), "onsubmit",
                            "DetectSupportCode");
	            this.addObserver(".overlabel", "onclick", "UpdateOverlabel", {
		            focusField : true
	            })
            },
            addCommands : function() {
	            this.addCommand("UpdateOverlabel",
	                    "noa.command.UpdateOverlabel");
	            this.addCommand("DetectSupportCode",
	                    "noa.behavior.search.DetectSupportCodeBehavior");
	            this.addCommand("Metrics",
	            		"noa.command.search.GlobalSearchMetricsCommand")
            },
            addIntercepts : function() {
            }
        })

