(function($){  
$.fn.imagebox = function(options) {  
	
	var defaults = {  
		tmpContainer: '',  
		container: '',
		showCaption: true,
		captionContainer: '',
		showLinks: true,
		linksContainer: '',
		linksType: 'auto',
		linksClass: 'imageBoxLink',
		linksImgOn: '',
		linksImgOff: '',
		linksImgHover: '',
		linksImgClass: '',
		fadeSpeed: 500,  
		autoPlay: true,
		pauseDuration: 4000, 
		autoPlayStart: 0
	};  

	var options = $.extend(defaults, options);  
	
	return this.each(function() {  
	
		obj = $(this);  
		
		function autoplay() {
			
			options.autoPlayStart++;
			var num = options.autoPlayStart;
			
			if (num > $('#'+ options.container +' img').size() - 1) {
				num = options.autoPlayStart = 0;
			}

			$('#'+ options.linksContainer +' a').eq(num).click();	
			
		}	
		
		
		// Empty the links container
		$('#' + options.linksContainer).empty();
		
		// Clone objects to new location from temp
		$('#'+ options.tmpContainer +' img').each(function(i) {
			$(this).css('opacity',0).css('display','none');
			$(this).attr('order',i).attr('id', obj.attr('id') + '-img-' + i);
			$(this).appendTo('#'+ options.container);
			
			// Link the image to a url?
			if (typeof $(this).attr('rel') != 'undefined') {
				$(this).css('cursor','hand');
				$(this).click(function() { document.location.href = $(this).attr('rel'); });
			}
			
			

			
			// Build each link item
			if (options.showLinks) {
				var cnt = i+1;
				var linkAttribs = '';
				linkAttribs += ' id="' + obj.attr('id') + '-link-' + i + '"';
				linkAttribs += (i > 0) ? ' class="' + options.linksClass  + '"' : ' class="' + options.linksClass  + ' imageBoxLinkCurrent"';
				linkAttribs += ' count="' + i + '"';
				
				if (options.linksType == 'auto') {
					$('#' + options.linksContainer).append('<a href="javascript:void(0);"'+ linkAttribs +'>' + cnt + '</a>');
				} else {
					var linksImgSrc = (i == 0) ? options.linksImgOn : options.linksImgOff;
					$('#' + options.linksContainer).append('<a href="javascript:void(0);"'+ linkAttribs +'><img src="'+ linksImgSrc +'" border="0"></a>');	
				}
			}
			
			
		});
		
		// Remove the temp container
		$('#'+ options.tmpContainer).remove();
		
		// Assign Click events to each link
		var imageCount = $('#' + options.linksContainer +' a').length;
		$('#' + options.linksContainer +' a').each(function() {
			
			$(this).click(function() {
				if ($(this).hasClass('imageBoxLinkCurrent')) return;
				
				$('#' + options.linksContainer +' a').removeClass('imageBoxLinkCurrent');
				$(this).addClass('imageBoxLinkCurrent');
				
				var currNum = ($(this).attr('count'));
				var nextImage = obj.attr('id');
				var nextImageObj = $('#'+ nextImage +'-img-' + currNum);

				// Fade the two Images
				$('#'+ options.container +' img.imageBoxCurrent').fadeTo(options.fadeSpeed,0,function() { $(this).css('display','none').removeClass('imageBoxCurrent'); });
				nextImageObj.css('display','block').fadeTo(options.fadeSpeed,1,function() { $(this).addClass('imageBoxCurrent'); });
				
				// Change the nav button
				$('#' + options.linksContainer +' img').attr('src',options.linksImgOff);
				$(this).children().attr('src',options.linksImgOn);
				
				// Change the caption
				if (options.showCaption) {
					$('#'+ options.captionContainer).text(nextImageObj.attr('title'));	
				}
				
					
			});
			
			// Hover states 
			if (options.linksType != 'auto') {
				$(this).hover(
					function() { 
						if (!$(this).hasClass('imageBoxLinkCurrent')) { $(this).children('img').attr('src',options.linksImgOn); } 
					},
					function() { 
						if (!$(this).hasClass('imageBoxLinkCurrent')) { $(this).children('img').attr('src',options.linksImgOff); } 
					}
				);
			}
			
			
		});
		
		// Stop interval on mouseover
		$('#'+ obj.attr('id')).hover(
			function() { clearInterval(imgBoxInterval); },
			function() { 
				options.autoPlayStart = $('#' + options.linksContainer +' a.imageBoxLinkCurrent').attr('count');
				imgBoxInterval = setInterval(autoplay,options.pauseDuration); 
			}
		);
		
		
		// Fade in the first image & enter the caption
		$('#'+ options.container +' img:eq(0)').css('display','block').fadeTo(options.fadeSpeed,1).addClass('imageBoxCurrent');
		
		// Show the first caption
		if (options.showCaption) {
			$('#'+ options.captionContainer).text($('#'+ options.container +' img:eq(0)').attr('title'));	
		}
		
		// Start the autoplay
		if (options.autoPlay) {
			imgBoxInterval = setInterval(autoplay,options.pauseDuration);
		}
							  
	});
	
	
}
}) (jQuery);
