var loaded = [], imgs = [], cur = 0, bgslide = false, interval = false;

function fireBackground(href, con, anim) {
    $(con).find('.activeslide').addClass('prevslide').removeClass('activeslide');
    $(con).find('.nextslide').css('opacity', 0).attr('src', href).removeClass('nextslide').addClass('activeslide');
    $(con).find('.prevslide').removeClass('prevslide').addClass('nextslide');
    
    if (anim) {
        $(con).find('.activeslide').animate({
            'opacity': 1,
            'top': '-=1%',
            'width': '+=2%',
            'height': '+=2%'
        }, 2400, 'easeInOutQuint');
    } else {
        $(con).find('.activeslide').animate({
            'opacity': 1
        }, 2400, 'easeInOutQuint');
    }
    
    bgslide = window.setTimeout(function() {
        nextImage(con, anim);
    }, interval);
}

function loadImage(con, anim) {
    if (jQuery.inArray(imgs[cur], loaded) < 0) {
        $.cacheImage(imgs[cur], {
            load : function (e) {
                loaded.push(imgs[cur]);
                fireBackground(imgs[cur], con, anim);
            }
        });
    } else {
        fireBackground(imgs[cur], con, anim);
    }
}

function nextImage(con, anim) {
    cur = (cur + 1) >= imgs.length ? 0 : cur + 1;
    loadImage(con, anim);
}

(function($){

	//Resize image on ready or resize
	$.fn.supersized = function() {
		$.inAnimation = false;
		$.paused = false;
		var con = $(this);
		var options = $.extend($.fn.supersized.defaults, $.fn.supersized.options);
		
		$(window).bind("load", function(){
			$('#loading').hide();
			$(con).fadeIn('fast');
			if ($(con).find('.activeslide').length == 0) $(con).find('img:first').addClass('activeslide');
			
    		
    		if (options.slideshow && options.slideshow.length) {
    		    if ($(con).find('img').length < 2) {
    		        $(con).find('img:first').clone()
    		        .attr('class', 'nextslide').appendTo($(con));
    		    }
    		    imgs = options.slideshow;
    		    interval = options.timer;
    		    bgslide = window.setTimeout(function() {
    		        nextImage(con, options.anim_bg);
    		    }, options.timer);
    		}
		});
				
		$(document).ready(function() {
			$(con).each(function() {
			    $(this).resizenow();
			}); 
		});;
		
		$(window).bind("resize load", function(){
    		$(con).each(function() {
			    $(this).resizenow();
			});
		});
		
		$(con).hide();
	};
	
	//Adjust image size
	$.fn.resizenow = function() {
		var options = $.extend($.fn.supersized.defaults, $.fn.supersized.options);
	  	return this.each(function() {
	  		
			//Define image ratio
			var ratio = options.startheight/options.startwidth;
			
			//Gather browser and current image size
			var imagewidth = $(this).width();
			var imageheight = $(this).height();
			var browserwidth = $(window).width();
			var browserheight = $(window).height();
			var offset;
			
			if (options.anim_bg == 1) {
			    browserwidth = browserwidth * 1.052;
			    browserheight = browserheight * 1.052;
			}

			//Resize image to proper ratio
			if ((browserheight/browserwidth) > ratio){
			    $(this).height(browserheight);
			    $(this).width(browserheight / ratio);
			    $(this).children().height(browserheight);
			    $(this).children().width(browserheight / ratio);
			} else {
			    $(this).width(browserwidth);
			    $(this).height(browserwidth * ratio);
			    $(this).children().width(browserwidth);
			    $(this).children().height(browserwidth * ratio);
			}
			if (options.align_bottom == 1){
			    $(this).children().css('left', (browserwidth - $(this).width()));
				$(this).children().css('top', (browserheight - $(this).height()));
			}
			else if (options.vertical_center == 1){
				$(this).children().css('left', (browserwidth - $(this).width())/2);
				$(this).children().css('top', (browserheight - $(this).height())/2);
			}
			return false;
		});
	};
	
	$.fn.supersized.defaults = { 
			startwidth: 4,  
			startheight: 3,
			vertical_center: 1,
			align_bottom: 0,
			slideshow: false,
			anim_bg: 0,
			timer: 5000
	};
	
})(jQuery);
