/*
	Author: A.Chang

*/


dojo.provide("dsi.behavior.CenterObjectBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.CenterObjectBehavior", mojo.command.Behavior,
{
	execute: function(requestObj) {

		/* assign parameters */
		var params = requestObj.getParams();
		if (!params) params = {};

		var _container = (params.element) ? params.element : null;
		var _minWidth = (params.minWidth) ? params.minWidth : 1004;
		var _minHeight = (params.minHeight) ? params.minHeight : 620;
		var _width = (params.width) ? params.width : null;
		var _height = (params.height) ? params.height : null;

		var _offset = (params.offset) ? params.offset : 0;

		if (_container != null) {
			if(typeof(_container)=="string") _container = mojo.queryFirst(_container);
		}

		if ((_container!=null)&&(typeof(_container)=="object")) {
			_width =  (typeof(_width) != "undefined") ? _width : eval(dojo.coords(_obj).w);
			_height = (typeof(_height) != "undefined") ? _height : eval(dojo.coords(_obj).h);

			if (typeof window.innerWidth != 'undefined') {
				windowWidth = window.innerWidth;
				windowHeight = window.innerHeight;
			} else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) { // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
				windowWidth = document.documentElement.clientWidth,
				windowHeight = document.documentElement.clientHeight;
			} else {
				windowWidth = document.body.clientWidth;
				windowHeight = document.body.clientHeight;
			}

			if (windowHeight < 600) windowHeight = 600;
			if (windowWidth < 1000) windowWidth = 1000;

			var targetTop  = Math.round(Math.abs(windowHeight)/2) - Math.round(Math.abs(_height)/2);
			var targetLeft = Math.round(Math.abs(windowWidth)/2) - Math.round(Math.abs(_width)/2);

			targetLeft = (dojo.isSafari) ? targetLeft - 18 : targetLeft;
			targetTop = targetTop + window.getScrollTop();

			_container.style.top  = targetTop + "px";
			_container.style.left = targetLeft + "px";

		}


	}

});
dojo.provide("dsi.behavior.DisplayDSiFeaturesBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.DisplayDSiFeaturesBehavior", mojo.command.Behavior,
{
	execute: function(requestObj) {
		/* assign variables */
		var imgObj, imgUrl;

		/* assign parameters */
		var params = requestObj.getParams();
		if (!params) params = {};

		var _id = (params.elementId) ? params.elementId : null;

		if ((_id!=null)&&(typeof(_id)=="string")) {

			var imgContainer = mojo.queryFirst("#dsi-image");
			if (imgContainer==null) imgContainer = mojo.queryFirst("#dslite-image");
			imgContainer.innerHTML = "";

			// display info
			var infoList = mojo.query("#canvas dl");
			for (var i=0; i<infoList.length; i++) {
				var elementId = infoList[i].id.replace("info-","");
				if (elementId==_id) {
					dojo.addClass(infoList[i].parentNode, "selected");
					imgUrl = mojo.queryFirst("dd.href","info-"+elementId);
				} else {
					dojo.removeClass(infoList[i].parentNode, "selected");
				}
			}
			imgContainer.className = "bg-" + _id;

			imgUrl = imgUrl.childNodes[0].href;
			var imgObj = document.createElement('img');
				imgObj.setAttribute("id","img-feature");

			if (dojo.isIE) {
				if (dojo.isIE < 9) imgObj.setAttribute("src","/img/blank.gif")
			} else {
				imgObj.setAttribute("src",imgUrl);
			}
			imgContainer.appendChild(imgObj);

			if (dojo.isIE) if (dojo.isIE < 9) imgContainer.childNodes[0].style.filter  = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod="crop", src="' + imgUrl + '")';
		}
	}
});
dojo.provide("dsi.behavior.DisplayDSiLensBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.DisplayDSiLensBehavior", mojo.command.Behavior,
{
	execute: function(requestObj) {
		/* assign variables */
		var idName  = "lens-link";
		var imgName = "img-lens";
		var divIdName = "dsi-screen";
		var objId;

		/* assign parameters */
		var params = requestObj.getParams();
		if (!params) params = {};

		var _container = (params.container) ? params.container : null;
		var _id   = (params.id) ? params.id : null;
		var _path = (params.path) ? params.path : null;

		if (_container != null) {
			if(typeof(_container)=="string") _container = mojo.queryFirst(_container);
		}

		if ((_container!=null)&&(typeof(_container)=="object")) {
			_container.innerHTML = "";
			objId = _id.substring(idName.length, _id.length);
			for (var i=0; i<2; i++) {
				var newImg = document.createElement('img');
					newImg.src = _path;
				var newDiv = document.createElement('div');
					newDiv.setAttribute('id',divIdName+i);
					newDiv.appendChild(newImg);
				_container.appendChild(newDiv);
			}
		}

	}

});
dojo.provide("dsi.behavior.FadeBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.FadeBehavior", mojo.command.Behavior,
{
	onComplete:function() {},
	onStart:function() {},
	_effect: null,
	execute: function(requestObj) {
		// element
		// opacity, duration

		// set properties of animation
		var props = {};
		var params = requestObj.getParams();
		if (!params) params = {};

		var opacity = (params.opacity) ? params.opacity : null;
		var duration = (params.duration) ? params.duration : 300;

		props.opacity = requestObj.getParams().opacity;


		// normalize elements into array
		var elements = requestObj.getParams().element;
		if (!dojo.isArray(elements)) elements = [elements];
		var elementLength = elements.length;

		var thisObj = this;
		for (var i = 0; i < elementLength; i++) {
			if (elements[i]) {

				var fx = new Fx.Styles(elements[i], {
					duration: duration,
					transition: Fx.Transitions.Expo.easeInOut,
					onStart: function() {
						this.element.alt="1";
						thisObj.onStart();
					},
					onComplete: function() {
						this.element.alt="0";
						thisObj.onComplete();
					}
				});
				this._effect = fx;
				fx.start(props);
			}
		}
	}
});
dojo.provide("dsi.behavior.FullpageContainerBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.FullpageContainerBehavior", mojo.command.Behavior,
{
	execute: function(requestObj) {

		/* assign parameters */
		var params = requestObj.getParams();
		if (!params) params = {};

		var isIE='\v'=='v';
		var _container = (params.containerId) ? params.containerId : null;
		var _minWidth = (params.minWidth!=null) ? params.minWidth : 1004;
		var _minHeight = (params.minHeight!=null) ? params.minHeight : 620;
		var _maxWidth = (params.maxWidth!=null) ? params.maxWidth : null;
		var _maxHeight = (params.maxHeight!=null) ? params.maxHeight : null;

		var _offset = (params.offset) ? params.offset : 0;
		var navHeight = 166;

		if (_container != null) {
			if(typeof(_container)=="string") _container = mojo.queryFirst(_container);
		}


		if ((_container!=null)&&(typeof(_container)=="object")) {
			if (typeof window.innerWidth != 'undefined') {
				browserHeight = window.innerHeight;
			} else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) { // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
				browserHeight = document.documentElement.clientHeight;
			} else {
				browserHeight = document.body.clientHeight;
			}

			var targetHeight = browserHeight - navHeight;

			if (_minHeight!=null) if (_minHeight > targetHeight) targetHeight = _minHeight;
			if (_maxHeight!=null) if (_maxHeight < targetHeight) targetHeight = _maxHeight;


			if (isIE) {
				if (document.body.scrollTop==0) _container.style.height = targetHeight + "px";
			} else {
				if (window.pageYOffset==0) _container.style.height = targetHeight + "px";
			}

			var browserWidth = (isIE) ? document.body.offsetWidth : window.innerWidth;
			if (window.innerWidth != document.body.offsetWidth) { // scrollbar true/false
				browserWidth = browserWidth-20;
			}

			if (_maxWidth!=null) {
				if (_maxWidth==0) {
					_container.style.width = "100%";
				} else if (_maxWidth < browserWidth) {
					_container.style.width = _maxWidth + "px";
				}
			} else {
				_container.style.width = browserWidth + "px";
			}

			var footer = mojo.queryFirst("#ft");
			footer.style.top = (browserHeight - _offset) + "px";
		}


	}

});dojo.provide("dsi.behavior.PlayVideoOverlayBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.PlayVideoOverlayBehavior", mojo.command.Command,
{
	execute: function(requestObj) {

		/* assign variables */
		var dataObj, elmObj, hdrObj;

		/* assign parameters */
		var params = requestObj.getParams();
		if (!params) params = {};

		var _elm = (params.element) ? params.element : null;
		var _hdr = (params.elmHeader) ? params.elmHeader : null;
		var _data = (params.elmData) ? params.elmData : null;
		var _title = (params.videoTitle) ? params.videoTitle : "";
		var _href = (params.videoHref) ? params.videoHref : null;
		var _local = (params.noLocalization) ? params.noLocalization : "";
		var _notice = (params.elmNotice) ? params.elmNotice : null;


		if ((_href != null)&&(_data != null)&&(_title != null)&&(_elm != null)) {
			if (typeof(_elm)=="string") if (_elm.substring(0,1)!="#") _elm = "#" + _elm;
			if (typeof(_data)=="string") if (_data.substring(0,1)!="#") _data = "#" + _data;
			if (typeof(_hdr)=="string") if (_hdr.substring(0,1)!="#") _hdr = "#" + _hdr;
			if (typeof(_notice)=="string") if (_notice.substring(0,1)!="#") _notice = "#" + _notice;

			dataObj = mojo.queryFirst(_data);
			elmObj = mojo.queryFirst(_elm);
			hdrObj = mojo.queryFirst(_hdr);
			noticeObj = mojo.queryFirst(_notice);

			var newLink = document.createElement('a');
				newLink.setAttribute("href", _href);
				newLink.setAttribute("title", _local);
			dataObj.innerHTML = "";
			dataObj.appendChild(newLink);
			dataObj.title=_title;

			if (noticeObj!=null) {
				var newNotice = document.createElement('span');
					newNotice.innerHTML = _local;
				noticeObj.innerHTML = "";
				noticeObj.appendChild(newNotice);
			}

			if (hdrObj!=null) {
				var newHeader = document.createElement('span');
					newHeader.innerHTML = _title;
				hdrObj.innerHTML = "";
				hdrObj.appendChild(newHeader);
			}

			this.onComplete();
		}

	},
	onComplete: function() {
	},
	onError: function() {
	}
});dojo.provide("dsi.behavior.ResizeObjectBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.ResizeObjectBehavior", mojo.command.Behavior,
{
	execute: function(requestObj) {

		/* assign parameters */
		var params = requestObj.getParams();
		if (!params) params = {};

		var _container = (params.container) ? params.container : null;
		var _element = (params.element) ? params.element : null;


		if (_container != null) if(typeof(_container)=="string") _container = mojo.queryFirst(_container);
		if (_element != null) if(typeof(_element)=="string") _element = mojo.queryFirst(_element);


		if ((_container!=null)&&(typeof(_container)=="object")&&(_element!=null)&&(typeof(_element)=="object")) {
			var isScrollbar = false;
			var _width = eval(dojo.coords(_container).w);
			var _height = eval(dojo.coords(_container).h);

			if (typeof window.innerWidth != 'undefined') {
				windowHeight = window.innerHeight;
			} else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) { // IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
				windowHeight = document.documentElement.clientHeight;
			} else {
				windowHeight = document.body.clientHeight;
			}

/*
			if (windowHeight < _height) {
				console.log ("YES SCROLL!");
			}
*/
			_element.style.width = "100%";
			_element.style.height = _height+"px";

		}
	}
});
dojo.provide("dsi.behavior.ScrollCheckBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.ScrollCheckBehavior", mojo.command.Command,
{
	_effect: null,
	execute: function(requestObj) {

		/* assign variables */
		var linkObj;

		/* assign parameters */
		var params = requestObj.getParams();
		if (!params) params = {};

		var _elm   = (params.element) ? params.element : null;
		var _container = (params.container) ? params.container : null;
		var _offset = (params.offset) ? params.offset : 0;
		var _duration = (params.duration) ? params.duration : 300;
		var _targetId = (params.targetId) ? params.targetId : null;

		if ((_elm != null)&&(_container != null)) {
			var containerHeight = dojo.coords(_container).h;
			var _elmPos = dojo.coords(_elm);

			var windowDimensions = {};
			var scrollPosition;
			var scrollY;
			// the more standards compliant browsers (mozilla/netscape/opera/IE7) use window.innerWidth and window.innerHeight
			if (typeof window.innerWidth != 'undefined') {
				windowDimensions.w = window.innerWidth;
				windowDimensions.h = window.innerHeight;
				_elmPos.t = _elm.getTop(); // dojo.coords() doesn't acknowledge t.
				if (navigator.userAgent.indexOf("opera") == -1){
					scrollPosition = window.pageYOffset + window.innerHeight;
					scrollY = window.pageYOffset;
				} else {
					scrollPosition = window.scrollY + window.innerHeight;
					scrollY = window.scrollY;
				}
			}
			// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
			else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) {
				windowDimensions.w = document.documentElement.clientWidth,
				windowDimensions.h = document.documentElement.clientHeight;
				scrollPosition = (dojo.coords(mojo.queryFirst("body"), true)).h  + document.documentElement.clientHeight;
				scrollY = document.documentElement.scrollTop;
			}else {
				windowDimensions.w = document.body.clientWidth;
				windowDimensions.h = document.body.clientHeight;
				scrollPosition = (dojo.coords(mojo.queryFirst("body"), true)).h + document.body.clientHeight;
				scrollY = document.body.scrollTop;
			}
			var pageBody = mojo.queryFirst("body");
			var thisObj = this;
			var fx = new Fx.ScrollWindow(pageBody, {
				duration: _duration,
				transition: Fx.Transitions.Expo.easeInOut,
				onStart: function() {
					//console.log("THIS HAS STARTED YES!");
					thisObj.onStart();
				},
				onComplete: function() {
					//console.log("THIS HAS COMPLETED YES!");
					thisObj.onComplete();
				}
			});
			this._effect = fx;

			if (_targetId!=null) {
				fx.toElement(_targetId);
			} else {
				if (scrollY > _elmPos.t) {
					fx.scrollTo(0,_elmPos.t + _offset);
				} else if ((windowDimensions.h >= _elmPos.h) && (_elmPos.t+_elmPos.h>windowDimensions.h+scrollY)) {
					fx.scrollTo(0,(scrollY + _elmPos.y) - (windowDimensions.h - _elmPos.h));
				} else {
	//				this.onComplete();
				}
			}

		}
	},

	onComplete:function() {
//		console.log("scrollcheck complete");
	},

	onStart:function() {
//		console.log("scrollcheck start");
	}

});
dojo.provide("dsi.behavior.SetExternalLinksBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.SetExternalLinksBehavior", mojo.command.Command,
{
	execute: function(requestObj) {

		/* assign variables */
		var linkObj;

		/* assign parameters */
		var params = requestObj.getParams();
		if (!params) params = {};

		var _class = (params.elmClass) ? params.elmClass : null;

		if (_class != null) {
			if(typeof(_class)=="string") {
				if (_class.substring(0,1)!=".") _class = "." + _class;
				linkObj = mojo.query(_class);
			}
		}

		if (linkObj != null) {
			for (var i = 0; i<linkObj.length; i++) linkObj[i].target = "_blank";
		}
	},
	onResponse: function() {
	
	},
	onError: function() {
	
	}
});dojo.provide("dsi.behavior.SwfObjectBehavior");
dojo.require("mojo.command.Behavior");
dojo.declare("dsi.behavior.SwfObjectBehavior", mojo.command.Behavior, 
{
	execute: function(requestObj) {
		
		var params = requestObj.getParams();
		var so = new SWFObject(params.src, params.contentName, params.width, params.height, params.version, params.defaultBackground);	
		so.addParam("base", params.basePath);
		so.addParam("wmode", "transparent")

		for (var key in params.flashvars) {
			so.addVariable(key, params.flashvars[key]);
		}

		so.write(params.element);
		mojo.queryFirst("#" + params.containerName).style.visibility = "visible";
	}
});dojo.provide("dsi.behavior.TweenBehavior");
dojo.require("mojo.command.Behavior");

dojo.declare("dsi.behavior.TweenBehavior", mojo.command.Behavior,
{
	onComplete:function() {},
	onStart:function() {},
	_effect: null,
	execute: function(requestObj) {
		// element
		// width, height, x, y

		// set properties of animation
		var props = {};
		var duration;
		if (requestObj.getParams().width != null) props.width = requestObj.getParams().width;
		if (requestObj.getParams().height != null) props.height = requestObj.getParams().height;
		if (dojo.isIE && props.height == 0) props.height = 1;
		if (requestObj.getParams().x != null) props.left = requestObj.getParams().x;
		if (requestObj.getParams().y != null) props.top = requestObj.getParams().y;

		if (requestObj.getParams().duration != null) {
			duration =  requestObj.getParams().duration;
		} else {
			duration = 600;
		}

		// normalize elements into array
		var elements = requestObj.getParams().element;
		if (!dojo.isArray(elements)) elements = [elements];
		var elementLength = elements.length;

		var thisObj = this;
		for (var i = 0; i < elementLength; i++) {
			if (elements[i]) {
				if (elements[i].style.height == "auto" && props.height != null) {
					elements[i].style.height = dojo.coords(elements[i]).h + "px";
				}

				var fx = new Fx.Styles(elements[i], {
					duration: duration,
					transition: Fx.Transitions.Expo.easeInOut,
					onStart: function() {
						thisObj.onStart();
						if (dojo.isIE && this.from.height == "1") this.element.style.display = "block";
					},
					onComplete: function() {
						if (this.to.height == "1") this.element.style.display = "none";
						if ((this.from.height == "0")||(this.from.height == "1")) this.element.style.height = "auto";
						if (this.element.style.height == "auto" && this.to.height > 0 && dojo.coords(this.element).h == 0) this.element.style.height = this.to.height + "px";
						thisObj.onComplete();
					}
				});
				this._effect = fx;
				fx.start(props);
			}
		}
	}
});dojo.provide("dsi.command.GetLinkDataCommand");
dojo.require("mojo.command.Command");
//dojo.require("dsi.service.Locator");
dojo.require("mojo.Model");

