  $(function() {
             var $fp_gallery         = $('#fp_gallery')
             var $fp_overlay         = $('#fp_overlay');
             var $fp_loading         = $('#fp_loading');
             var $fp_next         = $('#fp_next');
             var $fp_prev         = $('#fp_prev');
             var $fp_close        = $('#fp_close');
             var $fp_thumbContainer  = $('#fp_thumbContainer');
             var $fp_scrollWrapper   = $('#fp_scrollWrapper');
             var nmb_images=0;
             var gallery_idx=-1;
             var $fp_thumbScroller   = $('#fp_thumbScroller');
             var $slider          = $('#slider');
             var $fp_galleries    = $('#d > li');
             var current          = 0;
             var photo_nav        = true;
            $fp_galleries.bind('click',function(){
               $fp_galleries.removeClass('current');
               var $gallery      = $(this);
               $gallery.addClass('current');
               var gallery_index    = $gallery.index();
               if(gallery_idx == gallery_index) return;
               gallery_idx       = gallery_index;
               if($fp_thumbContainer.data('opened')==true){
                  $fp_scrollWrapper.fadeOut();
                  $fp_thumbContainer.stop()
                                .animate({'height':'0px'},100,function(){
                                 openGallery($gallery);
                                });
               }
               else
                  openGallery($gallery);
            });

            function openGallery($gallery){
               current           = 0;
               var $fp_content_wrapper = $fp_thumbContainer.find('.container:nth-child('+parseInt(gallery_idx+1)+')');
               $fp_thumbContainer.find('.container').not($fp_content_wrapper).hide();
               $fp_content_wrapper.show();
               nmb_images        = $fp_content_wrapper.children('div').length;
               var w_width    = 0;
               var padding_l  = 0;
               var padding_r  = 0;
               var center     = $(window).width()/2;
               var one_divs_w  = 0;
               $fp_content_wrapper.children('div').each(function(i){
                  var $div       = $(this);
                  var div_width  = $div.width();
                  w_width        +=div_width;
                  if(i==0)
                     padding_l = center - (div_width/2);
                  if(i==(nmb_images-1)){
                     padding_r = center - (div_width/2);
                     one_divs_w= div_width;
                  }
               }).end().css({
                  'width'           : w_width + 'px',
                  'padding-left'       : padding_l + 'px',
                  'padding-right'   : padding_r + 'px'
               });
               $fp_thumbScroller.scrollLeft(w_width);

               $slider.slider('destroy').slider({
                  orientation : 'horizontal',
                  max         : w_width -one_divs_w,//total width minus one content div width
                  min         : 0,
                  value    : 0,
                  slide    : function(event, ui) {
                     $fp_thumbScroller.scrollLeft(ui.value);
                  },
                  stop: function(event, ui) {
                     checkClosest();
                  }
               });
               $fp_thumbContainer.animate({'height':'80px'},100,function(){
                  $(this).data('opened',true);
                  $fp_scrollWrapper.fadeIn();
               });
               $fp_thumbScroller.stop()
                            .animate({'scrollLeft':'0px'},2000,'easeInOutExpo');
               $fp_content_wrapper.find('.content')
                            .bind('click',function(e){
                  var $current   = $(this);
                  current        = $current.index();
                  centerImage($current,true,600);
                  e.preventDefault();
               });
            }
            $fp_thumbScroller.scroll(function(){
               $slider.slider('value',parseInt($fp_thumbScroller.scrollLeft(),10));
            });
            $fp_next.bind('click',function(){
               if(photo_nav){
                  photo_nav = false;
               navigate(1);
               }
            });
            $fp_prev.bind('click',function(){
               if(photo_nav){
                  photo_nav = false;
               navigate(0);
               }
            });
            $('#fp_next_thumb').click(function(){
               slideThumb(1);
            });
            $('#fp_prev_thumb').click(function(){
               slideThumb(0);
            });
            $fp_close.bind('click',function(){
               if(!photo_nav) return;
               var windowS       = $(window).scrollTop();
               var $large_img    = $('#fp_preview');
               var $current      = $fp_thumbScroller.find('.container:nth-child('+parseInt(gallery_idx+1)+')')
                                             .find('.content:nth-child('+parseInt(current+1)+')');
               var current_offset   = $current.offset();
               $large_img.stop().animate({
                  'top'       : current_offset.top + windowS + 'px',
                  'left'         : $(window).width()/2 - $current.width()/2 + 'px',
                  'width'        : $current.width() + 'px',
                  'height'    : $current.height() + 'px',
                  'opacity'      : 0
               },800,function(){
                  $(this).remove();
               hidePreviewFunctions();
            });
            });
            function centerImage($obj,open,speed){
               var obj_left         = $obj.offset().left;
               var obj_center          = obj_left + ($obj.width()/2);
               var center           = $(window).width()/2;
               var currentScrollLeft   = parseFloat($fp_thumbScroller.scrollLeft(),10);
               var move             = currentScrollLeft + (obj_center - center);
               if(move != $fp_thumbScroller.scrollLeft()) //try 'easeInOutExpo'
                  $fp_thumbScroller.stop()
                               .animate({scrollLeft: move}, speed,function(){
                     if(open)
                        enlarge($obj);
                  });
               else if(open)
                  enlarge($obj);
            }
            function enlarge($obj){
               var $thumb = $obj.find('img');
               $fp_loading.show();
               $('<img id="fp_preview" />').load(function(){
                  var $large_img    = $(this);
                  $('#fp_preview').remove();

                  $large_img.addClass('fp_preview');
                  var obj_offset    = $obj.offset();
                  $large_img.css({
                     'width'  : $thumb.width() + 'px',
                     'height': $thumb.height() + 'px',
                     'top' : obj_offset.top + 'px',
                     'left'   : obj_offset.left + 5 + 'px'//5 of margin
                  }).appendTo($fp_gallery);
                  getFinalValues($large_img);
                  var largeW  = $large_img.data('width');
                  var largeH  = $large_img.data('height');
                  var $window = $(window);
                  var windowW = $window.width();
                  var windowH = $window.height();
                  var windowS = $window.scrollTop();
                  $fp_loading.hide();
                  $fp_overlay.show();
                  $large_img.stop().animate({
                     'top'    : windowH/2 -largeH/2 + windowS + 'px',
                     'left'      : windowW/2 -largeW/2 + 'px',
                     'width'     : largeW + 'px',
                     'height' : largeH + 'px',
                     'opacity'   : 1
                  },800,function(){
                     showPreviewFunctions();
                  });
               }).attr('src',$thumb.attr('alt'));
            }
            function navigate(way){
               $fp_loading.show();
               if(way==1){
                  ++current;
                  var $current = $fp_thumbScroller.find('.container:nth-child('+parseInt(gallery_idx+1)+')')
                                          .find('.content:nth-child('+parseInt(current+1)+')');
                  if($current.length == 0){
                     --current;
                     $fp_loading.hide();
                     photo_nav = true;
                     return;
                  }
               }
               else{
                  --current;
                  var $current = $fp_thumbScroller.find('.container:nth-child('+parseInt(gallery_idx+1)+')')
                                          .find('.content:nth-child('+parseInt(current+1)+')');
                  if($current.length == 0){
                     ++current;
                     $fp_loading.hide();
                     photo_nav = true;
                     return;
                  }
               }
               $('<img id="fp_preview" />').load(function(){
                  $fp_loading.hide();
                  var $large_img       = $(this);
                  var $fp_preview   = $('#fp_preview');
                  var animate_to       = -$fp_preview.width();
                  var animate_from  = $(window).width();
                  if(way==0){
                     animate_to     = $(window).width();
                     animate_from   = -$fp_preview.width();
                  }
                  centerImage($current,false,1000);
                  $fp_preview.stop().animate({'left':animate_to+'px'},500,function(){
                     $(this).remove();
                     $large_img.addClass('fp_preview');
                     getFinalValues($large_img);
                     var largeW  = $large_img.data('width');
                     var largeH  = $large_img.data('height');
                     var $window = $(window);
                     var windowW = $window.width();
                     var windowH = $window.height();
                     var windowS = $window.scrollTop();
                     $large_img.css({
                        'width'  : largeW+'px',
                        'height': largeH+'px',
                        'top' : windowH/2 -largeH/2 + windowS + 'px',
                        'left'      : animate_from + 'px',
                        'opacity'   : 1
                     }).appendTo($fp_gallery)
                       .stop()
                       .animate({'left':windowW/2 -largeW/2+'px'},500,function(){photo_nav = true;});
                  });
               }).attr('src',$current.find('img').attr('alt'));
            }
            function showPreviewFunctions(){
               $fp_next.stop().animate({'right':'0px'},500);
               $fp_prev.stop().animate({'left':'0px'},500);
               $fp_close.show();
            }
            function hidePreviewFunctions(){
               $fp_next.stop().animate({'right':'-50px'},500);
               $fp_prev.stop().animate({'left':'-50px'},500);
               $fp_close.hide();
               $fp_overlay.hide();
            }
            function getFinalValues($image){
               var widthMargin      = 0
               var heightMargin  = 20;
               var $window       = $(window);
               var windowH       = $window.height()-heightMargin;
               var windowW       = $window.width()-widthMargin;
               var theImage     = new Image();
               theImage.src     = $image.attr("src");
               var imgwidth     = theImage.width;
               var imgheight    = theImage.height;

               if((imgwidth > windowW)||(imgheight > windowH)){
                  if(imgwidth > imgheight){
                     var newwidth = windowW;
                     var ratio = imgwidth / windowW;
                     var newheight = imgheight / ratio;
                     theImage.height = newheight;
                     theImage.width= newwidth;
                     if(newheight>windowH){
                        var newnewheight = windowH;
                        var newratio = newheight/windowH;
                        var newnewwidth =newwidth/newratio;
                        theImage.width = newnewwidth;
                        theImage.height= newnewheight;
                     }
                  }
                  else{
                     var newheight = windowH;
                     var ratio = imgheight / windowH;
                     var newwidth = imgwidth / ratio;
                     theImage.height = newheight;
                     theImage.width= newwidth;
                     if(newwidth>windowW){
                        var newnewwidth = windowW;
                        var newratio = newwidth/windowW;
                        var newnewheight =newheight/newratio;
                        theImage.height = newnewheight;
                        theImage.width= newnewwidth;
                     }
                  }
               }
               $image.data('width',theImage.width);
               $image.data('height',theImage.height);
            }
            function slideThumb(way){
               if(way==1){
                  ++current;
                  var $next = $fp_thumbScroller.find('.container:nth-child('+parseInt(gallery_idx+1)+')')
                                        .find('.content:nth-child('+parseInt(current+1)+')');
                  if($next.length > 0)
                     centerImage($next,false,600);
                  else{
                     --current;
                     return;
                  }
               }
               else{
                  --current;
                  var $prev = $fp_thumbScroller.find('.container:nth-child('+parseInt(gallery_idx+1)+')')
                                        .find('.content:nth-child('+parseInt(current+1)+')');
                  if($prev.length > 0)
                     centerImage($prev,false,600);
                  else{
                     ++current;
                     return;
                  }
               }
            }
            function checkClosest(){
               var center           = $(window).width()/2;
               var current_distance    = 99999999;
               var idx              = 0;
               $container           = $fp_thumbScroller.find('.container:nth-child('+parseInt(gallery_idx+1)+')');
               $container.find('.content').each(function(i){
                  var $obj       = $(this);

                  var obj_left   = $obj.offset().left;
                  var obj_center    = obj_left + ($obj.width()/2);
                  var distance   = Math.abs(center-obj_center);
                  if(distance < current_distance){
                     current_distance  = distance;
                     idx               = i;
                  }
               });
               var $new_current  = $container.find('.content:nth-child('+parseInt(idx+1)+')');
               current        = $new_current.index();
               centerImage($new_current,false,100);
            }
         });

