/* necessite lib.util.js*/
function Menu(el)
{
	this.speed = 4;
	this.el = el;
	this.smenu = $$('.smenu', this.el);
	this.ul = $$('ul', this.el);
	this.step = 0;
	this.but = 0;
	this.intervalId;
	if(this.ul != '' && this.smenu != '')
	{
		setStyles(this.ul, {top: '-'+this.ul.offsetHeight+'px', position: 'absolute'});	
		setStyles(this.smenu, {position: 'relative', overflow: 'hidden', display: 'block', height: '0px'});
		addEvent(this.el, 'mouseover', delegate(this, this.triggerShow));
		addEvent(this.el, 'mouseout', delegate(this, this.triggerHide));
	}
}
Menu.prototype = {
	triggerShow : function(){
		this.but = 1;
		clearInterval(this.intervalId);
		this.intervalId = setInterval(delegate(this, this.move), 40);
	},
	triggerHide : function(){
		this.but = 0;
		clearInterval(this.intervalId);
		this.intervalId = setInterval(delegate(this, this.move), 40);
	},
	move : function(but){
		this.step += (this.but - this.step) / this.speed;
		if (Math.abs(this.step-this.but) < 0.01)
		{
			clearInterval(this.intervalId);
			this.step = this.but;
		}
		this.smenu.style.height =  this.ul.offsetHeight*this.step+'px';
		this.ul.style.top = (this.ul.offsetHeight*(this.step))-this.ul.offsetHeight+'px';
	}
}
var delegate = function(obj, method){
	return function() { return method.call(obj); }
}