dojo.require('dojo.lfx.cne_extras');
dojo.require('dojo.io.cne_io');

var currentlyWorkingOn = new Array();

dojo.lfx.albumFoldHandler = function(albumId, trackId) {
    albumFold     = dojo.byId('album_tracks_container_' + albumId);
    textNode      = dojo.byId('view_text_' + albumId);
    openAlbumFold = dojo.byId('album_tracks_container_' + dojo.lfx.html.openAlbumId);
    openTextNode  = dojo.byId('view_text_' + dojo.lfx.html.openAlbumId);
    linkNode      = dojo.byId('view_link_' + albumId);
    // wait_txt, hide_txt, view_txt defined are in the template (probably aritst_songs.tpl)
    viewText = viewTxt + ' (' + dojo.byId('track_cnt_' + albumId).value + ')';
    if (openTextNode)
        openViewText = viewTxt + ' (' + dojo.byId('track_cnt_' + dojo.lfx.html.openAlbumId).value + ')';


    duration = 700;

    if (dojo.byId('track_' + trackId)) { // highlight the track, if it is given (this is the only reason we even pass the trackId)
        dojo.lfx.highlight(dojo.byId('track_' + trackId), [125,250,110], 5000).play();
    }

    if (albumId > 0) {
        if (dojo.lfx.html.openAlbumId && (dojo.lfx.html.openAlbumId != albumId)) {
            if (dojo.style.isShowing(openAlbumFold)) {
                // one fold open, opening a new different fold
                if (openTextNode)
                    openTextNode.innerHTML=openViewText;
                dojo.lfx.fadeWipeOut(openAlbumFold, duration, dojo.lfx.easeInOut,
                    function(){
                        dojo.style.setOpacity(albumFold, 0);
                        dojo.lfx.fadeWipeIn(albumFold, duration, dojo.lfx.easeInOut).play();
                        dojo.html.setClass(linkNode, 'btn green fl mt-5 di');
                        textNode.innerHTML=hideText;
                    }
                ).play();
            }
            else {
                // one fold open, opening a new different fold, but something happened outside our fold handler to close the open fold
                openTextNode.innerHTML=openViewText;
                dojo.style.setOpacity(albumFold, 0);
                dojo.lfx.fadeWipeIn(albumFold, duration, dojo.lfx.easeInOut).play();

                dojo.html.setClass(linkNode, 'btn green fl mt-5 di');
                textNode.innerHTML=hideText;
            }

            dojo.lfx.html.openAlbumId = albumId;
        }
        else if (!dojo.style.isShowing(albumFold)) {
            // all folds closed, opening a new fold
            dojo.style.setOpacity(albumFold, 0);
            dojo.lfx.fadeWipeIn(albumFold, duration, dojo.lfx.easeInOut).play();

            dojo.html.setClass(linkNode, 'btn green fl mt-5 di');
            textNode.innerHTML=hideText;

            dojo.lfx.html.openAlbumId = albumId;
        }
        else {
            // closing our only open fold
            openTextNode.innerHTML=openViewText;
            dojo.lfx.fadeWipeOut(albumFold, duration, dojo.lfx.easeInOut).play();
        }
    }
    else {
        unassocTracksDiv = dojo.byId('album_tracks_container_0');
        dojo.byId('unassoc_text').innerHTML = '<h2>Unassociated Tracks</h2>';
        dojo.lfx.fadeWipeIn(unassocTracksDiv, duration, dojo.lfx.easeInOut).play();
    }
}


var alreadyLoadedAlbums = new Array;

function displayAlbumTracks(albumId, trackId) {

    if (!currentlyWorkingOn[albumId]) { // this fella is currently doing ajaxy things, let's not mess with it for now, mkay?
        albumFold     = dojo.byId('album_tracks_container_'+albumId);
        if (albumId > 0) {
            textNode      = dojo.byId('view_text_'+albumId);
            linkNode      = dojo.byId('view_link_'+albumId);
        }
        if (dojo.lfx.html.openAlbumId > 0) {
            openAlbumFold = dojo.byId('album_tracks_container_'+dojo.lfx.html.openAlbumId);
            openTextNode  = dojo.byId('view_text_'+dojo.lfx.html.openAlbumId);
        }

    	if ( !alreadyLoadedAlbums[albumId] ) {
    	    // load the page
    		args = {
    			url: MP3_BASE_URL + '/index.php?event=Response&type=Artist&action=album_tracks&album_id='+albumId+'&track_id='+trackId+'&artist_id='+dojo.byId('artist_id').value,
    			mime: 'text/json',
    			onSuccess: function(t, d) { displayAlbumTracksSuccess(d, albumId, trackId); },
    			onFailure: function(t, d) { displayAlbumTracksFailure(d, albumId); }
    		}
    		dojo.io.basicXHRTransport(args);

    	    // while we're waiting for the ajax to return, display a loading message and use this time to fold up any open divs
    	    currentlyWorkingOn[albumId] = true;

            if (albumId > 0) {
                dojo.html.setClass(linkNode, 'btn disabled fl mt-5 di');
        	    textNode.innerHTML=waitText;

        	    if (dojo.lfx.html.openAlbumId > 0) {
        	        if (openTextNode != textNode) {
                        openTextNode.innerHTML = viewTxt + ' (' + dojo.byId('track_cnt_' + dojo.lfx.html.openAlbumId).value + ')';
        	        }
        	    }
        	    if (dojo.lfx.html.openAlbumId //                          If there is an album that is open,
        	     && dojo.lfx.html.openAlbumId != albumId //               it's not the same album we are trying to open
        	     && dojo.lfx.html.openAlbumId>0 //                        it's not the Unassociated Tracks (shouldn't ever be),
        	     && !currentlyWorkingOn[dojo.lfx.html.openAlbumId]) { //  it's not busy doing something right now
                    if (dojo.style.isShowing(openAlbumFold)) { //         and it's not hidden
                        dojo.lfx.fadeWipeOut(openAlbumFold).play(); //    Then go ahead and wipe it out
                    }
        	    }
            }
    	}
    	else {
    		dojo.lfx.albumFoldHandler(albumId);
    	}
    }
}


function displayAlbumTracksSuccess(data, albumId, trackId) {
    if (!data.error) {
        node = dojo.byId('album_tracks_container_'+albumId);
        node.innerHTML = data.content;

        if (albumId > 0) {
            alreadyLoadedAlbums[albumId] = true;
        }
    	currentlyWorkingOn[albumId] = false;

    	dojo.lfx.albumFoldHandler(albumId, trackId);
    }
    else {
        displayAlbumTracksFailure(data, albumId);
    }
}

function displayAlbumTracksFailure(data, albumId) {
    alert(data.content);

    linkNode      = dojo.byId('view_link_'+albumId);
    dojo.html.setClass(linkNode, 'btn green fl mt-5 di');

    if (albumId > 0) {
        textNode  = dojo.byId('view_text_'+albumId);
        textNode.innerHTML = viewTxt + ' (' + dojo.byId('track_cnt_' + albumId).value + ')';
    }
    currentlyWorkingOn[albumId] = false;
}