dojo.provide("tests.webmap.widget.MenuControl");

dojo.require("doh.runner");
dojo.require("webmap.widget.MenuControl");
dojo.require("tests.Util");

var div;
function doMenuControlSetup(){
	tests.Util.resetDom();
	div = document.createElement("div");
	document.body.appendChild(div);
	undockedWin = null;
}

doh.register("tests.webmap.widget.MenuControl", 
	[
		{
			name: "postMixInProperties_rightToLeft",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				tests.assertEqual("slideRight.png", c.openImage);
				tests.assertEqual("slideLeft.png", c.closeImage);
			}
		},
		{
			name: "postMixInProperties_leftToRight",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({slideDirection:webmap.widget.menuSlideDirection.leftToRight}, div);
				tests.assertEqual("slideLeft.png", c.openImage);
				tests.assertEqual("slideRight.png", c.closeImage);
			}
		},
		{
			name: "postCreate_rightToLeft",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var slideIns = 0;
				var f = function(){slideIns++;};
				var c = new webmap.widget.MenuControl({_slideIn:f}, div);
				tests.assertEqual(15, dojo.style(c.contentNode, "marginLeft"));
				tests.assertEqual(document.body.lastChild, c.buttons[0]);
				tests.assertEqual(dojo.style(c.domNode, "zIndex") + 1, dojo.style(c.buttons[0], "zIndex"));
				tests.assertEqual(2, c._subscriptions.length);
				tests.assertEqual(1, slideIns);
			}
		},
		{
			name: "postCreate_leftToRight",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var slideIns = 0;
				var f = function(){slideIns++;};
				var c = new webmap.widget.MenuControl({_slideIn:f,slideDirection:webmap.widget.menuSlideDirection.leftToRight}, div);
				if (dojo.isIE)
					tests.assertEqual("visible", dojo.style(c.contentNode, "overflow-y"));
				else
					tests.assertEqual("0px", dojo.style(c.contentNode, "overflow"));
				tests.assertEqual(document.body.lastChild, c.buttons[0]);
				tests.assertEqual(dojo.style(c.domNode, "zIndex") + 1, dojo.style(c.buttons[0], "zIndex"));
				tests.assertEqual(2, c._subscriptions.length);
				tests.assertEqual(1, slideIns);
			}
		},
		{
			name: "postCreate_with_content_nodeId_mixin",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var menuContent = null;
				var f = function(arg){menuContent = arg;};
				var content = document.createElement("div");
				content.id = "content";
				document.body.appendChild(content);
				var c = new webmap.widget.MenuControl({setContent:f,content:"content"}, div);
				tests.assertEqual(content, menuContent);
			}
		},
		{
			name: "postCreate_with_content_other_mixin",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var f = function(arg){menuContent = arg;};
				var c = new webmap.widget.MenuControl({setContent:f,content:"content"}, div);
				tests.assertEqual("content", menuContent);
			}
		},
		{
			name: "destroy",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				console.warn("Write me!"); try{notWritten++;}catch(ignore){}
			}
		},
		{
			name: "setContent",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var content1 = document.createElement("div");
				content1.id = "content1";
				document.body.appendChild(content1);
				var c = new webmap.widget.MenuControl({content:"content1"}, div);
				tests.assertEqual(content1, c.contentNode.firstChild);
				c.setContent("contentString");
				tests.assertEqual("contentString", c.contentNode.innerHTML);
				tests.assertEqual(null, dojo.byId("content1"));
				var content2 = document.createElement("div");
				content1.id = "content2";
				document.body.appendChild(content2);
				c.setContent(content2);
				tests.assertEqual(content2, c.contentNode.firstChild);
				var content3 = document.createElement("div");
				content1.id = "content3";
				document.body.appendChild(content3);
				var w = new dijit.layout.ContentPane({},content3);
				c.setContent(w);
				tests.assertEqual(content3, c.contentNode.firstChild);
			}
		},
		{
			name: "_getSlideOutArgs_rightToLeft",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				c.startup();
				dojo.style(c.domNode, "left", "0px");
				dojo.style(c.domNode, "top", "0px");
				dojo.style(c.domNode, "width", c.minWidth + "px");
				dojo.style(c.domNode, "height", c.minHeight + "px");
				dojo.style(c.buttons[0], "left", "0px");
				dojo.style(c.buttons[0], "top", "0px");
				var contPos = webmap.util.DhtmlUtil.getWindowPosition(c.pseudoContainer);
				var myPos = webmap.util.DhtmlUtil.getWindowPosition(c.domNode);
				var butPos = webmap.util.DhtmlUtil.getWindowPosition(c.buttons[0]);
				var ieFudge = dojo.isIE ? 2 : 0;
				var box = c._getBox();
				var expected = {
					menu:{
						node:c.domNode,
						properties:{
							left:{start:myPos.l, end:myPos.l},
							top:{start:myPos.t, end:myPos.t},
							width:{start:c.domNode.offsetWidth, end:c.maxWidth},
							height:{start:c.domNode.offsetHeight, end:box.h - 2 + ieFudge},
							opacity:{start:0, end:1}
						}
					},
					button:{
						node:c.buttons[0],
						properties:{
							left:{start:butPos.l, end:contPos.l + c.maxWidth - c.minWidth - 1 - ieFudge},
							top:{start:myPos.t, end:contPos.t}
						}
					}
				};
				tests.assertEqual(expected, c._getSlideOutArgs());
			}
		},
		{
			name: "_getSlideOutArgs_leftToRight",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({slideDirection:webmap.widget.menuSlideDirection.leftToRight}, div);
				c.startup();
				dojo.style(c.domNode, "left", (dijit.getViewport().w - c.minWidth) + "px");
				dojo.style(c.domNode, "top", "0px");
				dojo.style(c.domNode, "width", c.minWidth + "px");
				dojo.style(c.domNode, "height", c.minHeight + "px");
				dojo.style(c.buttons[0], "left", (c.maxWidth - c.buttons[0].offsetWidth) + "px");
				dojo.style(c.buttons[0], "top", "0px");
				var contPos = webmap.util.DhtmlUtil.getWindowPosition(c.pseudoContainer);
				var myPos = webmap.util.DhtmlUtil.getWindowPosition(c.domNode);
				var butPos = webmap.util.DhtmlUtil.getWindowPosition(c.buttons[0]);
				var ieFudge = dojo.isIE ? 2 : 0;
				var box = c._getBox();
				var expected = {
					menu:{
						node:c.domNode,
						properties:{
							left:{start:myPos.l, end:contPos.l + c.pseudoContainer.offsetWidth - c.maxWidth - 2 - ieFudge},
							top:{start:myPos.t, end:myPos.t},
							width:{start:c.domNode.offsetWidth, end:c.maxWidth},
							height:{start:c.domNode.offsetHeight, end:box.h - 2 + ieFudge},
							opacity:{start:0, end:1}
						}
					},
					button:{
						node:c.buttons[0],
						properties:{
							left:{start:butPos.l, end:contPos.l + c.pseudoContainer.offsetWidth - c.maxWidth - 2 - ieFudge},
							top:{start:myPos.t, end:contPos.t}
						}
					}
				};
				tests.assertEqual(expected, c._getSlideOutArgs());
			}
		},
		{
			name: "_getSlideInArgs_rightToLeft",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				c.startup();
				dojo.style(c.domNode, "left", "0px");
				dojo.style(c.domNode, "top", "0px");
				dojo.style(c.domNode, "width", c.maxWidth + "px");
				dojo.style(c.domNode, "height", c.maxHeight + "px");
				dojo.style(c.buttons[0], "left", "0px");
				dojo.style(c.buttons[0], "top", "0px");
				var contPos = webmap.util.DhtmlUtil.getWindowPosition(c.pseudoContainer);
				var myPos = webmap.util.DhtmlUtil.getWindowPosition(c.domNode);
				var butPos = webmap.util.DhtmlUtil.getWindowPosition(c.buttons[0]);
				var box = c._getBox();
				var expected = {
					menu:{
						node:c.domNode,
						properties:{
							left:{start:myPos.l, end:contPos.l},
							top:{start:myPos.t, end:contPos.t + c.offsetTop},
							width:{start:c.domNode.offsetWidth, end:c.minWidth - 2},
							height:{start:c.domNode.offsetHeight, end:c.minHeight},
							opacity:{start:1, end:0}
						}
					},
					button:{
						node:c.buttons[0],
						properties:{
							left:{start:butPos.l, end:contPos.l},
							top:{start:butPos.t, end:(contPos.t + c.offsetTop)}
						}
					}
				};
				tests.assertEqual(expected, c._getSlideInArgs());
			}
		},
		{
			name: "_getSlideInArgs_leftToRight",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({slideDirection:webmap.widget.menuSlideDirection.leftToRight}, div);
				c.startup();
				dojo.style(c.domNode, "left", (dijit.getViewport().w - c.maxWidth) + "px");
				dojo.style(c.domNode, "top", "0px");
				dojo.style(c.domNode, "width", c.maxWidth + "px");
				dojo.style(c.domNode, "height", c.maxHeight + "px");
				dojo.style(c.buttons[0], "left", (dijit.getViewport().w - c.maxWidth) + "px");
				dojo.style(c.buttons[0], "top", "0px");
				var contPos = webmap.util.DhtmlUtil.getWindowPosition(c.pseudoContainer);
				var myPos = webmap.util.DhtmlUtil.getWindowPosition(c.domNode);
				var butPos = webmap.util.DhtmlUtil.getWindowPosition(c.buttons[0]);
				var box = c._getBox();
				var expected = {
					menu:{
						node:c.domNode,
						properties:{
							left:{start:myPos.l, end:contPos.l + c.pseudoContainer.offsetWidth - c.minWidth},
							top:{start:myPos.t, end:contPos.t + c.offsetTop},
							width:{start:c.domNode.offsetWidth, end:c.minWidth - 2},
							height:{start:c.domNode.offsetHeight, end:c.minHeight},
							opacity:{start:1, end:0}
						}
					},
					button:{
						node:c.buttons[0],
						properties:{
							left:{start:butPos.l, end:contPos.l +  c.pseudoContainer.offsetWidth - c.minWidth},
							top:{start:butPos.t, end:(contPos.t + c.offsetTop)}
						}
					}
				};
				tests.assertEqual(expected, c._getSlideInArgs());
			}
		},
		{
			name: "_doMouseOver_openOnHover_false_isOut_false",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				c.startup();
				var isOutCount = 0;
				var slideOutCount = 0;
				c._isOut = function(){isOutCount++; return false;};
				c._slideOut = function(){slideOutCount++;};
				var img =  c.buttons[0].src;
				var file = img.substring(img.lastIndexOf("/"));
				var parts = file.split(".");
				var newFile = img.substring(0, img.lastIndexOf("/")) + parts[0] + "Hover." + parts[1];
				c._doMouseOver();
				tests.assertEqual("block", dojo.style(c.domNode, "display"));
				tests.assertEqual(newFile, c.buttons[0].src);
				tests.assertEqual(0, isOutCount);
				tests.assertEqual(0, slideOutCount);
				
			}
		},
		{
			name: "_doMouseOver_openOnHover_true_isOut_false",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({openOnHover:true}, div);
				c.startup();
				var isOutCount = 0;
				var slideOutCount = 0;
				c._isOut = function(){isOutCount++; return false;};
				c._slideOut = function(){slideOutCount++;};
				var img =  c.buttons[0].src;
				var file = img.substring(img.lastIndexOf("/"));
				var parts = file.split(".");
				var newFile = img.substring(0, img.lastIndexOf("/")) + parts[0] + "Hover." + parts[1];
				c._doMouseOver();
				tests.assertEqual("block", dojo.style(c.domNode, "display"));
				tests.assertEqual(newFile, c.buttons[0].src);
				tests.assertEqual(1, isOutCount);
				tests.assertEqual(1, slideOutCount);
				
			}
		},
		{
			name: "_doMouseOver_openOnHover_false_isOut_true",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return true;};
				var slideOutCount = 0;
				var slideOut = function(){slideOutCount++;};
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideOut:slideOut}, div);
				c.startup();
				var img =  c.buttons[0].src;
				var file = img.substring(img.lastIndexOf("/"));
				var parts = file.split(".");
				var newFile = img.substring(0, img.lastIndexOf("/")) + parts[0] + "Hover." + parts[1];
				c._doMouseOver();
				tests.assertEqual("block", dojo.style(c.domNode, "display"));
				tests.assertEqual(newFile, c.buttons[0].src);
				tests.assertEqual(0, isOutCount);
				tests.assertEqual(0, slideOutCount);
			}
		},
		{
			name: "_doMouseOver_openOnHover_true_isOut_true",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return true;};
				var slideOutCount = 0;
				var slideOut = function(){slideOutCount++;};
				var c = new webmap.widget.MenuControl({openOnHover:true,_isOut:isOut,_slideOut:slideOut}, div);
				c.startup();
				var img =  c.buttons[0].src;
				var file = img.substring(img.lastIndexOf("/"));
				var parts = file.split(".");
				var newFile = img.substring(0, img.lastIndexOf("/")) + parts[0] + "Hover." + parts[1];
				c._doMouseOver();
				tests.assertEqual("block", dojo.style(c.domNode, "display"));
				tests.assertEqual(newFile, c.buttons[0].src);
				tests.assertEqual(1, isOutCount);
				tests.assertEqual(0, slideOutCount);
			}
		},
		{
			name: "_doMouseOver_dormant",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return true;};
				var slideOutCount = 0;
				var slideOut = function(){slideOutCount++;};
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideOut:slideOut}, div);
				c.startup();
				dojo.style(c.domNode, "display", "block");
				window.undockedWin = "not null";
				var img =  c.buttons[0].src;
				c._doMouseOver();
				tests.assertEqual("block", dojo.style(c.domNode, "display"));
				tests.assertEqual(img, c.buttons[0].src);
				tests.assertEqual(0, isOutCount);
				tests.assertEqual(0, slideOutCount);
				window.undockedWin = null;
			}
		},
		{
			name: "_doMouseOut",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				c.startup();
				var img =  c.buttons[0].src;
				c.buttons[0].src = c.buttons[0].src.replace(/.png/, "Hover.png");
				c._doMouseOut();
				tests.assertEqual(img, c.buttons[0].src);
			}
		},
		{
			name: "_doMouseOut_dormant",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				c.startup();
				window.undockedWin = "not null";
				var img =  c.buttons[0].src.replace(/.png/, "Hover.png");
				c.buttons[0].src = img;
				c._doMouseOut();
				tests.assertEqual(img, c.buttons[0].src);
				window.undockedWin = null;
			}
		},
		{
			name: "_doClick_isOut_false",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return false;};
				var slideOutCount = 0;
				var slideOut = function(){slideOutCount++;};
				var slideInCount = 0;
				var slideIn = function(){slideInCount++;};
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideOut:slideOut,_slideIn:slideIn}, div);
				c.startup();
				slideInCount = 0;
				slideOutCount = 0;
				c._doClick();
				tests.assertEqual(1, isOutCount);
				tests.assertEqual(1, slideOutCount);
				tests.assertEqual(0, slideInCount);
			}
		},
		{
			name: "_doClick_isOut_true",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return true;};
				var slideOutCount = 0;
				var slideOut = function(){slideOutCount++;};
				var slideInCount = 0;
				var slideIn = function(){slideInCount++;};
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideOut:slideOut,_slideIn:slideIn}, div);
				c.startup();
				slideInCount = 0;
				slideOutCount = 0;
				c._doClick();
				tests.assertEqual(1, isOutCount);
				tests.assertEqual(0, slideOutCount);
				tests.assertEqual(1, slideInCount);
			}
		},
		{
			name: "_doClick_dormant",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return true;};
				var slideOutCount = 0;
				var slideOut = function(){slideOutCount++;};
				var slideInCount = 0;
				var slideIn = function(){slideInCount++;};
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideOut:slideOut,_slideIn:slideIn}, div);
				c.startup();
				window.undockedWin = "not null";
				slideInCount = 0;
				slideOutCount = 0;
				c._doClick();
				tests.assertEqual(0, isOutCount);
				tests.assertEqual(0, slideOutCount);
				tests.assertEqual(0, slideInCount);
				window.undockedWin = null;
			}
		},
		{
			name: "_isOut_rightToLeft_true",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				c.startup();
				dojo.style(c.buttons[0], "left", (c.maxWidth - c.buttons[0].offsetWidth) + "px");
				tests.assertTrue(c._isOut());
			}
		},
		{
			name: "_isOut_rightToLeft_false",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				c.startup();
				dojo.style(c.buttons[0], "left", "0px");
				tests.assertFalse(c._isOut());
			}
		},
		{
			name: "_isOut_leftToRight_true",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({slideDirection:webmap.widget.menuSlideDirection.leftToRight}, div);
				c.startup();
				dojo.style(c.buttons[0], "left", (c.pseudoContainer.offsetLeft + c.pseudoContainer.offsetWidth - dojo.style(c.buttons[0], "width") - 50) + "px");
				tests.assertTrue(c._isOut());
			}
		},
		{
			name: "_isOut_leftToRight_false",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({slideDirection:webmap.widget.menuSlideDirection.leftToRight}, div);
				c.startup();
				dojo.style(c.buttons[0], "left", (c.pseudoContainer.offsetLeft + c.pseudoContainer.offsetWidth - dojo.style(c.buttons[0], "width") + 5) + "px");
				tests.assertFalse(c._isOut());
			}
		},
		{
			name: "_slideOut",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				c.startup();
				dojo.style(c.domNode, "left", "0px");
				dojo.style(c.domNode, "top", "0px");
				dojo.style(c.domNode, "width", c.minWidth + "px");
				dojo.style(c.domNode, "height", c.minHeight + "px");
				dojo.style(c.buttons[0], "left", "0px");
				dojo.style(c.buttons[0], "top", "0px");
				var contPos = webmap.util.DhtmlUtil.getWindowPosition(c.pseudoContainer);
				var myPos = webmap.util.DhtmlUtil.getWindowPosition(c.domNode);
				var butPos = webmap.util.DhtmlUtil.getWindowPosition(c.buttons[0]);
				var box = c._getBox();
				var expected = {
					menu:{
						node:c.domNode,
						properties:{
							left:{start:myPos.l, end:myPos.l},
							top:{start:myPos.t, end:myPos.t},
							width:{start:c.domNode.offsetWidth, end:c.maxWidth},
							height:{start:c.domNode.offsetHeight, end:box.h - 2},
							opacity:{start:0, end:1}
						}
					},
					button:{
						node:c.buttons[0],
						properties:{
							left:{start:butPos.l, end:contPos.l + c.maxWidth - c.minWidth - 1},
							top:{start:myPos.t, end:contPos.t}
						}
					}
				};
				var anims = new Array();
				var animateProps = function (args){anims.push(args);};
				var conn = dojo.connect(dojo, "animateProperty", animateProps);
				var pubArgs;
				c.checkArgs = function (args){pubArgs = args;};
				var subsc = dojo.subscribe("webmap.widget.MenuControl.opening", c, "checkArgs");
				c._slideOut();
				tests.assertEqual(expected.menu, anims[0]);
				tests.assertEqual(expected.button, anims[1]);
				tests.assertEqual({menuId:c.domNode.id}, pubArgs);
				dojo.disconnect(conn);
				dojo.unsubscribe(subsc);
				console.warn("Could use some beefing up to check more dtails about animations, but how?");
			}
		},
		{
			name: "_slideIn",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				c.startup();
				dojo.style(c.domNode, "left", "0px");
				dojo.style(c.domNode, "top", "0px");
				dojo.style(c.domNode, "width", c.maxWidth + "px");
				dojo.style(c.domNode, "height", c.maxHeight + "px");
				dojo.style(c.buttons[0], "left", "0px");
				dojo.style(c.buttons[0], "top", "0px");
				var contPos = webmap.util.DhtmlUtil.getWindowPosition(c.pseudoContainer);
				var myPos = webmap.util.DhtmlUtil.getWindowPosition(c.domNode);
				var butPos = webmap.util.DhtmlUtil.getWindowPosition(c.buttons[0]);
				var box = c._getBox();
				var expected = {
					menu:{
						node:c.domNode,
						properties:{
							left:{start:myPos.l, end:contPos.l},
							top:{start:myPos.t, end:contPos.t + c.offsetTop},
							width:{start:c.domNode.offsetWidth, end:c.minWidth - 2},
							height:{start:c.domNode.offsetHeight, end:c.minHeight},
							opacity:{start:1, end:0}
						}
					},
					button:{
						node:c.buttons[0],
						properties:{
							left:{start:butPos.l, end:contPos.l},
							top:{start:butPos.t, end:(contPos.t + c.offsetTop)}
						}
					}
				};
				var anims = new Array();
				var animateProps = function (args){anims.push(args);};
				var conn = dojo.connect(dojo, "animateProperty", animateProps);
				c._slideIn();
				tests.assertEqual(expected.menu, anims[0]);
				tests.assertEqual(expected.button, anims[1]);
				dojo.disconnect(conn);
				console.warn("Could use some beefing up to check more dtails about animations, but how?");
			}
		},
		{
			name: "_closeIfNotMe_isMe_isOut_false",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return false;}
				var slideInCount = 0;
				var slideIn = function(){slideInCount++;};
				div.id = "me1";
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideIn:slideIn}, div);
				c.startup();
				slideInCount = 0;
				webmap.publish("webmap.widget.MenuControl.opening",[{menuId:"me1"}]);
				tests.assertEqual(1, isOutCount);
				tests.assertEqual(0, slideInCount);
			}
		},
		{
			name: "_closeIfNotMe_isMe_isOut_true",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return true;}
				var slideInCount = 0;
				var slideIn = function(){slideInCount++;};
				div.id = "me2";
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideIn:slideIn}, div);
				c.startup();
				slideInCount = 0;
				webmap.publish("webmap.widget.MenuControl.opening",[{menuId:"me2"}]);
				tests.assertEqual(1, isOutCount);
				tests.assertEqual(0, slideInCount);
			}
		},
		{
			name: "_closeIfNotMe_notMe_isOut_false",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return false;}
				var slideInCount = 0;
				var slideIn = function(){slideInCount++;};
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideIn:slideIn}, div);
				c.startup();
				slideInCount = 0;
				webmap.publish("webmap.widget.MenuControl.opening",[{menueId:"notMe"}]);
				tests.assertEqual(1, isOutCount);
				tests.assertEqual(0, slideInCount);
			}
		},
		{
			name: "_closeIfNotMe_notMe_isOut_true",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return true;}
				var slideInCount = 0;
				var slideIn = function(){slideInCount++;};
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideIn:slideIn}, div);
				c.startup();
				slideInCount = 0;
				webmap.publish("webmap.widget.MenuControl.opening",[{menueId:"notMe"}]);
				tests.assertEqual(1, isOutCount);
				tests.assertEqual(1, slideInCount);
			}
		},
		{
			name: "_closeIfNotMe_dormant",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var isOutCount = 0;
				var isOut = function(){isOutCount++; return true;}
				var slideInCount = 0;
				var slideIn = function(){slideInCount++;};
				var c = new webmap.widget.MenuControl({_isOut:isOut,_slideIn:slideIn}, div);
				c.startup();
				slideInCount = 0;
				window.undockedWin = "not null";
				webmap.publish("webmap.widget.MenuControl.opening",[{menueId:"notMe"}]);
				tests.assertEqual(0, isOutCount);
				tests.assertEqual(0, slideInCount);
				window.undockedWin = null;
			}
		},
		{
			name: "_getBox_body",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var c = new webmap.widget.MenuControl({}, div);
				tests.assertEqual(dijit.getViewport(), c._getBox());
			}
		},
		{
			name: "_getBox_pseudoContainer",
			setUp: function(){
				doMenuControlSetup();
			},
			runTest: function(){
				var cont = document.createElement("div");
				document.body.appendChild(cont);
				dojo.style(cont, "position", "absolute");
				dojo.style(cont, "left", "50px");
				dojo.style(cont, "top", "100px");
				dojo.style(cont, "width", "600px");
				dojo.style(cont, "height", "400px");
				var c = new webmap.widget.MenuControl({pseudoContainer:cont}, div);
				tests.assertEqual({l:cont.offsetLeft, t:cont.offsetTop, w:cont.offsetWidth, h:cont.offsetHeight}, c._getBox());
			}
		},
		{
			name: "_setContentHeight",
			widget: null,
			connection: null,
			getViewport: dijit.getViewport,
			setUp: function(){
				doMenuControlSetup();
				this.widget = new webmap.widget.MenuControl({}, div);
				dijit.getViewport = function(){return {l:0, t:0, w:800, h:600};};
				var _this = this;
				this.connection = dojo.connect(this.widget, "_setContentHeight",
					function(){
						tests.assertEqual(569, dojo.style(_this.widget.contentNode, "height"));
						_this.doTearDown();
					}
				);
			},
			runTest: function(){
				//slide out triggers _setContentHeight by raising open event
				this.widget._slideOut();
			},
			doTearDown: function(){
				dijit.getViewport = this.getViewport;
				dojo.disconnect(this.connection);
				this.widget.destroy();
			}
		}
	]
);