var waitMillis = 300;
var needKill = undefined;
var timeout = undefined;
var findSF = new RegExp("( ?|^)sfhover\\b");
var findDSF = new RegExp("( ?|^)delayhover\\b");
var needIframeHack = false;


/* inspired by Son of Suckerfish - massively modified */
sfHover = function()
{if(document.getElementById("prodnav") != undefined){
	//hovering actions for all menu LIs
	var sfEls = document.getElementById("prodnav").getElementsByTagName("li");
	for(var i=0; i<sfEls.length; i++)
	{
		sfEls[i].onmouseover = function() {makeHover(this);};
		sfEls[i].onmouseout = function() {killHover(this);};
	}
}}

/* 
 * Delayhover effectively creates a phase-shifted version of sfhover
 * that runs parallel with it.  The CSS listens for any of the hover
 * options: :hover, .sfhover, and .delayhover.  There are multiple
 * checkpoints in the code to prevent asynchronous modification of the
 * same objects, or at least provide recovery (If a menu gets left open
 * somehow, a mouseover-mouseout will probably fix it - I've never
 * seen this, though).
 * code reference: Tim Mc.
 */
delayHover = function()
{if(document.getElementById("prodnav") != undefined){
	//override hovering actions for top-level LIs
	var sfTopEls = document.getElementById("prodnav").childNodes;
	var el = undefined;
	var menudrop = undefined;
	var suppr = undefined;
	for(var i=0; i<sfTopEls.length; i++)
	{
		el = sfTopEls[i];
		if(el.nodeType==1 && el.id.indexOf("menucat")!=-1)/* avoid comment nodes and "what fits my car" (otherwise kills menus onhover W.F.M.C. - very hard-to-find bug) */
		{
			el.onmouseover = function() { makeDelayHover(this); };
			el.onmouseout = function() { killDelayHover(this); };
			
			if(needIframeHack)
			{
				menudrop = el.getElementsByTagName("ul")[0];
				suppr = document.createElement("iframe");
				suppr.src="/blank.htm";
				el.insertBefore(suppr, menudrop);
				setIframeHack(false, el);
				//show and hide in the delayhover path
			}

		}
	}
}}

function killDelayHover(litem)
{
	removeDelayHover();/* don't want multiple timers - we can only deal with one at a time. */
	needKill = litem;
	timeout = setTimeout("removeDelayHover();", waitMillis);
}

function makeHover(litem)
{
	litem.className += (litem.className.length>0? " ": "") + "sfhover";
}

function killHover(litem)
{
	if(litem != undefined)
	{
		litem.className = litem.className.replace(findSF, "");
	}
}

function makeDelayHover(litem)
{
	removeDelayHover();
	if(needIframeHack)
		setIframeHack(true, litem);
	litem.className += (litem.className.length>0? " ": "") + "delayhover";
	exchangeOn(litem);
	
}

function removeDelayHover()
{
	if(needKill != undefined)
	{
		window.clearTimeout(timeout);
		needKill.className = needKill.className.replace(findDSF, "");
		exchangeOff(needKill);
		if(needIframeHack)
			setIframeHack(false, needKill);
		needKill = undefined;
	}
}

/* helper for dropdown show/hide in IE - suppress <select> elements */
function setIframeHack(isOn, parentLI)
{
	var menudrop = parentLI.getElementsByTagName("ul")[0];
	var ifr = parentLI.getElementsByTagName("iframe")[0];
	if(isOn)
	{
		ifr.style.width = menudrop.offsetWidth;//in the future, we could cache these values after the first showing
		ifr.style.height = menudrop.offsetHeight;
		ifr.style.top = menudrop.style.top;
		ifr.style.left = menudrop.style.left;
		ifr.style.zIndex = menudrop.style.zIndex + 1;
		ifr.style.display = "none";
	}
	else
	{
		ifr.style.display = "none";
	}
}

/* Attach page modifiers when window loads */
// only ie needs the sfHover script. all need the accessibility script...
// thanks http://www.brothercake.com/site/resources/scripts/onload/
// somewhat modified
if(window.addEventListener) // gecko, safari, konqueror and standard
{
	window.addEventListener('load', delayHover, false);
}
else if(document.addEventListener) // opera 7
{
	document.addEventListener('load', delayHover, false);
}
else if(window.attachEvent) // win/ie
{
	needIframeHack = true;
	
	window.attachEvent('onload', delayHover);//do not switch delayHover and sfHover...
	window.attachEvent('onload', sfHover);//...otherwise, IE will inexplicably ignore delayHover.  Can it only have one, maybe?
}
//else { //we don't support dropdowns with mac-ie5 - degrade gracefully to button-bar } // mac/ie5



/* hover states for images */
function exchangeOn(litem) {
	var grafix = litem.getElementsByTagName("img")[0];
	grafix.src = grafix.src.replace("_off.", "_on.");
}

function exchangeOff(litem) {
	var grafix = litem.getElementsByTagName("img")[0];
	grafix.src = grafix.src.replace("_on.", "_off.");
}

/* Hack to stop the very strange increasing-gap-on-back-button bug on ProdMenu - reflows content after load */
/* Does it have something to do with the iframe hack? */
if(window.attachEvent) // win/ie
{
	window.attachEvent(
		'onload',
		function() {
			var any = document.getElementById("specialOffers");
			if(any==undefined) return;
			makeHover(any);
			killHover(any);
		}
	);
}


function SwitchMenu(obj){
  var imgname = obj.substring(3);
  imgname = "imgsub" + imgname;
  if(!obj) { return; }
  var el = document.getElementById(obj);
  if(el.style.display != "block")
  {
    el.style.display = "block";
    document.images[imgname].src = "./images/minus.jpg";
  }
  else
  {
    el.style.display = "none";
    document.images[imgname].src = "./images/expand.jpg";
  }
}
