var Preloader = {
  callbacks: [],
  images: [],
  loadedImages: [],
  imagesLoaded: 0,

  add: function(image){
    if (typeof image == 'string') this.images.push(image);
    if (typeof image == 'array' || typeof image == 'object'){
      for (var i=0; i< image.length; i++){
        this.images.push(image[i]);
      }
    }
  },
  onFinish: function(func){
    if (typeof func == 'function') this.callbacks.push(func);
    if (typeof func == 'array' || typeof func == 'object'){
      for (var i=0; i< func.length; i++){
        this.callbacks.push(func[i]);
      }
    }
  },
  load: function(){
    for(var i=0; i<this.images.length; i++){
      this.loadedImages[i] = new Image();
      this.loadedImages[i].onload = function(){ Preloader.checkFinished.apply(Preloader) }
      this.loadedImages[i].src = this.images[i];
    }
  },

  checkFinished: function(){
    this.imagesLoaded++;
    if (this.imagesLoaded == this.images.length) this.fireFinish();
  },
  fireFinish: function(){
    for (var i=0; i<this.callbacks.length; i++){
      this.callbacks[i]();
    }
    this.images = [];
    this.loadedImages = [];
    this.imagesLoaded = 0;
    this.callbacks = [];
  }
}

var globalTotalImages		= 0;
var globalImageCount		= 0;
var globalImageURLArray		= new Array();
var globalPreloaderArray	= new Array();

function set_image_url(el_id,img_src)
{
	// Wait a bit before showing ('effect' only)
	setTimeout(	function()
				{
					el_id.className	= '';
					el_id.src 		= img_src;

					globalImageCount++;
					if(globalImageCount < globalTotalImages)
					{
						preload_image(globalPreloaderArray[globalImageCount],globalImageURLArray[globalImageCount].innerHTML);
					}
				},100);
}

function preload_image(el_id,img_src)
{
	Preloader.add( img_src );
	Preloader.onFinish( set_image_url(el_id,img_src) );
	Preloader.load();
}

function init_preload_image()
{
	// Fill our global array w/ imageurls and preloader images
	globalPreloaderArray	= getElementsByClassName('preloader'); // All preload images
	globalImageURLArray		= getElementsByClassName('image_url'); // All hidden actual image urls
	globalTotalImages		= globalImageURLArray.length;

	// Start preload 1st image
	if(globalTotalImages > 0)
	{
		preload_image(globalPreloaderArray[0],globalImageURLArray[0].innerHTML);
	}
}