var MENU_DELAY = 500;

function getDiv(id) {
	if (document.getElementById) {
		return document.getElementById(id);
	}
	
	if (document.all) {
		return document.all[id];
	}
	
	if (document.layers) {
		return document.all[id];
	}
	
	return null;
}

function hilite(element) {
	if (element) {
		if (element.className) {
			element.className = element.className.replace(/ on$/, "");
			element.className = element.className.replace(/on$/, "");
			element.className  = element.className + " on";
		} else {
			element.className  = "on";
		}
	}
}

function lolite(element) {
	if (element && element.className) {
		element.className = element.className.replace(/ on$/, "");
		element.className = element.className.replace(/on$/, "");
	}
}

function setOpacityIE(node, op) {
	// interger percent
	node.style.filter = "alpha(opacity=" + op + ")";
}
function setOpacityOther(node, op) {
	// interger percent
	node.style.opacity = op/100;
}

var setOpacity;
var FADE_DELAY = 3;
var FADE_DELAY2 = 3;
var FADE_OUT_DELAY = 100;
if (is_ie) {
	FADE_OUT_DELAY = 200;
	setOpacity = setOpacityIE;
} else {
	setOpacity = setOpacityOther;
}

function fadeIn(node) {
	if (node.curr_opacity < 100) {
		node.curr_opacity += 10;
		setOpacity(node, node.curr_opacity);
		node.fade_timer = setTimeout(function () {fadeIn(node);}, FADE_DELAY);
	} else {
        node.fade_timer = null;
	}
}

function fadeOut(node) {
	if (node.curr_opacity && node.curr_opacity <= 0) {
		lolite(node.parentNode);
        node.fade_timer = null;
	} else {
		node.curr_opacity -= 10;
		setOpacity(node, node.curr_opacity);
		node.fade_timer = setTimeout(function () {fadeOut(node);}, FADE_DELAY);
	}
}

function fadeInMenu(node) {
    if (node.timer) {
	// cancel fade out trigger
		clearTimeout(node.timer);
		node.timer = null;
    }
	var div = getSubmenu(node);
	
	if (div != null)
	{
    	
	    if (div.fade_in) {
		    return;
	    }
        if (div.fade_timer) {
		    if (div.fade_out) {
			    // cancel fade out
			    clearTimeout(div.fade_timer);
			    div.fade_timer = null;
		    } else {
			    return;
		    }
        }
	    if (!div.curr_opacity) {
		    div.curr_opacity = 0;
	    }
	    div.fade_in = true;
	    div.fade_out = false;
	    setOpacity(div, div.curr_opacity);
	    hilite(node);
	    adjustSubMenus(div);
        div.fade_timer = setTimeout(function () {fadeIn(div);}, FADE_DELAY);
        
    }
}

function fadeOutMenu(node) {
	var div = getSubmenu(node);
	
	if (div != null)
	{
	    if (div.fade_out) 
	    {
		    return;
	    }
	
        node.timer = setTimeout(function () {startFadeOut(div);}, FADE_OUT_DELAY);
    }
}

function startFadeOut(div) {
	div.parentNode.timer = null;
    if (div.fade_timer && div.fade_in) {
		// cancel fade in
		clearTimeout(div.fade_timer);
		div.fade_timer = null;
    }
	div.fade_in = false;
	div.fade_out = true;
    div.fade_timer = setTimeout(function () {fadeOut(div);}, FADE_DELAY);
}


function getSubmenu(node) {
	if (!node.div) {
		var divs = node.getElementsByTagName("DIV");
		// no safety net. if there's no child div, it means the html is screwed up.
		node.div = divs[0];
	}
	return node.div;
}

var showMenu;
var hideMenu;
if (is_safari) {
	//showMenu = hilite;
	//hideMenu = lolite;
	showMenu = fadeInMenu;
	hideMenu = fadeOutMenu;
} else {
	showMenu = fadeInMenu;
	hideMenu = fadeOutMenu;
}

function fadeInBkg(node) {
    if (node.timer) {
		clearTimeout(node.timer);
		node.timer = null;
    }
	if (!node.curr_opacity) {
		node.curr_opacity = 0;
	}
	node.fade_in = true;
	node.fade_out = false;
    node.timer = setTimeout(function () {_fadeInBkg(node);}, FADE_DELAY2);
}

function fadeOutBkg(node) {
    if (node.timer) {
		clearTimeout(node.timer);
		node.timer = null;
    }
	node.fade_in = false;
	node.fade_out = false;
    node.timer = setTimeout(function () {_fadeOutBkg(node);}, FADE_DELAY2);
}

function _fadeInBkg(node) {
	if (node.curr_opacity < 8) {
		node.curr_opacity += 1;
		node.className = "bg_" + node.curr_opacity;
		node.timer = setTimeout(function () {_fadeInBkg(node);}, FADE_DELAY2);
	} else {
        node.timer = null;
	}
}

function _fadeOutBkg(node) {
	if (node.curr_opacity && node.curr_opacity <= 0) {
		node.className = "";
        node.timer = null;
	} else {
		node.curr_opacity -= 1;
		node.className = "bg_" + node.curr_opacity;
		node.timer = setTimeout(function () {_fadeOutBkg(node);}, FADE_DELAY2);
	}
}

function adjustSubMenus(div) {
// only firefox seems to need this (so far)
// but the sniffer doesn't seem to identify FF 2.0
    if (is_moz && !div.adj) {
        var child = div.getElementsByTagName("UL");
        if (child.length > 0) {
            adjustSubMenu(child[0]);
        } 
        div.adj = true;
    }
}

function adjustSubMenu(ul) {
// isn't the an "elements" for ul or somehting?
    var elms = ul.getElementsByTagName("LI");
    var max = 0;
    for (var i = 0; i < elms.length; i++) {
        max = Math.max(max,elms[i].offsetWidth);
    }
    for (var i = 0; i < elms.length; i++) {
        elms[i].style.width = max + "px";
    }
}


// from homepage.ntlworld.com/bobosola/pnginfo.htm
// could probably use the sniffer we already have ...
var arVersion = navigator.appVersion.split("MSIE")
var version = parseFloat(arVersion[1])

function fixPNG(myImage) 
{
    if ((version >= 5.5) && (version < 7) && (document.body.filters)) 
    {
       var imgID = (myImage.id) ? "id='" + myImage.id + "' " : ""
	   var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : ""
	   var imgTitle = (myImage.title) ? 
		             "title='" + myImage.title  + "' " : "title='" + myImage.alt + "' "
	   var imgStyle = "display:inline-block;" + myImage.style.cssText
	   var strNewHTML = "<span " + imgID + imgClass + imgTitle
                  + " style=\"" + "width:" + myImage.width 
                  + "px; height:" + myImage.height 
                  + "px;" + imgStyle + ";"
                  + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
                  + "(src=\'" + myImage.src + "\', sizingMethod='scale');\"></span>"
	   myImage.outerHTML = strNewHTML	  
    }
}
function trim(value) {
   var temp = value;
   var obj = /^\s*([\W\w]*)\s*$/;
   if (obj.test(temp)) { temp = temp.replace(obj, '$1'); }
   return temp;
}

function launchMapQuest(winurl,winname,winfeatures) {
	window.open(winurl,winname,winfeatures);
}