var initSlideShow = 
 function( slideShow )
 {
  if( $(slideShow).length == 1 && $(slideShow).data( "initialized" ) != true )
  {
   // Data
   $(slideShow).data({ initialized: true,
                       auto: true,
                       busy: false,
                       currentSlide: 0 });
   
   // DOM init
   var nbSlides = 0;
   var sizeOfContainer = 0;
   var container = document.createElement( "div" );
   
   $( "div.slides div.slide", slideShow )
    .each( function()
           {
            $(this).css({ position: "absolute",
                          top: 0,
                          left: sizeOfContainer });
            
            sizeOfContainer += parseInt( $(this).outerWidth() );
            nbSlides++;
            
            $(container).append( $(this) );
           } );
   
   $(container).css({ position: "absolute",
                      top: 0,
                      left: 0,
                      width: sizeOfContainer + "px" })
               .addClass( "container" );
   $( "div.slides", slideShow ).append( container );
   $(container).children().show();
   
   // Indicator
   if( $( ".nav", slideShow ).length == 1 )
   {
    var dot = document.createElement( "a" );
      $(dot).attr( "href", "#" )
            .append( '<img alt="" src="/templates/common/imgs/blank.gif" />' )
            .click( function( event )
                    {
                     $(slideShow).trigger( "changeSlide", $(this).index() );
                     event.stopPropagation();
                     return false;
                    } );
    
    $( ".nav", slideShow ).children().remove();
    for( var i=0 ; i<nbSlides ; i++ )
    {
     $( ".nav", slideShow ).append( $(dot).clone(true) );
    }
   }
   
   // Bind init
   $(slideShow)
    .bind( "changeSlide",
           function( event, iSlide )
           {
            if( $(slideShow).data( "busy" ) == false )// && $( ".slides .slide:eq(" + iSlide + ")", slideShow ).length == 1 )
            {
             $(slideShow).data( "busy", true );
             
             if( iSlide < 0 )
             {
              $( ".slides .slide:last", slideShow )
               .clone(true)
               .prependTo( container );
              $( ".slides .slide:first", slideShow ).css( "left", ( 0 - parseInt( $( ".slides .slide:first", slideShow ).outerWidth() ) ) + "px" );
              
              $( ".slides > .container", slideShow )
               .stop()
               .animate({ left: ( 0 - $( ".slides .slide:eq(0)", slideShow ).position().left ) + "px" },
                        "slow",
                        "easeInOutQuart",
                        function()
                        {
                         $( ".slides > .container", slideShow ).css( "left", ( 0 - parseInt( $( ".slides .slide:last", slideShow ).position().left ) ) + "px" );
                         $( ".slides .slide:first", slideShow ).remove();
                         
                         $(slideShow).data( "busy", false );
                         $(slideShow).data( "currentSlide", nbSlides-1 );
                         
                         $( ".nav a", slideShow ).removeClass( "active" );
                         $( ".nav a:eq(" + ( nbSlides-1 ) + ")", slideShow ).addClass( "active" );
                        });
             }
             else if( iSlide >= nbSlides )
             {
              $( ".slides .slide:first", slideShow )
               .clone(true)
               .appendTo( container );
              $( ".slides .slide:last", slideShow ).css( "left", sizeOfContainer + "px" );
              
              // return;
              $( ".slides > .container", slideShow )
               .stop()
               .animate({ left: ( 0 - sizeOfContainer ) + "px" },
                        "slow",
                        "easeInOutQuart",
                        function()
                        {
                         $( ".slides > .container", slideShow ).css( "left", 0 );
                         $( ".slides .slide:last", slideShow ).remove();
                         
                         $(slideShow).data( "busy", false );
                         $(slideShow).data( "currentSlide", 0 );
                         
                         $( ".nav a", slideShow ).removeClass( "active" );
                         $( ".nav a:eq(0)", slideShow ).addClass( "active" );
                        });
             }
             else
             {
              $( ".slides > .container", slideShow )
               .stop()
               .animate({ left: ( 0 - parseInt( $( ".slides .slide:eq(" + iSlide + ")", slideShow ).position().left ) ) + "px" },
                        "slow",
                        "easeInOutQuart",
                        function()
                        {
                         $(slideShow).data( "busy", false );
                         $(slideShow).data( "currentSlide", iSlide );
                         
                         $( ".nav a", slideShow ).removeClass( "active" );
                         $( ".nav a:eq(" + iSlide + ")", slideShow ).addClass( "active" );
                        });
             }
            }
           } );
   
   $( ".nav_left", slideShow ).click( function(event)
                                      {
                                       $(slideShow).trigger( "changeSlide", ( $(slideShow).data( "currentSlide" ) - 1 ) );
                                       event.stopPropagation();
                                       return false;
                                      } );
   $( ".nav_right", slideShow ).click( function(event)
                                       {
                                        $(slideShow).trigger( "changeSlide", ( $(slideShow).data( "currentSlide" ) + 1 ) );
                                        event.stopPropagation();
                                        return false;
                                       } );
   
   // Controls
   $(slideShow).trigger( "changeSlide", 0 );
  }
 };


$(document).ready( 
 function()
 {
  initSlideShow( "#slide" );
 });
