var slideWidth    = 0;
var slideCount    = 0;
var slideReverse  = false;
var slideSpeed    = 500;
var slideInterval = 5000;
var slideCurrent  = 0;
var slideTimer    = null;

$(document).ready(function(){
  slideWidth = $( 'div.slide' ).children( 'div.slide-element' ).width( );
  slideCount = $( 'div.slide' ).children( 'div.slide-element' ).length;
  
  if ( $( 'div.slider' ).length ) {
    $( 'div.slide' ).width( slideWidth * ( slideCount + 1 ) );
    
    $( 'div.slider' ).append( '<div class="slide-buttons"></div>' );
    
    $( 'div.slider' ).append( '<a href="#" class="slide-next"></a>' );
    
    $( 'div.slider' ).append( '<a href="#" class="slide-prev"></a>' );
    
    $( 'div.slide' ).children( 'div.slide-element' ).each(function(){
      $( 'div.slide-buttons' ).append( '<a href="#"></a>' );
    });
    
    $( 'div.slide' ).append( '<div class="' + $( 'div.slide' ).children( 'div.slide-element:first-child' ).attr( 'class' ) + '">' + $( 'div.slide' ).children( 'div.slide-element:first-child' ).html() + '</div>' );
    
    //Cufon.replace( 'h1' );
    
    $( 'div.slider' ).hover(function(){
      slideStopTimer();
    },function(){
      slideStartTimer();
    });
    
    $( 'div.slider a.slide-next' ).click(function(){
      slideReverse = false;
      
      slideNext();
      
      return false;
    });
    
    $( 'div.slider a.slide-prev' ).click(function(){
      slideReverse = true;
      
      slidePrev();
      
      return false;
    });
    
    $( 'div.slide-buttons a' ).click(function(){
      var slideIndex = $( this ).index();
      
      if ( ( slideIndex + 1 ) != slideCurrent ) {
        slideIconInactive();
        
        $( 'div.slide' ).animate({ left: ( slideIndex * slideWidth * -1 ) },{ duration: slideSpeed, complete: function(){
          slideDone();
        }});
      }
      
      return false;
    });
    
    slideDone();
    
    slideStartTimer();
  }
});

function slideStartTimer() {
  slideTimer = setInterval( 'slideTrigger();', slideInterval );
}

function slideStopTimer() {
  clearInterval( slideTimer );
}

function slideTrigger() {
  if ( slideReverse ) {
    slidePrev();
  } else {
    slideNext();
  }
}

function slideNext() {
  slideIconInactive();
  
  $( 'div.slide' ).stop( true, true );
  
  if ( parseInt( $( 'div.slide' ).css( 'left' ) ) > ( slideWidth * ( slideCount - 1 ) * -1 ) ) {
    $( 'div.slide' ).animate({ left: '-=' + slideWidth },{ duration: slideSpeed, complete: function(){
      slideDone();
    }});
  } else {
    $( 'div.slide' ).animate({ left: '-=' + slideWidth },{ duration: slideSpeed, complete: function(){
      $( 'div.slide' ).css({ left: 0 });
      slideDone();
    }});
  }
}

function slidePrev() {
  slideIconInactive();
  
  $( 'div.slide' ).stop( true, true );
  
  if ( parseInt( $( 'div.slide' ).css( 'left' ) ) < 0 ) {
    $( 'div.slide' ).animate({ left: '+=' + slideWidth },{ duration: slideSpeed, complete: function(){
      slideDone();
    }});
  } else {
    $( 'div.slide' ).css({ left: ( slideWidth * slideCount * -1 ) });
    $( 'div.slide' ).animate({ left: '+=' + slideWidth },{ duration: slideSpeed, complete: function(){
      slideDone();
    }});
  }
}

function slideIconActive() {
  $( 'div.slide-buttons a:nth-child(' + slideCurrent + ')' ).addClass( 'active' );
}

function slideIconInactive() {
  if ( $( 'div.slide-buttons a.active' ).length ) {
    $( 'div.slide-buttons a.active' ).removeClass( 'active' );
  }
}

function slideDone() {
  slideCurrent = ( ( ( parseInt( $( 'div.slide' ).css( 'left' ) ) / slideWidth ) * -1 ) + 1 );
  
  slideIconActive();
}
