(function($){
		  
	$.fn.extend({
		
		autoGallery: function(options){

			var 	defaults 	= {
											autoPlay: false,
											duration: 6,
											captions: true
										},
					options 		= $.extend(defaults, options),
					o 				= options,
					container 	= $(this),
					autoPlay	= null;
						
			return this.each(function(){
				
				var 	obj 		= $(this),
						images;

					obj.find('a').wrap('<li>');
					
					images = obj.html();
					obj.html('');
					
					obj.prepend('<div><span></span><a href="#" title="Click here to view the next photo" class="main">Loading...</a></div><ul>' + images + '</ul><a href="#" class="prev disabled">Previous Page</a><a href="#" class="next">Next Page</a>');
																
					if(options.captions == false){
						
						obj.find('span').css('cssText', 'display: none !important');
						
					};
					
					var 	objUl 	= obj.find('ul'),
							objDiv 	= obj.find('div a'),
							objPrev 	= obj.find('a.prev'),
							objNext 	= obj.find('a.next');
					
					objUl.append('<li class="end">End</li>');
					
					var 	firstImage 		= objUl.find('li:first').addClass('active').find('a').attr('href'),
							name 			= objUl.find('li:first').addClass('active').find('img').attr('alt'),
							objMove 		= obj.find('ul li'),
							objMoveCalc 	= obj.find('ul li:first'),
							objEnd 			= obj.find('ul li.end');
					
					objEnd.css({'marginLeft': objUl.width() - (objEnd.width() + 30)});
					
					objDiv.attr('href', firstImage).html('<img src="' + firstImage + '" alt="">').parent().find('span').html(name);

					if(objUl.find('li').size() < 9){
						
						objNext.addClass('disabled');
						
					};

					objDiv.unbind().bind('click', function(){
						
						if($(objDiv + ':animated').length > 0){
							
							return false;
							
						};
						
						var nextThumb = container.find('ul li.active').next('li');
						
						if(nextThumb.size() > 0){
							
							container.find('ul li.active').next('li').find('a').click();
							
						}else{
							
							container.find('ul li:first').find('a').click();
							
						};
						
						return false;
						
					});
					
					objMove.unbind().bind('mouseenter', function(){
						
						$(this).find('img').stop().animate({opacity: 1}, 150);
						
					}).bind('mouseleave', function(){
						
						$(this).find('img').animate({opacity: 0.6}, 100);
						
					});
					
					objPrev.unbind().bind('click', function(){

						if($(objMove + ':animated').length > 0){
							
							return false;
							
						};

						var 	calc1	= 0,
								calc2	= parseInt(objMoveCalc.css('top'));
						
						if(calc2 < calc1){
						
							var moveAm = parseInt(objMoveCalc.css('top')) + (objMoveCalc.height() + parseInt(objMoveCalc.css('paddingTop')) + parseInt(objMoveCalc.css('paddingBottom')) + parseInt(objMoveCalc.css('borderTopWidth')) + parseInt(objMoveCalc.css('borderBottomWidth')) + parseInt(objMoveCalc.css('marginTop')) + parseInt(objMoveCalc.css('marginBottom')));
							
							if(moveAm == 0){
							
								$(this).addClass('disabled');
							
							}else{
								
								$(this).removeClass('disabled');
								objNext.removeClass('disabled');
								
							};
							
							objMove.stop().animate({top: moveAm}, 300);
							
						};
						
						return false;
						
					});
					
					objNext.unbind().bind('click', function(){
						
						if($(objMove + ':animated').length > 0){
							
							return false;
							
						};
						
						var 	calc1	= objEnd.offset().top,
								calc2	= (objUl.offset().top + (objEnd.height() + parseInt(objEnd.css('paddingTop')) + parseInt(objEnd.css('paddingBottom')) + parseInt(objEnd.css('marginTop')) + parseInt(objEnd.css('marginBottom')) + parseInt(objEnd.css('borderTopWidth')) + parseInt(objEnd.css('borderBottomWidth'))) * 2);
						
						if(calc2 < calc1){
							
							if(objMoveCalc.css('top') == 'auto'){
								
								objMoveCalc.css({top: 0});
								
							};
							
							var moveAm = parseInt(objMoveCalc.css('top')) - (objMoveCalc.height() + parseInt(objMoveCalc.css('paddingTop')) + parseInt(objMoveCalc.css('paddingBottom')) + parseInt(objMoveCalc.css('borderTopWidth')) + parseInt(objMoveCalc.css('borderBottomWidth')) + parseInt(objMoveCalc.css('marginTop')) + parseInt(objMoveCalc.css('marginBottom')));
							
							if(calc2 * 1.1 < calc1){
							
								$(this).removeClass('disabled');
								objPrev.removeClass('disabled');
							
							}else{
								
								$(this).addClass('disabled');
								
							};
						
							objMove.stop().animate({top: moveAm}, 300);
							
						};
						
						return false;
						
					});	
					
					objUl.find('a').unbind().bind('click', function(){
						
						if($(objDiv + ':animated').length > 0){
							
							return false;
							
						};
						
						objUl.find('.active').removeClass('active');
						
						var 	imgSrc 		= $(this).parent('li').addClass('active').find('a').attr('href'),
								name 		= $(this).parent('li').find('img').attr('alt');

						objDiv.parent().find('span').animate({bottom: -40}, 300, function(){
						
							objDiv.fadeOut(250, function(){

								$(this).attr('href', imgSrc).find('img').attr('src', imgSrc);
								$(this).fadeIn(300, function(){
									
									if(name){
									
										$(this).parent().find('span').html(name).animate({bottom: 0}, 500);
									
									};
									
								});
								
							});
						
						});
						
						if(options.autoPlay == true){

							clearTimeout(autoPlay);

							autoPlay = setTimeout(function(){
								
								objDiv.click();
								
							}, options.duration * 1000);
							
						};										
						
						return false;
						
					});

					if(options.autoPlay == true){
						
						autoPlay = setTimeout(function(){
							
							objDiv.click();
							
						}, options.duration * 1000);
						
					};					
			
			});
		
		}
		
	});
	
})(jQuery);
