windowLoadStack.push( RotateBannerCarrousels );
function RotateBannerCarrousels()
{
   // Fetch bannercarrousel elements
   var cBannerCarrousels = document.getElementsByClassName( "BannerCarrousel" );
   for ( var i=0; i<cBannerCarrousels.length; i++ )
   {
      // Rotate banners within bannercarrousel
      RotateBanners( cBannerCarrousels[ i ] );
   }
}

function DelegateBannerRotation( pBannerCarrouselId )
{
   var eBannerCarrousel = document.getElementById( "BannerCarrousel" + pBannerCarrouselId );
   RotateBanners( eBannerCarrousel );
}

function RotateBanners( eBannerCarrousel )
{
   // Get carrousel id
   var currentCarrouselId = eBannerCarrousel.id;
   currentCarrouselId = currentCarrouselId.replace( 'BannerCarrousel', '' );
   
   // Get properties for carrousel
   var currentCarrouselProperties = bannerCarrouselProperties[ currentCarrouselId ];
   var bannersHidden = 0;
   var bannersShown = 0;

   // Set counters
   var totalBanners = 0;
   var maxShownBanners = currentCarrouselProperties[ "numberOfRotatingBanners" ];
   var maxHiddenBanners = 0;
   var lastShownIndex = bannerCarrouselProperties[ currentCarrouselId ][ "lastShown" ];
   
   // Create new array to store the banners in
   var cBanners = new Array();
   
   // Get and count banners
   for ( var i=0; i<eBannerCarrousel.childNodes.length; i++ )
   {
      // Get banner
      var eBanner = eBannerCarrousel.childNodes[ i ];
      if ( eBanner.id != null && eBanner.id.indexOf( "Banner" ) == 0
         && eBanner.className != null && eBanner.className.indexOf( "Rotating" ) >= 0 )
      {
         // Update counter
         totalBanners++;
         
         // Push banner to array
         cBanners.push( eBanner );
      }
   }
   
   // Override max shown banners if banner total is smaller
   if ( totalBanners < maxShownBanners )
      maxShownBanners = totalBanners;
   
   // Count max hidden banners
   maxHiddenBanners = totalBanners - maxShownBanners;
   if ( maxHiddenBanners < 0 )
      maxHiddenBanners = 0;
   
   // Initialize counters
   var hiddenBanners = 0;
   var shownBanners = 0;
   var currentBannerIndex = 0;
   
   // Loop through banners
   while ( shownBanners != maxShownBanners || hiddenBanners != maxHiddenBanners )
   {
      // Safety check
      if ( hiddenBanners > maxHiddenBanners && shownBanners == maxShownBanners )
         break;

      // Get banner
      var eBanner = cBanners[ currentBannerIndex ];
      
      if ( currentBannerIndex > lastShownIndex
         && shownBanners != maxShownBanners )
      {
         // Show banner
         eBanner.style.display = '';
         shownBanners++;
         
         // Save last shown index
         lastShownIndex = currentBannerIndex;
      }
      else
      {
         // Hide banner
         eBanner.style.display = 'none';
         hiddenBanners++;
      }
      
      // Increment index
      currentBannerIndex++;
      if ( cBanners[ currentBannerIndex ] == null )
      {
         currentBannerIndex = 0;
         if ( shownBanners != maxShownBanners )
            lastShownIndex = -1;
      }
   }
   
   bannerCarrouselProperties[ currentCarrouselId ][ "lastShown" ] = lastShownIndex;
   
   setTimeout( "DelegateBannerRotation( '" + currentCarrouselId + "' )", bannerCarrouselProperties[ currentCarrouselId ][ "rotationTime" ] * 1000 );
}


/* Global functions */
document.getElementsByClassName = function ( needle ) 
{ 
    var s = document.getElementsByTagName( '*' ), i = s.length, r = [], e, c; 
    needle = ' ' + needle + ' '; 

    while ( i-- ) 
    { 
        e = s.item( i ); 

        if ( e.className ) 
        { 
            c = ' ' + e.className + ' '; 
            if ( c.indexOf( needle ) != -1 ) 
               r.push( e ); 
        } 
    } 

    return r; 
}
