﻿//   asset_loader.js

//   Script by Nephilim
//   http://nephilim.blogspot.com/2007/09/preloading-both-images-and-scripts-in.html


//   This object handles all the assets for the page.

//   First, the master list of application assets to preload.
//   All images are considered to be optional unless required is set to 1.
//   All scripts are considered to be required unless optional is set to 1.



var assets = {

   //   List images here.
   //   Each image is an associative array with:
   //      id: an identifier
   //      url: a url to load the image from (can be relative)
   //      required: (optional) if '1', calls failure callback
   //         if there is an error loading this image
   //         (Thus, all images default to being optional.)

   images: [
      
      
{ id: 'blue01', url: 'main/menuimages/blue8_on.jpg', required: 1 },
{ id: 'blue02', url: 'main/menuimages/blue12_on.jpg', required: 1 },
{ id: 'blue03', url: 'main/menuimages/blue6_on.jpg', required: 1 },
{ id: 'blue04', url: 'main/menuimages/blue17_off.jpg', required: 1 },
{ id: 'blue05', url: 'main/menuimages/blue10_off.jpg', required: 1 },
{ id: 'blue06', url: 'main/menuimages/blue9_off.jpg', required: 1 },
{ id: 'blue07', url: 'main/menuimages/blue4_off.jpg', required: 1 },
{ id: 'blue08', url: 'main/menuimages/blue13_off.jpg', required: 1 },
{ id: 'blue09', url: 'main/menuimages/blue9_on.jpg', required: 1 },
{ id: 'blue10', url: 'main/menuimages/blue1_on.jpg', required: 1 },
{ id: 'blue11', url: 'main/menuimages/blue11_off.jpg', required: 1 },
{ id: 'blue12', url: 'main/menuimages/blue15_on.jpg', required: 1 },
{ id: 'blue13', url: 'main/menuimages/blueMain_off.jpg', required: 1 },
{ id: 'blue14', url: 'main/menuimages/blue11_on.jpg', required: 1 },
{ id: 'blue15', url: 'main/menuimages/blue14_off.jpg', required: 1 },
{ id: 'blue16', url: 'main/menuimages/blue6_off.jpg', required: 1 },
{ id: 'blue17', url: 'main/menuimages/blue3_off.jpg', required: 1 },
{ id: 'blue18', url: 'main/menuimages/blue12_off.jpg', required: 1 },
{ id: 'blue19', url: 'main/menuimages/blue1_off.jpg', required: 1 },
{ id: 'blue20', url: 'main/menuimages/blue14_on.jpg', required: 1 },
{ id: 'blue21', url: 'main/menuimages/blue7_off.jpg', required: 1 },
{ id: 'blue22', url: 'main/menuimages/blue2_off.jpg', required: 1 },
{ id: 'blue23', url: 'main/menuimages/blue2_on.jpg', required: 1 },
{ id: 'blue24', url: 'main/menuimages/blue13_on.jpg', required: 1 },
{ id: 'blue25', url: 'main/menuimages/blue16_on.jpg', required: 1 },
{ id: 'blue26', url: 'main/menuimages/blue3_on.jpg', required: 1 },
{ id: 'blue27', url: 'main/menuimages/blue5_on.jpg', required: 1 },
{ id: 'blue28', url: 'main/menuimages/blueMain_on.jpg', required: 1 },
{ id: 'blue29', url: 'main/menuimages/blue8_off.jpg', required: 1 },
{ id: 'blue30', url: 'main/menuimages/blue5_off.jpg', required: 1 },
{ id: 'blue31', url: 'main/menuimages/blue4_on.jpg', required: 1 },
{ id: 'blue32', url: 'main/menuimages/blue15_off.jpg', required: 1 },
{ id: 'blue33', url: 'main/menuimages/blue16_off.jpg', required: 1 },
{ id: 'blue34', url: 'main/menuimages/blue7_on.jpg', required: 1 },
{ id: 'blue35', url: 'main/menuimages/blue10_on.jpg', required: 1 },
{ id: 'blue36', url: 'main/menuimages/blue17_on.jpg', required: 1 },

{ id: 'green01', url: 'main/menuimages/green3_off.jpg', required: 1 },
{ id: 'green02', url: 'main/menuimages/green1_on.jpg', required: 1 },
{ id: 'green03', url: 'main/menuimages/green4_off.jpg', required: 1 },
{ id: 'green04', url: 'main/menuimages/green13_off.jpg', required: 1 },
{ id: 'green05', url: 'main/menuimages/green14_on.jpg', required: 1 },
{ id: 'green06', url: 'main/menuimages/green3_on.jpg', required: 1 },
{ id: 'green07', url: 'main/menuimages/green7_off.jpg', required: 1 },
{ id: 'green08', url: 'main/menuimages/green6_on.jpg', required: 1 },
{ id: 'green09', url: 'main/menuimages/green16_off.jpg', required: 1 },
{ id: 'green10', url: 'main/menuimages/greenMain_off.jpg', required: 1 },
{ id: 'green11', url: 'main/menuimages/green16_on.jpg', required: 1 },
{ id: 'green12', url: 'main/menuimages/green11_on.jpg', required: 1 },
{ id: 'green13', url: 'main/menuimages/green6_off.jpg', required: 1 },
{ id: 'green14', url: 'main/menuimages/green9_on.jpg', required: 1 },
{ id: 'green15', url: 'main/menuimages/green9_off.jpg', required: 1 },
{ id: 'green16', url: 'main/menuimages/green10_on.jpg', required: 1 },
{ id: 'green17', url: 'main/menuimages/green2_on.jpg', required: 1 },
{ id: 'green18', url: 'main/menuimages/green1_off.jpg', required: 1 },
{ id: 'green19', url: 'main/menuimages/green2_off.jpg', required: 1 },
{ id: 'green20', url: 'main/menuimages/green12_off.jpg', required: 1 },
{ id: 'green21', url: 'main/menuimages/green8_off.jpg', required: 1 },
{ id: 'green22', url: 'main/menuimages/green15_on.jpg', required: 1 },
{ id: 'green23', url: 'main/menuimages/green13_on.jpg', required: 1 },
{ id: 'green24', url: 'main/menuimages/green5_on.jpg', required: 1 },
{ id: 'green25', url: 'main/menuimages/green12_on.jpg', required: 1 },
{ id: 'green26', url: 'main/menuimages/green15_off.jpg', required: 1 },
{ id: 'green27', url: 'main/menuimages/green11_off.jpg', required: 1 },
{ id: 'green28', url: 'main/menuimages/green4_on.jpg', required: 1 },
{ id: 'green29', url: 'main/menuimages/green7_on.jpg', required: 1 },
{ id: 'green30', url: 'main/menuimages/greenMain_on.jpg', required: 1 },
{ id: 'green31', url: 'main/menuimages/green8_on.jpg', required: 1 },
{ id: 'green32', url: 'main/menuimages/green10_off.jpg', required: 1 },
{ id: 'green33', url: 'main/menuimages/green14_off.jpg', required: 1 },
{ id: 'green34', url: 'main/menuimages/green5_off.jpg', required: 1 },

{ id: 'red01', url: 'main/menuimages/red11_on.jpg', required: 1 },
{ id: 'red02', url: 'main/menuimages/red11_off.jpg', required: 1 },
{ id: 'red03', url: 'main/menuimages/red10_on.jpg', required: 1 },
{ id: 'red04', url: 'main/menuimages/red8_on.jpg', required: 1 },
{ id: 'red05', url: 'main/menuimages/red2_off.jpg', required: 1 },
{ id: 'red06', url: 'main/menuimages/red12_off.jpg', required: 1 },
{ id: 'red07', url: 'main/menuimages/red5_off.jpg', required: 1 },
{ id: 'red08', url: 'main/menuimages/red4_on.jpg', required: 1 },
{ id: 'red09', url: 'main/menuimages/red15_off.jpg', required: 1 },
{ id: 'red10', url: 'main/menuimages/red12_on.jpg', required: 1 },
{ id: 'red11', url: 'main/menuimages/red4_off.jpg', required: 1 },
{ id: 'red12', url: 'main/menuimages/red3_off.jpg', required: 1 },
{ id: 'red13', url: 'main/menuimages/red2_on.jpg', required: 1 },
{ id: 'red14', url: 'main/menuimages/red9_on.jpg', required: 1 },
{ id: 'red15', url: 'main/menuimages/red9_off.jpg', required: 1 },
{ id: 'red16', url: 'main/menuimages/red1_on.jpg', required: 1 },
{ id: 'red17', url: 'main/menuimages/redMain_off.jpg', required: 1 },
{ id: 'red18', url: 'main/menuimages/red14_off.jpg', required: 1 },
{ id: 'red19', url: 'main/menuimages/red13_on.jpg', required: 1 },
{ id: 'red20', url: 'main/menuimages/red7_off.jpg', required: 1 },
{ id: 'red21', url: 'main/menuimages/red10_off.jpg', required: 1 },
{ id: 'red22', url: 'main/menuimages/red6_on.jpg', required: 1 },
{ id: 'red23', url: 'main/menuimages/red6_off.jpg', required: 1 },
{ id: 'red24', url: 'main/menuimages/red3_on.jpg', required: 1 },
{ id: 'red25', url: 'main/menuimages/redMain_on.jpg', required: 1 },
{ id: 'red26', url: 'main/menuimages/red5_on.jpg', required: 1 },
{ id: 'red27', url: 'main/menuimages/red14_on.jpg', required: 1 },
{ id: 'red28', url: 'main/menuimages/red8_off.jpg', required: 1 },
{ id: 'red29', url: 'main/menuimages/red7_on.jpg', required: 1 },
{ id: 'red30', url: 'main/menuimages/red13_off.jpg', required: 1 },
{ id: 'red31', url: 'main/menuimages/red1_off.jpg', required: 1 },
{ id: 'red32', url: 'main/menuimages/red15_on.jpg', required: 1 },

{ id: 'yellow01', url: 'main/menuimages/yellow6_off.jpg', required: 1 },
{ id: 'yellow02', url: 'main/menuimages/yellow5_off.jpg', required: 1 },
{ id: 'yellow03', url: 'main/menuimages/yellow10_off.jpg', required: 1 },
{ id: 'yellow04', url: 'main/menuimages/yellow7_off.jpg', required: 1 },
{ id: 'yellow05', url: 'main/menuimages/yellow3_off.jpg', required: 1 },
{ id: 'yellow06', url: 'main/menuimages/yellow2_off.jpg', required: 1 },
{ id: 'yellow07', url: 'main/menuimages/yellow12_off.jpg', required: 1 },
{ id: 'yellow08', url: 'main/menuimages/yellow11_off.jpg', required: 1 },
{ id: 'yellow09', url: 'main/menuimages/yellowMain_off.jpg', required: 1 },
{ id: 'yellow10', url: 'main/menuimages/yellow13_off.jpg', required: 1 },
{ id: 'yellow11', url: 'main/menuimages/yellow15_off.jpg', required: 1 },
{ id: 'yellow12', url: 'main/menuimages/yellow14_off.jpg', required: 1 },
{ id: 'yellow13', url: 'main/menuimages/yellow4_off.jpg', required: 1 },
{ id: 'yellow14', url: 'main/menuimages/yellow1_off.jpg', required: 1 },
{ id: 'yellow15', url: 'main/menuimages/yellow9_off.jpg', required: 1 },
{ id: 'yellow16', url: 'main/menuimages/yellow8_off.jpg', required: 1 },
{ id: 'yellow17', url: 'main/menuimages/yellow6_on.jpg', required: 1 },
{ id: 'yellow18', url: 'main/menuimages/yellow5_on.jpg', required: 1 },
{ id: 'yellow19', url: 'main/menuimages/yellow10_on.jpg', required: 1 },
{ id: 'yellow20', url: 'main/menuimages/yellow7_on.jpg', required: 1 },
{ id: 'yellow21', url: 'main/menuimages/yellow3_on.jpg', required: 1 },
{ id: 'yellow22', url: 'main/menuimages/yellow2_on.jpg', required: 1 },
{ id: 'yellow23', url: 'main/menuimages/yellow12_on.jpg', required: 1 },
{ id: 'yellow24', url: 'main/menuimages/yellow11_on.jpg', required: 1 },
{ id: 'yellow25', url: 'main/menuimages/yellowMain_on.jpg', required: 1 },
{ id: 'yellow26', url: 'main/menuimages/yellow13_on.jpg', required: 1 },
{ id: 'yellow27', url: 'main/menuimages/yellow15_on.jpg', required: 1 },
{ id: 'yellow28', url: 'main/menuimages/yellow14_on.jpg', required: 1 },
{ id: 'yellow29', url: 'main/menuimages/yellow4_on.jpg', required: 1 },
{ id: 'yellow30', url: 'main/menuimages/yellow1_on.jpg', required: 1 },
{ id: 'yellow31', url: 'main/menuimages/yellow9_on.jpg', required: 1 },
{ id: 'yellow32', url: 'main/menuimages/yellow8_on.jpg', required: 1 },

//{ id: 'gracegif1', url: 'main_images/GraceGifFull.gif', required: 1 },
      
      { id: 'filmLoad', url: 'film/filmLoad1.jpg', },
      { id: 'buildLoad', url: 'build/buildLoad1.jpg', },
      { id: 'photoLoad', url: 'photo/photoLoad1.jpg', },

   ],

   //   List scripts here.
   //   Each script is an associative array with:
   //      id: an identifier
   //      url: a url to load the script from (can be relative)
   //      optional: (optional) if '1', does not call failure callback
   //         if there is an error loading this script
   //         (Thus, all scripts default to being required.)

   scripts: [
      { id: 'mainroll', url: 'js/mainroll.js' },
   ]

};

