jQuery.fn.slideshow = function(options){
	
	//Defaults
	var options = jQuery.extend({
		unique_id: '',
		media_current: 0, 
		media_total: 1,
		media_height: 350, // height of media
		media_width: 462, // width of media
		controlbar: true, // is the controlbar required
		controlbar_height: 28, // control bar height
		autoplay: true, // autoplay
		bg_color: '#cccccc', // background color
		playing: true,
		delay: 5000
	},options);

	return this.each(function(){

		options.unique_id = jQuery(this).attr('id');
			
		var slideElement = jQuery(this);
		jQuery(this).wrap('<div class="jSlideWrapper" id="jSlideWrap_'+options.unique_id+'"></div>');

		var slideWrapId = '#jSlideWrap_'+options.unique_id;
		var slideWrapper = jQuery(slideWrapId);
		
		var jTotalHeight;
		if(options.controlbar == true){
			jTotalHeight = options.media_height + options.controlbar_height;
		}else{
			jTotalHeight =	options.media_height;
		}
	
		jQuery(this).css({
				'width' : options.media_width,
				'height' : jTotalHeight			
		});		
		
		slideWrapper.css({
				'width' : options.media_width,
				'height' : jTotalHeight
			});
		
		var slideTimer = setInterval('',0);		
		
		var slideChildren = jQuery(this).children('li');
		//Change List Type to none				
		jQuery(this).css('list-style-type','none');
		
		//Set total media from the number of children LIs the UL has
		options.media_total = jQuery(this).children('li').length;
		
		//Hide all but the first LI		
		jQuery(this).children('li').each(function(i){
			jQuery(this).css({
				'width' : options.media_width,
				'height' : options.media_height
			});
			if(i!=0){
				jQuery(this).hide();
			}
		});
		

		
		if(options.controlbar == true){
			var jControl = jQuery('<div class="jControlbar" id="'+options.unique_id+'controller"></div>');
			
			jControl.appendTo(slideWrapper);
			var jControlId = '#'+options.unique_id+'controller';
			var jControlbar = jQuery(jControlId);
			
			jControlbar.css({
				'display': 'block',
				'position': 'relative',
				'top': -(options.controlbar_height+2),
				'height': options.controlbar_height,
				'width': options.media_width
			
			});
			
			if(options.media_total > 1){
			
				if(options.autoplay == true){
					var jPlayPause = jQuery('<ul class="jSlidePause"><ul>');
				}else{
					var jPlayPause = jQuery('<ul class="jSlidePlay"><ul>');			
				}
				var jPlayPauseLi = jQuery('<li />');
				var jPlayPauseLink = jQuery('<a href="#'+options.unique_id+'"></a>');
				if(options.autoplay == true){
					var jPlayPauseText = jQuery('<b>Pause</b>');
				}else{
					var jPlayPauseText = jQuery('<b>Play</b>');			
				}
				jPlayPauseText.prependTo(jPlayPauseLink);
				jPlayPauseLink.prependTo(jPlayPauseLi);
				jPlayPauseLi.prependTo(jPlayPause);			
				jPlayPause.appendTo(jControlbar);
				jPlayPause.bind('click', function(){
					if(options.playing == true){
						jPlayPause.removeClass("jSlidePause");
						jPlayPause.addClass("jSlidePlay");
						jPlayPauseText.empty();
						jPlayPauseText = jQuery('<b>Play</b>');
						jPlayPauseText.prependTo(jPlayPauseLink);
						jControlLinks.fadeIn();			
						slideManager("stop");
					}else{
						jPlayPauseText.empty();
						jPlayPause.removeClass("jSlidePlay");
						jPlayPause.addClass("jSlidePause");					
						jPlayPauseText = jQuery('<b>Pause</b>');
						jPlayPauseText.prependTo(jPlayPauseLink);
						jControlLinks.fadeOut();
						slideManager("start");
					}
					return false;
				});			
				
				var jControlLinks = jQuery('<ul class="jSlideLinks"></ul>');
				
				for(var i=0; i<options.media_total; i++){
					var myLink = jQuery('<li><a href="#'+options.unique_id+'">'+(i+1)+'</a></li>');
					myLink.appendTo(jControlLinks);	
				}	
				jControlLinks.appendTo(jControlbar);
				
				jControlLinks.children('li').each(function(i){
					jQuery(this).bind('click', function(){
						slideChildren.each(function(u){
							if(u == i){
								jQuery(this).fadeIn();
								options.media_current = i;
							}else{
								jQuery(this).fadeOut();
							}
						})
					});
				});
				
	
				if(options.autoplay == true){
					jControlLinks.hide();
				}
			}
			
		}

		
		if(options.autoplay == true){
			slideManager("start");
		}else{
			slideManager("stop");		
		}
		
		function slideManager(action){
			if(action == "start"){
				options.playing = true;					
				slideTimer = setInterval(function(){
					
					if(options.media_current == (options.media_total-1)){
						options.media_current = 0;
					}else{
						options.media_current+=1;
					}

					slideChildren.each(function(u){
						if(u == options.media_current){
							jQuery(this).fadeIn();
						}else{
							jQuery(this).fadeOut();
						}
					})					
				},options.delay);
			}else if (action == "stop"){
				clearInterval(slideTimer);
				options.playing = false;				
			}	
		}
		

					
	});
};