function MWNav()
{
	if(!window.MarketWatchNav)
	{
		window.MarketWatchNav = new MarketWatchNavigation();
		window.MarketWatchNav.setup();
	}
	return window.MarketWatchNav;
}

function MarketWatchNavigation()
{
	this.menuHandlerClass;
	var browser;
	var menucount = 5;
	var menuArray;
	var myHeadlineCount = 0;
	var badControls = new Array();
	
	this.setup = function()
	{
		browser = BrowserDetect();
		
		menuArray = new Array(menucount);

		this.menuHandlerClass = new MarketWatchMenuHandler();

		browser.getElement("SiteHeader").onmousemove = this.menuHandlerClass.menuMouseOff;
		//area that floats behind the menus to close them onmouseover
		//its designed to catch mouse actions above and to the right of
		//the menu bar itself
		window.onblur = this.menuHandlerClass.menuMouseOff;
		
		for(i = 0; i < menucount; i++)
		{			
			menuArray[i] = new PageElement("cmenu" + i);
			menuArray[i].setClippingFrame(menuArray[i]);
			menuArray[i].setOpenDimensions(browser.getObjectWidth(menuArray[i].SelectedElement), browser.getObjectHeight(menuArray[i].SelectedElement));
			
			menuArray[i].makeWindowShade(1, 8, "bottom");

			menuArray[i].snapShadeClosed();

			menuArray[i].boundMenuTrigger = new PageElement("master" + i);
			menuArray[i].boundMenuTrigger.onMouseOver(this.menuHandlerClass.menuOver);
			menuArray[i].boundMenuTrigger.onMouseMove(this.menuHandlerClass.menuMouseOn);
			menuArray[i].boundMenuTrigger.onMouseOut(this.menuHandlerClass.menuMouseOff);
			menuArray[i].SelectedElement.onmousemove = this.menuHandlerClass.menuMouseOn;
			menuArray[i].SelectedElement.onmouseover = this.menuHandlerClass.menuMouseOn;
			menuArray[i].SelectedElement.onmouseout = this.menuHandlerClass.menuMouseOff;
		}
		this.HeadCounter = new PageElement("myStoryHeadcount");
		this.MenuArray = menuArray;
		this.Initialized = true;
	};
	
	this.initBadControls = function()
	{
		badControls = document.getElementsByTagName("select");
	};

	this.hideBadControls = function()
	{
		if (badControls.length == 0)
		{
			this.initBadControls();
		}
		
		for (i = 0; i < badControls.length; i++)
		{
			if (badControls[i].style != null)
			{
				badControls[i].style.visibility = "hidden";
			}
		}
	};

	this.showBadControls = function()
	{
		if (badControls.length == 0)
		{
			this.initBadControls();
		}
		
		for (i = 0; i < badControls.length; i++)
		{
			if (badControls[i].style != null)
			{
				badControls[i].style.visibility = "visible";
			}
		}
	};

	this.HeadlineCount = myHeadlineCount;
}


MarketWatchNavigation.prototype.addMyHeadline = function(guid, headline)
{
	var menus = this.MenuArray;

	var myStoriesMenu = menus[6];
	var menuList = myStoriesMenu.SelectedElement;
	
	//test for the "Empty" list element. Empty being a actual LI element with the text "Empty" inside.
	if(myStoriesMenu.SelectedElement.firstChild.innerHTML.indexOf("Empty") > -1) //I feel so Empty inside.
	{	
		myStoriesMenu.SelectedElement.removeChild(myStoriesMenu.SelectedElement.firstChild); //Someone has taken away my inner child... ;-)
		myStoriesMenu.openHeight = myStoriesMenu.openHeight - 31;
	}
	else
	{
		this.HeadlineCount = myStoriesMenu.SelectedElement.childNodes.length - 1;
	}
	
	//<li id="sub0">
	var newListItem = document.createElement("li");

	//<a class="menuLink" href="/News/Story/Story.aspx?guid=someguid">Some headline here</a>
	var newHeadlineAnchor = document.createElement("a");
	newHeadlineAnchor.setAttribute("title", headline);
	newHeadlineAnchor.setAttribute("href", "/News/Story/Story.aspx?guid=" + guid);
	
	var newHeadlineTextNode = document.createTextNode(headline);
	newHeadlineAnchor.appendChild(newHeadlineTextNode);
	newHeadlineAnchor.className = "menuLink";
	newHeadlineAnchor.onclick = testClick;
	
	//<span class="menuName">
	var spanMenuName = document.createElement("span");
	spanMenuName.className = "menuName";
	
	//Put them together
	//<li id="sub0">
	//<span class="menuName">
	//	<a class="menuLink">Empty</a>
	//</span>
	//</li>

	if(menuList.childNodes.length > 0)
	{
		myStoriesMenu.openHeight = myStoriesMenu.openHeight + 31;
		menuList.insertBefore(newListItem, menuList.firstChild);
	}
	else
	{
		menuList.appendChild(newListItem);
	}
	
	spanMenuName.appendChild(newHeadlineAnchor);
	newListItem.appendChild(spanMenuName);	

	this.HeadlineCount++; //increment the count of headlines in my stories menu
	//Change count on menu bar
	var counterTextNode = document.createTextNode(this.HeadlineCount);
	this.HeadCounter.SelectedElement.removeChild(this.HeadCounter.SelectedElement.firstChild); //old child orphaned
	this.HeadCounter.SelectedElement.appendChild(counterTextNode);
};

