hi to all,

i´ve written a small class for a image galery with preloader. but how to check if a image allready is loaded to hide preloader bar?

i tried to discover with httpStatus, but unfortunetly this event is dispatched after the open/progress event - maybe someone can give me an hint

the code comes here

main class:
Code:
package marek {
    import flash.display.*;
    import flash.net.*
    import flash.events.*;
    import flash.utils.*;
    import flash.filters.BlurFilter;

    import com.greensock.*; 
    import com.greensock.easing.*;

  public class main extends Sprite {
        private var xmlCnt:XML;
        private var imgLst:XMLList;
        private var urlLdr:URLLoader;
        private var bmp:Bitmap;
        private var imgHolder:MovieClip;
        private var loader:Loader;
        private var mainTimer:Timer;
        private var imgBlurFilter:BlurFilter;
        private var loaderbar:LoaderBar;
        private var imgTween:TweenMax;
        
        public function main() {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            XMLLoader();
        }

        private function XMLLoader():void {
            XML.ignoreComments = true;
            XML.ignoreWhitespace = true;
            urlLdr = new URLLoader();
            urlLdr.addEventListener(Event.COMPLETE, completeListenerXML);
            urlLdr.load(new URLRequest("main.xml"));
        }

        private function completeListenerXML(e:Event):void {
            xmlCnt = new XML(urlLdr.data);
            imgLst = xmlCnt.galery.item;
            init();
        }

        private function init():void {
            imgHolder = new MovieClip();
            addChild(imgHolder);
            bmp = new Bitmap();
            //            
            mainTimer = new Timer(xmlCnt.galery.@delay);
            mainTimer.addEventListener(TimerEvent.TIMER, mainTimerEvent);
            mainTimer.start();
        }

        private function mainTimerEvent(e:TimerEvent):void {
            // interrupt timer
            mainTimer.stop();
            addImage(mainTimer.currentCount % imgLst.length());
        }

        private function addImage(i):void {
            loader = new Loader();
            //
            loader.contentLoaderInfo.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
            loader.contentLoaderInfo.addEventListener(Event.OPEN, openHandler);
            loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            loader.contentLoaderInfo.addEventListener(Event.INIT, initHandler);
            loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
            //
            loader.load(new URLRequest(imgLst[i].@image));
            addChild(loader);
      }

        private function httpStatusHandler(e:HTTPStatusEvent):void {
            trace("httpStatusHandler")
            //trace("httpStatusHandler: " + e);
        //trace("status: " + e.status);
            
            switch (e.status) {
                    case 200:
                            // Valid image, do nothing.
                            break;
                    case 404:
                            // Invalid image
                            break;
                    default:
                            break;
            }
        }

        private function openHandler(e:Event):void {
            trace("openHandler")         
            loaderbar = new LoaderBar(e);
            addChild(loaderbar);
        }

        private function progressHandler(e:Event):void {
            trace("progressHandler")
            //trace("progressHandler event: ")
            loaderbar.updateLoader();
        }
        
        private function initHandler(e:Event):void {
            trace("initHandler")
        }

        private function completeHandler(e:Event):void {
            trace("completeHandler")
            e.target.removeEventListener(Event.OPEN, openHandler);
            e.target.removeEventListener(Event.COMPLETE, completeHandler);
            e.target.removeEventListener(ProgressEvent.PROGRESS, progressHandler);            
            //
            TweenMax.to(loaderbar, 1, {alpha:0, ease:Sine.easeInOut, onComplete:completeListenerLoaderBar});
            //
            //trace("before: " + imgHolder.numChildren)
            while (imgHolder.numChildren > 1) {
                imgHolder.removeChildAt(0);
            }
            //trace("after: " + imgHolder.numChildren)
            //
            bmp = e.currentTarget.content;
            bmp.smoothing = true;
            bmp.x = bmp.y = 0;
            bmp.alpha = 0;
            imgHolder.addChild(bmp);
            //
            imgBlurFilter = new BlurFilter(xmlCnt.galery.@blurX, xmlCnt.galery.@blurY, 2);
        bmp.filters = [imgBlurFilter];
            //
            imgTween = new TweenMax(bmp, 4, {alpha:1, ease:Sine.easeInOut, onComplete:completeListenerTween,blurFilter:{blurX:0, blurY:0, ease:Sine.easeInOut}});
            //
        }

        
        // tweenmax listener
        private function completeListenerLoaderBar():void {
            removeChild(loader);
            removeChild(loaderbar);
        }
        
        private function completeListenerTween():void {
            // resume mainTimer
            mainTimer.start();
        }
        
    }
}
LoaderBar class
Code:
package marek {
    import flash.display.*;
    import flash.events.*;
    
    public class LoaderBar extends Sprite {
        private var eObj:Event;
        private var sBar:Sprite;
        
        public function LoaderBar(e:Event) {
            this.eObj = e;
      this.sBar = new Sprite;
            this.sBar.graphics.moveTo(0, 0);
            this.sBar.graphics.lineStyle(3, 0xff6600);
            addChild(sBar);
        }
        
        public function updateLoader() {
            this.sBar.graphics.lineTo((this.eObj.currentTarget.bytesLoaded / this.eObj.currentTarget.bytesTotal * 100), 0);
        }
        
    }
}