//   The preloader object.
//   This object handles the job of preloading everything.
//   Usage:
//
//      preLoader.startLoading( preloadSuccess, preloadFailure, preloadStatus );
//
//   Where:
//      preloadSuccess: the function to call when preloading was successful
//      preloadFailure: the function to call when preloading failed
//      preloadStatus:  the function to call to report status of preloading in progress
//
//   Scripts grabbed in this manner are eval()'d by Prototype.

var preLoader = {
   errors: { images: 0, scripts: 0 },
   errortext: '',
   progress: 0,
   startLoading: function( completeCallback, errorCallback, statusCallback ) {
      this.success = completeCallback;
      this.failure = errorCallback;
      this.status = statusCallback;
      this.loadNextImage();
   },
   
//   images   
   loadNextImage: function() {
      if (this.progress >= assets.images.length) {
         this.progress = 0;
         this.loadNextScript();
         return;
      }
      imageObject = new Image();
      imageObject.onload = function() { preLoader.imageLoaded(); }
      imageObject.onerror = function() { preLoader.imageError(); }
      imageObject.src = assets.images[ this.progress ].url;
      assets.images[ this.progress ].image = imageObject;
   },
   imageLoaded: function() {
      var perc = Math.round((this.progress + 1) * 100 / assets.images.length);
      assets.images[ this.progress ].success = 1;
      this.preloaderMessage( perc, 'Loading Images', assets.images[ this.progress ].url );
      this.progress++;
      this.loadNextImage();
   },
   imageError: function() {
      var perc = Math.round((this.progress + 1) * 100 / assets.images.length);
      assets.images[ this.progress ].success = 0;
      this.errors.images++;
      this.errortext += '<div>Error loading ' + assets.images[ this.progress ].url + '</div>';
      this.preloaderMessage( perc, 'Loading Images', assets.images[ this.progress ].url );
      if (assets.images[ this.progress ].required == 1) return this.failure();
      this.progress++;
      this.loadNextImage();
   },

//   scripts   
   loadNextScript: function() {
      if (this.progress >= assets.scripts.length) {
         this.progress = 0;
         this.success();
         return;
      }
      this.ajax = new Ajax.Request( assets.scripts[ this.progress ].url, {
         method: 'get',
         onSuccess: function(transport) {
            preLoader.scriptLoaded();
         },
         onFailure: function(transport) {
            preLoader.scriptError();
         }
      });
   },
   scriptLoaded: function() {
      var perc = Math.round((this.progress + 1) * 100 / assets.scripts.length);
      assets.scripts[ this.progress ].success = 1;
      this.preloaderMessage( perc, 'Loading Scripts', assets.scripts[ this.progress ].url );
      this.progress++;
      this.loadNextScript();
   },
   scriptError: function() {
      var perc = Math.round((this.progress + 1) * 100 / assets.scripts.length);
      assets.scripts[ this.progress ].success = 0;
      this.errors.scripts++;
      this.errortext += '<div>Error loading ' + assets.scripts[ this.progress ].url + '</div>';
      this.preloaderMessage( perc, 'Loading Scripts', assets.scripts[ this.progress ].url );
      if (assets.scripts[ this.progress ].optional != 1) return this.failure();
      this.progress++;
      this.loadNextScript();
   },
   preloaderMessage: function( perc, header, msg ) {
   
      this.status( perc, header, msg, this.errortext );
      
   }

};