(function($){
	$.fn.slideshow = function(){
		return $(this).each(function(){
			if($(this).find('ul>li').length > 1){
				var ul = $(this).find('ul');
				var slides = $(this).find('ul li');
				var prev = $(this).find('.navigator a.prev');
				var next = $(this).find('.navigator a.next');
				var start = $(this).find('.navigator a.start');
				var all = $(this).find('.navigator a.all');
				var slideNumber = $(this).find('.navigator .number > span');
				var play = false;
				var occupied = false;
				
				var posLeft = -1;
				var inView = ul.find('li:first');
				
				$(this).addClass('active');
				
				var toStart = function(callback){
					occupied = true;
					inView = ul.find('li:first');
					slideNumber.text(1);
					
					ul.stop(true,true);
					ul.animate(
						{left:'0'},
						500,
						'swing',
						function(){
							inView = ul.find('li:first');
							occupied = false;
							if(callback != undefined){
								callback();
							}
						}
					);
				}
	
				var increment = function(){
					var page = (parseInt(slideNumber.text())+1);
					slideNumber.text(page);
				}
				
				var decrement = function(){
					var page = (parseInt(slideNumber.text())-1);
					slideNumber.text(page);
				}
				
				var showNext = function(){
					if(inView.get(0) != ul.find('li:last').get(0) && !occupied){
						occupied = true;
						posLeft = parseInt(ul.css('left'))-parseInt(inView.width());
						increment();
						
						ul.stop(true,true);
						ul.animate(
							{left:posLeft},
							500,
							'swing',
							function(){
								inView = inView.next();
								occupied = false;
								next.delay(4000,function(){
									if(play){
										showNext();
									}
								});
							}
						);
						
					}
				}
				
				var showPrev = function(){
					if(inView.get(0) != ul.find('li:first').get(0) && !occupied){
						occupied = true;
						inView = inView.prev();
						posLeft = parseInt(ul.css('left'))+parseInt(inView.width());
						decrement();
						ul.stop(true,true);
						ul.animate(
							{left:posLeft},
							500,
							'swing',
							function(){
								occupied = false;
							}
						);
						
					}
				}
				
				next.click(function(e){
					e.preventDefault();
					play = false;
					showNext();
				});
				
				prev.click(function(e){
					e.preventDefault();
					play = false;
					showPrev();
				});
				
				all.click(function(e){
					e.preventDefault();
					toStart(function(){
						ul.delay(4000,function(){
							play = true;
							showNext();
						});
					});
				});
				
				start.click(function(e){
					e.preventDefault();
					play = false;
					toStart();
				});
				
				toStart();
			}
		});
	};
	
	$(document).ready(function(){
		$('.slideshow').slideshow();
	});
})(jQuery);
