text: /*
   * jQuery Anystretch
   * Version 1.0
   * https://github.com/danmillar/jquery-anystretch
   *
   * Add a dynamically-resized background image to the body
   * of a page or any other block level element within it
   *
   * Copyright (c) 2012 Dan Millar (@danmillar / decode.uk.com)
   * Dual licensed under the MIT and GPL licenses.
   *
   * This is a fork of jQuery Backstretch (v1.2)
   * Copyright (c) 2011 Scott Robbin (srobbin.com)
  */
  
  ;(function($) {
      
      $.fn.anystretch = function(src, options, callback) {
          return this.each(function(i){
          
              var defaultSettings = {
                  centeredX: true,         // Should we center the image on the X axis?
                  centeredY: true,         // Should we center the image on the Y axis?
                  bottom: false,         // Should we force the to be at the bottom of the Y axis?
                  speed: 0,                // fadeIn speed for background after image loads (e.g. "fast" or 500)
                  elPosition: 'relative',  // position of containing element when not being added to the body
              },
              el = $(this),
              isBody = (el.get(0).tagName == undefined) ? true : false, // Decide whether anystretch is being called on an element or not
              container = isBody ? $('.anystretch') : el.children(".anystretch"),
              settings = container.data("settings") || defaultSettings, // If this has been called once before, use the old settings as the default
              existingSettings = container.data('settings'),
              imgRatio, bgImg, bgWidth, bgHeight, bgOffset, bgCSS;
              
              // Extend the settings with those the user has provided
              if(options && typeof options == "object") $.extend(settings, options);
              
              // Just in case the user passed in a function without options
              if(options && typeof options == "function") callback = 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 img;
                      
                      if(!isBody) {
                          // If not being added to the body set position to elPosition (default: relative) to keep anystretch contained
                          el.css({position: settings.elPosition, background: "none"});
                      }
                      
                      // If this is the first time that anystretch is being called
                      if(container.length == 0) {
                          container = $("<div />").attr("class", "anystretch")
                                                  .css({left: 0, top: 0, position: (isBody ? "fixed" : "absolute"), overflow: "hidden", zIndex: (isBody ? -999999 : -999998), margin: 0, padding: 0, height: "100%", width: "100%"});
                      } else {
                          // Prepare to delete any old images
                          container.find("img").addClass("deleteable");
                      }
      
                      img = $("<img />").css({position: "absolute", display: "none", margin: 0, padding: 0, border: "none", zIndex: -999999})
                                        .bind("load", function(e) {                                          
                                            var self = $(this),
                                                imgWidth, imgHeight;
          
                                            self.css({width: "auto", height: "auto"});
                                            imgWidth = this.width || $(e.target).width();
                                            imgHeight = this.height || $(e.target).height();
                                            imgRatio = imgWidth / imgHeight;
      
                                            _adjustBG(function() {
                                                self.fadeIn(settings.speed, function(){
                                                    // Remove the old images, if necessary.
                                                    container.find('.deleteable').remove();
                                                    // Callback
                                                    if(typeof callback == "function") callback();
                                                });
                                            });
                                            
                                        })
                                        .appendTo(container);
                       
                      // Append the container to the body, if it's not already there
                      if(el.children(".anystretch").length == 0) {
                          if(isBody) {
                              $('body').append(container);
                          } else {
                              el.append(container);
                          }
                      }
                      
                      // Attach the settings
                      container.data("settings", settings);
                          
                      img.attr("src", src); // Hack for IE img onload event
                      
                      // 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 = _width();
                      bgHeight = bgWidth / imgRatio;
      
                      // Make adjustments based on image ratio
                      // Note: Offset code provided by Peter Baker (http://ptrbkr.com/). Thanks, Peter!
                      if(bgHeight >= _height()) {
                          bgOffset = (bgHeight - _height()) /2;
                          if(settings.centeredY) $.extend(bgCSS, {top: "-" + bgOffset + "px"});
                          if(settings.bottom) $.extend(bgCSS, {top: "auto", bottom: "0px"});
                      } else {
                          bgHeight = _height();
                          bgWidth = bgHeight * imgRatio;
                          bgOffset = (bgWidth - _width()) / 2;
                          if(settings.centeredX) $.extend(bgCSS, {left: "-" + bgOffset + "px"});
                      }
      
                      container.children("img:not(.deleteable)").width( bgWidth ).height( bgHeight )
                                                         .filter("img").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();
              }
              
              function _width() {
                  return isBody ? el.width() : el.innerWidth();
              }
              
              function _height() {
                  return isBody ? el.height() : el.innerHeight();
              }
              
          });
      };
      
      $.anystretch = function(src, options, callback) {
          var el = ("onorientationchange" in window) ? $(document) : $(window); // hack to acccount for iOS position:fixed shortcomings
          
          el.anystretch(src, options, callback);
      };
    
  })(jQuery);