MarketWatchMenuHandler = function()
{
	this.timeout = 0;
};

MarketWatchMenuHandler.prototype.menuOver = function(evt)
{var x = 5;
	evt = (evt) ? evt : event;
	
	var sourceElement = (evt.srcElement) ? evt.srcElement : evt.currentTarget;
	
	var menus = MWNav().MenuArray;
	var masterMenu = findParentMenu(sourceElement);
	MWNav().menuHandlerClass.menuMouseOn(evt);
	
	if(masterMenu)
	{	
		var menuindex = parseInt(masterMenu.id.replace("master", ""));
		for(var i = 0; i < menus.length; i++)
		{
			if(menuindex != i)
			{
				menus[i].hide();
				menus[i].snapShadeClosed();
				menus[i].SelectedElement.parentNode.style.backgroundImage = "";
			}
		}
		
		MWNav().hideBadControls();

		menus[menuindex].show();
		menus[menuindex].toggleShade(true);
		menus[menuindex].SelectedElement.parentNode.style.backgroundImage = "url(http://www.newpacificwestairways.com/images/mainpage/firstbar/background.gif)";
	}
};

MarketWatchMenuHandler.prototype.menuOut = function(evt)
{var x = 5;

	evt = (evt) ? evt : event;
	var menus = MWNav().MenuArray;
	
	for(var i = 0; i < menus.length; i++)
	{
		menus[i].SelectedElement.parentNode.style.backgroundImage = "";
		menus[i].toggleShade(false);
	}

	MWNav().showBadControls();
};


//menuMouseOff and menuMouseOn catch events that may or may not
//actually be desired mouse events. For instance, they are to
//be fired when the user moves off of a submenu, but get
//cancelled when the user moves back on the menu. This process
//happens frequently when the mouse is moved from element to element.
MarketWatchMenuHandler.prototype.menuMouseOff = function(evt)
{
	if(MWNav().menuHandlerClass.timeout == 0)
	{
		MWNav().menuHandlerClass.timeout = setTimeout(function(){MWNav().menuHandlerClass.menuOut(evt);}, 250);
	}
};

MarketWatchMenuHandler.prototype.menuMouseOn = function(evt)
{
	if(MWNav().menuHandlerClass.timeout > 0)
	{
		clearTimeout(MWNav().menuHandlerClass.timeout);
		MWNav().menuHandlerClass.timeout = 0;
	}
};
	
function findParentMenu(element)
{
	if(element)
	{
		if(element.id.indexOf("master") > -1)
		{
			return element;
		}
		else
		{
			return findParentMenu(element.parentElement);
		}
	}
	else
	{
		return null;
	}
}

var RequestObj = {
	
	 getRequest: function()
	 {
		 var xmlHttp = false;
        
		 try 
		 {
		    xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		 } 
		 catch (msxml2Exception) 
		 {
		    try 
			{
			   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (microsoftException) 
			{
			   xmlHttp = false;
			}
		 }
        	
		 if (!xmlHttp && typeof XMLHttpRequest != 'undefined') 
		 {
		    xmlHttp = new XMLHttpRequest();
		 }
        	
		 return xmlHttp; 
	 }
};

function testClick(link)
{
	var x = 5;
	var foo = link;
}