dojo.declare("dsi.command.GetLinkDataCommand", mojo.command.Command, {
	execute: function(requestObj) {
		dsi.service.Locator.getInstance().getService("getLinkData").invoke(requestObj.getParams(), this);
	},
	onResponse: function(data) {
		mojo.Model.set("purchaseData", data.retailLinks);
	},
	onError: function(error) {
		mojo.Model.set("purchaseError", error);
	}
});
dojo.provide("dsi.command.UpdateControllerParamCommand");
dojo.require("mojo.command.Command");

dojo.declare("dsi..command.UpdateControllerParamCommand", mojo.command.Command, {
	execute: function(requestObj) {
		var __elm;
		var __control;
		var __parameter;
		var __value;

		var params = requestObj.getParams();
		if (params) {
			if (params.element != null) __elm = params.element;
			if (params.control != null) __control = params.control;
			if (params.params != null) __parameter = params.params;
			if (params.value != null) __value = params.value;
		}

		try {
			if ((__control!=null)&&(__parameter!=null)&&(__value!=null)) {
				if (__elm) {
					__elm.mojoControllers[__control].setValue(__parameter, __value);
				} else {
					requestObj.getController().getContextController(__control).setValue(__parameter, __value);
				}
			}
		} catch(err) {}

		
	},

	onResponse: function() {
	},

	onError: function() {
	}
});dojo.provide("dsi.controller.FooterController");
dojo.require("mojo.controller.Controller");
dojo.require("mojo.History");

dojo.declare("dsi.controller.FooterController", mojo.controller.Controller,
{
	addObservers: function() {


		this.addObserver("#dsi-callouts li", "mouseover", "UpdateCssClass", function(context, caller) { return {
			element:  caller.childNodes[0],
			action:   "add",
			cssClass: "selected"
		}});

		this.addObserver("#dsi-callouts li", "mouseout", "UpdateCssClass", function(context, caller) { return {
			element:  caller.childNodes[0],
			action:   "remove",
			cssClass: "selected"
		}});


		// REPOSITION OVERLAY
		this.addObserver(mojo.Messaging.getTopic("repositionOverlay"), "onPublish", "ResizeObject", function() {
			if (mojo.query("#container-home").length>0) {
				return {
					container: mojo.queryFirst("#container-home"),
					element:   mojo.queryFirst("#dsi-overlay")
				}
			} else {
				return {
					container: mojo.queryFirst("#page"),
					element:   mojo.queryFirst("#dsi-overlay")
				}
			}
		});
		this.addObserver(mojo.Messaging.getTopic("repositionOverlay"), "onPublish", "CenterObject", function() { return {
			element:   mojo.queryFirst("#purchase-the-dsi"),
			width:     "692",
			height:    "475",
			minWidth:  "1000",
			minHeight: "600"
		}});
		this.addObserver(mojo.Messaging.getTopic("repositionOverlay"), "onPublish", "CenterObject", function() {
			var iframeBlocker = mojo.queryFirst("#dsi-iframe");
			if (iframeBlocker.parentNode.className!="video-show") {
				return {
					element:   mojo.queryFirst("#dsi-iframe"),
					width:     "672",
					height:    "449",
					minWidth:  "1000",
					minHeight: "600"
				}
			}
		});




		// DISPLAY VIDEO
		this.addObserver(mojo.Messaging.getTopic("PlayVideoOverlay"), "onPublish", "InsertHtml", function() { return {
				element: mojo.queryFirst("#video-container"),
				action:   "replace",
				insertHtml: mojo.queryFirst("#noflash-notice").innerHTML
		}});
		this.addObserver(mojo.Messaging.getTopic("PlayVideoOverlay"), "onPublish", "CenterObject", function() { return {
			element:   mojo.queryFirst("#video-overlay"),
			width:     "774",
			height:    "600",
			minWidth:  "1000",
			minHeight: "600"
		}});
		this.addObserver(mojo.Messaging.getTopic("PlayVideoOverlay"), "onPublish", "UpdateCssClass", function() {
			return {
				element: mojo.queryFirst("#dsi-overlay"),
				action:   "remove",
				cssClass: "purchase-hide"
			};
		});

		this.addObserver(mojo.Messaging.getTopic("PlayVideoOverlay"), "onPublish", "ResizeVideoOverlay", function() {
			return {
				container: mojo.queryFirst("#page"),
				element:   mojo.queryFirst("#dsi-overlay")
			}
		});
		this.addObserver(mojo.Messaging.getTopic("PlayVideoOverlay"), "onPublish", "CenterVideoOverlay", function() {
			return {
				element:   mojo.queryFirst("#dsi-iframe"),
				width:     "672",
				height:    "396",
				minWidth:  "1000",
				minHeight: "600"
			}
		});
		this.addObserver(this.getCommand("ResizeVideoOverlay"), "execute", "UpdateCssClass", function() {
			return {
				element: mojo.queryFirst("#dsi-overlay"),
				action:   "add",
				cssClass: "video-show"
			};
		});
		this.addObserver(this.getCommand("CenterVideoOverlay"), "execute", "ShowVideoOverlay", function() {
			return {
				element: mojo.queryFirst("#video-overlay"),
				action:   "remove",
				cssClass: "hide"
			};
		});
		this.addObserver(this.getCommand("ShowVideoOverlay"), "execute", "LoadVideo", function() {
			var selectedObj = mojo.queryFirst("#video-data");
			var anchorTags = selectedObj.getElementsByTagName("a");
			if (anchorTags.length>0) {
					if (anchorTags[0].href!="") {
						var vWidth, vHeight, videoId;
						var videoUrl = anchorTags[0].href;
						var displayType = "WIDE";
						var videoTitle = selectedObj.title;
						var noticeObj = mojo.queryFirst("#video-notice");
						noticeObj.innerHTML = anchorTags[0].title;
						vWidth = 680;
						vHeight = 420;
						videoId = "videoOverlay";
						return {
							elementId: "video-container",
							contentName: "main_flash",
							containerId: "#video-container",
							src: "/flash/videoPlayer/videoPlayer.swf",
							width: vWidth,
							height: vHeight,
							version: "7",
							defaultBackground: "black",
							expressInstallSrc: "/flash/expressinstall.swf",
							wmode: "transparent",
							flashvars: "videoId=" + videoId + "&videoURL=" + videoUrl + "&displayType=" + displayType + "&p_videoName=" + videoTitle
						};
					}
			}
		});

		this.addObserver(mojo.queryFirst("#video-close"), "onclick", "UpdateCssClass", function(context,caller) {
			var videoContainer = mojo.queryFirst("#video-container");
			videoContainer.innerHTML = "";
			return {
				element: mojo.queryFirst("#dsi-overlay"),
				action:   "remove",
				cssClass: "video-show"
			};
		});
		this.addObserver(mojo.queryFirst("#video-close"), "onclick", "UpdateCssClass", function(context,caller) {
			return {
				element: mojo.queryFirst("#dsi-overlay"),
				action:   "add",
				cssClass: "purchase-hide"
			};
		});
		this.addObserver(mojo.queryFirst("#video-close"), "onclick", "UpdateCssClass", function(context,caller) {
			var videoContainer = mojo.queryFirst("#video-container");
			videoContainer.innerHTML = "";
			return {
				element: caller.parentNode.parentNode,
				action:   "add",
				cssClass: "hide"
			};
		});

	},


	addCommands: function() {
		this.addCommand("ResizeObject",			"dsi.behavior.ResizeObjectBehavior");
		this.addCommand("ResizeVideoOverlay",	"dsi.behavior.ResizeObjectBehavior");
		this.addCommand("CenterObject",			"dsi.behavior.CenterObjectBehavior");
		this.addCommand("CenterVideoOverlay",	"dsi.behavior.CenterObjectBehavior");
		this.addCommand("ShowVideoOverlay",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("Messaging",			"stdlib.behavior.MessagingBehavior");
		this.addCommand("InsertHtml",			"stdlib.behavior.InsertHtmlBehavior");
		this.addCommand("LoadVideo",			"stdlib.behavior.SwfObjectBehavior");
	},

	addIntercepts: function() {
	}
});

dojo.provide("dsi.controller.GlobalController");
dojo.require("mojo.controller.Controller");
dojo.require("mojo.History");

dojo.declare("dsi.controller.GlobalController", mojo.controller.Controller,
{
	addObservers: function() {


		// set external links to have a "_blank" target
		this.addObserver(this, "onInit",		"SetExternalLinks", function () { return { elmClass: "external" }});
		this.addObserver(window, "resize",		"Messaging", { topic: "repositionOverlay" });
		this.addObserver(window, "onscroll",	"Messaging", { topic: "repositionOverlay" });

		// subnavigation
		this.addObserver("ul.subnavigation a", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver("ul.subnavigation a", "onmouseout", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode,
				action:   "remove",
				cssClass: "hover"
			};
		});




	},


	addCommands: function() {
		this.addCommand("SetExternalLinks",		"dsi.behavior.SetExternalLinksBehavior");
		this.addCommand("Messaging",			"stdlib.behavior.MessagingBehavior");
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
	},

	addIntercepts: function() {
	}
});



dojo.provide("dsi.controller.PillButtonController");
dojo.require("mojo.controller.Controller");
dojo.require("mojo.History");

