function addEvent(elm, evType, fn, useCapture){
// cross-browser event capture by Scott Andrew
	if(elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}else if(elm.attachEvent){
		var r = elm.attachEvent('on' + evType, fn);
		EventCache.add(elm, evType, fn);
		return r;
	}else{
		elm['on' + evType] = fn;
	}
} // end addEvent

function init(){
	var uls = document.getElementsByTagName('ul');
	for(var u = 0; u < uls.length; u++){
		if(uls[u].className.search(/\bslidingmenu\b/) == -1)
			continue;
		var lis = uls[u].getElementsByTagName('li');
		for(var i = 0; i < lis.length; i++){
			var node = lis[i];
			if(node.nodeName.toLowerCase() == 'li' && node.getElementsByTagName('ul').length > 0){
			addEvent(node, 'mouseover', getMoverFor(node), false);
			addEvent(node, 'mouseout', getMoutFor(node), false);
			node.getElementsByTagName('a')[0].className += ' subheader';
			}
		}
	}

	var divs = document.getElementsByTagName('div');
	for(var d = 0; d < divs.length; d++){
		if(divs[d].className.search(/\bMenuHolder\b/) == -1)
			continue;
		var spans = divs[d].getElementsByTagName('span');
		var node = spans[0];
		addEvent(node, 'mouseover', getMoverFor(node), false);
		addEvent(node, 'mouseout', getMoutFor(node), false);
	}
} // end init

addEvent(window, 'load', init, false);
addEvent(window, 'unload', EventCache.flush, false);

function getMoverFor(node){
	return function(e){mover(e, node);};
}

function getMoutFor(node){
	return function(e){mout(e, node);};
}

function mover(e, targetElement){
//	alert("Here");
	var el = window.event ? targetElement : e ? e.currentTarget : null;

	if(!el){ return;}

	clearTimeout(el.outTimeout);

	for(var i = 0; i < el.childNodes.length; i++){
		var node = el.childNodes[i];
		if(node.nodeName.toLowerCase() == 'ul'){
			node.style.display = 'block';
			//createIframeLayer(node);
		}
	}

} // end mover

function mout(e, targetElement){
	var el = window.event ? targetElement : e ? e.currentTarget : null;
	if(!el) return;
	el.outTimeout = setTimeout(function(){mout2(el);}, 100);
}

function mout2(el){
	for(var i = 0; i < el.childNodes.length; i++){
		var node = el.childNodes[i];
		if(node.nodeName.toLowerCase() == 'ul'){
			node.style.display = 'none';
			//removeIframeLayer(node);
		}
	}
}

function createIframeLayer(menu){

	// Check there is not already an iframe
	var pnode = menu.parentNode;
	var exists = 0;
	for(var i = 0;i < pnode.childNodes.length;i++){
		if(pnode.childNodes[i].nodeName.toLowerCase() == 'iframe'){
		exists = 1;
		}
	}

	if(exists == 0){
		var layer = document.createElement('iframe');
		layer.tabIndex = '-1';
		layer.src = 'javascript:false;';
		menu.parentNode.appendChild(layer);

		layer.style.left = menu.offsetLeft + 'px';
		layer.style.top = menu.offsetTop + 'px';
		layer.style.width = menu.offsetWidth + 'px';
		layer.style.height = menu.offsetHeight + 'px';
		layer.style.position = 'absolute';
		layer.style.border = 'none';
		layer.style.zIndex = 2;
	}
} // end createIframeLayer

function removeIframeLayer(menu){
	var layers = menu.parentNode.getElementsByTagName('iframe');
	while(layers.length > 0){
	layers[0].parentNode.removeChild(layers[0]);
	}
} // end removeIframeLayer