;(function($){
	$.fn.neoGallery = function(options){
		settings = jQuery.extend({
			delay: 5000,
			rowLength: 12,
			maxOpacity: 1.0,
			minOpactiy: 0.1,
			target: "#portfolio-image",
			disabledClass: 'gallery-disabled'
			}, options);

	return $(this).each(function(){
		// Setup
		var $gallery_nav = $(this).removeClass('gallery-disabled'),
				$gallery_items = $gallery_nav.children('dt'),
				length = $gallery_items.size(),
				$gallery_holder = $(settings.target),
				running = true,
				reading = false,
				next = 0,
				lastTimeout = 0;

		if(settings.rowLength < length){
			$gallery_nav.addClass('tworows');
			$($gallery_items[settings.rowLength-1]).find('a').addClass('last-item');
		}

			// Capture all dt>a
			// Wrap all dd elements, capture each wrapper
		$gallery_nav.children('dd').each(function(){
				$(this).wrap('<div class="dd-wrapper"/>').parent().hide();
		});

		$wrappers = $('div.dd-wrapper', $gallery_nav).css('display','none');

		var $navlinks = $gallery_items.find('a');
		$navlinks.each(function(i){
			var $link	= $(this).attr('rel',i);
			var img		= new Image();
			var $newimg	= $(img),
				source	= $link.attr('href');
			$newimg.attr('src', source).attr('rel',i).css({opacity:0,'z-index': length-1});
			if (i==0) { $newimg.css({opacity: 1, 'z-index':length}); }
			$newimg.appendTo($gallery_holder);
			$link.click(function(){
			  next = i;
				clearTimeout(lastTimeout);
				if (running == true && !reading) {
					$navlinks.removeClass('selected');
					$link.addClass('selected');
					var imgToFade = $("img:eq("+i+")", $gallery_holder);
					$($wrappers).stop().filter(":visible").animate({width:'0px', opacity:0}, 300, function(){
					  $allImages.not(imgToFade).stop().css('z-index', length-1);
  					imgToFade.css({"z-index": length}).fadeTo(400, settings.maxOpacity, function(){
  					  $wrappers.css('display','none');
  						$allImages.not(imgToFade).css('opacity','0');
  						$wrappers.filter(':eq('+i+')').css({width:0,display:'block',opacity:0})
  							.animate({width:'260px', opacity:settings.maxOpacity}, 400);
  					});
					});
					next++;
					if (next >= length) {
					  next = 0;
					};
				}
				lastTimeout = setTimeout(function(){$navlinks.filter(':eq('+ next + ')').click();},settings.delay);
				return false;
			});
		});
		$allImages = $('img', $gallery_holder);

		$gallery_holder.hover(function() {
			running = false;
			$wrappers.filter(":visible").not(':animated').fadeTo(100, settings.minOpactiy);
		}, function(){
			var wrap = $wrappers.filter(":visible").not(':animated');
			if (wrap.length > 0) {
			  wrap.fadeTo(200, 1.0, function(){
  				running = true;
  			});
			}else{
			  running = true;
			}
		});
		
    $wrappers.hover(function(){
     reading = true;
    }, function(){
     reading = false;
    });
		// And finally, kick the whole thing off...
		$wrappers.filter(':first').css({display:'block',width:'260px'});
	  $navlinks.filter(':first').addClass('selected');
		setTimeout(function(){
		  $navlinks.filter(":eq(1)").click();
		  }, settings.delay);
	});
	};
})(jQuery);
