function slideHolder(innerHolder,dx,dy,dt) {
	new Effect.Move(innerHolder, { 
		x: dx, 
		y: dy, 
		fps: 50,
		transition: Effect.Transitions.linear,
		duration: dt,
		afterFinish: function(innerHolder) {
			resetHolder(innerHolder.element);
			},
		mode: 'relative'});
}

function resetHolder(innerHolder) {
//	alert("Restting trolley "+trolley.id);
	innerHolder.style.left=0;
	slideHolder(innerHolder,-innerHolder.slide,0,innerHolder.dt);
	}

function addTrolley(trolley,holder) {
	if (typeof (holder.rightSide) == "undefined") {
		holder.coords=Position.page(holder);
		holder.rightSide=holder.coords[0];
		holder.maxWidth=0;
		holder.appendChild(document.createElement("div"));
	}

	$(holder).firstDescendant().appendChild(trolley);
	var coords=Position.page(trolley);

	$(trolley).style.left="0px";

	$(trolley).style.left=holder.rightSide-holder.coords[0]+"px";
	holder.rightSide+=trolley.getWidth();
	$(trolley).style.display="block";

}

function animateHolder(holder,speed) {
// First - fill the holder with necessary slots to complete the frame when slid left
	var start=holder.rightSide;

	
	i=100;
	thisTrolley=holder.firstDescendant().firstDescendant();
	n=0;
	
	while (holder.rightSide-start < holder.getWidth()) {
		newTrolley=thisTrolley.cloneNode(true);
		newTrolley.id=newTrolley.id+"trolley_"+i;
		addTrolley(newTrolley,holder);
		thisTrolley=thisTrolley.next();

		i++;
	}
	
	holder.rightSide=start;
	holder.firstDescendant().slide=holder.rightSide-holder.coords[0];
	holder.firstDescendant().dt=holder.firstDescendant().slide/speed;
	holder.firstDescendant().speed=speed;
	slideHolder(holder.firstDescendant(),-holder.firstDescendant().slide,0,holder.firstDescendant().dt);
}