dojo.declare("dsi.controller.PillButtonController", mojo.controller.Controller,
{
	addObservers: function() {
		this.addObserver(".btn-pill", "onmouseover", "UpdateCssClass", function(context, caller) {
			if($(caller).hasClass("pill-hover")) return;
      		return {
		    	element: caller,
		    	action:   "add",
		    	cssClass: "pill-hover"
			};
		});
		this.addObserver(".btn-pill", "onmouseout", "UpdateCssClass", function(context, caller) {
			if(!$(caller).hasClass("pill-hover")) return;
      		return {
		    	element: caller,
		    	action:   "remove",
		    	cssClass: "pill-hover"
			};
		});
	},

	addCommands: function() {
		this.addCommand("UpdateCssClass",	"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("PngFix", "stdlib.behavior.IEPngFixBehavior");
	},

	addIntercepts: function() {
	}
});dojo.provide("dsi.controller.PurchaseController");
dojo.require("mojo.controller.Controller");
dojo.require("mojo.History");

dojo.declare("dsi.controller.PurchaseController", mojo.controller.Controller,
{
	addObservers: function() {

		// reset state and close
		this.addObserver(".btn-purchase-close", "onclick", "Messaging", { topic: "hidePurchaseLayer" });

		// navigation
		this.addObserver(".dsNav strong", "onclick", "UpdateCssClass", function(context, caller) {
			var navClassName = caller.className;
			var navItems = mojo.query("ul.dsNav li strong");
			var contentObj = mojo.query("#lightboxBottom ul");
			for (var i = 0; i < navItems.length; i++) dojo.removeClass(navItems[i], "onState");
			for (var i = 0; i < contentObj.length; i++) {
				if (navClassName.indexOf(contentObj[i].className) > -1) {
					contentObj[i].style.display="block";
				} else {
					contentObj[i].style.display="none";
				}
			}
			mojo.queryFirst(".introCopy").style.display="none";
			return {
				element:  caller,
				action:   "add",
				cssClass: "onState"
			};
		});

	},

	addCommands: function() {
		this.addCommand("UpdateCssClass",	"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("Messaging",		"stdlib.behavior.MessagingBehavior");
	},

	addIntercepts: function() {
	}
});dojo.provide("dsi.controller.SwatchController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.SwatchController", mojo.controller.Controller,
{
	params: {
		containerId: {
			required: true,
			type: String
		},
		imageId: {
			required: true,
			type: String
		}
	},
	addObservers: function() {


		// swap image
		this.addObserver(this, "onInit", "UpdateCssClass", function(context, caller) {
			var elementObj = mojo.queryFirst(this.getController().getValue("imageId") + " img", context);
			var thumbObj = mojo.queryFirst("li.selected img", context);
			var imgSrc = thumbObj.parentNode.getElementsByTagName("span")[0].title;
			imgSrc = imgSrc.replace("-swatch-", "-image-");
			imgSrc = imgSrc.replace(".png", ".jpg");
			elementObj.src = imgSrc;
		});

		this.addObserver("li", "onmouseout", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.query("li",context),
				action:   "remove",
				cssClass: "hover"
			};
		});
		this.addObserver("li", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver("li", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.query("li",context),
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver("li", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver("li", "onclick", "InsertHtml", function(context, caller) {
			var element = caller.getElementsByTagName("img");
			return {
				element:  mojo.queryFirst("h4 span", context),
				action:   "replace",
				insertHtml: element[0].alt
			};
		});

		this.addObserver("li", "onclick",	"ScrollCheck", function(context, caller) {
			return {
				element: context.parentNode,
				container: context.parentNode
			}
		});

		// swap image
		this.addObserver("li img", "onclick", "UpdateCssClass", function(context, caller) {
			var elementObj = mojo.queryFirst(this.getController().getValue("imageId") + " img", context);
			var imgSrc = caller.parentNode.getElementsByTagName("span")[0].title;
			imgSrc = imgSrc.replace("-swatch-", "-image-");
			imgSrc = imgSrc.replace(".png", ".jpg");
			elementObj.src = imgSrc;
		});

	},
	addCommands: function() {
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("InsertHtml",				"stdlib.behavior.InsertHtmlBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
	},
	addIntercepts: function() { 
	}
});
dojo.provide("dsi.controller.games.GamesController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.games.GamesController", mojo.controller.Controller,
{
	params: {
		selectedId: {
			required: false,
			defaultValue: "",
			type: String
		},
		transition: {
			required: false,
			defaultValue: false,
			type: Boolean
		},
		defaultFrameId: {
			required: false,
			defaultValue: "",
			type: String
		}
	},
	addObservers: function() {

		this.addObserver(this, "onInit", "PngFix", function(context, caller) {
			return {
				selector: "div.game-list"
			}
		});


		this.addObserver(this, "onInit", "UpdateControllerParam", function(context, caller) {
			var obj = mojo.query("#game-feature-container > .game-wrapper > div.feature-page");
			var objId = null;
			for (var i=0; i<obj.length; i++) {
				if (obj[i].className.indexOf("first")>-1) objId = obj[i].id;
			}
			objId = (objId==null) ? null : objId.replace("game-feat-","");
			this.getController().setValue("defaultFrameId", objId);

			var hashData = mojo.History.getInstance().getHash();
			var hashData = hashData.split("&");
			var hashId = null
			for (var i=0; i<hashData.length; i++) {
				if (hashData[i].indexOf("feature=")>-1) hashId = hashData[i].replace("feature=","");
			}

			if (hashId==null) hashId = objId;
			this.getController().setValue("selectedId", hashId);
		});


		// playing video
		this.addObserver("dd.playVid a", "onclick", "PlayVideoOverlay", function(context,caller) {
			var noLocal = caller.getElementsByTagName("strong");
			return {
				element: "video-overlay",
				elmData: "video-data",
				elmHeader: "video-header",
				elmNotice: "video-notice",
				videoTitle: caller.title,
				videoHref: caller.href,
				noLocalization: noLocal[0].title
			}
		});
		this.addObserver("dd.videoThumb a", "onclick", "PlayVideoOverlay", function(context,caller) {
			var noLocal = caller.getElementsByTagName("strong");
			return {
				element: "video-overlay",
				elmData: "video-data",
				elmHeader: "video-header",
				elmNotice: "video-notice",
				videoTitle: caller.title,
				videoHref: caller.href,
				noLocalization: noLocal[0].title
			}
		});
		this.addObserver(this.getCommand("PlayVideoOverlay"), "onComplete", "Messaging", function(context,caller) {
			return { topic: "PlayVideoOverlay" };
		});


		this.addObserver(mojo.queryFirst("ul","game-feature-nav"), "onmouseover", "UpdateCssClass", function(context, caller) { return {
			element:  caller,
			action:   "add",
			cssClass: "selected"
		}});
		this.addObserver(mojo.queryFirst("ul","game-feature-nav"), "onmouseleave", "UpdateCssClass", function(context, caller) { return {
			element:  caller,
			action:   "remove",
			cssClass: "selected"
		}});
		this.addObserver(".feature-list a", "onmouseover", "UpdateCssClass", function(context, caller) { return {
			element:  caller,
			action:   "add",
			cssClass: "hover"
		}});
		this.addObserver(".feature-list a", "onmouseout", "UpdateCssClass", function(context, caller) { return {
			element:  caller,
			action:   "remove",
			cssClass: "hover"
		}});
		this.addObserver(".feature-list a", "onclick", "UpdateCssClass", function(context, caller) {
			var obj = mojo.query("#game-feature-nav li > a > span");
			return {
				element:  obj,
				action:   "remove",
				cssClass: "selected"
			}
		});
		this.addObserver(".feature-list a", "onclick", "UpdateCssClass", function(context, caller) {
			var obj = caller.getElementsByTagName("span");
			return {
				element:  obj[0],
				action:   "add",
				cssClass: "selected"
			}
		});




		this.addObserver(mojo.History.getInstance(), "onChange", "ScrollCheck", function(context, caller) {
			var obj =  mojo.queryFirst("#games-feature");
			return {
				element: obj,
				container: obj
			}
		});
		this.addObserver(mojo.History.getInstance(), "onChange", "UpdateCssClass", function(context, caller) {
			var featureObj = mojo.query("#game-feature-container > .game-wrapper > .feature-page");
			return {
				element: featureObj,
				action: "remove",
				cssClass: "selected"
			}
		});
		this.addObserver(mojo.History.getInstance(), "onChange", "UpdateControllerParam", function(context, caller) {
			var transition = this.getController().getValue("transition");
			if (!transition) {
				var obj = mojo.query("#game-feature-container > .game-wrapper > div.feature-page");
				var objId = null;
				for (var i=0; i<obj.length; i++) {
					if (obj[i].className.indexOf("first")>-1) objId = obj[i].id;
				}
				objId = (objId==null) ? null : objId.replace("game-feat-","");
	
				var hashData = mojo.History.getInstance().getHash();
				var hashData = hashData.split("&");
				var hashId = null
				for (var i=0; i<hashData.length; i++) {
					if (hashData[i].indexOf("feature=")>-1) hashId = hashData[i].replace("feature=","");
				}
	
				if (hashId==null) hashId = objId;
				this.getController().setValue("selectedId", hashId);
			}
		});

		this.addObserver(this.getConfig("params").selectedId, "onChange", "Tween", function(context, caller) {
			var transition = this.getController().getValue("transition");
			if (!transition) {
				this.getController().setValue("transition", true);
				var featureObj = mojo.queryFirst("#game-feat-" + caller.getValue());
				return {
					x: featureObj.offsetLeft * -1,
					y: 0,
					element: mojo.queryFirst(".game-wrapper", context),
					duration: 1000
				}
			}
		});




		this.addObserver(this.getCommand("Tween"), "onComplete", "UpdateControllerParam", function(context, caller) {
			this.getController().setValue("transition", false);
			var hashData = mojo.History.getInstance().getHash();
			var hashData = hashData.split("&");
			var hashValue = "";
			for (var i=0; i<hashData.length; i++) {
				if (hashData[i].indexOf("feature=")>-1) hashValue = hashData[i].replace("feature=","");
			}
			var selectedId = this.getController().getValue("selectedId");
			var defaultFrameId = this.getController().getValue("defaultFrameId");
			if (hashValue=="") {
				this.getController().setValue("selectedId", defaultFrameId);
			} else if (selectedId != hashValue) {
				this.getController().setValue("selectedId", hashValue);
			}
		});
		this.addObserver(this.getCommand("Tween"), "onComplete", "UpdateCssClass", function(context, caller) {
			var obj = mojo.query("#game-feature-nav ul > li.feature-list > a > span");
			return {
				element:  obj,
				action:   "remove",
				cssClass: "selected"
			}
		});
		this.addObserver(this.getCommand("Tween"), "onComplete", "UpdateCssClass", function(context, caller) {
			var selectedId = this.getController().getValue("selectedId");
			var obj = mojo.query("#game-feature-nav ul > li.feature-list > a");
			for (var i=0; i<obj.length; i++) {
				var objHref = obj[i].href;
					objHref = objHref.substring(objHref.indexOf("#"));
					objHref = objHref.replace("#feature=","");
				if (selectedId == objHref) {
					var spanObj = obj[i].getElementsByTagName("span");
					return {
						element:  spanObj[0],
						action:   "add",
						cssClass: "selected"
					}
				}
			}
		});


		// promo hover states
		this.addObserver("#game-promos-module dd.hit a", "onmouseover",			"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver("#game-promos-module dd.hit a", "onmouseout",			"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "remove",
				cssClass: "hover"
			};
		});


		// Omniture
		// games page - featured games list
		this.addObserver("div.game-list li.game-list a", "onclick", "TrackLink", function(context, caller) {
			var titleName = caller.getElementsByTagName("span");
			titleName = titleName[0].innerHTML;
			return {
				transactionType: "customLink",
				properties: {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: "Featured game link:" + titleName,
					event17: "Link to external game",
					events: "event17"
				}
			}
		});
		// games page - boxart
		this.addObserver("#game-feature-container dd.boxart a.external", "onclick", "TrackLink", function(context, caller) {
			var titleName = caller.parentNode.parentNode;
				titleName = titleName.getElementsByTagName("dt");
				titleName = titleName[0].innerHTML;
			return {
				transactionType: "customLink",
				properties: {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: "Boxart game link:" + titleName,
					event17: "Link to external game",
					events: "event17"
				}
			}
		});
		// games page - boxart
		this.addObserver("#game-feature-container dd.buy a.external", "onclick", "TrackLink", function(context, caller) {
			return {
				transactionType: "customLink",
				properties: {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: "Boxart game link:" + caller.innerHTML,
					event17: "Link to external game",
					events: "event17"
				}
			}
		});
		// games page - learn more
		this.addObserver("#game-feature-container dl.feature-morevids dd.link a.external", "onclick", "TrackLink", function(context, caller) {
			var titleName = caller.getElementsByTagName("span");
				titleName = titleName[0].innerHTML;
			return {
				transactionType: "customLink",
				properties: {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: titleName,
					event17: "Link to external game",
					events: "event17"
				}
			}
		});
		// games page - view all
		this.addObserver("#game-feature-container dl.feature-morevids dt a.external", "onclick", "TrackLink", function(context, caller) {
			return {
				transactionType: "customLink",
				properties: {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: "Learn more link:" + caller.innerHTML,
					event17: "Link to external game",
					events: "event17"
				}
			}
		});
		// games page - promo clubn
		this.addObserver("#game-promo-clubn a", "onclick", "TrackLink", function(context, caller) {
			return {
				transactionType: "customLink",
				properties: {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar11: "Club Nintendo promo button",
					event16: "Club Nintendo promo button",
					events: "event16"
				}
			}
		});



	},
	addCommands: function() {
		this.addCommand("PngFix",					"stdlib.behavior.IEPngFixBehavior");
		this.addCommand("UpdateCssClass",			"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("UpdateControllerParam",	"stdlib.command.UpdateControllerParamCommand");
		this.addCommand("Tween",					"dsi.behavior.TweenBehavior");
		this.addCommand("PlayVideoOverlay",			"dsi.behavior.PlayVideoOverlayBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
		this.addCommand("Messaging",				"stdlib.behavior.MessagingBehavior");
		this.addCommand("TrackLink",			"stdlib.command.metrics.omniture.TransactionCommand");
	},
	addIntercepts: function() { }
});
dojo.provide("dsi.controller.home.FilmstripController");
dojo.require("mojo.controller.Controller");

dojo.declare("dsi.controller.home.FilmstripController", mojo.controller.Controller,
{
	addObservers: function() {
		var pages = function(context) {
			return mojo.query("> .filmstrip-viewer > .filmstrip-content > .filmstrip-page", context);
		};

		// slideshow thumbnails
		this.addObserver(".slideshow-nav li a", "mouseover", "UpdateClass", function(context, caller) { return {
			element:  caller,
			action:   "add",
			cssClass: "hover"
		}});
		this.addObserver(".slideshow-nav li a", "mouseout", "UpdateClass", function(context, caller) { return {
			element:  caller,
			action:   "remove",
			cssClass: "hover"
		}});
		this.addObserver(".slideshow-nav li a", "click", "UpdateClass", function(context, caller) { return {
			element:  caller,
			action:   "add",
			cssClass: "selected"
		}});



		// observer should detect parameter changes from the HistoryFilmstripController
		// cannot do that now so this is an alternative
		this.addObserver(mojo.History.getInstance(), "onChange", "UpdateClass", function(context, caller) {
			var elements = mojo.query("> .filmstrip-nav > li a", context);
			return {
				element:  elements,
				action:   "remove",
				cssClass: "selected"
		}});
		this.addObserver(mojo.History.getInstance(), "onChange", "UpdateClass", function(context, caller) {
			var elements = mojo.query("> .filmstrip-nav > li a", context);
			var element = context
			var selectedIndex = element.mojoControllers["dsi.controller.global.HistoryFilmstripController"].getValue("selectedIndex");
			return {
				element:  elements[selectedIndex],
				action:   "add",
				cssClass: "selected"
		}});









	},

	addCommands: function() {
//		this.addCommand("Messaging",					"stdlib.behavior.MessagingBehavior");
//		this.addCommand("IESelectBox",				"myfi.command.IESelectBoxCommand");
		this.addCommand("UpdateClass",				"stdlib.behavior.UpdateCssClassBehavior");

	},
	
	addIntercepts: function() {
	}
});dojo.provide("dsi.controller.home.HomePageController");
dojo.require("mojo.controller.Controller");

dojo.declare("dsi.controller.home.HomePageController", mojo.controller.Controller,
{
	params: {
		transition: {
			required: false,
			defaultValue: false,
			type: Boolean
		}
	},
	addObservers: function() {

		this.addObserver(this, "onInit", "UpdateCssClass", function() { // temporary JS redirect for Nintendo DSI users
			var browserAgent = navigator.userAgent;
			if (browserAgent.indexOf("Opera/9.5")>-1) {
				if ((browserAgent.indexOf("Nintendo DS")>-1)||(browserAgent.indexOf("Nintendo DSi")>-1)) location.href = "http:/" + "/www.nintendodsi.com/dsi/en/";
			}
		});


		this.addObserver(this, "onInit",		"SetExternalLinks", { elmClass: "external" });
		this.addObserver(this, "onInit",		"Messaging", { topic: "repositionOverlay" });
		this.addObserver(window, "resize",		"Messaging", { topic: "repositionOverlay" });
		this.addObserver(window, "onscroll",	"Messaging", { topic: "repositionOverlay" });




		// check scrollbar for slideshow
		this.addObserver(".slideshow-page", "onclick",	"ScrollCheck", function(context, caller) {
			var transition = this.getController().getValue("transition");
			//if (!transition) {
				this.getController().setValue("transition", true);
				return {
					element: mojo.queryFirst("#home-feature-slideshow", context),
					container: mojo.queryFirst("#container-home"),
					offset: 0
				}
			//}
		});


		// playing videos
		this.addObserver(".show-video", "onclick", "UpdateControllerParam", function(context, caller) {
			return {
				element: mojo.queryFirst("#home-feature-slideshow"),
				control: "dsi.controller.home.SlideshowController",
				params: "autoPlay",
				value: false
			};
		});

		this.addObserver(".show-video", "onclick", "PlayVideoOverlay", function(context,caller) {
			var noLocal = caller.getElementsByTagName("strong");
			return {
				element: "video-overlay",
				elmData: "video-data",
				elmHeader: "video-header",
				elmNotice: "video-notice",
				videoTitle: caller.title,
				videoHref: caller.href,
				noLocalization: noLocal[0].title
			}
		});
		this.addObserver(this.getCommand("PlayVideoOverlay"), "onComplete", "Messaging", function(context,caller) {
			return { topic: "PlayVideoOverlay" };
		});




		// closing the overlay
		this.addObserver(mojo.queryFirst("#video-close"), "onclick", "UpdateControllerParam", function(context, caller) {
			var autoplayContainer = mojo.queryFirst("#home-feature-slideshow");
			var timers = autoplayContainer.mojoControllers["dsi.controller.home.SlideshowController"].getValue("autoSlider");
			autoplayContainer.mojoControllers["dsi.controller.home.SlideshowController"].setValue("autoSlider", timers+1);
			setTimeout (function() {
				mojo.Messaging.publish("autoSlider");
			}, autoplayContainer.mojoControllers["dsi.controller.home.SlideshowController"].getValue("delay"));
			return {
				element: mojo.queryFirst("#home-feature-slideshow"),
				control: "dsi.controller.home.SlideshowController",
				params: "autoPlay",
				value: true
			};
		});




		// Latest content component
		this.addObserver(".latest-content .click a", "mouseover",	"UpdateCssClass", function(context, caller) { return {
			element:  caller.parentNode.parentNode,
			action:   "add",
			cssClass: "hover"
		}});
		this.addObserver(".latest-content .click a", "mouseout",	"UpdateCssClass", function(context, caller) { return {
			element:  caller.parentNode.parentNode,
			action:   "remove",
			cssClass: "hover"
		}});




		// hardware promos
		this.addObserver(".hardware-promo a", "mouseover",		"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "add",
				cssClass: "hover"
			}
		});
		this.addObserver(".hardware-promo a", "mouseout",		"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "remove",
				cssClass: "hover"
			}
		});




		// promos
		this.addObserver("#section-modules a", "mouseover",		"UpdateCssClass", function(context, caller) { return {
			element:  caller,
			action:   "add",
			cssClass: "hover"
		}});
		this.addObserver("#section-modules a", "mouseout",		"UpdateCssClass", function(context, caller) { return {
			element:  caller,
			action:   "remove",
			cssClass: "hover"
		}});




		this.addObserver(this.getCommand("ScrollCheck"), "onComplete",	"UpdateCssClass", function(context, caller) {
			this.getController().setValue("transition", false);
		});




	},

	addCommands: function() {
		this.addCommand("SetExternalLinks",			"dsi.behavior.SetExternalLinksBehavior");
		this.addCommand("UpdateCssClass",			"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("UpdateControllerParam",	"stdlib.command.UpdateControllerParamCommand");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
		this.addCommand("PlayVideoOverlay",			"dsi.behavior.PlayVideoOverlayBehavior");
		this.addCommand("Messaging",				"stdlib.behavior.MessagingBehavior");
	},

	addIntercepts: function() {
	}
});



dojo.provide("dsi.controller.home.SlideshowController");
dojo.require("mojo.controller.Controller");

dojo.declare("dsi.controller.home.SlideshowController", mojo.controller.Controller, 
{
	params: {
		previousIndex: {
			required: false,
			defaultValue: 1,
			type: Number
		},
		selectedIndex: {
			required: false,
			defaultValue: 0,
			type: Number
		},
		hashId: {
			required: false,
			defaultValue: "slideshow",
			type: String
		},
		paginate: {
			required: false,
			defaultValue: false,
			type: Boolean
		},
		loop: {
			required: false,
			defaultValue: false,
			type: Boolean
		},
		cycle: {
			required: false,
			defaultValue: false,
			type: Boolean
		},
		transition: {
			required: false,
			defaultValue: false,
			type: Boolean
		},
		duration: {
			required: false,
			defaultValue: 500,
			type: Number
		},
		slideOffset: {
			required: false,
			defaultValue: 0,
			type: Number
		},
		slideCheck: {
			required: false,
			defaultValue: false,
			type: Boolean
		},
		slideStart: {
			required: false,
			defaultValue: 0,
			type: Number
		},
		autoSlider: {
			required: false,
			defaultValue: 0,
			type: Number
		},
		delay: {
			required: false,
			defaultValue: 6500,
			type: Number
		},
		autoPlay: {
			required: false,
			defaultValue: true,
			type: Boolean
		}
	},
	addObservers: function() {
		var pages = function(context) {
			return mojo.query("> .slideshow-viewer > .slideshow-content > .slideshow-page", context);
		};

		var timer;


		// slideshow thumbnails
		this.addObserver(".slideshow-nav li a", "mouseover", "UpdateClass", function(context, caller) { return {
			element:  caller,
			action:   "add",
			cssClass: "hover"
		}});
		this.addObserver(".slideshow-nav li a", "mouseout", "UpdateClass", function(context, caller) { return {
			element:  caller,
			action:   "remove",
			cssClass: "hover"
		}});
		this.addObserver(".slideshow-nav li a", "onclick", "UpdateControllerParam", function(context, caller) {
			this.getController().setValue("slideCheck", true);
		});




		// pagination buttons
		this.addObserver("> .slideshow-next", "onclick", "UpdateClass", function(context, caller) {
			this.getController().setValue("paginate", true);
		});
		this.addObserver("> .slideshow-prev", "onclick", "UpdateClass", function(context, caller) {
			this.getController().setValue("paginate", true);
		});




		// on param change
		this.addObserver(this.getConfig("params").selectedIndex, "onChange",	"ScrollCheck", function(context, caller) {
			var slideCheck = this.getController().getValue("slideCheck");
			var slideOffset = this.getController().getValue("slideOffset");
			if (slideCheck) {
				this.getController().setValue("slideCheck", false);
				return {
					element: context,
					container: mojo.queryFirst("#container-home"),
					offset: slideOffset
				}
			}
		});
		this.addObserver(this.getConfig("params").selectedIndex, "onChange", "UpdateClass", function(context, caller) {
			var paginate = (!this.getController().getValue("loop")) ? "add" : "remove";
			return {
			element: mojo.query("> .slideshow-next", context),
			action: (caller.getValue() >= pages(context).length-1) ? paginate : "remove",
			cssClass: "disabled"
		}});
		this.addObserver(this.getConfig("params").selectedIndex, "onChange", "UpdateClass", function(context, caller) {
			var paginate = (!this.getController().getValue("loop")) ? "add" : "remove";
			return {
				element: mojo.query("> .slideshow-prev", context),
				action: (caller.getValue() <= 0) ? paginate : "remove",
				cssClass: "disabled"
			}
		});
		this.addObserver(this.getConfig("params").selectedIndex, "onChange", "UpdateClass", function(context, caller) {
			var elements = mojo.query("> .slideshow-nav li a", context);
			return {
				element:  elements,
				action:   "remove",
				cssClass: "selected"
		}});
		this.addObserver(this.getConfig("params").selectedIndex, "onChange", "UpdateClass", function(context, caller) {
			var elements = mojo.query("> .slideshow-nav li a", context);
			return {
				element:  elements[this.getController().getValue("selectedIndex")],
				action:   "add",
				cssClass: "selected"
		}});

		this.addObserver(this.getConfig("params").selectedIndex, "onChange", "UpdateClass", function(context, caller) { 
			var cycle = this.getController().getValue("cycle");
			if (cycle) {
				var page;
				var allPages = pages(context);
				var nameSpacing = this.getController().getValue("hashId");
				var selectedIndex = this.getController().getValue("selectedIndex");
				var prevObj = mojo.queryFirst("> .slideshow-prev", context);
				var nextObj = mojo.queryFirst("> .slideshow-next", context);
				if (prevObj!=null) {
					if (selectedIndex==0) {
						page = allPages[allPages.length-1];
					} else {
						page = allPages[selectedIndex-1];
					}
					prevObj.href = "#" + nameSpacing + "=" + page.id.replace(nameSpacing+"-","");
				}
				if (nextObj!=null) {
					if (selectedIndex<allPages.length-1) {
						page = allPages[selectedIndex+1];
					} else {
						page = allPages[0];
					}
					nextObj.href = "#" + nameSpacing + "=" + page.id.replace(nameSpacing+"-","");
				}
			}
		});




		this.addObserver(this.getConfig("params").selectedIndex, "onChange", "Tween", function(context, caller) {
			this.getController().setValue("transition", true);
			var allPages = pages(context);
			var cycle = this.getController().getValue("cycle");
			var paginate = this.getController().getValue("paginate");
			var previousIndex = this.getController().getValue("previousIndex");
			var selectedIndex = this.getController().getValue("selectedIndex");
			var contentPage = mojo.queryFirst("> .slideshow-viewer > .slideshow-content", context);
			if ((cycle)&&(paginate)) {
				var allClones =  mojo.query("> .slideshow-viewer > .slideshow-content > .slideshow-clone", context);
				if ((previousIndex==0)&&(selectedIndex==allPages.length-1)) {
					var lastPage = allClones[allClones.length-1];
					contentPage.style.left =(-1*lastPage.offsetLeft) + "px";
				} else if ((selectedIndex==0)&&(previousIndex==allPages.length-1)) {
					var firstPage = allClones[0];
					contentPage.style.left =(-1*firstPage.offsetLeft) + "px";
				}
			}
			return {
				x: (-1*pages(context)[caller.getValue()].offsetLeft),
				y: (-1*dojo.coords(pages(context)[caller.getValue()]).t),
				element: contentPage,
				duration: this.getController().getValue("duration")
			}
		});
		this.addObserver(this.getConfig("params").selectedIndex, "onChange", "UpdateClass", function(context, caller) { return {
			element: pages(context),
			action: "remove",
			cssClass: "selected"
		}});
		this.addObserver(this.getConfig("params").selectedIndex, "onChange", "UpdateClass", function(context, caller) { return {
			element: pages(context)[caller.getValue()],
			action: "add",
			cssClass: "selected"
		}});




		// after sliding animation has completed
		this.addObserver(this.getCommand("Tween"), "onComplete", "UpdateClass", function(context, caller) {
			this.getController().setValue("paginate", false);
			this.getController().setValue("transition", false);
			var urlParam = this.getController().getValue("hashId");
			var hashData = mojo.History.getInstance().getHash();
			var hashData = hashData.split("&");
			var hashValue = "";

			for (var i=0; i<hashData.length; i++) {
				if (hashData[i].indexOf(urlParam)>-1) hashValue = hashData[i].replace(urlParam+"=","");
			}
			var tabs = pages(context);
			for (var i=0; i<tabs.length; i++) {
				tabs[i] = tabs[i].id;
				tabs[i] = tabs[i].replace(urlParam+"-","");
			}

			// content check
			if (tabs[this.getController().getValue("selectedIndex")]!=hashValue) {
				for (var i=0; i<tabs.length; i++) {
					if(tabs[i]==hashValue) this.getController().setValue("selectedIndex", i);
				}
			}
			var timers = this.getController().getValue("autoSlider");
			this.getController().setValue("autoSlider", timers+1);
			setTimeout (function() {
				mojo.Messaging.publish("autoSlider");
			}, this.getController().getValue("delay"));

		});
		this.addObserver(this.getCommand("Tween"), "onComplete", "ShowHideContent", function(context, caller) {
			if (this.getController().getValue("transition") == false) {
				return {
					width: 475,
					height: 320,
					element: mojo.query(".slideshow-wrapper",context),
					duration: 1200
				}
			}
		});




		// Auto slide
		this.addObserver(this.getConfig("params").autoSlider, "onChange", "Messaging", function(context, caller) {
			var transition = this.getController().getValue("transition");
			var timers = this.getController().getValue("autoSlider");
			var starter = this.getController().getValue("slideStart");
			if (starter < 2) {
				this.getController().setValue("slideStart", starter + 1);
			} else {
				if (timers == 0) {
					var urlParam = this.getController().getValue("hashId");
					var hashValue = "";
					var hashData = mojo.queryFirst("> .slideshow-next",context).href;
					hashData = hashData.substring(hashData.indexOf("#")+1);
					hashData = hashData.split("&");
		
					for (var i=0; i<hashData.length; i++) {
						if (hashData[i].indexOf(urlParam)>-1) hashValue = hashData[i].replace(urlParam+"=","");
					}
					if (hashValue!="") {
						this.getController().setValue("slideStart", starter + 1);
						if (!transition) {
							var autoPlay = this.getController().getValue("autoPlay");
							if (autoPlay) {
								this.getController().setValue("paginate", true);
								return {
									topic: "slideNext",
									message: { hashId: hashValue }
								};
							} else {
								return {
									topic: "dontSlideNext"
								}
							}
						}
					} else {
						return {
							topic: "dontSlideNext"
						}
					}
				}
			}
			return {
				topic: "dontSlideNext"
			};
		});




		// update param based on history
		this.addObserver(mojo.History.getInstance(), "onChange", "ShowHideContent", function(context, caller) {
			if (this.getController().getValue("transition") == false) {
				this.getController().setValue("previousIndex", this.getController().getValue("selectedIndex"));
				var urlParam = this.getController().getValue("hashId");
				var hashData = caller.getHash();
				var hashData = hashData.split("&");
				var hashValue = "";
				for (var i=0; i<hashData.length; i++) {
					if (hashData[i].indexOf(urlParam)>-1) hashValue = hashData[i].replace(urlParam+"=","");
				}
				var tabs = pages(context);
				for (var i=0; i<tabs.length; i++) {
					tabs[i] = tabs[i].id;
					tabs[i] = tabs[i].replace(urlParam+"-","");
				}
				for (var i=0; i<tabs.length; i++) {
					if (tabs[i]==hashValue) this.getController().setValue("selectedIndex", i);
				}
				if (hashValue=="") {
					this.getController().setValue("selectedIndex", 0);
				}
				return {
					width: 2,
					height: 2,
					element: mojo.query(".slideshow-wrapper",context),
					duration: 250
				}
			}
		});




		// message listeners
		this.addObserver(mojo.Messaging.getTopic("autoSlider"), "onPublish", "UpdateControllerParam", function() {
			var timers = this.getController().getValue("autoSlider");
			this.getController().setValue("autoSlider", timers-1);
		});

		this.addObserver(mojo.Messaging.getTopic("slideNext"), "onPublish", "SetHash", function(context, caller) {
			var msgObj = caller.getMessage();
			return {
				"slideshow": msgObj.hashId
			}
		});




	},
	addCommands: function() {
		this.addCommand("UpdateClass",				"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("UpdateControllerParam",	"stdlib.command.UpdateControllerParamCommand");
		this.addCommand("Tween",					"dsi.behavior.TweenBehavior");
		this.addCommand("ShowHideContent",			"dsi.behavior.TweenBehavior");
		this.addCommand("SetHash",					"stdlib.behavior.SetHistoryBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
		this.addCommand("Messaging",				"stdlib.behavior.MessagingBehavior");
	},
	addIntercepts: function() {
	}
});
dojo.provide("dsi.controller.iwataasks.IwataAsksController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.iwataasks.IwataAsksController", mojo.controller.Controller,
{
	addObservers: function() {
	},
	addCommands: function() {
	},
	addIntercepts: function() { 
		
	}
});
dojo.provide("dsi.controller.meetdsi.DsiwareController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdsi.DsiwareController", mojo.controller.Controller,
{
	addObservers: function() {
		this.addObserver(this, "onInit", "LoadVideo", function(context, caller) {

			var videoElement = mojo.queryFirst("#game-feature-video");

			var videoUrl = videoElement.getAttribute("videoUrl");

			return {
				elementId: "game-feature-video",
				contentName: "main_flash",
				containerId: "game-feature-video",
				src: "/flash/videoPlayer/videoPlayer_small.swf",
				width: "520",
				height: "330",
				version: "7",
				defaultBackground: "#000",
				expressInstallSrc: "/flash/expressinstall.swf",
				wmode: "transparent",
				flashvars: "videoId=game-feature-video" + "&videoURL=" + videoUrl + "&displayType=WIDE" + "&p_videoName=" + videoElement.title
				// flashvars: "videoId=" + videoId + "&videoURL=" + videoUrl + "&displayType=" + displayType + "&p_videoName=" + videoElement.title
			};
		});

		this.addObserver("#game-list a", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element: caller.parentNode.parentNode,
				action:   "add",
				cssClass: "hover"
			};
		});

		this.addObserver("#game-list a", "onmouseout", "UpdateCssClass", function(context, caller) {
			return {
				element: caller.parentNode.parentNode,
				action:   "remove",
				cssClass: "hover"
			};
		});


	},
	addCommands: function() {
		this.addCommand("LoadVideo",		"stdlib.behavior.SwfObjectBehavior");
		this.addCommand("UpdateCssClass",	"stdlib.behavior.UpdateCssClassBehavior");
	},
	addIntercepts: function() { }
});

dojo.provide("dsi.controller.meetdsi.ExploreController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdsi.ExploreController", mojo.controller.Controller,
{
	addObservers: function() {
		this.addObserver(".box", "onclick", "ShowImage", function(context, caller) {
			return {
				element: mojo.queryFirst("#dsi-feature-" + caller.id),
				action:   "add",
				cssClass: "show"
			};
		});

		this.addObserver(this, "onInit", "PngFix", function(context, caller) {
			mojo.queryFirst("#dsi-image").style.display = "block";
			return {
				selector: ".img-gallery-thumb"
			}
		});

		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) {
			var allBoxObj = mojo.query(".box","media-filmstrip");
			return {
				element: allBoxObj,
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element: caller,
				action:   "add",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.queryFirst("div.active","media-filmstrip"),
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) {
			return {
				element: caller,
				action:   "remove",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onclick", "UpdateCssClass", function(context, caller) {
			var allBoxObj = mojo.query(".box","media-filmstrip");
			return {
				element: allBoxObj,
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onclick", "UpdateCssClass", function(context, caller) {
			var allBoxObj = mojo.query(".box","media-filmstrip");
			return {
				element: allBoxObj,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver(".box", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: caller,
				action:   "add",
				cssClass: "selected active"
			};
		});
		this.addObserver("a", "onclick",	"ScrollCheck", function(context, caller) {
			var scrollObj = mojo.queryFirst("#meet-dsi-explore");
			return {
				element: scrollObj,
				container: scrollObj
			}
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			var activesObj = mojo.query("#media-filmstrip .filmstrip-content a");
			for (var i=0;i<activesObj.length; i++) if (activesObj[i].className == "active") activesObj[i].className = "";
			return {
				element: caller,
				action:   "add",
				cssClass: "active"
			};
		});
		this.addObserver(this, "onInit", "DisplayDSiFeatures", function(context, caller) { return {
			elementId: "feature-zero"
		}});
		this.addObserver("a", "onclick", "DisplayDSiFeatures", function(context, caller) { return {
			elementId: caller.parentNode.id
		}});

		this.addObserver(".filmstrip-paginate div", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver(".filmstrip-paginate div", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			};
		});



		// playing video
		this.addObserver(mojo.queryFirst("#link-show-video"), "onclick", "PlayVideoOverlay", function(context,caller) {
			var elm = caller.parentNode.parentNode;
			var videoTitle = caller.title;
			var noLocal = caller.getElementsByTagName("strong");
			return {
				element: "video-overlay",
				elmData: "video-data",
				elmHeader: "video-header",
				elmNotice: "video-notice",
				videoTitle: videoTitle,
				videoHref: caller.href,
				noLocalization: noLocal[0].title
			}
		});
		this.addObserver(this.getCommand("PlayVideoOverlay"), "onComplete", "Messaging", function(context,caller) {
			return { topic: "PlayVideoOverlay" };
		});


	},
	addCommands: function() {
		this.addCommand("SwfObject",				"dsi.behavior.SwfObjectBehavior");
		this.addCommand("ShowImage",				"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("UpdateCssClass",			"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("PngFix",					"stdlib.behavior.IEPngFixBehavior");
		this.addCommand("DisplayDSiFeatures",		"dsi.behavior.DisplayDSiFeaturesBehavior");
		this.addCommand("PlayVideoOverlay",			"dsi.behavior.PlayVideoOverlayBehavior");
		this.addCommand("Messaging",				"stdlib.behavior.MessagingBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
	},
	addIntercepts: function() { 
		this.addIntercept("before", "ShowImage", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.query(".canvas-image"),
				action: "remove",
				cssClass: "show"
			}
		});
	}
});





dojo.provide("dsi.controller.meetdsi.Flash360Controller");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdsi.Flash360Controller", mojo.controller.Controller,
{
	addObservers: function() {

		this.addObserver(this, "onInit", "Messaging", function(context,caller) {
			var browserAgent = navigator.userAgent;
			if ((browserAgent.indexOf("Opera/9")>-1) || (browserAgent.indexOf("Nintendo Wii")>-1)) return { topic: "Hide360Component" };
			return { topic: "Show360Component" };
		});


		this.addObserver("a.flash360", "onclick", "SwfObject", function(context, caller) {
			var containerObj = mojo.queryFirst("#dsi-explore-flash-container",context);
			containerObj.innerHTML = "";
			return {
				containerName: "dsi-explore-flash-container",
				element: "dsi-explore-flash-container",
				suffix: "dsi",
				src: caller.href,
				width: "290",
				height: "330",
				border: "0",
				version: "7",
				defaultBackground: "transparent",
				contentName: "dsi-flash-content",
				basePath: "/flash/360/",
				wmode: "transparent",
				allowScriptAccess: "sameDomain"
			};
		});
		this.addObserver("a.flash360", "onclick", "UpdateCssClass", function() {
			var anchorObj = mojo.query("a","dsi-explore-flash-nav");
			return {
				element:  anchorObj,
				action:   "remove",
				cssClass: "selected"
			}
		});
		this.addObserver("a.flash360", "onclick", "UpdateCssClass", function(context,caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "selected"
			}
		});


		this.addObserver("a.flash360", "onclick", "ScrollCheck", function(context, caller) {
			return {
				element: context,
				container: context
			}
		});




		this.addObserver(mojo.Messaging.getTopic("Hide360Component"), "onPublish", "UpdateCssClass", function() {
			var flash360componentObj = mojo.queryFirst("#dsi-explore-flash");
			var moveImgObj = mojo.queryFirst("#dsi-explore-image");
			moveImgObj.style.left = "375px";
			return {
				element:  flash360componentObj,
				action:   "add",
				cssClass: "hide"
			}
		});

		this.addObserver(mojo.Messaging.getTopic("Show360Component"), "onPublish", "SwfObject", function() {
			var containerObj = mojo.queryFirst("#dsi-explore-flash-container");
			containerObj.innerHTML = "";
			var flvHref = mojo.queryFirst("#view-open").href;
			return { 
				containerName: "dsi-explore-flash-container",
				element: "dsi-explore-flash-container",
				suffix: "dsi",
				src: flvHref,
				width: "290",
				height: "330",
				border: "0",
				version: "7",
				defaultBackground: "transparent",
				contentName: "dsi-flash-content",
				basePath: "/flash/360/",
				wmode: "transparent",
				allowScriptAccess: "sameDomain"
			};
		});
		this.addObserver(mojo.Messaging.getTopic("Show360Component"), "onPublish", "UpdateCssClass", function() {
			return {
				element:  mojo.queryFirst("a#view-open", "dsi-explore-flash-nav"),
				action:   "add",
				cssClass: "selected"
			}
		});




	},
	addCommands: function() {
		this.addCommand("Messaging",				"stdlib.behavior.MessagingBehavior");
		this.addCommand("UpdateCssClass",			"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("SwfObject",				"dsi.behavior.SwfObjectBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
	},
	addIntercepts: function() { 
	}
});
dojo.provide("dsi.controller.meetdsi.OverviewController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdsi.OverviewController", mojo.controller.Controller,
{
	addObservers: function() {

		// feature set hover states
		this.addObserver("dd.hit a", "onmouseover",			"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "add",
				cssClass: "active"
			};
		});
		this.addObserver("dd.hit a", "onmouseover",			"FadeOutElement", function(context, caller) {
			var imgObj = caller.parentNode.parentNode.getElementsByTagName("img");
			return {
				element:  imgObj[0],
				opacity:  .12,
				duration: 300
			};
		});
		this.addObserver(this.getCommand("FadeOutElement"), "onComplete",	"UpdateCssClass", function(context, caller) {
			var imgObj = mojo.query("dl.active dd.img img","meet-dsi-overview");
			for (var i=0; i<imgObj.length; i++) {
				if (imgObj[i].alt=="0") {
					var imgClass = imgObj[i].parentNode.parentNode;
					if (imgClass.className.indexOf("hover")<0) imgClass.className = imgClass.className + " hover";
				}
			}
		});

		this.addObserver(this.getCommand("FadeOutElement"), "onComplete",	"FadeInElement", function(context, caller) {
			var objArray = new Array();
			var counter = 0;
			var imgObj = mojo.query(".ds-feature-set dd img");
			for (var i=0; i<imgObj.length; i++) {
				var obj = imgObj[i].parentNode.parentNode;
				if (obj.className.indexOf("hover")<0) {
					if (imgObj[i].style.opacity <1) {
						imgObj[i].style.opacity = 1;
						objArray[counter] = imgObj[i];
						counter++;
					}
				}
			}
			if (objArray.length>0) {
				return {
					element:  objArray,
					opacity:  1,
					duration: 1
				}
			}
		});

		this.addObserver("dd.hit a", "onmouseout",		"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "remove",
				cssClass: "hover"
			};
		});
		this.addObserver("dd.hit a", "onmouseout",		"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver("dd.hit a", "onmouseout",		"FadeInElement", function(context, caller) {
			var imgObj = caller.parentNode.parentNode.getElementsByTagName("img");
			return {
				element:  imgObj[0],
				opacity:  1,
				duration: 1
			};
		});




		// red pill button
		this.addObserver("a.pill-box", "onmouseover",	"UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver("a.pill-box", "onmouseout",	"UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			};
		});




		// hardware promos
		this.addObserver("#section-modules a", "mouseover",		"UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			}
		});
		this.addObserver("#section-modules a", "mouseout",		"UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			}
		});



	},

	addCommands: function() {
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("FadeInElement",			"dsi.behavior.FadeBehavior");
		this.addCommand("FadeOutElement",			"dsi.behavior.FadeBehavior");
	},

	addIntercepts: function() {
	}
});

