
(function($){
		  
	$.fn.slideshow = function(options) {
	 
		var defaults = {
			width: 0,
			height: 0,
			ratioW: 4,
			ratioH: 3,
			timing: 5000,
			paused: false
		};
  
		var options = $.extend(defaults, options);

		return this.each(function() {
			obj = $(this);
			// auto adjust width and height
			if(options.width == 0 && options.height == 0){
				options.width =  obj.parent().width();
				options.height = (obj.parent().width()*options.ratioH)/options.ratioW;
			}else if(options.width == 0){
				options.width = (options.height*options.ratioW)/options.ratioH
			}else if(options.height == 0){
				options.height = (options.width*options.ratioH)/options.ratioW;
			}	  
			
			obj.width(options.width);
			obj.height(options.height);
			obj.css("background", "black");
			obj.css("position", "relative");
			obj.css("overflow", "hidden");
			// add controls
			var top_spacing = ((options.height-100)/2);
			var left_spacing = ((options.width-100)/2);
			obj.append("<div class='left-button' style='width: 50px; height: 100px; background: #111 URL(/resources/site/images/prev_arrow.png) no-repeat 0px 25px; position: absolute; left: -50px; top: "+top_spacing+"px; z-index:11; opacity: .8;'></div>");
			obj.append("<div class='right-button' style='width: 50px; height: 100px; background: #111 URL(/resources/site/images/next_arrow.png) no-repeat 0px 25px; position: absolute; left: "+options.width+"px; top: "+top_spacing+"px; z-index:11; opacity: .8;'></div>");
			obj.append("<div class='details' style='color: #FFF; width: "+options.width+"px; height: 75px; background: #000; position: absolute; top: "+options.height+"px; z-index:11; opacity: .8;'></div>");
			obj.append("<div class='pause-overlay' style='width: 100px; height: 100px; background: #111 URL(/resources/site/images/pause.png) no-repeat 25px; position: absolute; left: "+left_spacing+"px; top: "+top_spacing+"px; z-index:11; opacity: .8; display:none;'></div>");
			obj.append("<div class='play-overlay' style='width: 100px; height: 100px; background: #111 URL(/resources/site/images/next_arrow.png) no-repeat 25px; position: absolute; left: "+left_spacing+"px; top: "+top_spacing+"px; z-index:11; opacity: .8; display:none;'></div>");
			obj.show();
			// add mouse over
			obj.mouseover(function(){
				showControls();					 
			});
			obj.mouseout(function(){
				hideControls();					 
			});
			
			$('.left-button', obj).click(function(){
				prevSlide();
				if(!paused){
					pause();
				}
			});
			$('.right-button', obj).click(function(){
				nextSlide();
				if(!paused){
					pause();
				}
			});
			
			var slideArray = new Array();
			var currentSlide = 0;
			var activeSlide;
			var totalSlides = 0;
			var timer;
			var paused = options.paused;
			
			// get photos
			$('.slideshow-slide', obj).each(function(s){
				var slide = $(this);
				var props = new Object();
				props.slide = slide;
				props.source = $('.slide-source', slide).html();
				props.title = $('.slide-title', slide).html();
				props.caption = $('.slide-caption', slide).html();
				slideArray.push(props);
				
				slide.css("position","absolute");
			});
			totalSlides = slideArray.length;
			showSlide();
			timer = window.setInterval(nextSlide,options.timing);
			
			function showSlide()
			{
				var props = slideArray[currentSlide];
				var slide = props.slide;
				if(activeSlide){
					activeSlide.css("z-index","5");
				}
				slide.css("z-index","6");
				if(!props.loaded){
					slide.css("background","black");
					slide.html("<img src='"+props.source+"'/>");
					$('.slideshow img').load(function () {
						//slide.height(options.height);
						var img = $('img', slide);
						if(slide.width() > slide.height()){
							slide.width(options.width);
							img.css("width","100%");
							img.css("margin-top",((options.height-slide.height())/2));
							slide.height(options.height);
						}else{
							slide.height(options.height);
							img.css("height","100%");
							img.css("margin-left",((options.width-slide.width())/2));
							slide.width(options.width);
						}
					});
					props.loaded = true;
				}
				slide.fadeIn(800,function(){
					if(activeSlide){
						activeSlide.hide();	
					}
					activeSlide = slide;
				});
				$('.details', obj).html("<div style='opacity: 1;padding: 5px;padding-left: 10px;'><B>"+props.title+"</B><BR>"+props.caption+"</div>");
				
				slide.click(function(){
					pause();
				});
			}
			
			function nextSlide()
			{
				currentSlide++;
				if(currentSlide >= totalSlides){
					currentSlide = 0;
				}
				showSlide();
			}
			
			function prevSlide()
			{
				currentSlide--;
				showSlide();
			}
			
			function pause()
			{
				if(paused){
					timer = window.setInterval(nextSlide,options.timing);
					paused = false;
					$('.play-overlay', obj).fadeIn(400);
					$('.play-overlay', obj).delay(2000).fadeOut(400);
				}else{
					showControls();
					window.clearInterval(timer);
					paused = true;
					$('.pause-overlay', obj).fadeIn(400);
					$('.pause-overlay', obj).delay(2000).fadeOut(400);
				}
			}
			
			function showControls(){
				var leftButton = $('.left-button', obj);
				var rightButton = $('.right-button', obj);
				var details = $('.details', obj);
				leftButton.css({top: (options.height-leftButton.height())/2});
				rightButton.css({top: (options.height-leftButton.height())/2});
				leftButton.stop().animate({left: 0}, 300);
				rightButton.stop().animate({left: options.width-rightButton.width()}, 300);
				details.stop().animate({top: options.height-details.height()});
			}
			function hideControls(){
				var leftButton = $('.left-button', obj);
				var rightButton = $('.right-button', obj);
				var details = $('.details', obj);
				leftButton.stop().animate({left: 0-leftButton.width()}, 300);
				rightButton.stop().animate({left: options.width}, 300);
				details.stop().animate({top: options.height});
			}
		});
	};
	
})(jQuery);

