/*----------------------------------------------------------------------*/
/*  preload.js: Grafiken im voraus laden...                             */
/*  Copyright by Antritter-Informatik, Juli 2003                        */ 
/*----------------------------------------------------------------------*/


/*- Daten: -------------------------------------------------------------*/

var Preload_refsToAllCreatedPreloadManagers = new Array();
var Preload_nrOfObjects = 0;



/*- Konstruktor: -------------------------------------------------------*/

function Preload()
   {
   this.uniqueID = Preload_nrOfObjects;
   Preload_refsToAllCreatedPreloadManagers.push(this);
   Preload_nrOfObjects++;

   // Daten:
   this.set = new Array();
   this.sizes = new Array();
   this.filenames = new Array();
   this.amount = 0;
   this.numberOfGraphics = 0;
   this.reportDevices = new Array();
   this.finalActions = new Array();

   // Methoden:
   this.declareGraphicsFiles = PRELOAD_declareGraphicsFiles;
   this.declareReportDevice = PRELOAD_declareReportDevice;
   this.declareFinalAction = PRELOAD_declareFinalAction;
   this.watchLoading = PRELOAD_watchLoading;

   return this;
   }



/*----------------------------------------------------------------------*/

function PRELOAD_declareGraphicsFiles
   (
   arrayOfSizesAndFilenames
   )
   {
   // initialize loading of graphics...
   var i;
   for( i=0 ; i<arrayOfSizesAndFilenames.length ; i+=2 )
      {
      this.numberOfGraphics += 1;
      this.amount += parseInt(arrayOfSizesAndFilenames[i]);
      this.sizes.push( parseInt(arrayOfSizesAndFilenames[i]) );
      this.filenames.push( arrayOfSizesAndFilenames[i+1] );
      this.set.push( new Image() );
      this.set[this.numberOfGraphics - 1].src = arrayOfSizesAndFilenames[i+1];
      }
   }


function PRELOAD_declareReportDevice( output )
   {
   this.reportDevices.push( output );
   }

function PRELOAD_declareFinalAction( action )
   {
   this.finalActions.push( action );
   }

function PRELOAD_watchLoading( preloadManagerUniqueID )
   {
   // wurde Funktion als solche oder als Elementfunktion aufgerufen?
   // ohne Parameter: Elementfunktion
   // mit Parameter -> preloadManager lässt sich aus ID ermitteln

   var preloadManager = ( (preloadManagerUniqueID == null)?
                          this
                          :
                          Preload_refsToAllCreatedPreloadManagers[ preloadManagerUniqueID ]
                        );
   

   // wait until all graphics loaded...
   var numberYetLoaded = 0;
   var amountYetLoaded = 0;
   var allDone = 1;
   var i;

   // check all graphics:
   for( i=0 ; i<(preloadManager.numberOfGraphics) ; i++ )
      {
      if( // ... die "complete"-Eigenschaft funktioniert nicht immer zuverlässig!
             (preloadManager.set[i].width  > 0)   
          && (preloadManager.set[i].height > 0)
        )
         {
         // graphic loaded yet!
         numberYetLoaded += 1;
         amountYetLoaded += preloadManager.sizes[i];
         }
      else
         {
         // graphic still has to be loaded!
         allDone = 0;
         }
      }

   // report progress:
   for( i=0 ; i< preloadManager.reportDevices.length ; i++ )
      {
      preloadManager.reportDevices[i].output(Math.floor(100 * amountYetLoaded / preloadManager.amount));
      }

   // still something to do?
   if( !allDone)
      {
      setTimeout('PRELOAD_watchLoading(' + preloadManager.uniqueID + ')', 1);
      }
   else
      {
      for( i=0 ; i< preloadManager.finalActions.length ; i++ )
         {
         preloadManager.finalActions[i].doItNow();
         }
      }
   }



/*- end of file --------------------------------------------------------*/

