$(function(){
    var fadeDelay = 7000;
    var fadeSpeed = 750;
    var infoBoxFadeSpeed = 400;
    
    var timeout = null;
    var timeoutStart = null;
    var timeoutRemaining = null;
    var thumbsInterval = null;
    var bannerData = null;
    var firstImage = null;
    var currentSlide = 0;
    
    var slider = $('#slider');
    
   $.getJSON('/modules/banners/get_banner_data.php', function(data){
        bannerData = data;

        $(['/modules/banners/images/trans-bg.png']).preload();
        
        
        $('img', slider).attr('src', bannerData[0].image);
        firstImage = $('img', slider);
        
        $(firstImage).preload({
            onFinish: function(){                
                setSliderSize();
                showSlideInfo(currentSlide);
                
                if(bannerData.length > 1){
                    buildThumbs();
                    preloadThumbs();
                }
            }
        });
        
    });
   
    function setSliderSize(){
        slider.css({
            width: firstImage.width(),
            height: firstImage.height()
        });
    }
    
    function showSlideInfo(idx){
        var infoBox = $('.slide-text-container', slider);
        infoBox.html(bannerData[idx].info);
        
        if(bannerData[idx].info != '')
            infoBox.animate({right: 0}, infoBoxFadeSpeed);
    }
   
    function buildThumbs(){
        $(slider).append(
            '<div class="slider-thumbs-wrapper" style="display:none;">'+
            '   <div class="slider-thumbs-container">'+
            '       <div class="slider-thumbs"/>'+
            '   </div>'+
            '   <a href="#" class="slider-thumbs-control slider-thumbs-left"></a>'+
            '   <a href="#" class="slider-thumbs-control slider-thumbs-right"></a>'+
            '</div>'
        );
        
        var thumbsDiv = $('.slider-thumbs', slider).width(0);
        
        $(bannerData).each(function(idx, e){
            var thumb = '<a href="#"><img src="'+e.thumb+'"/></a>';
            
            thumbsDiv
                .append(thumb)
                .find('a:last')
                    .data("idx", idx);
        });
    }
   
    function preloadThumbs(){
        var thumbsDiv = $('.slider-thumbs', slider);
        var thumbs = $('img', thumbsDiv);
        
        $(thumbs).preload({
            onFinish: function(){
                
                $('.slider-thumbs-wrapper', slider).show();
                
                $(thumbs).each(function(){
                    thumbsDiv.width(thumbsDiv.width() + $(this).parent().outerWidth(true));
                });
                
                if(thumbsDiv.width() < $('.slider-thumbs-container', slider).width()){
                    $('.slider-thumbs-control', slider).hide();
                }
                
                handleThumbs();
                doTimeout();
                preloadNext();
            }
        });
    }
    
    
    function handleThumbs(){
        $('.slider-thumbs a', slider).click(function(){
            nextImage($(this).data('idx'));
            timeoutRemaining = null;
            return false;
        });
        
        $('.slider-thumbs-left', slider).hover(
            function(){
                var thumbs = $('.slider-thumbs', slider);
                var cur = parseInt(thumbs.css('left'));
                var speed = (0-cur)*15;
                thumbs.animate({left: 0}, speed); 
            },
            function(){
                $('.slider-thumbs', slider).stop();
            }
        )
        .click(function(){ return false; });
        
        $('.slider-thumbs-right', slider).hover(
            function(){
                var thumbs = $('.slider-thumbs', slider);
                var min = (thumbs.width() - $('.slider-thumbs-container', slider).width()) * -1;
                var cur = parseInt(thumbs.css('left'));
                var speed = (cur-min)*15;
                thumbs.animate({left: min}, speed);   
            },
            function(){
               $('.slider-thumbs', slider).stop();
            }
        )
        .click(function(){ return false; });
    }
    
    function preloadNext(){
        var nextSlide = (currentSlide == bannerData.length-1) ? 0 : currentSlide+1;
        $([bannerData[nextSlide].image]).preload();
    }
    
    function nextImage(idx){
        clearTimeout(timeout);
        timeout = null;
        
        if(idx == null){
            var nextSlide = (currentSlide == bannerData.length-1) ? 0 : currentSlide+1;
        }
        else{
            var nextSlide = idx;
        }
        
        $('.slide-text-container', slider).animate({right: $('.slide-text-container', slider).width()*-1}, infoBoxFadeSpeed);
        
        $('.slide', slider).fadeOut(fadeSpeed, function(){
            currentSlide = nextSlide;
            $('img', this).after('<img/>').remove();
            var img = $('img', this).attr('src', bannerData[currentSlide].image);
            $(this).fadeIn(fadeSpeed, function(){
                doTimeout();
                showSlideInfo(currentSlide);                
                preloadNext();
            });
        });        
    }
    
    function doTimeout(delay){
        if(isNaN(delay)) delay = fadeDelay;
        
        clearTimeout(timeout);
        timeout = setTimeout(function(){nextImage(null)}, delay);
        timeoutStart = (new Date()).getTime();
    }
    
    
    $(slider).hover(
        function(){
            if(timeout == null) return;
            
            clearTimeout(timeout);
            timeout = null;
            
            var curTime = (new Date()).getTime();
            timeoutRemaining = fadeDelay - (curTime - timeoutStart);
        },
        function(){
            if(timeout == null && timeoutRemaining)            
                doTimeout(timeoutRemaining);
        }
    );
});








/**
 * jQuery.Preload - Multifunctional preloader
 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com
 * Dual licensed under MIT and GPL.
 * Date: 3/25/2009
 * @author Ariel Flesler
 * @version 1.0.8
 */
;(function($){var h=$.preload=function(c,d){if(c.split)c=$(c);d=$.extend({},h.defaults,d);var f=$.map(c,function(a){if(!a)return;if(a.split)return d.base+a+d.ext;var b=a.src||a.href;if(typeof d.placeholder=='string'&&a.src)a.src=d.placeholder;if(b&&d.find)b=b.replace(d.find,d.replace);return b||null}),data={loaded:0,failed:0,next:0,done:0,total:f.length};if(!data.total)return finish();var g=$(Array(d.threshold+1).join('<img/>')).load(handler).error(handler).bind('abort',handler).each(fetch);function handler(e){data.element=this;data.found=e.type=='load';data.image=this.src;data.index=this.index;var a=data.original=c[this.index];data[data.found?'loaded':'failed']++;data.done++;if(d.enforceCache)h.cache.push($('<img/>').attr('src',data.image)[0]);if(d.placeholder&&a.src)a.src=data.found?data.image:d.notFound||a.src;if(d.onComplete)d.onComplete(data);if(data.done<data.total)fetch(0,this);else{if(g&&g.unbind)g.unbind('load').unbind('error').unbind('abort');g=null;finish()}};function fetch(i,a,b){if(a.attachEvent&&data.next&&data.next%h.gap==0&&!b){setTimeout(function(){fetch(i,a,1)},0);return!1}if(data.next==data.total)return!1;a.index=data.next;a.src=f[data.next++];if(d.onRequest){data.index=a.index;data.element=a;data.image=a.src;data.original=c[data.next-1];d.onRequest(data)}};function finish(){if(d.onFinish)d.onFinish(data)}};h.gap=14;h.cache=[];h.defaults={threshold:2,base:'',ext:'',replace:''};$.fn.preload=function(a){h(this,a);return this}})(jQuery);

