sfHover = function() {
	var sfEls = document.getElementById("menu").getElementsByTagName("LI");
	for (var i=0; i<sfEls.length; i++) {
		// hide previous siblings background image
		if (sfEls[i].parentNode.id == "menu") {
			// implemented try catch to fix errors on international pages
			try {
				if (sfEls[i].firstChild.id == "selected" && sfEls[i].firstChild.className != "first") {
					var oNode = sfEls[i].previousSibling;
					if (oNode) {
						// Ignore whitespace - Firefox
						while(oNode != null && oNode.nodeType != 1){
							oNode = oNode.previousSibling;
						}
						oNode.firstChild.className = "borderOff";
					}
				}
			} catch (e) { }
		}
		sfEls[i].onmouseover=function() {
			handleLevelOneRoll(this, "on");
			if (window.attachEvent)
			{
				//alert(""+this.className);
				this.className+=" sfhover";
				//alert(""+this.className);
				//this.style.color = "#0f0";
			}
		}
		sfEls[i].onmouseout=function() {
			handleLevelOneRoll(this, "off");
			if (window.attachEvent)
			{
				this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
				//this.style.color = "#0f0";
			}
		}
	}
}

function handleLevelOneRoll(oListElement, sState)
{
	var oLevelOne = oListElement;
	var sBackgroundColor = (sState == "on") ? "#fff" : "#006";
	// begin
	//var sColor = (sState == "on") ? "#90c" : "#90c";
	// end
	//alert(""+sState+":"+sColor+"C "+oListElement.innerHTML);
	
	// hide previous list items background
	if (getAncestry(oLevelOne, 1).id == "menu") {
		//var oNode = oLevelOne;
		var oNode = oLevelOne.previousSibling;
		// Ignore whitespace - Firefox
		while(oNode != null && oNode.nodeType != 1){
			oNode = oNode.previousSibling;
		}
		if (oNode != null) {
			if (sState == "on" && oNode.firstChild.id != "selected") {
				oNode.firstChild.className = "borderOff";
			} else if (oNode.firstChild.id != "selected" && oLevelOne.firstChild.id != "selected") {
				oNode.firstChild.className = "border";
			}
		}		
	}
	
	while (getAncestry(oLevelOne, 1).id != "menu")
	{
		oLevelOne = getAncestry(oLevelOne, 1);
	}
	
	//oLevelOne.style.backgroundColor = sBackgroundColor;
	// begin
	//oLevelOne.style.color = sColor;
	//alert("hallo"+sColor+oLevelOne.innerHTML);
	// end
}

addEvent(window, "load", sfHover, false);

function getThis(sId)
{
	var oObject;
	oObject = false;
	
	if (document.getElementById) {
		if (document.getElementById(sId)) {
			oObject = document.getElementById(sId);
		}
	}
	
	return oObject;
}

function changeStyle(oElement, sPropertyName, sNewValue)
{
	if (oElement) {
		var oStyle = oElement.style;
		if (isArray(sPropertyName) && isArray(sNewValue) && sPropertyName.length == sNewValue.length) {
			for (var i = 0; i < sPropertyName.length; i++) {
				eval("oStyle." + sPropertyName[i] + " = '" + sNewValue[i] + "'");
			}
		} else {
			eval("oStyle." + sPropertyName + " = '" + sNewValue + "'");
		}
	}
}

function getStyle(oElement, sPropertyName)
{
	var sReturn = false;
	
	if (oElement) {
		oStyle = oElement.style;
		sReturn = eval("oStyle." + sPropertyName);
	}
	
	return sReturn;
}

function getAncestry(oElement, iLevels)
{
	sEvalString = "oElement";
	
	for (var i = 0; i < iLevels; i++) {
		sEvalString += ".parentNode";
	}
	try {
		return eval(sEvalString);
	} catch(oError) {
		return false;
	}
}

var DEBUG_STATE = true;
function debugInfo(sString)
{
	var oDebugger = getThis("debugger");
	if (DEBUG_STATE && oDebugger != false) {
		oDebugger.innerHTML += "<br />" + sString;
	}
}

function startBenchmark()
{
	dStart = new Date().getTime();
}

function endBenchmark()
{
	dEnd = new Date().getTime();
	alert("Elapsed time: " + ((dEnd - dStart)/1000) + " seconds");
}

function isArray() 
{
	if (typeof arguments[0] == 'object') {  
		var criterion = arguments[0].constructor.toString().match(/array/i);
 		return (criterion != null);
	}
	return false;
}

// event attacher
function addEvent(obj, evType, fn, useCapture){
  if (obj.addEventListener){
    obj.addEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Sorry, your browser does not supported this functionality.");
  }
}

function removeEvent(obj, evType, fn, useCapture){
	if (obj.removeEventListener){
    	obj.removeEventListener(evType, fn, useCapture);
  		return true;
  } else if (obj.detachEvent){
  		var r = obj.detachEvent("on"+evType, fn);
    	return r;
  } else {
    	debugInfo("Handler could not be removed");
  }
}