function SliderMenu (obj_id, oHeight, aStepsize) {
	var	first		= null;
	var last		= null;
	var current		= null;
	var self		= this;
	var is_drawn	= false;
	var stepsize	= aStepsize;
	var offsetHeight= oHeight
	var object		= (document.getElementById(obj_id)) ? document.getElementById(obj_id):obj_id;
	
	if (!obj_id) {
		alert("SliderMenu: No Object given");
		return false;
	}
	
	this.addItem	= function (contentVisible, contentInvisible) {
		var f	= (!first) ? true:false;
		var el	= new SliderMenuList(contentVisible, contentInvisible, oHeight, last, null, stepsize, f);
		if (!first) {
			first	= el;
		} else if (last && last.isSliderMenuList) {
			last.setNextItem(el);
		}
		last	= el;
		return true;
	}
	
	
	this.setCurrent	= function (currentItem) {
		if (!currentItem.isSliderMenuList)
			return false;
		current	= currentItem;
		self.redraw();
		return true;
	}
	
	
	this.redraw		= function () {
	
	}
	
	
	this.draw		= function () {
		if (is_drawn)
			return true;
			
		if (!document.helper.isBodyLoaded())
			return document.helper.waitForBody(self.draw);
		
		if (!first || !last) {
			alert("SliderMenu: No Items");
			return false;
		
		}
		
		var run	= first;
		var idx	= 100;
		var i	= 0;
		
		while (run != null) {
			run.setZIndex(idx--);
			run.gotoStart(i++);
			object.appendChild(run.getContainer());
			run	= run.getNextItem();
		}
		
		object.style.overflow	= "hidden";
		object.style.position = "relative";
		var h		= document.helper.getRealDimension(object)[1] - ((i-1)*offsetHeight);
		object.style.height	= h+"px";
	}
}



function SliderMenuList (vis, invis, offHeight, prevItem, nextItem, aStepsize, is_first) {
	var visible				= vis;
	var invisible			= invis;
	var ani					= false;
	var offsetHeight		= offHeight;
	var startOffset			= 0;
	var currentOffset		= 0;
	var previous			= prevItem;
	var next				= nextItem;
	this.isSliderMenuList	= true;
	var self				= this;
	var stepsize			= aStepsize;
	
	var container			= document.createElement("div");
	var inset				= document.createElement("div");
	var offset				= document.createElement("div");
	
	var BEFORE				= 1;
	var AFTER				= 2;

	container.style.position	= "relative";
	container.className			= (is_first) ? "SliderMenu_item_hover":"SliderMenu_item";
	
	inset.className				= "SliderMenu_inset";
	inset.innerHTML				= visible;
	
	offset.className				= "SliderMenu_offset";
	offset.innerHTML			= invisible;

	container.appendChild(offset);
	container.appendChild(inset);
	
	this.setNextItem		= function (item) {
		if (!item.isSliderMenuList)
			return false;
		next	= item;
		return true;
	}
	
	this.setZIndex			= function (idx) {
		container.style.zIndex	= idx;
	}
	
	this.getContainer		= function () {
		return container;
	}
	
	this.getPreviousItem	= function () {
		return previous;
	}
	
	this.getNextItem		= function () {
		return next;
	}
	
	this.gotoStart			= function (index) {
		startOffset			= (-1)*(index*offsetHeight);
		currentOffset		= startOffset;
		container.style.top	= currentOffset+"px";
	
		document.helper.addEvent(inset, "mouseover", self.openMenu, false);
		//document.helper.addEvent(inset, "mouseout", self.closeMenu, false);
	}
	
	
	this.openMenu			= function () {
		if (ani) {
			//window.setTimeout(self.openMenu, stepsize[0]*stepsize[2]);
			return;
		}
		ani					= true;
		window.setTimeout(self.resetAni, stepsize[0]*stepsize[2]);
				
		if (currentOffset != startOffset) {
			/*currentOffset		= startOffset;
			container.style.top	= "-"+currentOffset+"px";
			
			if (next) {
				next.closeMenu(BEFORE);
			}*/
			self.slide(AFTER);
		} else {
			if (previous)
				previous.slide(BEFORE);
		}
		
		/*if (next) 
			next.closeMenu(AFTER);
			
		if (previous) {
			previous.closeMenu(BEFORE);
		}*/
		container.className	= "SliderMenu_item_hover";
	}
	
	this.slide		= function (direction) {
		container.className	= "SliderMenu_item";
		if (direction) switch (direction) {
			case BEFORE:
				if (currentOffset == startOffset) {
					currentOffset		= (currentOffset-offsetHeight);
					//container.style.top	= currentOffset+"px";
					window.setTimeout(function () {self.slideAni(-1, 0);}, stepsize[2]);
				} else {
					//ani = false;
				}
				if (previous) {
					previous.slide(BEFORE);
				} else {
				}
				break;
				
			case AFTER:
				if (currentOffset != startOffset) {
					currentOffset		= startOffset;
					//container.style.top	= currentOffset+"px";
					window.setTimeout(function () {self.slideAni(1, 0);}, stepsize[2]);
				} else {
					//ani = false;
				}
				if (next) {
					next.slide(AFTER);
				}
				break;
		}
	}
	
	
	this.slideAni	= function (direction, step) {
		if (step < stepsize[0]) {
			step++;
			var top	= parseInt(container.style.top.replace(/px/, ""));
			top		= (top+(direction*stepsize[1]));
			container.style.top = top+"px";
			window.setTimeout(function () {self.slideAni(direction, step);}, stepsize[2]);
		} else {
			container.style.top	= currentOffset+"px";
			//ani	= false;
		}
	}
	
	this.resetAni	= function () {
		ani = false;
	}
}