(function($){
  $.fn.jThumb = function(options){
    var defaults = {
      layout: 'banner', 
      delay: 2000,
      opacity: .4,
      start: 1,
      speed: 500
    }
    
    var $settings = $.extend({}, defaults, options);
    
    this.each(function(){
        var $gallery = $(this);

        $gallery.find('img').css({opacity: $settings.opacity});
        
        $gallery.find('img').each(function(){
          var $image = $(this);
          
          $image
            .mouseenter(function(){
              //$(this).css({opacity: 1});
              set_layout(true, $image);
            })
            .mouseleave(function(){
              //$(this).css({opacity: $settings.opacity})
            })
            .click(function(){
              set_layout(true, $image);
            });
        });
        
        // custom functions
        function set_layout($clicked, $image){
          //console.log("clicked: "+$clicked+" | image: "+$image+" | size: "+$size+" | index: "+$index);
          
          if($clicked){
            //$('#'+$settings.layout).clearQueue();
            //$('#'+$settings.layout).stop();
            
            $parent = $image.parent();
            
            $gallery.find("img").css({opacity: $settings.opacity});
            $image.css({opacity: 1});
            
            $('#'+$settings.layout).animate({opacity: 0}, $settings.speed);
            $('#'+$settings.layout).queue(function(){
              $('#'+$settings.layout)
                .css({'background-image': 'url('+$image.attr('rel')+')'})
                .animate({opacity: 1}, $settings.speed);
                
                if($parent.get(0).tagName == "A"){
                  $('#'+$settings.layout).attr('href', $parent.attr('href'));
                } else{
                  $('#'+$settings.layout).removeAttr('href');
                }
                
                $(this).dequeue();
            });
            
            clearTimeout($timeout);
          }
          
          if(!$clicked){
            $image = $gallery.find("img:eq("+$index+")");
            $index = ($index + 1) % $size;
            $parent = $image.parent();
            
            $gallery.find("img").css({opacity: $settings.opacity});
            $image.css({opacity: 1});

            $('#'+$settings.layout).animate({opacity: 0}, $settings.speed);
            $('#'+$settings.layout).queue(function(){
              $('#'+$settings.layout)
                .css({'background-image': 'url('+$image.attr('rel')+')'})
                .animate({opacity: 1}, $settings.speed);
                
                if($parent.get(0).tagName == "A"){
                  $('#'+$settings.layout).attr('href', $parent.attr('href'));
                } else{
                  $('#'+$settings.layout).removeAttr('href');
                }
                
                $(this).dequeue();
            });
            
            $timeout = setTimeout(function(){
              set_layout(false, false);
            }, $settings.delay);
          }
        }
        
        // init global vars
        var $timeout;
        var $size = $gallery.find("img").size();
        var $index = $settings.start;
        
        $timeout = setTimeout(function(){
					set_layout(false, false);
				}, $settings.delay);
    });
  }
})(jQuery);

