
function showAssetTreePane(paneDivId, loadingImg, url) {

    Effect.Appear(paneDivId,{duration:0.4});

    // Disabled since pulsing effect blocks other javascript till complete.
    // The effect may be stopped with e.cancel() but we will use the default Grails spinner for now.
    // def e = new Effect.Pulsate($(loadingImg), { pulses: 200, duration: 133 });

    new Ajax.Updater({ success: paneDivId }, url, {asynchronous:true,evalScripts:true});
}

function hideAssetTreePane(paneDivId, tableDivId, saveUrl) {

    // Collect the visible branch div's first.
    var visibleDivs = $(tableDivId).select('div').findAll(function(el) { return el.visible(); })
    var params = "assetTreeVisibleBranches=";

    // Hide the pane.
    $(paneDivId).toggle();

    // Add the id of each visible div to params.
    visibleDivs.each(function(it) {
        params += it.identify();
        params += ","
    });

    // Remove the trailing comma.
    params = params.slice(0,params.length-1);

    // Post the id's of all visible branch div's.
    // asynchronous: false is against the prototype recommendations but appears to be needed in this case.
    new Ajax.Request(saveUrl, {parameters: params, asynchronous: false});
}