(function(jQuery){
	
	jQuery.fn.extend({
		
		jSlideshow: function( config ) {
			
			var defaults = {
				
				'autoplay' 		:	1,
				'slidetime'		:	5000,
				'animation'		:	'fade',
				'usethumbs'		:	true,
				'thumbopacity'	:	0.85
				
			}

			var ss = jQuery(this);

			if (ss.length > 1) {
				
				alert('Slideshow Error, Multiple slideshow instances found');
				
			}
			
			ss.find('.jslideshow').css('display','none');
			
			ss.prepend('<div class="slideshowloader">Loading Slideshow...</div>');
			
			var slideshownum = ss.attr('id');
			
			ss.slidecount = ss.find('.jslideshow').find('img').length;
			
			function startSlideshow() {
			
				var num = 0;
			
				var img = new Array();
			
				var loaded = 0;
				if(defaults.usethumbs) {
					ss.append('<div class="jslideshow-thumbs"></div>');
				}
				
				var thumbnailhtml = '';
				
				ss.find('.jslideshow').find('.slideimg').each(function(){
										
					num = num+1;
					
					this.num = num;
					
					jQuery(this).addClass('slide_'+num);
					
					jQuery(this).css('display','none');

					var maxwidth = 0;
					var maxheight = 0;
					
					img[this.num] = new Image();
					
					img[this.num].num = this.num;
					
					thumbnailhtml = thumbnailhtml+'<div class="thumbnail"><img src="'+jQuery(this).find('img').attr('src')+'" class="thumb_'+this.num+'" /></div>';
					
					img[this.num].onload = function(){
					
						loaded = loaded+1;
						
						if(this.width > maxwidth) { maxwidth = this.width; }
						
						if(this.height > maxheight) { maxheight = this.height; }
						
						if(loaded == ss.slidecount) {
							
							ss.find('.jslideshow-thumbs').append(thumbnailhtml);
							
							ss.find('.jslideshow-thumbs').find('img').animate({opacity:defaults.thumbopacity});
							
							ss.find('.jslideshow-thumbs').append('<div class="clear"></div>');
							
							ss.find('.slideshowloader').remove();
							
							ss.find('.jslideshow').css('display','block');
							
							ss.find('.jslideshow').animate({height:maxheight+10,width:maxwidth+10},300);
							
							setTimeout(changeSlide(),300);
							
						}
						
					}
					
					img[this.num].src = jQuery(this).find('img').attr('src');
					
				});
				
			}
			
			ss.currslide = 0;
			
			function changeSlide( slide ) {
			
				clearTimeout(this.timeout);
			
				ss.lastslide = ss.currslide;
				
				if(slide == 'last') {
					if(ss.currslide == 1) {
						ss.currslide = ss.slidecount;
					} else {
						ss.currslide = ss.currslide - 1;
					}
				} else if ( !slide || slide == 'next' ) {
					
					ss.currslide = ss.currslide+1;
								
					if(ss.currslide > ss.slidecount || ss.currslide == 0) {
						ss.currslide = 1;
					}
					
				} else {
					
					ss.currslide = slide;
					
				}

				ss.find('.jslideshow').find('.active').fadeOut();
				ss.find('.jslideshow').find('.active').removeClass('active');
				ss.find('.jslideshow-thumbs').find('.active:not(.hover)').animate({opacity:defaults.thumbopacity});
				ss.find('.jslideshow-thumbs').find('.active').removeClass('active');
				
				ss.find('.jslideshow').find('.slide_'+ss.currslide).fadeIn();
				ss.find('.jslideshow').find('.slide_'+ss.currslide).addClass('active');
				ss.find('.jslideshow-thumbs').find('.thumb_'+ss.currslide+':not(.hover)').animate({opacity:1});
				ss.find('.jslideshow-thumbs').find('.thumb_'+ss.currslide).addClass('active');
				if(defaults.autoplay == 1) {
					this.timeout = setTimeout(changeSlide,defaults.slidetime);
				}
			}
			
			startSlideshow();
			
			ss.find('.nextbutton').click(function(){
				
				changeSlide('next');
				
			});
			
			ss.find('.lastbutton').click(function(){
				
				changeSlide('last');
				
			});
			
			ss.find('.jslideshow-thumbs').find('img').live('click',function(){
				
				var slideclass = jQuery(this).attr('class').split('thumb_').join('');
				
				changeSlide(parseInt(slideclass));
				
			});
			
			ss.find('.jslideshow-thumbs').find('img').live('mouseover',function(){
				
				$(this).addClass('hover');
				$(this).animate({opacity:1});
				
			});
			ss.find('.jslideshow-thumbs').find('img').live('mouseout',function(){
				
				$(this).removeClass('hover');
				if(!$(this).hasClass('active')) {
					$(this).animate({opacity:defaults.thumbopacity});
				}
				
			});
					
		}
		
		
	});
	
})(jQuery)
