/*!
// Background Revolver jQuery plugin
// copyright Barrington Haynes, licensed GPL & MIT
// version 1.0

// home and docs: http://www.barringtonhaynes.com
*/
 
;(function($){
	$.fn.backgroundrevolver = function(options){
		// console log wrapper.
		function debug() {
			if (opts.debug) { window.console && console.log.call(console,arguments)}
		}
		
		var brTimeout,
			brImageIndex = 0,
			brImageElements = [],
			brImageElement,
			brImageRatio,
			brScaleDimension,
			win = $(window),
			opts = $.extend({}, $.backgroundrevolver.defaults, options),
			props = $.backgroundrevolver,
			brContainer,
			brImageContainer; // shorthand
		
		var SCALE_HEIGHT = 0,
			SCALE_WIDTH = 1;
		
		// we doing this on an overflow:auto div?
		//props.container = opts.localMode ? this : document.documentElement;
		props.container = this;
		
		brContainer = props.container;
		
		// return if there are no images
		if (opts.images === undefined) {
			debug('images array is empty');
			return false;
		}
		
		function scheduleTransition(){
			brTimeout = setTimeout(nextImage,opts.intervalTime);
		}
		
		function nextImage(){
			var topImage = brImageIndex++;
			brImageIndex = brImageIndex % brImageElements.length;
			brImageElements[brImageIndex].css("opacity",1);
			brImageElements[topImage ].animate({opacity:0},opts.fadeTime,function(){
				brImageElements[topImage].css("opacity",0);
				brImageElements[topImage].detach();
				brImageContainer.prepend(brImageElements[topImage]);
				scheduleTransition();
			});
		}
		
		function containerResize(e){
			var winHeight = brImageContainer.height(),
				winWidth = brImageContainer.width();
			
			if ((winHeight / winWidth) > brImageRatio){
				if (brScaleDimension === SCALE_HEIGHT) return false;
				brScaleDimension = SCALE_HEIGHT;
				for (var i=0;i<brImageElements.length;i++){
					brImageElements[i].height("100%").width("");
				}
			}else{
				if (brScaleDimension === SCALE_WIDTH) return false;
				brScaleDimension = SCALE_WIDTH;
				for (var i=0;i<brImageElements.length;i++){
					brImageElements[i].height("").width("100%");
				}
			}
		}
		
		brImageContainer = $('<div class="background-revolver-container"></div>');
		brImageContainer.css("position","fixed").css("top",0).css("left",0).css("bottom",0).css("right",0).css("overflow","hidden").css("display","none");
		
		if (brImageContainer.css("position") !== "fixed"){
			brImageContainer.css("position","absolute")
		}
		
		var imageLoadCounter = 0;
		
		function imageLoaded(e){
			if (imageLoadCounter === 0){
				brImageRatio = e.target.height / e.target.width;
				win.resize(containerResize);
				win.resize();
				brImageContainer.css("display","block");
			}
			
			// Only make the transition once all images have loaded
			if (++imageLoadCounter === opts.images.length){
				scheduleTransition();
			}
		}
		
		for (var i=0;i<opts.images.length;i++){
			loadImage(opts.images[i],i);
		}
		
		function loadImage(img,index){
			brImageElement = $('<img src="'+img.src+'" alt="'+img.alt+'" />');
			brImageElement.css("position","absolute").css("top",0).css("left",0);
			
			if (index>0){
				brImageElement.css("opacity",0);
			}			
			
			brImageElement.load(function(e){
				imageLoaded(e);
			});
			
			brImageElements.push(brImageElement);
			brImageContainer.prepend(brImageElement);
		}
		
		brContainer.prepend(brImageContainer);
		
		return this;
	} // end of $.fn.backgroundrevolver()
	
	// options and read-only properties object
	$.backgroundrevolver = {
		defaults: {
			debug: false,
			preload: false,
			intervalTime: 5000,
			fadeTime: 600,
			localMode: false,
			errorCallback: function(){}
		}, 
		images: undefined,
		intervalTime: undefined,
		fadeTime: undefined,
		container: undefined,
		currPage: 1,
		currDOMChunk: null, // defined in setup()'s load()
		isDuringAjax: false,
		isInvalidPage: false,
		isDone: false // for when it goes all the way through the archive.
	};
})(jQuery);
