jQuery.fn.slideshow = function(options){

  if('object' == typeof options){
    settings = jQuery.extend({
      pause_duration: 3,
      transition_duration: 1,
      stop_callback: false,
      start_callback: false,
      auto_start: true
    } , options);
    pause_duration = settings.pause_duration;
    transition_duration = settings.transition_duration;
    go = settings.auto_start;
    slideCount = 1;
    holder = $(this);
    nextSlide();
  }

  if(options == 'stop'){
    stop();
  }

  if(options == 'toggle'){
    if(go)
      stop();
    else
      start();
  }

  function stop()
  {
    go = false;
    $('#outgoingSlide').dequeue();
     if(settings.stop_callback) settings.stop_callback();
  }

  function start()
  {
    go = true;
    pause_duration = settings.pause_duration;
    transition_duration_duration = settings.transition_duration;
    $('#outgoingSlide').fadeOut(transition_duration*1000, nextSlide);
    if(settings.start_callback) settings.start_callback();
  }

  function nextSlide(){
    $('#outgoingSlide').remove();
    holder.append('<img src="'+settings.slides[slideCount]+'"/>');
    if(++slideCount>settings.slides.length-1) slideCount = 0;
    holder.find('img:first').each(function(){
      $(this).attr('id', 'outgoingSlide');
      $(this).css('position', 'absolute');
      $(this).fadeTo(pause_duration*1000, 1);
      if(go)
        $(this).fadeOut(transition_duration*1000, nextSlide);
    });
  }

}
