/*
/*  simplFader jQuery plugin v 0.2.6 beta
/*  by Amano Design: blog.serwisamano.pl
 */
(function($){})(window.jQuery);
(function( $ ){
    jQuery.fn.simplFader = function(options) {
        
        var $thiz = this;
        var simplFaderContanier = this;
        var simplFaderElements = simplFaderContanier.children();
        
        var settings = { 
            'navNext' : false, 
            'navPrev' : false,
            'detailNav' : false,
            'detailNavContainer': false, 
            'autoPlay' : true,
            'autoPlaySpeed' : 5000,
            'clickFadeSpeed' : 1000,
            'speed' : 1000
        };
        
        if (options) {
            $.extend(settings,options);
        }
        
        (function(){ 
            simplFaderElements.not(':first').hide();
            simplFaderContanier.find(':first').addClass('active');
        })();
        
        var simplFader = {         
            
            container : simplFaderContanier,
            elements :  simplFaderElements,
            current: 1,
            getActive: function() {
                return simplFaderContanier.find('.active');
            },
            goToElement: function(num, obj) {
                var thz = this;
                var speed = settings.clickFadeSpeed;
                if (!this.elements.is(':animated')) {
                    thz.current = num+1;
                    if (settings.detailNav) {
                        setActiveNav();
                    }
                    this.getActive().fadeOut(speed,function(){
                        thz.getActive().removeClass('active');
                        obj.fadeIn(speed,function(){
                            $(this).addClass('active');
                            if (settings.detailNav) {
                                setActiveNav();
                            }
                        });
                    });
                }
            },
            nextElement: function(event) {
                var thz = this;
                var speed = settings.speed;
                if (event === 'click') {
                    speed = settings.clickFadeSpeed;
                } 
                
                if (!this.elements.is(':animated')) {
                    if (this.current < this.elements.length) {
                        thz.current++;
                        if (settings.detailNav) {
                            setActiveNav();
                        }
                        this.getActive().fadeOut(speed,function(){
                            thz.getActive().removeClass('active').next().fadeIn(speed,function(){
                                $(this).addClass('active');
                                if (settings.detailNav) {
                                    setActiveNav();
                                }
                            });
                        });
                    }
                    
                    else {
                        thz.current = 1;
                        if (settings.detailNav) {
                            setActiveNav();
                        }
                        this.getActive().fadeOut(speed,function(){
                            thz.getActive().removeClass('active');
                            simplFaderContanier.children(':first').fadeIn(speed,function(){
                                $(this).addClass('active');
                            });
                        });
                    }
                }
            },
            prevElement: function(event) {
                var thz = this;
                var speed = settings.speed;
                if (event === 'click') { 
                    speed = settings.clickFadeSpeed;
                } 
                
                if (!this.elements.is(':animated')) {
                    thz.current--;
                    setActiveNav();
                    if (this.current !== 0) { 
                        this.getActive().fadeOut(speed,function(){
                            thz.getActive().removeClass('active').prev().fadeIn(speed,function(){
                                $(this).addClass('active');
                            });
                        });

                    }
                    else {
                        thz.current = thz.elements.length;
                        setActiveNav();
                        this.getActive().fadeOut(speed,function(){
                            thz.getActive().removeClass('active');
                            simplFaderContanier.children(':last').fadeIn(speed,function(){
                                $(this).addClass('active');
                            });
                        });
                    }
                }
            },
            autoPlay: (function(){ 

                if (options.autoPlay) {
                    function autoplay(){
                        function timoutFunc(){
                            simplFader.nextElement();
                        }

                        this.causeTimeout = function(speed){
                            setInterval(timoutFunc, speed);
                        }  
                    }

                    var play  = new autoplay();
                    play.causeTimeout(settings.autoPlaySpeed);
                }

            })(),
            seNav: (function() {
                if (!options.navNext) {
                    simplFaderElements.click(function(event){
                        simplFader.nextElement(event.type);
                    })
                }
                else { 
                    settings.navNext.click(function(event){
                        simplFader.nextElement(event.type);
                        return false;
                    });
                    settings.navPrev.click(function(event){
                        simplFader.prevElement(event.type);
                        return false;
                    });
                }
                
                if (options.detailNav) {
                    
                    var detailNavContainer;
                    var num;
                    
                    if (!options.detailNavContainer) {
                     
                        $('<div class="detailNavContainer"></div>').insertAfter(simplFaderContanier);
                        detailNavContainer = $('.detailNavContainer');
                        
                        for (var i=1; i<=simplFaderElements.length; i++) {
                            $('<a href="#">'+i+'</a>').appendTo(detailNavContainer);
                        }
                    }
                    else { 
                        detailNavContainer = options.detailNavContainer;
                        var elem = detailNavContainer.children().clone(); 
                        var elemTagname = detailNavContainer.children()[0].nodeName;
                        for (i=1; i<simplFaderElements.length; i++) {
                            elem=elem.clone();
                            elem.appendTo(detailNavContainer);
                        }
                        $(detailNavContainer).children(':first').addClass('act');
                    }
               
                    detailNavContainer.children().click(function(){
                        if (!simplFader.elements.is(':animated')) {
                            num = $(this).index(); 
                            var obj = $(simplFaderElements[num]);
                            simplFader.goToElement(num, obj);
                        }
                        return false;
                    });
                    
                    setActiveNav = function() {
                        var pos = simplFader.current;
                        detailNavContainer.find('.act').removeClass('act');
                        $(detailNavContainer).find(elemTagname+':eq('+parseInt(pos-1)+')').addClass('act');
                    }
                }
                
            })()
           
        }
        
        return simplFader;
    }
})(jQuery);
