function displayElement(e) {
    var el = document.getElementById(e);
    if (el.style.display=='none') {
        el.style.display='block';
    }
}
	
function hideElement(e) {
    var el = document.getElementById(e);
    if (el.style.display!='none') {
        el.style.display='none';
    }
}

function showOrHide(show, element) {
    if (show) {
        displayElement(element);
    }
    else
    {
        hideElement(element);
    }
}

function displayReportError(state) {
    return state=='ERROR';    
}

function displayReportQueued(state) {
    return state=='QUEUED';
}

function displayProgress(state) {
    return state=='RUNNING';
}

function displayProceedBar(state) {
    return state!='RUNNING' && state!='QUEUED';
}

function displayDownload(state) {
    return state=='FINISHED';
}

function displayReportRejected(state) {
    return state=='REJECTED';
}

function displayReportBody(state) {
    //always shows if proceed bar is showing
    return displayProceedBar(state); 
}

function updateReportComponents(state) {
    showOrHide(displayReportError(state), 'reportError');
    showOrHide(displayReportRejected(state), 'reportRejected');
    showOrHide(displayReportQueued(state), 'reportQueued');
    showOrHide(displayProgress(state), 'progress');
    showOrHide(displayProceedBar(state), 'proceedBar');
    showOrHide(displayDownload(state), 'download');
    showOrHide(displayReportBody(state), 'reportBody');
}


function updateReportProgress(value) {
    var p = document.getElementById('progressMeter');
    p.style.width=value + '%';
}

function updateReportAction(link) {
    new Ajax.Request(link,
    {
        method:'get',
        onSuccess: function(transport){
            var json = transport.responseText.evalJSON();

            updateReportComponents(json.status);
            if (json.status=='RUNNING') {
                updateReportProgress(json.progress);
            }
            if (json.status=='RUNNING' || json.status=='QUEUED') {
                window.setTimeout(function() {updateReportAction(link)}, 1000);
            }
        },
        onFailure: function(){
            alert('Unable to retrieve status of task.')
        }
    });
		  
}

