YAHOO.namespace("tsi.menu");

YAHOO.tsi.menu.MenuLoader = function(menus, siteRoot)
{
	if (!(menus instanceof Array))
	{
		throw "Invalid type for parameter 'menus' - Array required";
	}

	this.menuElems = new Object();
	this.menuObjects = new Object();

	var menu
	for (menuIdx in menus)
	{
		var menu = menus[menuIdx];
		this.menuElems[menu] = YAHOO.util.Dom.get(menu);
	}

	this.AjaxCallback = {
		success: this.LoadData,
		failure: this.LoadFailed,
		scope: this
	};

	var prefix = (window.location.href.indexOf("https") === 0 ? "https://" : "http://");
	if (!siteRoot) siteRoot = "www.nysalestax.com";
	this.requestUrl = prefix + siteRoot + "/GetMenuContent.aspx";
	var assets = "/YUILibrary/build/menu/assets/";
	YAHOO.widget.MenuItem.prototype.IMG_ROOT = "http://" + siteRoot + assets;
	YAHOO.widget.MenuItem.prototype.IMG_ROOT_SSL = "https://" + siteRoot + assets;
	YAHOO.widget.MenuItem.prototype.SUBMENU_INDICATOR_IMAGE_PATH = "menuarorght8_nrm_1.gif";
	YAHOO.widget.MenuItem.prototype.SELECTED_SUBMENU_INDICATOR_IMAGE_PATH = "menuarorght8_hov_1.gif";
	YAHOO.widget.MenuItem.prototype.DISABLED_SUBMENU_INDICATOR_IMAGE_PATH = "menuarorght8_dim_1.gif"
	YAHOO.widget.MenuItem.prototype.CHECKED_IMAGE_PATH = "menuchk8_nrm_1.gif"
	YAHOO.widget.MenuItem.prototype.SELECTED_CHECKED_IMAGE_PATH = "menuchk8_hov_1.gif"
	YAHOO.widget.MenuItem.prototype.DISABLED_CHECKED_IMAGE_PATH = "menuchk8_dim_1.gif"
}

YAHOO.tsi.menu.MenuLoader.prototype = new Object();

YAHOO.tsi.menu.MenuLoader.prototype.DoRequest = function()
{
	YAHOO.util.Connect.asyncRequest('GET', this.requestUrl + '?' + this.GetRequestParms(), this.AjaxCallback);
}

YAHOO.tsi.menu.MenuLoader.prototype.GetRequestParms = function()
{
	var retVal = "Menu=";
	var comma = "";
	for (var menu in this.menuElems)
	{
		retVal += comma + menu;
		comma = ",";
	}

	return retVal;
}

YAHOO.tsi.menu.MenuLoader.prototype.LoadData = function(o)
{
	var doc = o.responseXML;
	var menus = doc.getElementsByTagName("menu");
	var menuIdx;
	for (menuIdx = 0; menuIdx < menus.length; ++menuIdx)
	{
		var menu = menus[menuIdx];
		var menuName = menu.getAttribute("name");
		var menuElem = this.menuElems[menuName];
		menuElem.innerHTML = menu.text;
		var parms = { position:"dynamic",
		              showdelay:YAHOO.tsi.menu.MenuLoader.SHOW_TIMEOUT,
		              hidedelay:YAHOO.tsi.menu.MenuLoader.HIDE_TIMEOUT,
		              lazyload:true,
		              constrainttoviewport:true,
		              effect:{ effect:YAHOO.widget.ContainerEffect.FADE,
		                       duration:0.15
		                     }
		            };
		var menuObj = new YAHOO.widget.Menu(menuName, parms);
		menuObj.render();
		YAHOO.tsi.menu.MenuLoader.menuObjects[menuName] = menuObj;
		YAHOO.util.Dom.removeClass(menuElem, "loadHidden");
		var menuOuter = YAHOO.util.Dom.get(menuName + "_outer");
		YAHOO.util.Event.addListener(menuOuter,
		                             "mouseover",
		                             YAHOO.tsi.menu.MenuLoader.menuMouseover,
		                             menuObj);
		YAHOO.util.Event.addListener(menuOuter,
		                             "mouseout",
		                             YAHOO.tsi.menu.MenuLoader.menuMouseout,
		                             menuObj);
	}
}

YAHOO.tsi.menu.MenuLoader.prototype.LoadFailed = function(o)
{
	alert('Failed to load menus.');
}

YAHOO.tsi.menu.MenuLoader.menuObjects = new Object();

YAHOO.tsi.menu.MenuLoader.SHOW_TIMEOUT = 100;

YAHOO.tsi.menu.MenuLoader.HIDE_TIMEOUT = 750;

YAHOO.tsi.menu.MenuLoader.menuShowing = null;

YAHOO.tsi.menu.MenuLoader.menuToHide = null;

YAHOO.tsi.menu.MenuLoader.menuHideTimer = null;

YAHOO.tsi.menu.MenuLoader.menuMouseover = function(e, menu)
{
	if (YAHOO.tsi.menu.MenuLoader.menuHideTimer)
	{
		clearTimeout(YAHOO.tsi.menu.MenuLoader.menuHideTimer);
		YAHOO.tsi.menu.MenuLoader.menuHideTimer = null;
	}

	if (YAHOO.tsi.menu.MenuLoader.menuToHide && YAHOO.tsi.menu.MenuLoader.menuToHide != menu)
	{
		YAHOO.tsi.menu.MenuLoader.menuToHide.hide();
	}

	if (YAHOO.tsi.menu.MenuLoader.menuShowing && YAHOO.tsi.menu.MenuLoader.menuShowing != menu)
	{
		YAHOO.tsi.menu.MenuLoader.menuShowing.hide();
	}

	YAHOO.tsi.menu.MenuLoader.menuToHide = null;
	YAHOO.tsi.menu.MenuLoader.menuShowing = menu;

	menu.show();
}

YAHOO.tsi.menu.MenuLoader.menuMouseout = function(e, menu)
{
	if (YAHOO.tsi.menu.MenuLoader.menuHideTimer)
	{
		clearTimeout(YAHOO.tsi.menu.MenuLoader.menuHideTimer);
	}

	if (YAHOO.tsi.menu.MenuLoader.menuToHide)
	{
		YAHOO.tsi.menu.MenuLoader.menuToHide.hide();
	}

	if (YAHOO.tsi.menu.MenuLoader.menuShowing == menu)
	{
		YAHOO.tsi.menu.MenuLoader.menuShowing = null;
	}

	YAHOO.tsi.menu.MenuLoader.menuToHide = menu;
	YAHOO.tsi.menu.MenuLoader.menuHideTimer = setTimeout(YAHOO.tsi.menu.MenuLoader.menuHideTimeout,
		                                                    YAHOO.tsi.menu.MenuLoader.HIDE_TIMEOUT);
}

YAHOO.tsi.menu.MenuLoader.menuHideTimeout = function()
{
	if (YAHOO.tsi.menu.MenuLoader.menuToHide &&
	    YAHOO.tsi.menu.MenuLoader.menuToHide != YAHOO.tsi.menu.MenuLoader.menuShowing)
	{
		YAHOO.tsi.menu.MenuLoader.menuToHide.hide();
	}

	YAHOO.tsi.menu.MenuLoader.menuHideTimer = null;
	YAHOO.tsi.menu.MenuLoader.menuToHide = null;
}