function vMenu(orgx,orgy,T,mode,up){
	var i,busy,stat,w=0,h=0,cw,ch,max,c=0,cont=Al.N(Al.U(),0,vlay.root)
	function step(){
		c+=busy?T:stat
		if(mode=='v'){max=ch;c=(c<0)?0:(c>ch)?ch:c;cont.style.top=orgy-ch+c;cont.vclip(ch-c,cw,ch,0)}
			else{max=cw;c=(c<0)?0:(c>cw)?cw:c;cont.style.left=orgx-cw+c;cont.vclip(0,cw,ch,cw-c)}
		if(up)up.setbusy(c>0);if(!(c%max)){clearInterval(i);i=0}
	}
	function init(){if(!i)i=setInterval(step,1)}
	function roll(v){stat=T;init()}
	function hide(){stat=-T;init()}
	function setbusy(b){if(!(busy=b))init()}
	function add(dx,dy,c0,action,sub){
		var n=Al.U(),von,voff,opt
		function over(){von.style.visibility='visible';voff.style.visibility='hidden';if(up)roll();if(opt)opt.go()}
		function out(){voff.style.visibility='visible';von.style.visibility='hidden';if(up)hide();if(opt)opt.hide()}
		function klik(){eval(action)}
		with(voff=Al.N(n+'off',dx,cont)){vHTML('<div id=c0>'+c0+'</div>');vpos(w,h);vclip(0,dx,dy,0);vopacity(95)}
		with(von=Al.N(n+'on',dx,cont)){vHTML('<div id=c1>'+c0+'</div>');vpos(w,h);vclip(0,dx,dy,0);vopacity(100);style.visibility='hidden'}
		with(Al.N(n+'mask',dx,cont)){
			vHTML('<img name='+n+' width='+dx+' height='+dy+' src=blank.gif>')
			vpos(w,h)
			document.images[n].onmouseover=over
			document.images[n].onmouseout=out
			document.images[n].onmousedown=klik
		}
		w+=(mode=='h')?dx:0
		h+=(mode=='v')?dy:0
		cw=(w)?w:dx;ch=(h)?h:dy
		if(sub)opt=vMenu(orgx+cw-(mode=='h'?dx:0),orgy+ch-(mode=='v'?dy:0),T,sub,this)
		cont.vclip(0,0,0,0)
		return opt
	}
	cont.vpos(orgx,orgy)
	return {go:roll,setbusy:setbusy,addItem:add,hide:hide}
}