var submenus = [];
function Submenu(name,dropdown_id,callout_id){
	this.name = name;
	this.elements = {dropdown:$(dropdown_id),callout:$(callout_id)};
	this.children = {};
	this.delay = 0.5;
	this.timeout = false;
	this.n = submenus.length;
	submenus[this.n] = this;
	this.verify = function(n){
		var self = submenus[n];
		if(!self||!self.elements) return false;
		for(var e in self.elements){
			if(!self.elements[e]) return false;
		}
		return true;
	};
	this.show = function(n,parent_id){
		var self = submenus[n];
		if(!self) return false;
		if(!parent_id||(parent_id!==true&&typeof(self.children[parent_id])=="undefined")){
			if(self.timeout) clearTimeout(self.timeout);
			self.timeout = setTimeout(self.name+".clear("+n+")",self.delay*1000);
			return false;
		}
		if(self.timeout) clearTimeout(self.timeout);
		self.timeout = false;
		if(parent_id===true||typeof(self.children[parent_id])=="undefined") return false;
		if(typeof(self.children[parent_id]["node"])!="undefined"){
			self.elements["dropdown"].update(self.children[parent_id]["node"].innerHTML);
			self.elements["dropdown"].show();
			self.elements["callout"].show();
			self.position(n,parent_id);
		}else{
			self.buildChild(n,parent_id);
			self.show(n,parent_id);
		}
	};
	this.clear = function(n){
		var self = submenus[n];
		if(!self) return false;
		self.elements["dropdown"].hide();
		self.elements["callout"].hide();
	};
	this.position = function(n,parent_id){
		var self = submenus[n];
		if(!self) return false;
		var parent = $(parent_id);
		if(!parent) return false;
		if(self.children[parent_id]&&self.children[parent_id]["nodecount"]>0){
			var div = $(parent.parentNode.parentNode.parentNode.parentNode.parentNode);
			var td = $(parent.parentNode);
			var offset1 = div.cumulativeOffset();
			var offset2 = td.cumulativeOffset();
			if(td.hasClassName('last')){
				self.elements["dropdown"].setStyle({top:(offset1[1]+div.getHeight())+"px",left:(offset2[0]+td.getWidth()-self.elements["dropdown"].getWidth())+"px"});
			}else{
				self.elements["dropdown"].setStyle({top:(offset1[1]+div.getHeight())+"px",left:offset2[0]+"px"});
			}
			self.elements["callout"].setStyle({top:offset1[1]+"px",left:(offset2[0]+(td.getWidth()-self.elements["callout"].getWidth())/2)+"px"});
		}else{
			self.clear(n);
		}
	};
	this.addChild = function(n,parent_id,items){
		var self = submenus[n];
		if(!self) return false;
		self.children[parent_id] = items;
		var n = 0;
		for(var i in self.children[parent_id]) n++;
		self.children[parent_id]["nodecount"] = n;
	};
	this.buildChild = function(n,parent_id){
		var self = submenus[n];
		if(!self) return false;
		if(!self.children[parent_id]) return false;
		var div = new Element('div');
		var last = false;
		for(var i in self.children[parent_id]){
			if(i=="node"||i=="nodecount") continue;
			var a = new Element('a',{href:self.children[parent_id][i],onmouseover:self.name+".show("+n+",true)",onmouseout:self.name+".show("+n+",false)"});
			last = a;
			a.update(i);
			div.insert(a);
		}
		if(last) last.addClassName("last");
		self.children[parent_id]["node"] = div;
	};
}
