/*
 * jQuery Quovolver v1.0 - http://sandbox.sebnitu.com/jquery/quovolver
 *
 * By Sebastian Nitu - Copyright 2009 - All rights reserved
 * 
 */

(function($) {
  $.fn.quovolver = function(speed, delay) {
    
    /* Sets default values */
    if (!speed) speed = 500;
    if (!delay) delay = 6000;
    
    // If "delay" is less than 4 times the "speed", it will break the effect 
    // If that's the case, make "delay" exactly 4 times "speed"
    var quaSpd = (speed*4);
    if (quaSpd > (delay)) delay = quaSpd;
    
    // Create the variables needed
    var  quote = $(this),
      firstQuo = $(this).filter(':first'),
      lastQuo = $(this).filter(':last'),
      wrapElem = '<div id="quote_wrap"></div>';
    
    // Wrap the quotes
    $(this).wrapAll(wrapElem);
    
    // Hide all the quotes, then show the first
    $(this).hide();
    $(firstQuo).show();
    
    // Set the hight of the wrapper
    $(this).parent().css({height: $(firstQuo).height()});    
    
    // Where the magic happens
    setInterval(function(){
      
      // Set required hight and element in variables for animation
      if($(lastQuo).is(':visible')) {
        var nextElem = $(firstQuo);
        var wrapHeight = $(nextElem).height();
      } else {
        var nextElem = $(quote).filter(':visible').next();
        var wrapHeight = $(nextElem).height();
      }
      
      // Fadeout the quote that is currently visible
      $(quote).filter(':visible').fadeOut(speed);
      
      // Set the wrapper to the hight of the next element, then fade that element in
      setTimeout(function() {
        $(quote).parent().animate({height: wrapHeight}, speed);
      }, speed);
      
      if($(lastQuo).is(':visible')) {
        setTimeout(function() {
          $(firstQuo).fadeIn(speed*2);
        }, speed*2);
        
      } else {
        setTimeout(function() {
          $(nextElem).fadeIn(speed);
        }, speed*2);
      }
      
    }, delay);
  
  };
})(jQuery);
