(function($) {
                $.fn.thumbnailSlider = function(options) {
                    var opts = $.extend({}, $.fn.thumbnailSlider.defaults, options);
                    return this.each(function() {
                        var $this                 = $(this),
                            o                     = $.meta ? $.extend({}, opts, $pxs_container.data()) : opts;
                        
                        var $ts_container        = $this.children('.ts_container'),
                            $ts_thumbnails        = $ts_container.children('.ts_thumbnails'),
                            $nav_elems            = $ts_container.children('li').not($ts_thumbnails),
                            total_elems            = $nav_elems.length,
                            $ts_preview_wrapper    = $ts_thumbnails.children('.ts_preview_wrapper'),
                            $arrow                = $ts_thumbnails.children('span'),
                            $ts_preview            = $ts_preview_wrapper.children('.ts_preview');
                        
                        /*
                        calculate sizes for $ts_thumbnails:
                        width     -> width thumbnail + border (2*5)
                        height     -> height thumbnail + border + triangle height(6)
                        top        -> -(height plus margin of 5)
                        left    -> leftDot - 0.5*width + 0.5*widthNavDot 
                            this will be set when hovering the nav,
                            and the default value will correspond to the first nav dot    
                        */
                        var w_ts_thumbnails    = o.thumb_width + 2*5,
                            h_ts_thumbnails    = o.thumb_height + 2*5 + 6,
                            t_ts_thumbnails    = -(h_ts_thumbnails + 5),
                            $first_nav        = $nav_elems.eq(0),
                            l_ts_thumbnails    = $first_nav.position().left - 0.5*w_ts_thumbnails + 0.5*$first_nav.width();
                        
                        $ts_thumbnails.css({
                            width    : w_ts_thumbnails + 'px',
                            height    : h_ts_thumbnails + 'px',
                            top        : t_ts_thumbnails + 'px',
                            left    : l_ts_thumbnails + 'px'
                        });
                        
                        /*
                        calculate the top and left for the arrow of the tooltip
                        top        -> thumb height + border(2*5)
                        left    -> (thumb width + border)/2 -width/2
                        */
                        var t_arrow    = o.thumb_height + 2*5,
                            l_arrow    = (o.thumb_width + 2*5) / 2 - $arrow.width() / 2;
                        $arrow.css({
                            left    : l_arrow + 'px',
                            top        : t_arrow + 'px'
                        });
                        
                        /*
                        calculate the $ts_preview width -> thumb width times number of thumbs
                        */
                        $ts_preview.css('width' , total_elems*o.thumb_width + 'px');
                        
                        /*
                        set the $ts_preview_wrapper width and height -> thumb width / thumb height
                        */
                        $ts_preview_wrapper.css({
                            width    : o.thumb_width + 'px',
                            height    : o.thumb_height + 'px'
                        });
                        
                        //hover the nav elems
                        $nav_elems.bind('mouseenter',function(){
                            var $nav_elem    = $(this),
                                idx            = $nav_elem.index();
                                
                            /*
                            calculate the new left
                            for $ts_thumbnails
                            */
                            var new_left    = $nav_elem.position().left - 0.5*w_ts_thumbnails + 0.5*$nav_elem.width();
                            
                            $ts_thumbnails.stop(true)
                                          .show()    
                                          .animate({
                                            left    : new_left + 'px'
                                          },o.speed,o.easing);                  
                            
                            /*
                            animate the left of the $ts_preview to show the right thumb 
                            */
                            $ts_preview.stop(true)
                                       .animate({
                                            left    : -idx*o.thumb_width + 'px'
                                       },o.speed,o.easing);
                            
                            //zoom in the thumb image if zoom is true
                            if(o.zoom && o.zoomratio > 1){
                                var new_width    = o.zoomratio * o.thumb_width,
                                    new_height    = o.zoomratio * o.thumb_height;
                                
                                //increase the $ts_preview width in order to fit the zoomed image
                                var ts_preview_w    = $ts_preview.width();
                                $ts_preview.css('width' , (ts_preview_w - o.thumb_width + new_width)  + 'px');
                                
                                $ts_preview.children().eq(idx).find('img').stop().animate({
                                    width        : new_width + 'px',
                                    height        : new_height + 'px'
                                },o.zoomspeed);
                            }        
                            
                        }).bind('mouseleave',function(){
                            //if zoom set the width and height to defaults
                            if(o.zoom && o.zoomratio > 1){
                                var $nav_elem    = $(this),
                                    idx            = $nav_elem.index();
                                $ts_preview.children().eq(idx).find('img').stop().css({
                                    width    : o.thumb_width + 'px',
                                    height    : o.thumb_height + 'px'    
                                });    
                            }
                            
                            $ts_thumbnails.stop(true)
                                          .hide();
                                          
                        }).bind('click',function(){
                            var $nav_elem    = $(this),
                                idx            = $nav_elem.index();
                            
                            o.onClick(idx);
                        });
                        
                    });
                };
                $.fn.thumbnailSlider.defaults = {
                    speed        : 100,//speed of each slide animation
                    easing        : 'jswing',//easing effect for the slide animation
                    thumb_width    : 75,//your photos width
                    thumb_height: 75,//your photos height
                    zoom        : false,//zoom animation for the thumbs
                    zoomratio    : 1.3,//multiplicator for zoom (must be > 1)
                    zoomspeed    : 15000,//speed of zoom animation
                    onClick        : function(){return false;}//click callback
                };
            })(jQuery);
