Advanced preloader help

I’m trying to make a preloader for a little flash project that involves re-assembling a load of rectangles to make up a pattern.

Idea is that instead of the usual load bar i wanted to make use of this pattern that is relevant to the project and have it rebuild it self with these rectangles flying in from the side. So far I have got the tweening sorted using the tween class and staggered the 42 (yes took a little while, probably an easier way so let me know on that also) rectangles using ‘setTimeout’ so it releases each 100milliseconds after the one one before it. This probably the wrong way to do it but i wanted to check how it looked and this was the one way i knew how to do it.

I want to make it so that these rectangles fly in a complete the pattern once the loading has finished, but on a fast connection I don’t want it to rush the animation but for a slow connection I obviously want it to adjust the release time and maybe even the travel speed to compensate.

How could I go about this?

I had an idea of maybe working out the percentage loaded divided by 42 and then run an if statement to see if that percentage for that segment had been reached before 100millseconds had passed, if 100 had passed then release the rectangle, if not then hold the rectangle until 100 m/s had passed. Not sure if that is the best way to do but that’s why I’m looking for some suggestions from more experienced developers.
[URL=“http://img.photobucket.com/albums/v206/nurse/blocks.swf”]
I’ve linked an swf so can see better what I mean click here.

Here is the current AS (not sure if my code is the correct way to be written so any pointers welcome):

import mx.transitions.Tween;
import mx.transitions.easing.Regular;

// declare variables
var type = mx.transitions.easing.Regular.easeOut;
var chipTweenX:Tween;
var chipTweenY:Tween;
var speed:Number = .5;

// function setting
function rebuild(mc:Object, endX:Number, endY:Number) {
    
    chipTweenX = new Tween(mc, "_x", type, mc._x, endX, speed, true);
    chipTweenY = new Tween(mc, "_y", type, mc._y, endY, speed, true);
    
};

// set intervals
var c01:Object = setTimeout(function() {
    rebuild(chip01_mc, 0, -44.6);
    }, 0);
var c02:Object = setTimeout(function() {
    rebuild(chip02_mc, 0, -18.6);
    }, 100);
var c03:Object = setTimeout(function() {
    rebuild(chip03_mc, 6.5, -44.6);
    }, 200);
var c04:Object = setTimeout(function() {
    rebuild(chip04_mc, 6.5, -31.6);
    }, 300);
var c05:Object = setTimeout(function() {
    rebuild(chip05_mc, 13, -31.6);
    }, 400);
var c06:Object = setTimeout(function() {
    rebuild(chip06_mc, 19.5, -31.6);
    }, 500);
var c07:Object = setTimeout(function() {
    rebuild(chip07_mc, 19.5, -18.6);
    }, 600);
var c08:Object = setTimeout(function() {
    rebuild(chip08_mc, 26, -44.6);
    }, 700);
var c09:Object = setTimeout(function() {
    rebuild(chip09_mc, 26, -31.6);
    }, 800);
var c10:Object = setTimeout(function() {
    rebuild(chip10_mc, 32.5, -44.6);
    }, 900);