function MenuRollAnimation() {

	this.currentState = ANIM_NONE;
	this.menu;
	this.step = 0;
	this.stepTotal = 7;
	this.speed;
	this.originalTop;
	this.timer = new Timer(this);
	
	this.animate = function() {				
		if(this.currentState == ANIM_ENTER) {
			if(++this.step < this.stepTotal) {
				this.setClipTop(parseInt(this.menu.menuobj.clientHeight) - (this.speed * this.step));
			} else {
				this.setClipTop(0);
				this.currentState = ANIM_NONE;
				this.menu.show(true);
			}
		} else if(this.currentState == ANIM_EXIT) {
			if(++this.step < this.stepTotal) {
				this.setClipTop(this.speed * this.step);
			} else {
				this.setClipTop(0);
				this.currentState = ANIM_NONE;
				this.menu.hide(true);
			}
		}
		
		if(this.currentState != ANIM_NONE)
			this.timer.setTimeout("animate", ANIM_TIMER_SPEED);
	}
	
	this.prepare = function(anim) {
		this.currentState = anim;
		this.step = 0;
		this.speed = parseInt(this.menu.menuobj.clientHeight) / this.stepTotal;
		this.menu.menuobj.style.overflow = "hidden";
		
		if(anim == ANIM_ENTER) {
			this.menu.menuobj.style.visibility = "visible";
			this.setClipTop(parseInt(this.menu.menuobj.clientHeight));
		} else if(anim == ANIM_EXIT) {
			this.setClipTop(0);
		}
	}
	
	this.start = function(anim) {
		if(this.currentState == ANIM_NONE) {
			this.prepare(anim);
			this.animate();
		}
	}
	
	this.setMenu = function(menu) {
		this.menu = menu;
		this.originalTop = parseInt(this.menu.menuobj.style.top);
	}

	this.setClipTop = function(top) {
		this.menu.menuobj.style.clip = "rect(" + top + "px auto auto auto)";
		this.menu.menuobj.style.top = this.originalTop - top + "px";
	}
}

function MenuNoAnimation() {	
	
	this.menu;
	
	this.start = function(anim) {
		switch(anim) {
			case ANIM_ENTER:
				this.menu.show(true);
				break;
			case ANIM_EXIT:
				this.menu.hide(true);
				break;
		}
	}
	
	this.setMenu = function(menu) { this.menu = menu; }
}