/*
 * jQuery Backstretch 1.0
 * http://srobbin.com/jquery-plugins/jquery-backstretch/
 *
 * Add a dynamically-resized background image to the page
 *
 * Copyright (c) 2009 Scott Robbin (srobbin.com)
 * Dual licensed under the MIT and GPL licenses.
*/

(function($) {

  $.backstretch = function(src, options, callback) {
    var settings = {
          hideUntilReady: true, // Hide the image until it's finished loading
          speed: 0 // fadeIn speed for background after image loads (e.g. "fast" or 500)
        },
        imgRatio;
    
    // Extend the settings with those the user has provided
    if(options && typeof options == "object") $.extend(settings, options);
    
    // Initialize
    $(document).ready(_init);
  
    // For chaining
    return this;
    
	function _init() {
	// Prepend image, wrapped in a DIV, with some positioning and zIndex voodoo
	if (src) {
		var commonCSS = {left: 0, top: 0},
			wrap = $("<div />")
					.attr("id", "backstretch-wrap")
					.css( $.extend(commonCSS, {position: "absolute", zIndex: -1}) ),
			container = $("<div />")
					.attr("id", "backstretch")
					.css( $.extend(commonCSS, {
						position: "fixed",
						overflow: "hidden",
						zIndex: -1
						}) )
					.appendTo(wrap),
			img = $("<img />")
					.attr("src", src)
					.bind("load", function() {
						var self = $(this);
						imgRatio = self.width() / self.height();
						_adjustBG(function() {
							if(settings.hideUntilReady) {
								self.fadeIn(settings.speed, function(){
									// Callback, if necessary
									if(typeof callback == "function") callback();
								});
							}
						});
					});

		if (settings.hideUntilReady) img.hide();
		img.appendTo(container);

		$("body").prepend(wrap);
		if (settings.hideUntilReady) { $("#load").animate({ opacity: 0}, 'fast'); }

		// Adjust the background size when the window is resized
        $(window).resize(_adjustBG);
      }
      
    }
    
    function _adjustBG(callback) {
		var bgWidth = $(window).width(),
		bgHeight = bgWidth / imgRatio;

		if(bgHeight < $(window).height()) {
			bgHeight = $(window).height();
			bgWidth = bgHeight * imgRatio;
		}

		var bgOffsetW = Math.round((bgWidth - $(window).width()) / 2);
		var bgOffsetH = Math.round((bgHeight - $(window).height()) /2);

		$("#backstretch img").width(bgWidth).height(bgHeight);
		$("#backstretch img").css({ position: 'relative',  top: '-' + bgOffsetH + 'px', left: '-' + bgOffsetW + 'px'})
      
		if (typeof callback == "function") callback();
	}
};
  
})(jQuery);
