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);
}