Kind of carousel

hi, i’m working with a carousel and i almost got it to work but…

here is the case; i got on active item and 2 items at righttside and leftside of the activ. Behind the activ i stack all elements i wont view… I’ve managed to move left and rightsided items through it’s next or previous position, but when i press one in the stack i can’t figure out how to move them through positions.

please see attach file, you find TweenMax here http://blog.greensock.com/tweenmaxas3/

and the code (huge…);


import flash.display.*;
import flash.events.*;
import gs.TweenMax;
import fl.motion.easing.*;

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

var active:int = 0;
var arr:Array = [];
var arr_temp:Array = [0,1,2,3,4];
var sortedItems:Array = [];
var m:int = 10;

var WIDTH:Number = 640;
var HEIGHT:Number = 360;

var holder = new MovieClip();
addChild(holder);

for (var i:int=0; i<m; i++) 
{
	// Display items on scene and set properties
	
	
	var o:MovieClip = new Icon();
	
	o.id = i;
	o.name = "icon"+i;
	o.pos = i;
	o.txt.text = i;
	o.txt.autoSize = TextFieldAutoSize.CENTER;
	o.buttonMode = true;
	o.mouseEnabled = true;
	o.mouseChildren = false;
	o.addEventListener(MouseEvent.CLICK, clickHandler);
	o.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
	o.addEventListener(MouseEvent.MOUSE_OUT, outHandler);
	addChild(o);

	// End Display
	
	// <<< Temp
	
	TweenMax.to(o.bg, 0, 
	{
		tint:Math.random()*0xFF0000
	});
	
	// >>>
	
	arr.push(o);
	sortedItems.push(o);
	
	var btn = new Btn();
	btn.id = i;
	btn.name = "btn"+i;
	btn.x = 21* i;
	btn.y = 2;
	btn.txt.text = i;
	btn.txt.autoSize = TextFieldAutoSize.CENTER;
	btn.buttonMode = true;
	btn.mouseEnabled = true;
	btn.mouseChildren = false;
	btn.addEventListener(MouseEvent.CLICK, clickHandler);
	btn.addEventListener(MouseEvent.MOUSE_OVER, overHandler);
	btn.addEventListener(MouseEvent.MOUSE_OUT, outHandler);
	holder.addChild(btn);
}

function clickHandler(event:MouseEvent):void 
{
	active = event.currentTarget.id;
	activate();
}
function overHandler(event:MouseEvent):void { event.currentTarget.alpha = .5; }
function outHandler(event:MouseEvent):void { event.currentTarget.alpha = 1; }

// sort

function activate() : void 
{
	trace ("active: " + active);
	
	var direction:int;
	var distance:int;
	
	var arr2 = [];
	var arr2 = arr.slice(active).concat(arr.slice(0, active)); 
	
	var j:int = 0;
	var n:int = arr.length;
	for (var i:int=0; i<n; i++) 
	{
		var o:MovieClip = arr2*;
		var scale:Number = o.scaleX;
		var xy:Object;
		var bezier:Object;
		
		if (j==0)
		{
			o.txt.x = 20
			xy = activePosition(1);
			
			if(o.x > xy.x)
				direction = 1;
			
			else
				direction = -1;
		}
		
		else if (j==1)
		{
			o.txt.x = 620;
			xy = nextPosition(.8, 100);
		}
		
		else if (j==2)
		{
			o.txt.x = 620;
			xy = nextPosition(.6, 150);
		}
		
		else if (j==n-2)
		{
			o.txt.x = 20;
			xy = previousPosition(.6, 150);
		}
		
		else if (j==n-1)
		{
			o.txt.x = 20;
			xy = previousPosition(.8, 100);
		}
		
		else
		{
			xy = stackPosition(.5);
		}
		
		if (direction == 1)
		{
			var prev = arr2[i-1];
			
			if (i == 0)
				prev = arr2[n-1];
						
			bezier = 
			{
				x: prev.x,
				y: prev.y,
				scale: prev.scaleX
			}
		}
		
		else
		{
			var prev = arr2[i+1];
			
			if (i == n-1)
				prev = arr2[0];
				
			bezier = 
			{
				x: prev.x,
				y: prev.y,
				scale: prev.scaleX
			}
		}
		
		o.bezier = bezier;
		o.ax = xy.x; // activate x position
		o.ay = xy.y;
		o.scale = xy.scale;
		o.pos = j;
		
		j++;
	}
	
	
	
	for (var i:int=0; i<n; i++) 
	{
		var o:MovieClip = arr2*;
		
		var tweenObj:Object =
		{
			x: o.ax, 
			y: o.ay, 
			scaleX: o.scale, 
			scaleY: o.scale,
			bezierThrough: 
			[{
				x: o.bezier.x, 
				y: o.bezier.y,
				scaleX: o.bezier.scale, 
				scaleY: o.bezier.scale
			}],
			onUpdate: tweenUpdateHandler,
			overwrite:false,
			ease:Linear.easeOut,
			delay: .2
		}
		
		TweenMax.to(o, 1, tweenObj);
	}
}

//

function activePosition(scale:Number) : Object
{
	var xy:Object =
	{
		x: Math.round(stage.stageWidth/2 - (WIDTH/2)),
		y: Math.round(stage.stageHeight/2 - (HEIGHT/2)),
		scale: scale
	}
	return xy;
}

function nextPosition(scale:Number, distance:Number) : Object
{
	var xy:Object =
	{
		x: Math.round(stage.stageWidth/2 - (scale*WIDTH/2) + ((1-scale)*WIDTH/2) + distance),
		y: Math.round(stage.stageHeight/2 - (scale*HEIGHT/2)),
		scale: scale
	}
	return xy;
}

function previousPosition(scale:Number, distance:Number) : Object
{
	var xy:Object =
	{
		x: Math.round(stage.stageWidth/2 - (scale*WIDTH/2) - ((1-scale)*WIDTH/2) - distance),
		y: Math.round(stage.stageHeight/2 - (scale*HEIGHT/2)),
		scale: scale
	}
	return xy;
}

function stackPosition(scale:Number) : Object
{
	var xy:Object =
	{
		x: Math.round(stage.stageWidth/2 - (scale*WIDTH/2)),
		y: Math.round(stage.stageHeight/2 - (scale*HEIGHT/2)),
		scale: scale
	}
	return xy;
}

//

function tweenUpdateHandler() : void {arrange()}
function arrange() : void 
{
	sortedItems.sortOn("scaleY", Array.NUMERIC);
	var i:int = sortedItems.length;
	while (i--) {
		if (getChildAt(i) != sortedItems*) {
			setChildIndex(sortedItems*, i);
		}
	}
}

// startup call
activate();
stop();

function activate does the magic.

brilliant if anybody could help