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

        function randomNumber (m,n){
            m = parseInt(m);
            n = parseInt(n);
            return Math.floor( Math.random() * (n - m + 1) ) + m;
        }

(function($) {

    $.backstretch = function(src, options, callback) {
        var settings = {
            centeredX: true,         // Should we center the image on the X axis?
            centeredY: true,         // Should we center the image on the Y axis?
            speed: 0,              // fadeIn speed for background after image loads (e.g. "fast" or 500)
            delay: 5000,
            showTips: false
        },
        rootElement = ("onorientationchange" in window) ? $(document) : $(window), // hack to acccount for iOS position:fixed shortcomings
        imgRatio, bgImg, bgWidth, bgHeight, bgOffset, bgCSS, imgCount, img, spText;
        
        // 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 _index = 0;
                var container = $("<div />").attr("id", "backstretch")
                                            .css({left: 0, top: 0, position: "fixed", overflow: "hidden", zIndex: -9999});
                    img = $("<img />").css({position: "relative", display: "none"})
                                      .bind("load", function(e) {                                          
                                          var self = $(this);
                                          imgRatio = $(e.target).width() / $(e.target).height();
    
                                          _adjustBG(function() {
                                              self.fadeIn(settings.speed, function(){
                                                  if(typeof callback == "function") callback();
                                              });
                                          });
                                      })
                                      .appendTo(container);
                    if (settings.showTips == true){
                        spText = $('<div />').attr('id', 'backstrtext')
                                      .css({position: 'absolute', left: '10%', top: /*randomNumber(30,70) +*/ '60%'})
                                      .addClass('onImageStr')
                                      .html('<div class="first"/><div class="second"/>')
                                      .appendTo($('body'));
                }
                                      
                $("body").prepend(container);
                if (typeof src == "object"){
                    img.attr("src", src.images[0].src); // Hack for IE img onload event
                    imgCount = src.images.length;
                    if (imgCount > 1) setInterval(_renewImg, settings.delay);
                } else {
                    img.attr("src", src); // Hack for IE img onload event
                }
                if (settings.showTips == true){
                    spText.find('div.first').text(src.images[0].str);
                    spText.find('div.second').text(src.images[0].strsm);
            }
                // Adjust the background size when the window is resized or orientation has changed (iOS)
                $(window).resize(_adjustBG);

            }
            function _renewImg(){
            var newimg = $(img).clone();
                newimg.hide();
            if (_index < imgCount - 1){
                newimg.attr("src", src.images[++_index].src);
                if (settings.showTips == true){
                    /*$(spText).css({left: '10%', top: randomNumber(30,70) + '%'});*/
                    $(spText).find('div.first').text(src.images[_index].str);
                    $(spText).find('div.second').text(src.images[_index].strsm);
                }
            } else {
                _index = 0;
                newimg.attr("src", src.images[_index].src);
                if (settings.showTips == true){
                    /*$(spText).css({left: '10%', top: randomNumber(30,70) + '%'});*/
                    $(spText).find('div.first').text(src.images[_index].str);
                    $(spText).find('div.second').text(src.images[_index].strsm);
                }
            }
            $(newimg).appendTo("#backstretch");
            $(newimg).fadeIn(settings.speed);
            $(img).remove();
            img = newimg;
        }
        }
            
        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"});
                }

                $("#backstretch 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);
