/*
 *  UPDATED: 12.16.07 | 7:00 PM
 *
 *  This class will create a fade in slide show and will preload the next image.
 *  It requires 2 parameters: the ID of the slide show image, and an array of the images (or an array of objects with img and file propeties).
 *  All images must be the same size.
 *  
 *  Exapmle: 
 *  var myShow = WSC.SlideShow('show2',Slide2, {speed: 5, duration: 2});
 *  
 * ------------------------------------------------------------------------------------------------ */
if(typeof WSC==='undefined'){var WSC={};}
(function($){
	WSC.SlideShow = function(slideImage, slides){
		/* set the options first */
		var options = $.extend({
			speed:    	9,
			duration: 	1
		}, arguments[2] || {});

		/* Private Variables */
		var $link = null;
		var $slideImage = null;
		var $nextImage = null;
		var boLink = (typeof slides[0]=='object' && slides[0].link != 'undefined');
		var bolImg = (typeof slides[0]=='object' && slides[0].img != 'undefined');
		var counter = 0;
		var preloaded = false;
		var interval = null;
	
		/* Private Methods */
		var page_load = function(){
			$slideImage = $('#'+ slideImage);
			var zindex = parseInt($slideImage.css('zIndex'))+1;
			if(!zindex){zindex=1;}
			var offset = $slideImage.offset();
			$nextImage = $slideImage.clone().attr('id', '').css({opacity:0});
			$nextImage.css({left:offset.left , top:offset.top, position:'absolute', zIndex:zindex}).insertAfter($slideImage);
			
			if (boLink && $slideImage.parent().get(0).tagName.toUpperCase() == 'A'){
				$link = $slideImage.parent();
			}

			/* Begin the Show */
			start();
		};

		var start = function(){
			$nextImage.attr('src', (slides[counter].img) ? slides[counter].img : slides[counter]);
			fade();
			if(!interval){interval = setInterval(fade, options.speed*1000);}
		};
		
		var stop = function(){
			clearInterval(interval);
			interval = null;
		}

		var fade = function(){
			var img = (bolImg) ? slides[counter].img : slides[counter];
			$nextImage.attr('src', img);
			$nextImage.animate({opacity:1}, options.duration*1000, function(){
				/* change the link if available */
				if($link){$link.attr('href', slides[counter].link);}
				$slideImage.attr('src', img);
				$nextImage.css({opacity: 0});
				if(!preloaded){
					if(counter<slides.lenth-1){(new Image()).src = (bolImg) ? slides[counter+1].img : slides[counter+1];}
					else {preloaded = true;}
				}
				counter ++;
				if(counter == slides.length) {counter=0;}
			});
		};

		/* Call the build */
		$(function(){ 
			page_load(); 
		});
		
		/* Return the public object */
		return {
			/* Public Properties */
			/* Public Methods */
			Start : function(){
				start();
			},
			Stop : function(){
				stop();
			}
		};
	};
})(jQuery);
