function qMenu(node, inDelay, outDelay){
	this.inDelay=inDelay;
	this.outDelay=outDelay;
	this.timeOut=null;
	this.timeIn=null;
	this.visibleNode=null
	this.defaultVisibleNode=null;
	this.traverseNode(node);
	this.removeCSSClass(node, "noScript");
}

qMenu.prototype.removeCSSClass=function(node, styleClass){
	var currentClasses=node.className.split(" ");
	var newClasses="";
	for(var i=0; i<currentClasses.length; i++){
		if(currentClasses[i]!=styleClass){
			newClasses+=" "+currentClasses[i];
		}
	}
	node.className=newClasses;
}

qMenu.prototype.closeNode=function(node, showDefault){
	var self=this;
	return function(){
		self.removeCSSClass(node, "over");
		if(self.visibleNode==node){
			if(showDefault && self.defaultVisibleNode){
				self.defaultVisibleNode.className+=" over";
				self.visibleNode=self.defaultVisibleNode;
			}else{
				self.visibleNode=null;
			}
		}
		self.timeOut=null;
	}
}

qMenu.prototype.openNode=function(node){
	var self=this;
	return function(){
		if(self.visibleNode!=null && self.visibleNode!=node){
			if(self.timeOut!=null){
				window.clearTimeout(self.timeOut);
			}
			self.closeNode(self.visibleNode, false)();
		}
		node.className+=" over";
		self.timeIn=null;
		self.visibleNode=node;
	}	
}

qMenu.prototype.nodeOut=function(node){
	var closeFunc=this.closeNode(node, true);
	var self=this;
	return function(){
		if(self.timeIn!=null){
			window.clearTimeout(self.timeIn);
			self.timeIn=null;
			window.clearTimeout(self.timeOut);
			self.timeOut=window.setTimeout(self.closeNode(self.visibleNode, true), self.outDelay);
		}else if(self.visibleNode==node){
			self.timeOut=window.setTimeout(closeFunc, self.outDelay);
		}
	}
}

qMenu.prototype.nodeOver=function(node){
	var openFunc=this.openNode(node);
	var self=this;
	return function(){
		if(self.visibleNode==null){
			openFunc();
		}else if(self.visibleNode==node && self.timeOut!=null){
			window.clearTimeout(self.timeOut);
			self.timeOut=null;
		}else{
			self.timeIn=window.setTimeout(openFunc, self.inDelay);
		}
	}
}


qMenu.prototype.traverseNode=function(node){
	for(var i=0; i<node.childNodes.length; i++){
		childNode = node.childNodes[i];
		if (childNode.nodeName=="LI"){
			this.scriptNode(childNode);
		}
	}
}