 //cludge for problem in init; init running twice
 var count = 0;
 var isIE  = -1;
sM = {

identifyBrowser : function(){
	
	 isIE = !window.opera && navigator.userAgent.indexOf('MSIE') != -1;
	 
},

getCount: function() {
		return count;
},
	
test : function (){
	
	alert("help");
},

init : function () {
	
	if(count > 0){
		return;
	}
	sM.identifyBrowser();
	
	count += 1;
		var uls = document.getElementsByTagName('ul');
		
			for (var u = 0; u < uls.length; u++) {
			
				if (uls[u].className.search(/\bsubmenulink\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) {
							
								sM.addEvent(node, 'mouseover', sM.getMoverFor(node),false);
								sM.addEvent(node, 'mouseout', sM.getMoutFor(node), false);
								node.getElementsByTagName('a')[0].className += ' subheader';
								node.isIn = false;
							}
					}
				
			}
	
},


getMoverFor : function (node){

	if(!isIE){
	return function() {sM.mover (node);};
	}
	else{
		return function () { sM.IEmover (node); };
	}
},

getMoutFor : function  (node) {
	
	if(!isIE){
	return function () { sM.mout (node); };
	}
	else{
		return function () { sM.IEmout (node); };
	}
},

IEmover : function(targetElement) {
	var el = targetElement;
	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';
				}
			}
		
},

IEmout : function(targetElement) {
	var el = targetElement;
	if(!el) return;
	el.outTimeout = setTimeout(function() {sM.IEmout2(el);},300);
		
},

IEmout2 : function (el) {

	for (var i = 0; i < el.childNodes.length; i++) {
		var node = el.childNodes[i];
		if (node.nodeName.toLowerCase() == 'ul' ) {
			node.style.display = 'none';
			
		}
	}
	
	
},
mover :function (targetElement) {
//	var el = window.event ? targetElement : e ? e.target : null;
		//var el = sM.findTarget(e);
	var el = targetElement;
	if(!el) return;		

	clearTimeout(el.outTimeout);
		
		if(el.isIn) {	
			for (var i = 0; i < el.childNodes.length; i++) {			
				var node = el.childNodes[i];
			
					if (node.nodeName.toLowerCase() == 'ul') {
						node.style.display = 'block';
					}
			}
		}
		else{
			for (var i = 0; i < el.childNodes.length; i++) {
			
			var node = el.childNodes[i];
			
				if (node.nodeName.toLowerCase() == 'ul') {
				
					clearInterval(node.intervalID);
					node.clippingRectangle = [0,0,4,0];	
					node.style.display = 'block';
					node.savedOW = node.offsetWidth;
					node.savedOH = node.offsetHeight;
					node.style.display = 'none';
					node.intervalID = setInterval(function() {sM.showMenu(node); }, 10);
					break;			
				}
			}
		}
		el.isIn = true;
},


mout :function (targetElement) {
//	var el = window.event ? targetElement : e ? e.target : null;

//		var el = sM.findTarget(e);
		var el = targetElement;
	if(!el) return;
	el.outTimeout = setTimeout(function() {sM.mout2(el);},1000);
		
},


mout2 : function (el) {

	for (var i = 0; i < el.childNodes.length; i++) {
		var node = el.childNodes[i];
		if (node.nodeName.toLowerCase() == 'ul' ) {
			clearInterval(node.intervalID);
			node.intervalID = setInterval(function() { sM.hideMenu(node); }, 10);
			break;
		}
	}
	el.isIn = false;
	
},

showMenu : function(el) {

	el.clippingRectangle[1] += 20;
	
		if (el.clippingRectangle[1] >= el.savedOW) {
			
			el.clippingRectangle[1] = el.savedOW;
			el.clippingRectangle[2] += 20;
			if(el.clippingRectangle[2] >= el.savedOH) {
				el.clippingRectangle[2] = el.savedOH;
				clearInterval(el.intervalID);
				//reset the clip: browser-specific
				if(document.all && !window.opera) {
					el.style.clip = 'rect(auto)';
				}
				else {
						el.style.clip = '';
				}
				return;
			}
		}
		el.style.clip = 'rect(' + el.clippingRectangle.join('px ') + 'px)';
		el.style.display = 'block';
		
},
			
		

hideMenu : function(el) {
	
		el.clippingRectangle[2] -= 20;
		
		if(el.clippingRectangle[2] <= 4) {
			el.clippingRectangle[2] = 4;
			el.clippingRectangle[1] -= 20;
			if(el.clippingRectangle[1] <= 0) {
				clearInterval(el.intervalID);
				//reset the clip: browser-specific
				if(document.all && !window.opera) {
					el.style.clip = 'rect(auto)';
				}
				else {
					el.style.clip = '';
				}
				el.style.display = 'none';
				return;
			}
		}
		el.style.clip = 'rect(' + el.clippingRectangle.join('px ') + 'px)';
},
	


addEvent : function (elm, evType, fn, useCapture) {

	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;
	}
}
};

sM.addEvent(window, 'load', sM.init, false);
sM.addEvent(window, 'unload', EventCache.flush, false);





