$(function(){
    var fadeDelay = 5000;
    var line1Delay = 100;
    var line2Delay = 100;
    var rightInfoDelay = 100;
    
    var fadeSpeed = 2000;
    var line1Speed = 900;
    var line2Speed = 900;
    var rightInfoSpeed = 900;
    
    var timeout = null;
    var timeoutStart = null;
    var timeoutRemaining = null;
    var bannerData = null;
    var firstImage = null;
    var currentSlide = 0;
    var showThumbs = false;
    var preloadAll = true;
    
    
    var slider = $('#slider');
    var customBtns = $('.slider-nav', slider);

    if(slider.length){
        $.getJSON('/modules/banners/get_banner_data.php', function(data){
            bannerData = data;
    
            $(['/modules/banners/images/trans-bg.png']).preload();
            
            $([bannerData[0].image]).preload({
                onFinish: function(){
                    //setSliderSize();
                    $('<img/>').attr('src', bannerData[0].image).prependTo('.slide', slider);
                    showSlideInfo(currentSlide);
                    //showSlideLines(currentSlide);
                    
                    if(bannerData.length > 1){
                        if(showThumbs == true){
                            buildThumbs();
                            preloadThumbs();
                        }
                        else{
                            //custom slide buttons
                            $('a:first', customBtns).addClass('current');
                            $('a', customBtns).click(function(){
                                var idx = $('a', customBtns).index(this);
                                nextImage(idx);
                                timeoutRemaining = null;
                                return false;
                            });
                            //end custom buttons
                            
                            doTimeout();
                            preloadNext();
                        }
                    }
                }
            });
            
        });
    }
   
    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){
            if(bannerData[idx].info_side == 1)
                infoBox
                    .css({left: infoBox.outerWidth()*-1, right: 'auto'})
                    .delay(rightInfoDelay)
                    .animate({left: 0}, rightInfoSpeed);
            else
                infoBox
                    .css({right: infoBox.outerWidth()*-1, left: 'auto'})
                    .delay(rightInfoDelay)
                    .animate({right: 0}, rightInfoSpeed);
        }
    }
    
    function showSlideLines(idx){
        var line1 = $('.slide-line1-container', slider);
        line1.html(bannerData[idx].line1).css('left', line1.outerWidth()*-1);
        
        if(bannerData[idx].line1)
            line1.delay(line1Delay).animate({left: 30}, line1Speed);
            
        var line2 = $('.slide-line2-container', slider);
        line2.html(bannerData[idx].line2).css('left', line2.outerWidth()*-1);
        
        if(bannerData[idx].line2)
            line2.delay(line2Delay).animate({left: 40}, line2Speed);
    }
   
    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(idx){
        if(!idx) idx = currentSlide;
        var nextSlide = (idx == bannerData.length-1) ? 0 : idx+1;
        $([bannerData[nextSlide].image]).preload({
            onFinish: function(){
                if(preloadAll){
                    nextSlide = (idx == bannerData.length-1) ? 0 : idx+1;
                    if(nextSlide != 0) setTimeout( function(){ preloadNext(nextSlide); }, 1000);
                    else preloadAll = false;
                }
            }    
        });
    }
    
    function nextImage(idx){
        clearTimeout(timeout);
        timeout = null;
        
        if(idx == null){
            var nextSlide = (currentSlide == bannerData.length-1) ? 0 : currentSlide+1;
        }
        else{
            var nextSlide = idx;
        }
        
        if(!bannerData[nextSlide]) return null;
        
        //$('.slide-line1-container', slider).stop(true).animate({left: $('.slide-line1-container', slider).outerWidth()*-1}, line1Speed);
        //$('.slide-line2-container', slider).stop(true).animate({left: $('.slide-line2-container', slider).outerWidth()*-1}, line2Speed);
        
        var infoBox = $('.slide-text-container', slider);
        if(bannerData[currentSlide].info_side == 1)
            infoBox.stop(true).animate({left: infoBox.outerWidth()*-1}, rightInfoSpeed);
        else
            infoBox.stop(true).animate({right: infoBox.outerWidth()*-1}, rightInfoSpeed);
        
        currentSlide = nextSlide;
        
        //custom slide buttons
        $('a', customBtns).removeClass('current').eq(currentSlide).addClass('current');
        
        var img = $('img', slider);
        var newimg = $('<img/>').insertAfter(img).hide().attr('src', bannerData[currentSlide].image);
        img.fadeOut(fadeSpeed, function(){ $(this).remove(); });
        newimg.fadeIn(fadeSpeed, function(){
            doTimeout();
            //showSlideLines(currentSlide);
            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);