dojo.provide("dsi.controller.meetdsi.PhotosController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdsi.PhotosController", mojo.controller.Controller,
{
	addObservers: function() {

		// hover states
		this.addObserver("#dsi-preview a", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  mojo.query("dl","dsi-preview"),
				action:   "remove",
				cssClass: "hover"
			};
		});
		this.addObserver("#dsi-preview a", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver("#dsi-preview a", "onmouseout", "UpdateCssClass", function(context, caller) {
			return {
				element:  mojo.query("dl","dsi-preview"),
				action:   "remove",
				cssClass: "hover"
			};
		});
		this.addObserver("#dsi-preview a", "onmouseout", "UpdateCssClass", function(context, caller) {
			var selectedObj = mojo.query("#dsi-preview dl.active");
			return {
				element:  selectedObj,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver("#dsi-preview a", "onclick", "UpdateCssClass", function(context, caller) {
			var selectedObj = mojo.query("#dsi-preview dl.active");
			return {
				element:  selectedObj,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver("#dsi-preview a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "add",
				cssClass: "active"
			};
		});

		// playing video
		this.addObserver(mojo.queryFirst("#link-show-video"), "onclick", "UpdateCssClass", function(context,caller) {
			return {
				element:  mojo.query("dl","dsi-preview"),
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver(mojo.queryFirst("#link-show-video"), "onclick", "UpdateCssClass", function(context,caller) {
			return {
				element:  mojo.queryFirst("dl","dsi-preview"),
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver(mojo.queryFirst("#link-show-video"), "onclick", "UpdateCssClass", function(context,caller) {
			var selectedObj = mojo.queryFirst("dl.selected a","dsi-preview");
			var hrefClass = selectedObj.className.replace("photo-","");
			var targetObj = mojo.queryFirst("#lensframe",context);
			targetObj.className="";
			return {
				element:  targetObj,
				action:   "add",
				cssClass: "photo-" + hrefClass
			};
		});
		this.addObserver(mojo.queryFirst("#link-show-video"), "onclick", "Messaging", function(context,caller) {
			return { topic: "showLensPhoto" };
		});

		this.addObserver(mojo.queryFirst("#link-show-video"), "onclick", "PlayVideoOverlay", function(context,caller) {
			var elm = caller.parentNode.parentNode;
			var videoTitle = elm.getElementsByTagName("dt");
			var noLocal = elm.getElementsByTagName("strong");
			return {
				element: "video-overlay",
				elmData: "video-data",
				elmHeader: "video-header",
				elmNotice: "video-notice",
				videoTitle: videoTitle[0].innerHTML,
				videoHref: caller.href,
				noLocalization: noLocal[0].title
			}
		});
		this.addObserver(this.getCommand("PlayVideoOverlay"), "onComplete", "Messaging", function(context,caller) {
			return { topic: "PlayVideoOverlay" };
		});


		// click states
		this.addObserver("#dsi-preview a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element:  mojo.query("dl","dsi-preview"),
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver("#dsi-preview a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "add",
				cssClass: "selected"
			};
		});

		this.addObserver("#dsi-preview a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element:  mojo.query("dl#lens-definitions dt",context),
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver("#dsi-preview a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element:  mojo.query("dl#lens-definitions dd",context),
				action:   "remove",
				cssClass: "selected"
			};
		});

		this.addObserver("#dsi-preview a", "onclick", "UpdateCssClass", function(context, caller) {
			var linkId = caller.id;
			linkId = linkId.substring(9,linkId.length);
			return {
				element:  mojo.queryFirst("#descrt"+linkId,context),
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver("#dsi-preview a", "onclick", "UpdateCssClass", function(context, caller) {
			var linkId = caller.id;
			linkId = linkId.substring(9,linkId.length);
			return {
				element:  mojo.queryFirst("#define"+linkId,context),
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver("#dsi-preview a", "onclick", "UpdateCssClass", function(context, caller) {
			var elm = mojo.queryFirst("#lensframe");
			elm.className="";
			return {
				element:  elm,
				action:   "add",
				cssClass: caller.className
			}
		});
		this.addObserver("#dsi-preview a", "onclick", "Messaging", function(context,caller) {
			var mediaType = caller.className;
			mediaType = mediaType.substring(0,5);
			if (mediaType=="video") return { topic: "showLensVideo" };
			return { topic: "showLensPhoto" };
		});




		// DISPLAY PHOTO
		this.addObserver(mojo.Messaging.getTopic("showLensPhoto"), "onPublish", "DisplayDSiLens", function() {
			var selectedObj = mojo.queryFirst("dl.selected","dsi-preview");
			var anchorTags = selectedObj.getElementsByTagName("a");
			if (anchorTags.length>0) {
				for (var i=0; i<anchorTags.length; i++) {
					if ((anchorTags[i].id!="")&&(anchorTags[i].href!="")) {
						return {
							container: mojo.queryFirst("#lensframe"),
							id:   anchorTags[i].id,
							path: anchorTags[i].href
						};
					}
				}
			}
		});

		// DISPLAY VIDEO
		this.addObserver(mojo.Messaging.getTopic("showLensVideo"), "onPublish", "InsertHtml", function() {
			return {
				element: mojo.queryFirst("#lensframe"),
				action:   "replace",
				insertHtml: mojo.queryFirst("#noflash-notice").innerHTML
			}
		});
		this.addObserver(mojo.Messaging.getTopic("showLensVideo"), "onPublish", "LoadVideo", function() {
			var selectedObj = mojo.queryFirst("#dsi-preview dl.selected");
			var anchorTags = selectedObj.getElementsByTagName("a");
			if (anchorTags.length>0) {
				for (var i=0; i<anchorTags.length; i++) {
					if ((anchorTags[i].id!="")&&(anchorTags[i].href!="")) {
						var vWidth, vHeight, videoId;
						var videoUrl = anchorTags[i].href;
						var displayType = anchorTags[i].className;
						var idName = "lens-link";
						var videoId = anchorTags[i].id;
						var videoTitle = anchorTags[i].title;
						displayType = displayType.replace("video-","");
						switch(displayType) {
							case "BLACK": 	vWidth = 463;
											vHeight = 523;
											break;
							case "BLUE": 	vWidth = 463;
											vHeight = 523;
											break;
							case "WIDE": 	vWidth = 680;
											vHeight = 420;
											break;
						}
						videoId = videoId.substring(idName.length, videoId.length);
						return {
							elementId: "lensframe",
							contentName: "main_flash",
							containerId: "#lensframe",
							src: "/flash/videoPlayer/videoPlayer.swf",
							width: vWidth,
							height: vHeight,
							version: "7",
							defaultBackground: "transparent",
							expressInstallSrc: "/flash/expressinstall.swf",
							wmode: "transparent",
							flashvars: "videoId=" + videoId + "&videoURL=" + videoUrl + "&displayType=" + displayType + "&p_videoName=" + videoTitle
						};
					}
				}
			}
		});


	},

	addCommands: function() {
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("DisplayDSiLens",		"dsi.behavior.DisplayDSiLensBehavior");
		this.addCommand("Messaging",			"stdlib.behavior.MessagingBehavior");
		this.addCommand("InsertHtml",			"stdlib.behavior.InsertHtmlBehavior");
		this.addCommand("LoadVideo",			"stdlib.behavior.SwfObjectBehavior");
		this.addCommand("PlayVideoOverlay",		"dsi.behavior.PlayVideoOverlayBehavior");
	},

	addIntercepts: function() {
	}
});

dojo.provide("dsi.controller.meetdsi.SoundController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdsi.SoundController", mojo.controller.Controller,
{
	addObservers: function() {

		this.addObserver(this, "onInit", "PngFix", { selector: ".img-gallery-thumb" });
		this.addObserver("dd.vid a", "onclick", "Messaging", function(context,caller) { return { topic: "displaySoundVideo", message: { elementId: caller.parentNode.id }}});


		// playing video
		this.addObserver(mojo.query(".link-show-video"), "onclick", "PlayVideoOverlay", function(context,caller) {
			var elm = caller.parentNode.parentNode;
			var videoTitle = elm.getElementsByTagName("dt");
			var noLocal = elm.getElementsByTagName("strong");
			return {
				element: "video-overlay",
				elmData: "video-data",
				elmHeader: "video-header",
				elmNotice: "video-notice",
				videoTitle: videoTitle[0].innerHTML,
				videoHref: caller.href,
				noLocalization: noLocal[0].title
			}
		});
		this.addObserver(this.getCommand("PlayVideoOverlay"), "onComplete", "Messaging", function(context,caller) {
			return { topic: "PlayVideoOverlay" };
		});


	


		/*
		// DISPLAY VIDEO
		this.addObserver(mojo.Messaging.getTopic("displaySoundVideo"), "onPublish", "InsertHtml", function(context,caller) {
			var elementId = caller.getMessage().elementId;
			if (elementId != null) {
				return {
					element: mojo.queryFirst("#"+elementId),
					action:  "replace",
					insertHtml: mojo.queryFirst("#noflash-notice").innerHTML
				}
			}
		});

		this.addObserver(mojo.Messaging.getTopic("displaySoundVideo"), "onPublish", "LoadVideo", function(context,caller) {
			var elementId = caller.getMessage().elementId;
			if (elementId != null) {
				var selectedObj = mojo.queryFirst("#" + elementId);
				var anchorTags = selectedObj.getElementsByTagName("a");
				if (anchorTags.length>0) {
					for (var i=0; i<anchorTags.length; i++) {
						if ((selectedObj.id!="")&&(anchorTags[i].href!="")) {
							var vWidth, vHeight, videoId;
							var videoUrl = anchorTags[i].href;
							var displayType = anchorTags[i].className;
							var videoId = selectedObj.id;
							var videoTitle = selectedObj.title;
							videoId = videoId.replace("vid-","video-");
							switch(displayType) {
								case "BLACK":	vWidth = 463;
												vHeight = 523;
												break;
								case "BLUE":	vWidth = 463;
												vHeight = 523;
												break;
							}
							return {
								elementId: elementId,
								contentName: "main_flash",
								containerId: "#"+elementId,
								src: "/flash/videoPlayer/videoPlayer.swf",
								width: vWidth,
								height: vHeight,
								version: "7",
								defaultBackground: "transparent",
								expressInstallSrc: "/flash/expressinstall.swf",
								wmode: "transparent",
								flashvars: "videoId=" + videoId + "&videoURL=" + videoUrl + "&displayType=" + displayType + "&p_videoName=" + videoTitle
							};
						}
					}
				}
			}
		});
		*/

	},

	addCommands: function() {
		this.addCommand("PngFix",			"stdlib.behavior.IEPngFixBehavior");
		this.addCommand("Messaging",		"stdlib.behavior.MessagingBehavior");
		this.addCommand("InsertHtml",			"stdlib.behavior.InsertHtmlBehavior");
		this.addCommand("LoadVideo",		"stdlib.behavior.SwfObjectBehavior");
		this.addCommand("PlayVideoOverlay",		"dsi.behavior.PlayVideoOverlayBehavior");
	},

	addIntercepts: function() {
	}
});dojo.provide("dsi.controller.meetdsi.SwatchController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdsi.SwatchController", mojo.controller.Controller,
{
	addObservers: function() {


		this.addObserver(this, "onInit", "UpdateCssClass", function(context, caller) {
			var IE='\v'=='v'
			var pngElements = mojo.query("#dsi-explore-swatch li img", context);
			if (IE) {
				for (var i=0; i<pngElements.length; i++) {
					pngElements[i].style.filter = "filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + pngElements[i].src + "', sizingMethod='crop')";
					pngElements[i].src = "/img/blank.gif";
				}
			}
		});


	},
	addCommands: function() {
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
	},
	addIntercepts: function() {
	}
});
dojo.provide("dsi.controller.meetdslite.ExploreController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdslite.ExploreController", mojo.controller.Controller,
{
	addObservers: function() {
		this.addObserver(".box", "onclick", "ShowImage", function(context, caller) {
			return {
				element: mojo.queryFirst("#dsi-feature-" + caller.id),
				action:   "add",
				cssClass: "show"
			};
		});

		this.addObserver(this, "onInit", "PngFix", function(context, caller) {
			return {
				selector: ".img-gallery-thumb"
			}
		});

		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) { 
			var activesObj = mojo.query(".filmstrip-content div.box", "media-filmstrip");
			return {
				element: activesObj,
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "add",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "remove",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) { 
			var activesObj = mojo.queryFirst(".filmstrip-content div.active", "media-filmstrip");
			return {
				element: activesObj,
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver("a", "onclick",	"ScrollCheck", function(context, caller) {
			var scrollObj = mojo.queryFirst("#meet-dslite-explore");
			return {
				element: scrollObj,
				container: scrollObj
			}
		});
		
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			var activesObj = mojo.query(".filmstrip-content a", "media-filmstrip");
			return {
				element: activesObj,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			var activesObj = mojo.query(".filmstrip-content div.box", "media-filmstrip");
			return {
				element: activesObj,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: caller,
				action:   "add",
				cssClass: "active"
			};
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: caller.parentNode,
				action:   "add",
				cssClass: "active selected"
			};
		});
		this.addObserver(this, "onInit", "DisplayDSiFeatures", function(context, caller) { return {
			elementId: "feature-zero"
		}});
		this.addObserver("a", "onclick", "DisplayDSiFeatures", function(context, caller) { return {
			elementId: caller.parentNode.id
		}});

		this.addObserver(".filmstrip-paginate div", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver(".filmstrip-paginate div", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			};
		});



		// playing video
		this.addObserver(mojo.queryFirst("#link-show-video"), "onclick", "PlayVideoOverlay", function(context,caller) {
			var elm = caller.parentNode.parentNode;
			var videoTitle = caller.title;
			var noLocal = caller.getElementsByTagName("strong");
			return {
				element: "video-overlay",
				elmData: "video-data",
				elmHeader: "video-header",
				elmNotice: "video-notice",
				videoTitle: videoTitle,
				videoHref: caller.href,
				noLocalization: noLocal[0].title
			}
		});
		this.addObserver(this.getCommand("PlayVideoOverlay"), "onComplete", "Messaging", function(context,caller) {
			return { topic: "PlayVideoOverlay" };
		});


	},
	addCommands: function() {
		this.addCommand("ShowImage",				"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("PngFix",					"stdlib.behavior.IEPngFixBehavior");
		this.addCommand("DisplayDSiFeatures",	"dsi.behavior.DisplayDSiFeaturesBehavior");
		this.addCommand("PlayVideoOverlay",		"dsi.behavior.PlayVideoOverlayBehavior");
		this.addCommand("Messaging",				"stdlib.behavior.MessagingBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
	},
	addIntercepts: function() { 
		this.addIntercept("before", "ShowImage", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.query(".canvas-image"),
				action: "remove",
				cssClass: "show"
			}
		});
	}
});
dojo.provide("dsi.controller.meetdslite.OverviewController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdslite.OverviewController", mojo.controller.Controller,
{
	addObservers: function() {

		// feature set hover states
		this.addObserver(".ds-feature-set dd.hit a", "onmouseover",			"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "add",
				cssClass: "active"
			};
		});
		this.addObserver(".ds-feature-set dd.hit a", "onmouseover",			"FadeOutElement", function(context, caller) {
			var imgObj = caller.parentNode.parentNode.getElementsByTagName("img");
			return {
				element:  imgObj[0],
				opacity:  .12,
				duration: 300
			};
		});
		this.addObserver(this.getCommand("FadeOutElement"), "onComplete",	"UpdateCssClass", function(context, caller) {
			var imgObj = mojo.query("dl.active dd.img img","meet-dslite-overview");
			for (var i=0; i<imgObj.length; i++) {
				if (imgObj[i].alt=="0") {
					var imgClass = imgObj[i].parentNode.parentNode;
					if (imgClass.className.indexOf("hover")<0) imgClass.className = imgClass.className + " hover";
				}
			}
		});

		this.addObserver(this.getCommand("FadeOutElement"), "onComplete",	"FadeInElement", function(context, caller) {
			var objArray = new Array();
			var counter = 0;
			var imgObj = mojo.query(".ds-feature-set dd img");
			for (var i=0; i<imgObj.length; i++) {
				var obj = imgObj[i].parentNode.parentNode;
				if (obj.className.indexOf("hover")<0) {
					if (imgObj[i].style.opacity <1) {
						imgObj[i].style.opacity = 1;
						objArray[counter] = imgObj[i];
						counter++;
					}
				}
			}
			if (objArray.length>0) {
				return {
					element:  objArray,
					opacity:  1,
					duration: 1
				}
			}
		});

		this.addObserver(".ds-feature-set dd.hit a", "onmouseout",		"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "remove",
				cssClass: "hover"
			};
		});
		this.addObserver(".ds-feature-set dd.hit a", "onmouseout",		"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver(".ds-feature-set dd.hit a", "onmouseout",		"FadeInElement", function(context, caller) {
			var imgObj = caller.parentNode.parentNode.getElementsByTagName("img");
			return {
				element:  imgObj[0],
				opacity:  1,
				duration: 1
			};
		});




		// promo hover states
		this.addObserver(".game-modules-container dd.hit a", "onmouseover",			"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver(".game-modules-container dd.hit a", "onmouseout",			"UpdateCssClass", function(context, caller) {
			return {
				element:  caller.parentNode.parentNode,
				action:   "remove",
				cssClass: "hover"
			};
		});




		// red pill button
		this.addObserver("a.pill-box", "onmouseover",	"UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver("a.pill-box", "onmouseout",	"UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			};
		});



		// OMNITURE
		this.addObserver(".game-modules-container dd.hit a", "onclick", "TrackLink", function(context, caller) {
			return {
				transactionType: "customLink",
				properties: {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: "Promo game link:" + caller.title,
					event17: "Link to external game",
					events: "event17"
				}
			}
		});



	},

	addCommands: function() {
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("FadeInElement",		"dsi.behavior.FadeBehavior");
		this.addCommand("FadeOutElement",		"dsi.behavior.FadeBehavior");
		this.addCommand("TrackLink",			"stdlib.command.metrics.omniture.TransactionCommand");
	},

	addIntercepts: function() {
	}
});

dojo.provide("dsi.controller.meetdslite.SwatchController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.meetdslite.SwatchController", mojo.controller.Controller,
{
	addObservers: function() {


		this.addObserver(this, "onInit", "UpdateCssClass", function(context, caller) {
			var IE='\v'=='v'
			var pngElements = mojo.query("#dslite-explore-swatch li img", context);
			if (IE) {
				for (var i=0; i<pngElements.length; i++) {
					pngElements[i].style.filter = "filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + pngElements[i].src + "', sizingMethod='crop')";
					pngElements[i].src = "/img/blank.gif";
				}
			}
		});


	},
	addCommands: function() {
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
	},
	addIntercepts: function() {
	}
});dojo.provide("dsi.controller.news.NewsController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.news.NewsController", mojo.controller.Controller,
{
	addObservers: function() {

		this.addObserver(".newsItem", "onmouseover", "UpdateCssClass", function(context, caller) {
			if($(caller).hasClass("newsItem-hover") || $(caller).hasClass("selected")) return;
      		return {
		    	element: caller,
		    	action:   "add",
		    	cssClass: "newsItem-hover"
			};
		});
		this.addObserver(".newsItem", "onmouseout", "UpdateCssClass", function(context, caller) {
			if(!$(caller).hasClass("newsItem-hover")) return;
      		return {
		    	element: caller,
		    	action:   "remove",
		    	cssClass: "newsItem-hover"
			};
		});
		this.addObserver(".newsItem", "onclick", "UpdateCssClass",function(context, caller) {
			var h = mojo.queryFirst("a",caller).getAttribute("href");
			window.location = h;
		});
		
		this.addObserver(this, "onInit", "ScrollCheck", function(context, caller) {
			var scrollObj = mojo.queryFirst("#news-content");
			if( window.location.search.indexOf("articleId") == -1 ) return;			
			return {
				element: scrollObj,
				container: scrollObj
			}
		});
		
	},
	addCommands: function() {
		this.addCommand("UpdateCssClass",			"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
	},
	addIntercepts: function() { }
});dojo.provide("dsi.controller.playgames.PlayGamesController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.playgames.PlayGamesController", mojo.controller.Controller,
{
	addObservers: function() {
		this.addObserver(this, "onInit", "LoadVideo", function() {
			var callerObj;
			var featureObj = mojo.query("dl.selected", "game-feature-thumb");
			if (featureObj.length>0) {
				var anchorTags = featureObj[0].getElementsByTagName("a");
				if (anchorTags.length>0) callerObj = anchorTags[0];
				if ((callerObj.id!="")&&(callerObj.href!="")) {
					var vWidth, vHeight, videoId;
					var videoUrl = callerObj.href;
					var displayType = "WIDE";
					var idName = "feat-link";
					var videoId = callerObj.id;
					videoId = videoId.substring(idName.length, videoId.length);
					vWidth = 680;
					vHeight = 420;
					return {
						elementId: "game-feature-video",
						contentName: "flashvideo",
						containerId: "#game-feature-video",
						src: "/flash/videoPlayer/videoPlayer.swf",
						width: vWidth,
						height: vHeight,
						version: "7",
						defaultBackground: "transparent",
						expressInstallSrc: "/flash/expressinstall.swf",
						wmode: "transparent",
						flashvars: "videoId=" + videoId + "&videoURL=" + videoUrl + "&displayType=" + displayType + "&p_videoName=" + callerObj.title
					};
				}
			}
		});




	},
	addCommands: function() {
		this.addCommand("LoadVideo",			"stdlib.behavior.SwfObjectBehavior");

	},
	addIntercepts: function() { }
});dojo.provide("dsi.controller.playonline.NewsController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.playonline.NewsController", mojo.controller.Controller,
{
	addObservers: function() {
		this.addObserver(this, "onInit", "PngFix", function(context, caller) {
			return {
				selector: "#top-cap, #news-content"
			}
		});

	},
	addCommands: function() {
		this.addCommand("PngFix",				"stdlib.behavior.IEPngFixBehavior");
	},
	addIntercepts: function() { 
	}
});dojo.provide("dsi.controller.playonline.PlayOnlineController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.playonline.PlayOnlineController", mojo.controller.Controller,
{
	addObservers: function() {
		this.addObserver(this, "onInit", "PngFix", function(context, caller) {
			return {
				selector: "#main, .unit, .unit img, #news-content, #top-cap, #bottom-cap"
			}
		});

	// navigation
		this.addObserver(this, "onInit", "UpdateCssClass", function(context, caller) {
			var blockquoteObj = mojo.queryFirst("blockquote","news-content");
			var imgObj = mojo.queryFirst("div.img","news-content");
			if ((blockquoteObj!=null)&&(imgObj!=null)) blockquoteObj.innerHTML = imgObj.innerHTML;
		});
	},
	addCommands: function() {
		this.addCommand("PngFix",			"stdlib.behavior.IEPngFixBehavior");
		this.addCommand("UpdateCssClass",	"stdlib.behavior.UpdateCssClassBehavior");
	},
	addIntercepts: function() { }
});

dojo.provide("dsi.controller.purchase.PurchaseController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.purchase.PurchaseController", mojo.controller.Controller,
{
	params: {
		selectedPane: {
			required: false,
			defaultValue: "",
			type: String
		},
		transition: {
			required: false,
			defaultValue: false,
			type: Boolean
		}
},
	addObservers: function() {

		this.addObserver(this, "onInit",	"UpdateControllerParam", function() {
			var transition = this.getController().getValue("transition");
			if (!transition) {
				var hashData = mojo.History.getInstance().getHash();
				hashData = hashData.substring(0);
				if (hashData!="showPurchaseDSGames") hashData = "showPurchaseDSHardware";
				this.getController().setValue("selectedPane", hashData);
			}
		});

		this.addObserver(this, "onInit", "PngFix", function(context, caller) {
			return {
				selector: "#ds-units-dsi ul img, #ds-units-dslite ul img"
			}
		});

		this.addObserver(mojo.History.getInstance(), "onChange", "UpdateControllerParam", function() {
			var transition = this.getController().getValue("transition");
			if (!transition) {
				var hashData = mojo.History.getInstance().getHash();
				hashData = hashData.substring(0);
				if (hashData!="showPurchaseDSGames") hashData = "showPurchaseDSHardware";
				mojo.Messaging.publish("resetSwatches");
				this.getController().setValue("selectedPane", hashData);
			}
		});




		this.addObserver(this.getConfig("params").selectedPane, "onChange", "Messaging", function(context,caller) {
			var paneId = caller.getValue("selectedPane");
			var transition = this.getController().getValue("transition");
			if (!transition) {
				return { topic: paneId }
			} else {
				return { topic: "null" }
			}
		});




		// UPDATE SWATCHES
		this.addObserver(".ds-units li", "onmouseover", "InsertHtml", function(context, caller) { return {
			element:  mojo.queryFirst("#" + caller.parentNode.parentNode.id + " h4 em"),
			action:   "replace",
			insertHtml: caller.title
		}});
		this.addObserver(".ds-units li", "onmouseover", "UpdateCssClass", function(context, caller) {
			var swatchBg = mojo.queryFirst("#" + caller.parentNode.parentNode.id + " div.purchase-ds-swatch span");
			var colorPos = dojo.coords(caller);
				swatchBg.parentNode.style.top = (colorPos.t+29) + "px";
				swatchBg.parentNode.style.left = colorPos.l + "px";
			return {
				element:  swatchBg,
				action:   "set",
				cssClass: "hover"
			}
		});

		this.addObserver(".ds-units li", "onmouseout", "UpdateCssClass", function(context, caller) {
			var swatchBg = mojo.queryFirst("#" + caller.parentNode.parentNode.id + " div.purchase-ds-swatch span");
			var selectedSwatch = mojo.queryFirst("#" + caller.parentNode.parentNode.id + " li.selected");
			var cssName = "";
			if (selectedSwatch != null) {
				cssName="selected";
				var colorPos = dojo.coords(selectedSwatch);
					swatchBg.parentNode.style.top = (colorPos.t+29) + "px";
					swatchBg.parentNode.style.left = colorPos.l + "px";
			}
			return {
				element:  swatchBg,
				action:   "set",
				cssClass: cssName
			}
		});
		this.addObserver(".ds-units li", "onmouseout", "UpdateCssClass", function(context, caller) {
			var obj = mojo.query("#" + caller.parentNode.parentNode.id + " li");
			return {
				element:  obj,
				action:   "remove",
				cssClass: "hover"
			};
		});
		this.addObserver(".ds-units li", "onmouseout", "InsertHtml", function(context, caller) {
			var obj = mojo.queryFirst("#" + caller.parentNode.parentNode.id + " li.selected");
			var insertTitle = (obj != null) ? obj.title : "";
			return {
				element:  mojo.queryFirst("#" + caller.parentNode.parentNode.id + " h4 em"),
				action:   "replace",
				insertHtml: insertTitle
			}
		});


		// ONCLICK
		this.addObserver(".ds-units li", "onclick","UpdateCssClass", function(context, caller) {
			var imgObj = caller.getElementsByTagName("img")[0];
			var targetObj = mojo.queryFirst("#purchase-ds-image img");
			var newSrc = imgObj.src;
				newSrc = newSrc.replace("/color-", "/"+imgObj.className+"-");
				newSrc = newSrc.replace("/swatches/", "/units/");
				newSrc = newSrc.replace(".png", ".jpg");
				targetObj.src = newSrc;
		});
		this.addObserver(".ds-units li", "onclick","InsertHtml", function(context, caller) {
			var labels = mojo.query(".ds-units h4 em");
			return {
				element:  labels,
				action:   "replace",
				insertHtml: ""
			}
		});
		this.addObserver(".ds-units li", "onclick", "UpdateCssClass", function(context, caller) { return {
			element:  mojo.query(".ds-units li"),
			action:   "remove",
			cssClass: "selected"
		}});
		this.addObserver(".ds-units li", "onclick", "UpdateCssClass", function(context, caller) {
			var labels = mojo.query(".ds-units h4 em");
			return {
				element:  mojo.query(".purchase-ds-swatch span"),
				action:   "remove",
				cssClass: "selected"
			}
		});
		this.addObserver(".ds-units li", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver(".ds-units li", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "selected"
			}
		});
		this.addObserver(".ds-units li", "onclick", "UpdateCssClass", function(context, caller) {
			var swatchBg = mojo.queryFirst("#" + caller.parentNode.parentNode.id + " div.purchase-ds-swatch span");
			return {
				element:  swatchBg,
				action:   "set",
				cssClass: "selected"
			}
		});

		this.addObserver(".ds-units li", "onclick", "Messaging", function(context,caller) {
			var hardwareType = caller.parentNode.className.substring(7);
			var colourId = caller.className.substring(7);
			return {
				topic: "loadHardwareLinks",
				message: { hardware: hardwareType, colour: colourId }
			}
		});


		this.addObserver(".purchase-info a", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "set",
				cssClass: "hover"
			}
		});
		this.addObserver(".purchase-info a", "onmouseout", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			}
		});




		// MESSAGE LISTENERS
		this.addObserver(mojo.Messaging.getTopic("loadHardwareLinks"), "onPublish", "ScrollCheck", function(context, caller) {
			var element = mojo.queryFirst("#wizard-step2");
			return {
				element: element,
				container: element
			}
		});
		this.addObserver(mojo.Messaging.getTopic("loadHardwareLinks"), "onPublish", "UpdateCssClass", function(context, caller) {
			return {
				element:  mojo.query(".retailer-logos"),
				action:   "add",
				cssClass: "hide"
			};
		});
		this.addObserver(mojo.Messaging.getTopic("loadHardwareLinks"), "onPublish", "UpdateCssClass", function(context, caller) {
			return {
				element:  mojo.queryFirst("#logos-hardware"),
				action:   "remove",
				cssClass: "hide"
			};
		});
		this.addObserver(mojo.Messaging.getTopic("loadHardwareLinks"), "onPublish", "GetLinkData", function() { // -- GET LINK DATA FROM SERVICE -- //
			var selectedObj = mojo.queryFirst(".ds-units li.selected img", "purchase-content-units");
			var colorId = selectedObj.parentNode.className;
				colorId = colorId.replace(" selected","");
				colorId = colorId.replace("colour-","");
			return {
				"lang": noadsi.dsiLanguage,
				"type": selectedObj.className,
				"color": colorId
			}
		});
		this.addObserver(mojo.Messaging.getTopic("loadHardwareLinks"), "onPublish", "UpdateCssClass", function() {
			return {
				element:  mojo.queryFirst(".wizard-overlay span"),
				action:   "remove",
				cssClass: "inactive"
			};
		});
		this.addObserver(mojo.Messaging.getTopic("loadHardwareLinks"), "onPublish", "UpdateCssClass", function() {
			return {
				element:  mojo.queryFirst("#wizard-instructions"),
				action:   "add",
				cssClass: "hide"
			};
		});


		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "ScrollCheck", function(context, caller) {
			var transition = this.getController().setValue("transition", true);
			var element = mojo.queryFirst("#wizard-step1");
			return {
				element: element,
				container: element
			}
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "UpdateCssClass", function(context, caller) {
			return {
				element:  mojo.query(".retailer-logos"),
				action:   "add",
				cssClass: "hide"
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "UpdateCssClass", function(context, caller) {
			return {
				element:  mojo.queryFirst("#logos-software"),
				action:   "remove",
				cssClass: "hide"
			};
		});

		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "Fade", function() {
			var fadeObj = mojo.queryFirst("span#hdr-content-units");
			return {
				element:  fadeObj,
				opacity:  0
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "Fade", function() {
			var fadeObj = mojo.queryFirst("span#hdr-content-games");
			fadeObj.style.display = "block";
			return {
				element:  fadeObj,
				opacity:  1
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "Fade", function() {
			var fadeObj = mojo.queryFirst("span#hdr-content-retailer-step");
			return {
				element:  fadeObj,
				opacity:  0
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "Fade", function() {
			var fadeObj = mojo.queryFirst("span#hdr-content-retailer-pick");
			fadeObj.style.display = "block";
			return {
				element:  fadeObj,
				opacity:  1
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "UpdateCssClass", function() {
			return {
				element:  mojo.queryFirst(".wizard-overlay span"),
				action:   "remove",
				cssClass: "inactive"
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "UpdateCssClass", function() {
			return {
				element:  mojo.queryFirst("#wizard-instructions"),
				action:   "add",
				cssClass: "hide"
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSGames"), "onPublish", "TweenOutHardwarePane", function() { return {
			width: 0,
			element: mojo.queryFirst("#hardware-pane"),
			duration: 700
		}});
		this.addObserver(this.getCommand("TweenOutHardwarePane"), "onComplete", "TweenInSoftwarePane", function() { return {
			width: 865,
			element: mojo.queryFirst("#software-pane"),
			duration: 1000
		}});
		this.addObserver(this.getCommand("TweenInSoftwarePane"), "onComplete", "Messaging", function() { return {topic: "transitionCompleted" }});





		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSHardware"), "onPublish", "ScrollCheck", function(context, caller) {
			var transition = this.getController().setValue("transition", true);
			var element = mojo.queryFirst("#wizard-step1");
			return {
				element: element,
				container: element
			}
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSHardware"), "onPublish", "Fade", function() {
			var fadeObj = mojo.queryFirst("span#hdr-content-units");
			fadeObj.style.display = "block";
			return {
				element:  fadeObj,
				opacity:  1
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSHardware"), "onPublish", "Fade", function() {
			var fadeObj = mojo.queryFirst("span#hdr-content-games");
			return {
				element:  fadeObj,
				opacity:   0
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSHardware"), "onPublish", "Fade", function() {
			var fadeObj = mojo.queryFirst("span#hdr-content-retailer-step");
			fadeObj.style.display = "block";
			return {
				element:  fadeObj,
				opacity:  1
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSHardware"), "onPublish", "Fade", function() {
			var fadeObj = mojo.queryFirst("span#hdr-content-retailer-pick");
			return {
				element:  fadeObj,
				opacity:  0
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSHardware"), "onPublish", "UpdateCssClass", function() {
			return {
				element:  mojo.queryFirst("#wizard-instructions"),
				action:   "remove",
				cssClass: "hide"
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSHardware"), "onPublish", "UpdateCssClass", function() {
			return {
				element:  mojo.queryFirst(".wizard-overlay span"),
				action:   "add",
				cssClass: "inactive"
			};
		});
		this.addObserver(mojo.Messaging.getTopic("showPurchaseDSHardware"), "onPublish", "TweenOutSoftwarePane", function() { return {
			width: 0,
			element: mojo.queryFirst("#software-pane"),
			duration: 700
		}});
		this.addObserver(this.getCommand("TweenOutSoftwarePane"), "onComplete", "TweenInHardwarePane", function() { return {
			width: 865,
			element: mojo.queryFirst("#hardware-pane"),
			duration: 1000
		}});
		this.addObserver(this.getCommand("TweenInHardwarePane"), "onComplete", "Messaging", function() { return {topic: "transitionCompleted" }});




		// Reset swatch state
		this.addObserver(mojo.Messaging.getTopic("resetSwatches"), "onPublish", "UpdateCssClass", function() {
			var targetObj = mojo.queryFirst("#purchase-ds-image img");
			targetObj.src = "/img/purchase/img-ds-units.jpg";
		});
		this.addObserver(mojo.Messaging.getTopic("resetSwatches"), "onPublish", "InsertHtml", function(context, caller) {
			var labels = mojo.query(".ds-units h4 em");
			return {
				element:  labels,
				action:   "replace",
				insertHtml: ""
			}
		});
		this.addObserver(mojo.Messaging.getTopic("resetSwatches"), "onPublish", "UpdateCssClass", function(context, caller) { return {
			element:  mojo.query(".ds-units li"),
			action:   "remove",
			cssClass: "selected"
		}});
		this.addObserver(mojo.Messaging.getTopic("resetSwatches"), "onPublish", "UpdateCssClass", function(context, caller) {
			var labels = mojo.query(".ds-units h4 em");
			return {
				element:  mojo.query(".purchase-ds-swatch span"),
				action:   "remove",
				cssClass: "selected"
			}
		});




		// Completed transition
		this.addObserver(mojo.Messaging.getTopic("transitionCompleted"), "onPublish", "UpdateControllerParam", function() {
			var selectedPane = this.getController().getValue("selectedPane");
			var hashData = mojo.History.getInstance().getHash();
				hashData = hashData.substring(0);
			if (hashData!="showPurchaseDSGames") hashData = "showPurchaseDSHardware";
			if (hashData == selectedPane) {
				this.getController().setValue("transition", false);
			} else {
				this.getController().setValue("selectedPane", hashData);
			}
		});




		// Omniture
		// merchant logo button - Software
		this.addObserver("#logos-software li a", "onclick", "TrackLink", function(context, caller) {
			var storeName = caller.className;
				storeName = storeName.replace("external","");
			return {
				transactionType: "customLink",
				properties: {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar9: "Retailer button:" + storeName,
					event12: "Retailer button:" + storeName,
					events: "event12"
				}
			}
		});
		// merchant logo button - Hardware
		this.addObserver("#logos-hardware li a", "onclick", "TrackLink", function(context, caller) {
			var storeName = caller.className;
				storeName = storeName.replace("external","");
			return {
				transactionType: "customLink",
				properties: {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar9: "Retailer button: " + storeName,
					event12: "Retailer button: " + storeName,
					events: "event12"
				}
			}
		});





	},
	addCommands: function() {
		this.addCommand("PngFix",					"stdlib.behavior.IEPngFixBehavior");
		this.addCommand("UpdateControllerParam",	"stdlib.command.UpdateControllerParamCommand");
		this.addCommand("GetLinkData",				"dsi.command.GetLinkDataCommand");
		this.addCommand("UpdateCssClass",			"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("Messaging",				"stdlib.behavior.MessagingBehavior");
		this.addCommand("Tween",					"stdlib.behavior.TweenBehavior");
		this.addCommand("TweenOutHardwarePane",		"stdlib.behavior.TweenBehavior");
		this.addCommand("TweenOutSoftwarePane",		"stdlib.behavior.TweenBehavior");
		this.addCommand("TweenInHardwarePane",		"stdlib.behavior.TweenBehavior");
		this.addCommand("TweenInSoftwarePane",		"stdlib.behavior.TweenBehavior");
		this.addCommand("InsertHtml",				"stdlib.behavior.InsertHtmlBehavior");
		this.addCommand("Fade",						"dsi.behavior.FadeBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
		this.addCommand("TrackLink",				"stdlib.command.metrics.omniture.TransactionCommand");
	},
	addIntercepts: function() { }
});
dojo.provide("dsi.controller.support.SupportController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.support.SupportController", mojo.controller.Controller,
{
	addObservers: function() {

		this.addObserver(".newsItem", "onmouseover", "UpdateCssClass", function(context, caller) {
			if($(caller).hasClass("newsItem-hover") || $(caller).hasClass("selected")) return;
			return {
				element: caller,
				action:   "add",
				cssClass: "newsItem-hover"
			};
		});
		this.addObserver(".newsItem", "onmouseout", "UpdateCssClass", function(context, caller) {
			if(!$(caller).hasClass("newsItem-hover")) return;
			return {
				element: caller,
				action:   "remove",
				cssClass: "newsItem-hover"
			};
		});
		this.addObserver(".newsItem", "onclick", "UpdateCssClass",function(context, caller) {
			var h = mojo.queryFirst("a",caller).getAttribute("href");
			window.location = h;
		});


		this.addObserver(this, "onInit", "ScrollCheck", function(context, caller) {
			var scrollObj = mojo.queryFirst(".news-sidebar");
			if( window.location.search.indexOf("articleId") < 0) return;
			return {
				element: scrollObj,
				container: scrollObj,
				targetId: mojo.queryFirst("h4", "support")
			}
		});

		// move images from div to blockquote
		this.addObserver(this, "onInit", "UpdateCssClass", function(context, caller) {
			var blockquoteObj = mojo.queryFirst("blockquote","news-content");
			var imgObj = mojo.queryFirst("div.img","news-content");
			if ((blockquoteObj!=null)&&(imgObj!=null)) {
				blockquoteObj.innerHTML = imgObj.innerHTML;
				imgObj.innerHTML = "";
			}
		});

	},
	addCommands: function() {
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("ScrollCheck",			"dsi.behavior.ScrollCheckBehavior");
	},
	addIntercepts: function() { }
});

dojo.provide("dsi.controller.videogallery.MediaGalleryController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.videogallery.MediaGalleryController", mojo.controller.Controller,
{
	addObservers: function() {
		//grab the querystring
		var qs = window.location.search.substring(1);
//		var hashData = hashData.split("&");
		var hashData = qs.split("&");
		var videoId, videoTag;
		for (var i=0; i<hashData.length; i++) {
			if (hashData[i].indexOf("videoId=")>-1) videoId = hashData[i].replace("videoId=","");
			if (hashData[i].indexOf("videoTag=")>-1) videoTag = hashData[i].replace("videoTag=","");
		}
		if(!videoId) videoId = mojo.query(".box")[0].id.toString();
		if(!videoTag) videoTag = "all";

		this.addObserver(this, "onInit", "InsertHtml", function() {
			return {
				element: mojo.queryFirst("#flash-content"),
				action:  "replace",
				insertHtml: mojo.queryFirst("#noflash-notice").innerHTML
			}
		});
		this.addObserver(this, "onInit", "LoadVideo", function(context, caller) {
			if(!videoId) return;
			//Do the lookup on the div with the videoUrl attribute.
			var videoElement = mojo.queryFirst("#" + videoId), vWidth, vHeight;
			
			if(!videoElement) {
				$("video-not-found").removeClass("hide");
			}
			var videoUrl = videoElement.getAttribute("videoUrl");
			var displayType =  videoElement.getAttribute("displayType");

			//Video dimensions as per flash spec
			switch(displayType) {
				case "BLACK": 	vWidth = 463;
								vHeight = 523;
								break;
				case "BLUE": 	vWidth = 463;
								vHeight = 523;
								break;
				case "WIDE": 	vWidth = 680;
								vHeight = 420;
								break;
			}
			$("flash-content").removeClass("hide");
			return {
				elementId: "flash-content",
				contentName: "main_flash",
				containerId: "#flash-content",
				src: "/flash/videoPlayer/videoPlayer.swf",
				width: vWidth,
				height: vHeight,
				version: "7",
				defaultBackground: "#000",
				expressInstallSrc: "/flash/expressinstall.swf",
				wmode: "transparent",
				flashvars: "videoId=" + videoId + "&videoURL=" + videoUrl + "&displayType=" + displayType + "&p_videoName=" + videoElement.title
			};
		});

		this.addObserver(this, "onInit", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.queryFirst(".gallery-" + videoTag),
				action: "add",
				cssClass: "selected"
			};
		});

		this.addObserver(this, "onInit", "UpdateCssClass", function(context, caller) {
			//Secondary check to make sure that we activate the correct video
			return {
				element: mojo.queryFirst("#" + videoId),
				action: "add",
				cssClass: "active"
			};
		});

		//Finds the active video goes up node and properly moves the filmstrip to the correct page.
		this.addObserver(this, "onInit", "UpdateControllerParam", function(context, caller) {
			var videoBox = mojo.queryFirst("#" + videoId);
			var p = $(videoBox.parentNode).addClass("currentPage");
			var pages = mojo.query("#" + context.id + " .filmstrip-page");
			for(var i = 0, len = pages.length; i < len; i++) {
				if($(pages[i]).hasClass("currentPage")) {
					return {
						element: context,
						control: "stdlib.controller.FilmStripController",
						params: "selectedIndex",
						value: i
					};
					
				}
			}
		});


		this.addObserver(".filmstrip-paginate div", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver(".filmstrip-paginate div", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			};
		});

		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) {
			var activeObj = mojo.query("div.active", context);
			return {
				element: activeObj,
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "add",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) {
			var activeObj = mojo.query("div.active", context);
			return {
				element: activeObj,
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "remove",
				cssClass: "over"
			};
		});


		this.addObserver("ul.filter li span", "onclick", "ScrollCheck", function(context, caller) {
			return {
				element: caller.parentNode.parentNode.parentNode,
				container: caller.parentNode.parentNode.parentNode
			}
		});
		this.addObserver("ul.filter li span", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: caller.parentNode.parentNode.parentNode,
				action: "remove",
				cssClass: "selected"
			};
		});
		this.addObserver("ul.filter li span", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.queryFirst(".gallery-" + caller.className.substring(7), "bd"),
				action: "add",
				cssClass: "selected"
			};
		});
	},
	addCommands: function() {
		this.addCommand("InsertHtml",				"stdlib.behavior.InsertHtmlBehavior");
		this.addCommand("LoadVideo",				"stdlib.behavior.SwfObjectBehavior");
		this.addCommand("UpdateCssClass",			"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
		this.addCommand("UpdateControllerParam",	"stdlib.command.UpdateControllerParamCommand");
		
	},
	addIntercepts: function() { }
});




dojo.provide("dsi.service.Locator");
dojo.require("mojo.service.Locator");
dojo.require("mojo.service.Service");
var __dsiServiceLocator = null;

dojo.declare("dsi.service.Locator", mojo.service.Locator, {
	addServices: function() {
		this.addService(new mojo.service.Service("getLinkData",			"/conduit/?lang=${lang}&type=${type}&color=${color}", {format:"json", cache: false, method: "GET"}));
	}
});

dsi.service.Locator.getInstance = function() {
	if (__dsiServiceLocator == null) {
		__dsiServiceLocator = new dsi.service.Locator();
	}
	return __dsiServiceLocator;
};



dojo.provide("dsi.SiteMap");

dsi.SiteMap = [
	{
		pattern: "#bd",
		controllers: [
			{ controller: "dsi.controller.PillButtonController"}
		]
	},
	{
		pattern: "#footer", // footer
		controllers: [
			{controller: "dsi.controller.FooterController"}
		]
	},
	{
		pattern: "#page", // global
		controllers: [
			{controller: "dsi.controller.GlobalController"}
		]
	},
	{
		pattern: "#container-home", // homepage
		controllers: [
			{controller: "dsi.controller.PillButtonController"},
			{controller: "dsi.controller.home.HomePageController"}
		]
	},
	{
		pattern: "#home-feature-slideshow",
		controllers: [
			{controller: "dsi.controller.home.SlideshowController", params: {selectedIndex: 0, loop: true, cycle: true, slideOffset: 0, duration: 1000}}
		]
	},




	{
		pattern: "#meet-dsi-overview", // Meet DSI - Overview
		controllers: [
			{controller: "dsi.controller.meetdsi.OverviewController"}
		]
	},
	{
		pattern: "#page-meet-dsi-photos #bd", // Meet DSI - Photos
		controllers: [
			{controller: "dsi.controller.meetdsi.PhotosController"}
		]
	},
	{
		pattern: "#page-meet-dsi-sound", // Meet DSi - Sound
		controllers: [
			{controller: "dsi.controller.meetdsi.SoundController"}
		]
	},
	{
		pattern: "#page-meet-dsi-dsiware", // Meet DSi - DSiWare
		controllers: [
			{controller: "dsi.controller.meetdsi.DsiwareController"}
		]
	},
	{
		pattern: '#page-meet-dsi-explore #feature-swatch-dsi', // Meet DSi - Explore - swatch
		controllers: [
			{controller: "dsi.controller.SwatchController", params: { containerId: "#dsi-explore-swatch", imageId: "#dsi-explore-image" }},
			{controller: "dsi.controller.meetdsi.SwatchController"}
		]
	},
	{
		pattern: '#page-meet-dsi-explore #media-filmstrip', // Meet DSi - Explore - filmstrip
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.meetdsi.ExploreController"}
		]
	},
	
	{
		pattern: '#page-meet-dsi-explore #dsi-explore-flash', // Meet DSi - Explore - 360 flash piece
		controllers: [
			{controller: "dsi.controller.meetdsi.Flash360Controller"}
		]
	},
	
	
	
	
	{
		pattern: "#meet-dslite-overview", // Meet DS Lite - Overview
		controllers: [
			{controller: "dsi.controller.meetdslite.OverviewController"}
		]
	},
	{
		pattern: '#page-meet-dslite-explore #feature-swatch-dslite', // Meet DS Lite - Explore - swatch
		controllers: [
			{controller: "dsi.controller.SwatchController", params: { containerId: "#dslite-explore-swatch", imageId: "#dslite-explore-image" }},
			{controller: "dsi.controller.meetdslite.SwatchController"}
		]
	},
	{
		pattern: '#page-meet-dslite-explore #media-filmstrip', // Meet DS Lite - Explore - filmstrip
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.meetdslite.ExploreController"}
		]
	},




	{
		pattern: '#page-videogallery #media-filmstrip0',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.videogallery.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-videogallery #media-filmstrip1',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.videogallery.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-videogallery #media-filmstrip2',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.videogallery.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-videogallery #media-filmstrip3',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.videogallery.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-videogallery #media-filmstrip4',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.videogallery.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-videogallery #media-filmstrip5',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.videogallery.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-videogallery #media-filmstrip6',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.videogallery.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-videogallery #media-filmstrip7',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.videogallery.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-videogallery #media-filmstrip8',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.videogallery.MediaGalleryController"}
		]
	},

{
		pattern: '#page-flipnotestudio #media-filmstrip0',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-flipnotestudio #media-filmstrip1',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-flipnotestudio #media-filmstrip2',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-flipnotestudio #media-filmstrip3',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-flipnotestudio #media-filmstrip4',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-flipnotestudio #media-filmstrip5',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-flipnotestudio #media-filmstrip6',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-flipnotestudio #media-filmstrip7',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.MediaGalleryController"}
		]
	},
	{
		pattern: '#page-flipnotestudio #media-filmstrip8',
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.MediaGalleryController"}
		]
	},



	{
		pattern: "#page-purchase #bd", // Buy Now
		controllers: [
			{controller: "dsi.controller.purchase.PurchaseController"}
		]
	},

	{
		pattern: "#page-dsiware #bd", // DSIWare
		controllers: [
			{controller: "dsi.controller.dsiware.DSiWareController"}
		]
	},


	{
		pattern: "#page-play-online #bd", // play online
		controllers: [
			{controller: "dsi.controller.playonline.PlayOnlineController"}
		]
	},
	{
		pattern: "#page-games #bd", // games
		controllers: [
			{controller: "dsi.controller.games.GamesController"}
		]
	},

	{
		pattern: "#page-support #bd", // support
		controllers: [
			{controller: "dsi.controller.support.SupportController"}
		]
	},
	{
		pattern: "#page-news #bd", // news
		controllers: [
			{controller: "dsi.controller.news.NewsController"}
		]
	},
	
	{
		pattern: '#page-flipnotestudio #media-filmstrip', // Meet DSi - Explore - filmstrip
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.flipnotestudio.ExploreController"}
		]
	},
	{
	
		pattern: '#page-domo #media-filmstrip', // Meet DSi - Explore - filmstrip
		controllers: [
			{controller: "stdlib.controller.FilmStripController", params: { selectedIndex: 0}},
			{controller: "dsi.controller.domo.ExploreController"}
		]
	},


	{ // METRICS MAP MUST BE LAST
		pattern: "body",
		controllers: [
			{ controller: "stdlib.controller.metrics.MetricsController", params: { metricsMap: "dsi.MetricsMap"}}
		]
	}



];


/* 
	Class: dsi.MetricsMap
	Author: A.Chang

	Provides a map for the Metrics Controller to facilitate
	which pages and which elements have Omniture tracking.

*/
dojo.provide("dsi.MetricsMap");
dsi.MetricsMap = {
	pages: [
		{ // LANDING PAGE - universal
			pattern: /[^\/]*/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite home",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "home",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},

		{
			pattern: /meet-dsi.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite meet dsi overview",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "meet-dsi-overview",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},
		{
			pattern: /meet-dsi-photos.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite meet dsi photos",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "meet-dsi-photos",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},
		{
			pattern: /meet-dsi-sound.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite meet dsi sound",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "meet-dsi-sound",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},
		{
			pattern: /meet-dsi-dsiware.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite meet dsi dsiware + dsishop",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "meet-dsi-dsiware-dsishop",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},
		{
			pattern: /meet-dsi-explore.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite meet dsi explore",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "meet-dsi-explore",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},


		{
			pattern: /meet-dslite.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite meet dslite overview",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "meet-dslite-overview",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},
		{
			pattern: /meet-dslite-explore.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite meet dslite explore",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "meet-dslite-explore",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},


		{
			pattern: /games.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite games",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "games",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},

		{
			pattern: /flipnotestudio.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite flipnotestudio overview",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "flipnotestudio-overview",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},
		
		{
			pattern: /flipnotestudio-create.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite flipnotestudio create",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "flipnotestudio-create",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},


		

		{
			pattern: /flipnotestudio-upload.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite flipnotestudio upload",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "flipnotestudio-upload",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},
		
		{
			pattern: /flipnotestudio-hatena.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite flipnotestudio hatena",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "flipnotestudio-hatena",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},
		
		{
			pattern: /flipnotestudio-gallery.jsp/,
			properties: function(caller) {
				var vidTitle = mojo.queryFirst("#hd-vidgallery-player");
				var urlParams = location.search;
				if (urlParams != "") {
					urlParams = urlParams.replace("?videoId=", "");
				} else {
					urlParams="default";
				}
				return {
					pageName: "us:dsi:dsi microsite flipnotestudio gallery",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "videos",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi", /* Site */
					eVar4: "Video Title:" + vidTitle.innerHTML
				};
			}
		},
			{
			pattern: /domo.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite domo",
					channel:"us:ds",
					prop1:  "us:ds:domo", /* Product */
					prop2:  "domo",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},
		{
			pattern: /videogallery.jsp/,
			properties: function(caller) {
				var vidTitle = mojo.queryFirst("#hd-vidgallery-player");
				var urlParams = location.search;
				if (urlParams != "") {
					urlParams = urlParams.replace("?videoId=", "");
				} else {
					urlParams="default";
				}
				return {
					pageName: "us:dsi:dsi microsite videos",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "videos",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi", /* Site */
					eVar4: "Video Title:" + vidTitle.innerHTML
				};
			}
		},


		{
			pattern: /play-online.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite play online",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "play-online",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},


		{
			pattern: /purchase.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite buy now",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "buy-now",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},


		{
			pattern: /news.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite news",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "news",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		},


		{
			pattern: /support.jsp/,
			properties: function() {
				return {
					pageName: "us:dsi:dsi microsite support",
					channel:"us:ds",
					prop1:  "us:ds:dsi", /* Product */
					prop2:  "news",
					prop6:  "us:" + noadsi.dsiLanguage,
					prop16: "us:ds:dsi" /* Site */
				};
			}
		}





	],
	links: [
		{	// purchase button
			pattern: "#nav-purchase a",
			event: "onclick",
			properties: function(caller) {
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: "Buy Now button",
					event14: "Buy Now button",
					events: "event14"
				}
			}
		},

		{	// Club N
			pattern: "#call-clubn a",
			event: "onclick",
			properties: function(caller) {
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar11: "Club Nintendo button",
					event16: "Club Nintendo button",
					events: "event16"
				}
			}
		},
		{	// wifi
			pattern: "#call-wifi a",
			event: "onclick",
			properties: function(caller) {
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					"_global.omniture.channel": "",
					"_global.omniture.prop1" : ""
				}
			}
		},
		{	// News
			pattern: "#call-news a",
			event: "onclick",
			properties: function(caller) {
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: "Newsletter button",
					event16: "Newsletter button",
					events: "event16"
				}
			}
		},


/*

		{	// merchant logo button - Software
			pattern: "#logos-software li a",
			event: "onclick",
			properties: function(caller) {
				var storeName = caller.className;
				storeName = storeName.replace("external","");
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar9: "Retailer button:" + storeName,
					event12: "Retailer button:" + storeName,
					events: "event12"
				}
			}
		},
		{	// merchant logo button - Hardware
			pattern: "#logos-hardware li a",
			event: "onclick",
			properties: function(caller) {
				var storeName = caller.className;
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar9: "Retailer button: " + storeName,
					event12: "Retailer button: " + storeName,
					events: "event12"
				}
			}
		},


		{	// Games page
			pattern: "#game-feature-container li.game-list a.external",
			event: "onclick",
			properties: function(caller) {
				var titleName = caller.getElementsByTagName("span");
				titleName = titleName[0].innerHTML;
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: titleName,
					event17: "Link to external game",
					events: "event17"
				}
			}
		},
		{	// boxart link
			pattern: "#game-feature-container dd.boxart a.external",
			event: "onclick",
			properties: function(caller) {
				var titleName = caller.parentNode.parentNode;
				titleName = titleName.getElementsByTagName("dt");
				titleName = titleName[0].innerHTML;
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: titleName,
					event17: "Link to external game",
					events: "event17"
				}
			}
		},
		{	// boxart link
			pattern: "#game-feature-container dd.buy a.external",
			event: "onclick",
			properties: function(caller) {
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: caller.innerHTML,
					event17: "Link to external game",
					events: "event17"
				}
			}
		},
		{	// learn more
			pattern: "#game-feature-container dl.feature-morevids dd.link a.external",
			event: "onclick",
			properties: function(caller) {
				var titleName = caller.getElementsByTagName("span");
				titleName = titleName[0].innerHTML;
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: titleName,
					event17: "Link to external game",
					events: "event17"
				}
			}
		},
		{	// view all
			pattern: "#game-feature-container dl.feature-morevids dt a.external",
			event: "onclick",
			properties: function(caller) {
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: caller.innerHTML,
					event17: "Link to external game",
					events: "event17"
				}
			}
		},
*/

		{	// DSIWare page newsletter signup
			pattern: "#dsiware-newslink",
			event: "onclick",
			properties: function(caller) {
				return {
					prop6:  "us:" + noadsi.dsiLanguage,
					eVar12: "Newsletter button",
					event16: "Newsletter button",
					events: "event16"
				}
			}
		}



	]
};


dojo.provide("dsi.controller.flipnotestudio.MediaGalleryController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.flipnotestudio.MediaGalleryController", mojo.controller.Controller,
{
	addObservers: function() {
		//grab the querystring
		var qs = window.location.search.substring(1);
//		var hashData = hashData.split("&");
		var hashData = qs.split("&");
		var videoId, videoTag;
		for (var i=0; i<hashData.length; i++) {
			if (hashData[i].indexOf("videoId=")>-1) videoId = hashData[i].replace("videoId=","");
			if (hashData[i].indexOf("videoTag=")>-1) videoTag = hashData[i].replace("videoTag=","");
		}
		if(!videoId) videoId = mojo.query(".box")[0].id.toString();
		if(!videoTag) videoTag = "all";

		this.addObserver(this, "onInit", "InsertHtml", function() {
			return {
				element: mojo.queryFirst("#flash-content"),
				action:  "replace",
				insertHtml: mojo.queryFirst("#noflash-notice").innerHTML
			}
		});
		this.addObserver(this, "onInit", "LoadVideo", function(context, caller) {
			if(!videoId) return;
			//Do the lookup on the div with the videoUrl attribute.
			var videoElement = mojo.queryFirst("#" + videoId), vWidth, vHeight;
			
			if(!videoElement) {
				$("video-not-found").removeClass("hide");
			}
			var videoUrl = videoElement.getAttribute("videoUrl");
			var displayType =  videoElement.getAttribute("displayType");

			//Video dimensions as per flash spec
			/*switch(displayType) {
				case "BLACK": 	vWidth = 463;
								vHeight = 523;
								break;
				case "BLUE": 	vWidth = 463;
								vHeight = 523;
								break;
				case "WIDE": 	vWidth = 396;
								vHeight = 352;
								break;
			}*/
			$("flash-content").removeClass("hide");
			return {
				elementId: "flash-content",
				contentName: "main_flash",
				containerId: "#flash-content",
				src: "/flash/videoPlayer/videoPlayer_extrasmall.swf",
				width: "347",
				height: "252",
				version: "7",
				defaultBackground: "#000",
				expressInstallSrc: "/flash/expressinstall.swf",
				wmode: "transparent",
				flashvars: "videoId=" + videoId + "&videoURL=" + videoUrl + "&displayType=" + displayType + "&p_videoName=" + videoElement.title 
			};
		});

		this.addObserver(this, "onInit", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.queryFirst(".gallery-" + videoTag),
				action: "add",
				cssClass: "selected"
			};
		});

		this.addObserver(this, "onInit", "UpdateCssClass", function(context, caller) {
			//Secondary check to make sure that we activate the correct video
			return {
				element: mojo.queryFirst("#" + videoId),
				action: "add",
				cssClass: "active"
			};
		});

		//Finds the active video goes up node and properly moves the filmstrip to the correct page.
		this.addObserver(this, "onInit", "UpdateControllerParam", function(context, caller) {
			var videoBox = mojo.queryFirst("#" + videoId);
			var p = $(videoBox.parentNode).addClass("currentPage");
			var pages = mojo.query("#" + context.id + " .filmstrip-page");
			for(var i = 0, len = pages.length; i < len; i++) {
				if($(pages[i]).hasClass("currentPage")) {
					return {
						element: context,
						control: "stdlib.controller.FilmStripController",
						params: "selectedIndex",
						value: i
					};
					
				}
			}
		});


		this.addObserver(".filmstrip-paginate div", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver(".filmstrip-paginate div", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			};
		});

		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) {
			var activeObj = mojo.query("div.active", context);
			return {
				element: activeObj,
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "add",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) {
			var activeObj = mojo.query("div.active", context);
			return {
				element: activeObj,
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "remove",
				cssClass: "over"
			};
		});


		this.addObserver("ul.filter li span", "onclick", "ScrollCheck", function(context, caller) {
			return {
				element: caller.parentNode.parentNode.parentNode,
				container: caller.parentNode.parentNode.parentNode
			}
		});
		this.addObserver("ul.filter li span", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: caller.parentNode.parentNode.parentNode,
				action: "remove",
				cssClass: "selected"
			};
		});
		this.addObserver("ul.filter li span", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.queryFirst(".gallery-" + caller.className.substring(7), "bd"),
				action: "add",
				cssClass: "selected"
			};
		});
	},
	addCommands: function() {
		this.addCommand("InsertHtml",				"stdlib.behavior.InsertHtmlBehavior");
		this.addCommand("LoadVideo",				"stdlib.behavior.SwfObjectBehavior");
		this.addCommand("UpdateCssClass",			"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
		this.addCommand("UpdateControllerParam",	"stdlib.command.UpdateControllerParamCommand");
		
	},
	addIntercepts: function() { }
});








dojo.provide("dsi.controller.flipnotestudio.ExploreController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.flipnotestudio.ExploreController", mojo.controller.Controller,
{
	addObservers: function() {
		this.addObserver(".box", "onclick", "ShowImage", function(context, caller) {
			return {
				element: mojo.queryFirst("#dsi-feature-" + caller.id),
				action:   "add",
				cssClass: "show"
			};
		});

		this.addObserver(this, "onInit", "PngFix", function(context, caller) {
			return {
				selector: ".img-gallery-thumb"
			}
		});

		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) { 
			var activesObj = mojo.query(".filmstrip-content div.box", "media-filmstrip");
			return {
				element: activesObj,
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "add",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "remove",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) { 
			var activesObj = mojo.queryFirst(".filmstrip-content div.active", "media-filmstrip");
			return {
				element: activesObj,
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver("a", "onclick",	"ScrollCheck", function(context, caller) {
			var scrollObj = mojo.queryFirst("#flipnotestudio-create");
			return {
				element: scrollObj,
				container: scrollObj
			}
		});
		this.addObserver("a", "onclick",	"ScrollCheck", function(context, caller) {
			var scrollObj = mojo.queryFirst("#flipnotestudio-gallery");
			return {
				element: scrollObj,
				container: scrollObj
			}
		});
		
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			var activesObj = mojo.query(".filmstrip-content a", "media-filmstrip");
			return {
				element: activesObj,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			var activesObj = mojo.query(".filmstrip-content div.box", "media-filmstrip");
			return {
				element: activesObj,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: caller,
				action:   "add",
				cssClass: "active"
			};
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: caller.parentNode,
				action:   "add",
				cssClass: "active selected"
			};
		});
		this.addObserver(this, "onInit", "DisplayDSiFeatures", function(context, caller) { return {
			elementId: "feature-zero"
		}});
		this.addObserver("a", "onclick", "DisplayDSiFeatures", function(context, caller) { return {
			elementId: caller.parentNode.id
		}});

		this.addObserver(".filmstrip-paginate div", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver(".filmstrip-paginate div", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			};
		});



		// playing video
		this.addObserver(mojo.queryFirst("#link-show-video"), "onclick", "PlayVideoOverlay", function(context,caller) {
			var elm = caller.parentNode.parentNode;
			var videoTitle = caller.title;
			var noLocal = caller.getElementsByTagName("strong");
			return {
				element: "video-overlay",
				elmData: "video-data",
				elmHeader: "video-header",
				elmNotice: "video-notice",
				videoTitle: videoTitle,
				videoHref: caller.href,
				noLocalization: noLocal[0].title
			}
		});
		this.addObserver(this.getCommand("PlayVideoOverlay"), "onComplete", "Messaging", function(context,caller) {
			return { topic: "PlayVideoOverlay" };
		});
		
		
		


	},
	addCommands: function() {
		this.addCommand("ShowImage",				"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("PngFix",					"stdlib.behavior.IEPngFixBehavior");
		this.addCommand("DisplayDSiFeatures",	"dsi.behavior.DisplayDSiFeaturesBehavior");
		this.addCommand("PlayVideoOverlay",		"dsi.behavior.PlayVideoOverlayBehavior");
		this.addCommand("Messaging",				"stdlib.behavior.MessagingBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
	},
	addIntercepts: function() { 
		this.addIntercept("before", "ShowImage", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.query(".canvas-image"),
				action: "remove",
				cssClass: "show"
			}
		});
	}
});

dojo.provide("dsi.controller.domo.ExploreController");
dojo.require("mojo.controller.Controller");
dojo.declare("dsi.controller.domo.ExploreController", mojo.controller.Controller,
{
	addObservers: function() {
		this.addObserver(".box", "onclick", "ShowImage", function(context, caller) {
			return {
				element: mojo.queryFirst("#dsi-feature-" + caller.id),
				action:   "add",
				cssClass: "show"
			};
		});

		this.addObserver(this, "onInit", "PngFix", function(context, caller) {
			return {
				selector: ".img-gallery-thumb"
			}
		});

		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) { 
			var activesObj = mojo.query(".filmstrip-content div.box", "media-filmstrip");
			return {
				element: activesObj,
				action:   "remove",
				cssClass: "selected"
			};
		});
		this.addObserver(".box", "onmouseover", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "add",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element: caller,
				action:   "remove",
				cssClass: "over"
			};
		});
		this.addObserver(".box", "onmouseout", "UpdateCssClass", function(context, caller) { 
			var activesObj = mojo.queryFirst(".filmstrip-content div.active", "media-filmstrip");
			return {
				element: activesObj,
				action:   "add",
				cssClass: "selected"
			};
		});
		this.addObserver("a", "onclick",	"ScrollCheck", function(context, caller) {
			var scrollObj = mojo.queryFirst("#domo-page");
			return {
				element: scrollObj,
				container: scrollObj
			}
		});
		
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			var activesObj = mojo.query(".filmstrip-content a", "media-filmstrip");
			return {
				element: activesObj,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			var activesObj = mojo.query(".filmstrip-content div.box", "media-filmstrip");
			return {
				element: activesObj,
				action:   "remove",
				cssClass: "active"
			};
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: caller,
				action:   "add",
				cssClass: "active"
			};
		});
		this.addObserver("a", "onclick", "UpdateCssClass", function(context, caller) {
			return {
				element: caller.parentNode,
				action:   "add",
				cssClass: "active selected"
			};
		});
		this.addObserver(this, "onInit", "DisplayDSiFeatures", function(context, caller) { return {
			elementId: "feature-zero"
		}});
		this.addObserver("a", "onclick", "DisplayDSiFeatures", function(context, caller) { return {
			elementId: caller.parentNode.id
		}});

		this.addObserver(".filmstrip-paginate div", "onmouseover", "UpdateCssClass", function(context, caller) {
			return {
				element:  caller,
				action:   "add",
				cssClass: "hover"
			};
		});
		this.addObserver(".filmstrip-paginate div", "onmouseout", "UpdateCssClass", function(context, caller) { 
			return {
				element:  caller,
				action:   "remove",
				cssClass: "hover"
			};
		});
		
		


		// playing video
		this.addObserver(mojo.queryFirst("#link-show-video"), "onclick", "PlayVideoOverlay", function(context,caller) {
			var elm = caller.parentNode.parentNode;
			var videoTitle = caller.title;
			var noLocal = caller.getElementsByTagName("strong");
			return {
				element: "video-overlay",
				elmData: "video-data",
				elmHeader: "video-header",
				elmNotice: "video-notice",
				videoTitle: videoTitle,
				videoHref: caller.href,
				noLocalization: noLocal[0].title
			}
		});
		this.addObserver(this.getCommand("PlayVideoOverlay"), "onComplete", "Messaging", function(context,caller) {
			return { topic: "PlayVideoOverlay" };
		});
		
		//Omniture for Film Strip
		        //Omniture for Film Strip
		this.addObserver(".filmstrip-viewer .filmstrip-page div#feature-dualscreens a", "onclick", "TrackLink", function(context, caller) {
			return {
				transactionType: "customLink",
				properties: {
					pageName:	"us:dsi:dsi microsite domo:crash course domo",
					prop1:	"us:ds:domo",
					prop7:  "fGMeWaR-Uynitz2rgU-m2FKU-Tq9f9a",
					prop10: "Crash-Course Domo",
					prop11: "sports",
					prop12: "nintendo"
				}
			}
		});
		this.addObserver(".filmstrip-viewer .filmstrip-page div#feature-touch-tech a", "onclick", "TrackLink", function(context, caller) {
			return {
				transactionType: "customLink",
				properties: {
					pageName:	"us:dsi:dsi microsite domo:hard hat domo",
					prop1:	"us:ds:domo",
					prop7:  "aSgk4eXw0bRn6XxH8cEufWQZt0S0zsVb",
					prop10: "Hard-Hat Domo",
					prop11: "puzzles",
					prop12: "nintendo"
				}
			}
		});
		this.addObserver(".filmstrip-viewer .filmstrip-page div#feature-gba a", "onclick", "TrackLink", function(context, caller) {
			return {
				transactionType: "customLink",
				properties: {
					pageName:	"us:dsi:dsi microsite domo:white water domo",
					prop1:	"us:ds:domo",
					prop7:  "WQCJUL5Nthszi63c5-ZB-iGg1olSk-l",
					prop10: "White-Water Domo",
					prop11: "sports",
					prop12: "nintendo",
					prop14: "home"
				}
			}
		});
		this.addObserver(".filmstrip-viewer .filmstrip-page div#feature-multiplayer a", "onclick", "TrackLink", function(context, caller) {
			return {
				transactionType: "customLink",
				properties: {
					pageName:	"us:dsi:dsi microsite domo:rock-n-roll domo",
					prop1:	"us:ds:domo",
					prop7:  "KJDA-zlWdTzVeer2d9SnCixBegrxorFe",
					prop10: "Rock-n-Roll Domo",
					prop11: "simulation",
					prop12: "nintendo"
				}
			}
		});
		this.addObserver(".filmstrip-viewer .filmstrip-page div#feature-wifi a", "onclick", "TrackLink", function(context, caller) {
			return {
				transactionType: "customLink",
				properties: {
					pageName:	"us:dsi:dsi microsite domo:pro putt domo",
					prop1:	"us:ds:domo",
					prop7:  "e5SgOwAJ8ny1xfHjdleV5u1xIcO3EckU",
					prop10: "Pro-Putt Domo",
					prop11: "sports",
					prop12: "nintendo"
				}
			}
		});
		
		
		
		
		


	},
	addCommands: function() {
		this.addCommand("ShowImage",				"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("UpdateCssClass",		"stdlib.behavior.UpdateCssClassBehavior");
		this.addCommand("PngFix",					"stdlib.behavior.IEPngFixBehavior");
		this.addCommand("DisplayDSiFeatures",	"dsi.behavior.DisplayDSiFeaturesBehavior");
		this.addCommand("PlayVideoOverlay",		"dsi.behavior.PlayVideoOverlayBehavior");
		this.addCommand("Messaging",				"stdlib.behavior.MessagingBehavior");
		this.addCommand("ScrollCheck",				"dsi.behavior.ScrollCheckBehavior");
		this.addCommand("TrackLink",			"stdlib.command.metrics.omniture.TransactionCommand");
	},
	addIntercepts: function() { 
		this.addIntercept("before", "ShowImage", "UpdateCssClass", function(context, caller) {
			return {
				element: mojo.query(".canvas-image"),
				action: "remove",
				cssClass: "show"
			}
		});
	}
});


dojo.registerModulePath("dsi", "../../dsi");
dojo.require("mojo.component.Template");
dojo.require("mojo.controller.Map");
dojo.require("mojo.History");
dojo.require("dsi.service.Locator");

var init = function() {
	mojo.History.getInstance();
	var ctrlIniter = mojo.controller.Map.getInstance();
	ctrlIniter.setSiteMap(dsi.SiteMap);
	ctrlIniter.mapControllers(window.location.href);
};
dojo.addOnLoad(init);


/*#################### DSi Kids ####################*/

function dsiKidsSoundSwap(index)
{
    if(index == 1)
    {
        document.getElementById('soundFeatItem1').style.display = 'block';
        document.getElementById('soundFeatItem2').style.display = 'none';
        document.getElementById('soundFeatItem3').style.display = 'none';
    }
    else if(index == 2)
    {
        document.getElementById('soundFeatItem1').style.display = 'none';
        document.getElementById('soundFeatItem2').style.display = 'block';
        document.getElementById('soundFeatItem3').style.display = 'none';
    }
    else if(index == 3)
    {
        document.getElementById('soundFeatItem1').style.display = 'none';
        document.getElementById('soundFeatItem2').style.display = 'none';
        document.getElementById('soundFeatItem3').style.display = 'block';
    }
}

