/*
    Background Stretcher jQuery Plugin
    © 2009 ajaxBlender.com
    For any questions please visit www.ajaxblender.com 
    or email us at support@ajaxblender.com
    
    Version: 1.2
*/

;(function($){
    /*  Variables  */
    var container = null;
    var allImgs = '', allLIs = '', containerStr = '';
    
    var element = this;
    var _bgStretcherPause = false;
    var _bgStretcherTm = null;
    
    $.fn.bgStretcher = function(settings){
        settings = $.extend({}, $.fn.bgStretcher.defaults, settings);
        $.fn.bgStretcher.settings = settings;
        
        function _build(){
            if(!settings.images.length){ return; }
            
            _genHtml();
            
            containerStr = '#' + settings.imageContainer;
            container = $(containerStr);
            allImgs = '#' + settings.imageContainer + ' IMG';
            allLIs = '#' + settings.imageContainer + ' LI';
            
            $(allLIs).hide();
            $(allLIs + ':first').show().addClass('bgs-current');
            
            if(!container.length){ return; }
            $(window).resize(_resize);
            
            if(settings.slideShow && $(allImgs).length > 1){
                _bgStretcherTm = setTimeout('$.fn.bgStretcher.slideShow()', settings.nextSlideDelay);
            }
            _resize();
        };
        
        function _resize(){
            var winW = $(window).width();
            var winH = $(window).height();
            var imgW = 0, imgH = 0;

            //  Update container's height
            container.width(winW);
            container.height(winH);
            
            //  Non-proportional resize
            if(!settings.resizeProportionally){
                imgW = winW;
                imgH = winH;
            } else {
                var initW = settings.imageWidth, initH = settings.imageHeight;
                var ratio = initH / initW;
                
                imgW = winW;
                imgH = winW * ratio;
                
                if(imgH < winH){
                    imgH = winH;
                    imgW = imgH / ratio;
                }
            }
            
            //  Apply new size for images
            if(!settings.resizeAnimate){
                $(allImgs).width(imgW).height(imgH);
            } else {
                $(allImgs).animate({width: imgW, height: imgH}, 'normal');
            }
        };
        
        function _genHtml(){
            var code = '<div id="' + settings.imageContainer + '" class="bgstretcher"><ul>';
            for(i = 0; i < settings.images.length; i++){
                code += '<li><img src="' + settings.images[i] + '" alt="" /></li>';
            }
            code += '</ul></div>';
            $(code).appendTo('body');
        };
        
        /*  Start bgStretcher  */
        _build();
    };
    
    $.fn.bgStretcher.play = function(){
       _bgStretcherPause = false;
       $.fn.bgStretcher._clearTimeout();
       $.fn.bgStretcher.slideShow();
       
    };
    
    $.fn.bgStretcher._clearTimeout = function(){
       if(_bgStretcherTm != null){
           clearTimeout(_bgStretcherTm);
           _bgStretcherTm = null;
       }
    }
    
    $.fn.bgStretcher.pause = function(){
       _bgStretcherPause = true;
       $.fn.bgStretcher._clearTimeout();
    };
    
    $.fn.bgStretcher.slideShow = function(){
        var current = $(containerStr + ' LI.bgs-current');
        var next = current.next();
        if(!next.length){
            next = $(containerStr + ' LI:first');
        }
        
        $(containerStr + ' LI').removeClass('bgs-current');
        next.addClass('bgs-current');
        
        next.fadeIn( $.fn.bgStretcher.settings.slideShowSpeed );
        current.fadeOut( $.fn.bgStretcher.settings.slideShowSpeed );
        
        if(!_bgStretcherPause){
          _bgStretcherTm = setTimeout('$.fn.bgStretcher.slideShow()', $.fn.bgStretcher.settings.nextSlideDelay);
        }
    };
    
    /*  Default Settings  */
    $.fn.bgStretcher.defaults = {
        imageContainer:             'bgstretcher',
        resizeProportionally:       true,
        resizeAnimate:              false,
        images:                     [],
        imageWidth:                 1400,
        imageHeight:                780,
        nextSlideDelay:             3000,
        slideShowSpeed:             'normal',
        slideShow:                  true
    };
    $.fn.bgStretcher.settings = {};
})(jQuery);
