YAHOO.namespace( "maintopic" );
YAHOO.maintopic.tickerDelay = 5000;
YAHOO.maintopic.currentlySelected = 0;
YAHOO.maintopic.waiting = false;

var Dom = YAHOO.util.Dom;
var MainTopic = YAHOO.maintopic;

/**
 * Initalizes stuff
 */
MainTopic.init = function() 
{
    var imagesRoot = Dom.get( "maintopic_topic_images" );
    var listItemsRoot = Dom.get( "maintopic_topic_items" );
    var filter = function filter(y){return true};

    MainTopic.images = Dom.getElementsByClassName( "banner", "div", imagesRoot );
    MainTopic.listElements = Dom.getElementsBy( filter, "a", listItemsRoot );

    MainTopic.hideAllImages();
    MainTopic.selectItem( 0, false );
    
    YAHOO.util.Event.addListener( listItemsRoot, "mouseover", MainTopic.onHoverCallback );
    YAHOO.util.Event.addListener( Dom.get( "maintopic_holder" ), "mouseover", MainTopic.onHoverMenu );
    YAHOO.util.Event.addListener( Dom.get( "maintopic_holder" ), "mouseout", MainTopic.startTicking );
    
    MainTopic.startTicking();
}

/**
 * Callback for when hovering over the topic items
 */
MainTopic.onHoverCallback = function( event ) 
{ 
    var target = YAHOO.util.Event.getTarget( event );
    
    for( i = 0; i < MainTopic.listElements.length; i++ )
    {
        if ( target != MainTopic.listElements[i] )
            continue;

        MainTopic.selectItem( i, false )    
        break;            
    }
} 

/**
 * Callback for when hovering over any part of the topic
 */
MainTopic.onHoverMenu = function( event )
{
    MainTopic.shouldTick = false;
}


/**
 * Hides all frontpage menu images
 */
MainTopic.hideAllImages = function() 
{
    for( j = 0; j < MainTopic.images.length; j++ )
    {
        Dom.addClass( MainTopic.images[j], 'hide' );
        Dom.setStyle( MainTopic.images[j], 'opacity', 1 );  
    }
}

/**
 * Deslectes all the maintopic items
 */
MainTopic.deselectAll = function() 
{
    for( k = 0; k < MainTopic.listElements.length; k++ )
    {
        Dom.removeClass( MainTopic.listElements[k], 'selected' );
    }
}

MainTopic.selectItem = function( index, animate )
{
    var currentBanner = MainTopic.images[MainTopic.currentlySelected];
    if ( animate )
    {
        if ( currentBanner != MainTopic.images[index] )
        {
            MainTopic.fadeInBanner( MainTopic.images[index], currentBanner );            
        }    
    }
    else
    {
        MainTopic.hideAllImages();
        Dom.removeClass( MainTopic.images[index], 'hide' );        
    }
    
    MainTopic.deselectAll();
    Dom.addClass( MainTopic.listElements[index], 'selected' );
    MainTopic.currentlySelected = index;
}

MainTopic.startTicking = function()
{
    MainTopic.shouldTick = true;
    if ( !MainTopic.waiting )
    {
        MainTopic.waiting = true;
        setTimeout( 'MainTopic.tick()', MainTopic.tickerDelay );    
    }
}

MainTopic.stopTicking = function()
{
    MainTopic.shouldTick = false;
}

MainTopic.tick = function()
{
    MainTopic.waiting = false;
    if ( !MainTopic.shouldTick )
        return;
    
    var selected = MainTopic.currentlySelected;
        
    if ( selected + 1 >= MainTopic.listElements.length )
        selected = 0;
    else
        selected++;
    
    MainTopic.selectItem( selected, true );
    
    MainTopic.waiting = true;
    setTimeout( 'MainTopic.tick()', MainTopic.tickerDelay );
}

MainTopic.fadeInBanner = function( newBanner, oldBanner )
{
    var fadeBannerOut = new YAHOO.util.Anim( oldBanner, {opacity: {to: 0} }, 0.6 );
    var fadeBannerIn = new YAHOO.util.Anim( newBanner, {opacity: {to: 1} }, 0.6 );
    
    var clearOpacity = function( type, args )
    {
        Dom.setStyle( oldBanner, 'opacity', 0 );
        Dom.addClass( oldBanner, 'hide' );
    };

    var fadeIn = function( type, args ) 
    {
        Dom.setStyle( newBanner, 'opacity', 0 );
        Dom.removeClass( newBanner, 'hide' );
        fadeBannerIn.animate();
    };

    fadeBannerIn.onComplete.subscribe(clearOpacity);
    fadeBannerOut.animate();
    fadeIn();
}


YAHOO.util.Event.onDOMReady( MainTopic.init );
