(function($){

    $.fn.slider = function(params) {
    
        var defaults = {
            panelWrapper: '.panel-wrapper',
            panel:        '.panel',
            duration:     500,
            delay:        6000,
            pause:        120000
        }
        
        var opts = $.extend(defaults, params);
        
        this.each(run);
        
        function run() {
            var wrapper = $(opts.panelWrapper, this);
            var panels   = $(opts.panel, this);
            
            var root = this;
            
            var wrapperWidth = wrapper.width();
            
            //Adding navigation options...
            var navigation = $('<div class="panel-navigation"></div>');
            
            var prev = $('<a href="#" class="prev"></a>');
            var next = $('<a href="#" class="next"></a>');
                        
            var count = panels.length;
            
            var current = 0;
            
            var timer = 0;
            
            var items = new Array();
            
            var animate = false;
                       
            for (var i = 0; i < count; i++) {
                items[i] = $('<a href="#" class="page"></a>');
                items[i].click(function() {
                    var index = $('.page', root).index(this);
                    slide(index, true);
                    return false;
                });
            }
                      
            prev.click(function() {
                slide(current - 1, false);
                return false;
            });
            
            next.click(function() {
                slide(current + 1, false);
                return false;
            });
            
            function slide(next, pause) {
                if (next > count - 1) {
                    next = 0;
                }
                
                if (next < 0) {
                    next = count - 1;
                }
                if (next != current && !animate) {
                
                    animate = true;
                    
                    var currentPanel = panels.eq(current);
                    var nextPanel    = panels.eq(next);
                    
                    if (next > current) {
                        startPos =  wrapperWidth;
                        endPos   = -wrapperWidth;
                    } else {
                        startPos = -wrapperWidth;
                        endPos   =  wrapperWidth;                
                    }
                    
                    current = next;
                    setHeight();
                    setCurrent();
                    startTimer(pause);
                    
                    nextPanel.css({left:startPos}).show().animate({left:0}, opts.duration);
                    currentPanel.animate({left:endPos},opts.duration, function() {
                        $(this).hide();
                        animate = false;
                    });
                }
            }
            
            function setCurrent() {
                $('.page', root).removeClass('current');
                items[current].addClass('current');
            }
            
            function setHeight() {
                //wrapper.animate({height:panels.eq(current).outerHeight()},200);
                wrapper.animate({height:245},200);
            }
            
            navigation.append(prev);
            for (var i = 0; i < count; i++) {
                navigation.append(items[i]);
            }
            
            function startTimer(pause) {
                clearInterval(timer);
                if (!pause) {
                    var delay = opts.delay;
                } else {
                    var delay = opts.pause;
                }
                timer = setInterval(function() {
                    slide(current + 1);
                }, delay);
            }
            
           /* INIT */
            navigation.append(next);
            wrapper.after(navigation);
            
            panels.not(':first').hide();
            
            setHeight();
            setCurrent();
            
            startTimer();
        }
        
    }

})(jQuery)
