/*
 * akSlider
 *
 * Author:  Adam Krupa <poczta@adamkrupa.com> http://adamkrupa.com/
 * Version: 0.3 (2011-11-12)
 * License: http://creativecommons.org/licenses/by-nd/3.0/pl/legalcode
 */
(function ($){
    $.fn.akSlider = function (){
        var aks = $(this);
        aks.addClass('ak-slider');
        
        var s = {
            //settings that can be changed (carefully!!!)
            'slideTime' : 4000, //if slideTime equals 0 then slider no automatically slide (slide only by nav buttons) [time in ms]
            'speedSlideAnimation' : 500, //[time in ms or fast, normal, slow]
            'pauseOnHover' : true, //[true or false]
            'showPrevNextButtons' : true, //[true or false]
            'showLoader' : true, //[true or false]

            //settings that can't be changed
            'sourceDir' : '',
            'currentSlide' : 0,
            'countSlides' : 0,
            'timer' : '',
            'pause' : false,
            'reverse' : false,
            'images' : null,
            'loader' : null
        }

        //get path to akSlider dir
        var getSourceDir = function (){
            var source = $('#ak-slider').attr('src');
            if (null != source){
                var match = source.match(/(.*)\/.*/);
                if (null !== match){
                    return match[1]+'/';
                }
            }
            return '';
        }
        if (s.sourceDir == ''){ s.sourceDir = getSourceDir(); }

        var getLoader = function(){
            var loader = $('<span><img src="'+s.sourceDir+'images/loading.gif" alt=""></span>').addClass('ak-slider-loader').hide();
            loader.appendTo(aks);
            //get width and height loader
            var width = loader.width(), height = loader.height();
            loader.css({
                'position' : 'absolute',
                'width' : width,
                'height' : height,
                'z-index' : '505',
                'left' : Math.round((aks.width()-width)/2),
                'top' : Math.round((aks.height()-height)/2)
            });
            loader.appendTo(aks);
            return loader;
        }
        if (s.showLoader){ s.loader = getLoader(); }

        var akSliderGo = function(slideId){
            if (s.reverse == false && slideId >= 0 && slideId < s.countSlides){
                s.reverse = true;
                $('.ak-slider-menu span img').attr('src', s.sourceDir+'images/point.png');
                var toRemove = $('.ak-slider-image');
                if (null != toRemove){
                    toRemove.removeClass('ak-slider-image');
                }
                $('.ak-slider-menu span:eq('+slideId+') img').attr('src', s.sourceDir+'images/point_sel.png');
                if (s.showLoader){ s.loader.show(); }
                $("<img />").attr('src', s.sourceDir+'slides/'+s.images[slideId]).addClass('ak-slider-image').css({
                    'display' : 'block',
                    'position' : 'absolute',
                    'top' : '0',
                    'left' : '0',
                    'z-index' : '502',
                    'opacity' : 0
                }).load(function() {
                    if (s.showLoader){ s.loader.hide(); }
					toRemove.fadeOut('slow');
                    $(this).appendTo(aks).animate({'opacity' : 1}, s.speedSlideAnimation, function(){
                        toRemove.remove();
                        $(this).css('z-index', '501');
                        s.currentSlide = slideId;
                        s.reverse = false;
                    });
                });
            }
        }

        //getting next slide number
        var getNext = function (){
            var next = s.currentSlide+1;
            if (next >= s.countSlides){
                next = 0;
            }
            return next;
        }

        //getting prev slide number
        var getPrev = function (){
            var prev = s.currentSlide-1;
            if (prev < 0){
                prev = s.countSlides-1;
            }
            return prev;
        }

        var setTimer = function() {
            if (s.pause == false && s.slideTime > 0){
                s.timer = setInterval(function() {
                    akSliderGo(getNext());
                }, s.slideTime);
            }
        }
        
        var clearTimer = function() {
            clearInterval(s.timer);
            s.timer = '';
        }

        $.ajax({
            'url' : s.sourceDir + 'get_slides.php',
            'async' : false,
            'dataType' : 'json',
            'success' : function(jsonData) {
                //count slides
                s.images = jsonData['data'];
                s.countSlides = s.images.length;
                if (s.countSlides > 0){
                    //show prev and next buttons
                    if (s.showPrevNextButtons && s.countSlides > 1){
                        //prev button
                        //aks.append($('<div class="ak-slider-menu-prev"></div>'));
                        //next button
                        //aks.append($('<div class="ak-slider-menu-next"></div>'));
                        //menu
                        aks.append($('<div class="ak-slider-menu"></div>'));
                        var i = 0;
                        for (i=1; i<=s.countSlides; i++){
                            $('.ak-slider-menu').append('<span><img src="'+s.sourceDir+'images/point.png" alt=""></span>');
                        }
                    }

                    akSliderGo(jsonData['rand']);
                    setTimer();

                    //pause if mouse hover
                    if (s.pauseOnHover){
                        aks.hover(function() {
                            s.pause = true;
                            clearTimer();
                        }, function() {
                            s.pause = false;
                            setTimer();
                        });
                    }
                    $('.ak-slider-menu-prev').click(function (){
                        clearTimer();
                        akSliderGo(getPrev());
                        setTimer();
                    });
                    $('.ak-slider-menu-next').click(function (){
                        clearTimer();
                        akSliderGo(getNext());
                        setTimer();
                    });
                    $('.ak-slider-menu span').click(function (){
                        clearTimer();
                        akSliderGo($('.ak-slider-menu span').index(this));
                        setTimer();
                    });
                }
            }
        });


    }
})(jQuery);
