/*
* jQuery Divstretch
*
* Modified by Serious&Ly
* http://www.seriousandly.com/
*
* ---
*
* Original - Version 1.1.2
* http://srobbin.com/jquery-plugins/jquery-backstretch/
*
* Copyright (c) 2010 Scott Robbin (srobbin.com)
* Dual licensed under the MIT and GPL licenses.
*/

(function($) {

	$.divstretch = function(src, options, callback) {
		var settings = {centeredX: true, centeredY: true, speed: 'normal'};
		var rootElement = $("#feature");
		var imgRatio, bgImg, bgWidth, bgHeight, bgOffset, bgCSS;

		// 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 container = $("<div />").attr("id", "divstretch").css({left: 0, top: 0, position: "absolute", overflow: "hidden", zIndex: -9999});
				var img = $("<img />").css({position: "relative", display: "none"}).bind("load", function(e) {                                          
					var self = $(this);
					imgRatio = $(e.target).width() / $(e.target).height();
				
					_adjustBG(function() {
						if (typeof callback == "function") callback();
						self.fadeIn(settings.speed, function() {						
						});
					});
				}).appendTo(container);
				
				// Add image to divstretch div
				$("#feature").prepend(container);
				
				// Hack for IE img onload event
				img.attr("src", src);
				
				// Adjust the background size when the window is resized or orientation has changed (iOS)
				$(window).resize(_adjustBG);
			}
		}
		
		function _adjustBG(fn) {
			try {
				bgCSS = {left: 0, top: 0}
				bgWidth = rootElement.width();
				bgHeight = bgWidth / imgRatio;
		
				// Make adjustments based on image ratio
				// Note: Offset code provided by Peter Baker (http://ptrbkr.com/). Thanks, Peter!
				if (bgHeight >= rootElement.height()) {
					bgOffset = (bgHeight - rootElement.height()) /2;
					if (settings.centeredY) {
						$.extend(bgCSS, {top: "-" + bgOffset + "px"});
					}
				} else {
					bgHeight = rootElement.height();
					bgWidth = bgHeight * imgRatio;
					bgOffset = (bgWidth - rootElement.width()) / 2;
					if (settings.centeredX) {
						$.extend(bgCSS, {left: "-" + bgOffset + "px"});
					}
				}
		
				$("#divstretch img").width(bgWidth).height(bgHeight).css(bgCSS);
			} catch(err) {
				// IE7 seems to trigger _adjustBG before the image is loaded.
				// This try/catch block is a hack to let it fail gracefully.
			}

			// Executed the passed in function, if necessary
			if (typeof fn == "function") fn();
		}
	};

})(jQuery);
