window.onload = function ()
{
    initMenu();
    initSort();
};


function getCleanUrl ( )
{
    cleanURL = document.URL.replace( /\(\?.*\)/, '' ).replace ( /\#.*/, '' );
    return cleanURL;
}




/*
 * Script pour gérer le menu
 * Dépend de prototype pour les raccourcis et scriptaculous pour les effets
 *
 */



// attachement des fonctions aux éléments de la page


// var popups = [ 'tree', 'mail_to' ];
var popups = [ 'tree' ];


function initMenu ( )
{
    for ( var i = 0; i < popups.length; i++ )
    {
        attachEvents ( popups[i] );
    }

}


function attachEvents ( element_name )
{
    if ( $( element_name + '_button_link' ) )
    {
        if (  $( element_name ) )
            $( element_name + '_button_link' ).onclick = function() { switchPopup ( element_name ) ; return false };
    }
}


function switchPopup ( element_name )
{

    if ( Element.hasClassName ( element_name, 'shown' ) )
    {
        doHide ( element_name );
    }
    else
    {
        hideOthersThan ( element_name );
        doShow ( element_name );
    }

    return false;
}

function doShow ( element_name )
{
    Effect.Appear(
        element_name,
        {
            duration: 0.2,
            queue: 'start'
        }
    );
    Element.addClassName ( element_name, 'shown' );

}

function doHide ( element_name )
{
    Effect.Fade(
        element_name,
        {
            duration: 0.4,
            queue: 'start'
        }
    );
    Element.removeClassName ( element_name, 'shown' );
}

function hideOthersThan ( element_name )
{
    for ( var i = 0;  i < popups.length; i++ )
    {
        if ( popups[i] != element_name )
            doHide ( popups[i] );
    }
}



/*
 * Script pour gérer l'AJAX du classement
 * Dépend de prototype.
 *
 */


function initSort ( )
{
    if ( $( 'sort' ) )
        $( 'sort' ).onchange = updateSort;
}


function updateSort ( )
{
    var sort_by = $( 'sort' ).value ;

    new Ajax.Updater(
        'thumbs',
        getCleanUrl() + '/sort/' + sort_by,
            {
                asynchronous:true,
                method:'get'
            }
    );
    return false;

}

/*
 * Script pour gérer l'image preview
 *
 */


function showPreview ( photo_id, with_navigation )
{
    if ( ! photo_id )
        return false;

    args = '';
    if ( with_navigation )
        args = '?with_navigation';

    new Ajax.Updater(
        'preview',
        '/photo/' + photo_id + '/preview' + args ,
        {
            asynchrous: true,
            method:'get'
        }
    );

    if ( ! Element.hasClassName ( 'preview', 'shown' ) )
        Element.addClassName ( 'preview', 'shown' )

    if ( ! Element.hasClassName ( 'thumbs_container', 'multi' ) )
    {
        Element.addClassName ( 'thumbs_container', 'multi' );
        document.location = '#photo_' + photo_id
    }


}

function closePreview ( )
{
    Element.removeClassName('preview', 'shown');
    Element.removeClassName( 'thumbs_container', 'multi' );
}



/*
 * Script pour gérer la recherche simple
 * Dépend de prototype pour les raccourcis et scriptaculous pour les effets
 *
 */


function updateSearch ( )
{
    q = $('q').value;

    if ( q == '' )
    {
        // on met à jour la page avec un template partiel standard
        new Ajax.Updater(
            'thumbs',
            getCleanUrl() + '?partial',
                {
                    asynchronous:true,
                    method:'get'
                }
        );
        // on s'assure de l'affichage des outils de pagination
        $$('.pagination').each(function(e){
            e.show();
        });

        return false;
    }

    new Ajax.Updater(
        'thumbs',
        getCleanUrl() + '/search/' + q,
            {
                asynchronous:true,
                method:'get'
            }
    );

    // on s'assure du non-affichage des outils de pagination
    $$('.pagination').each(function(e){
        e.hide();
    });
    return false;

}