var gDOMID_Download = "tx_pmtree_pi1_download_box";
var gDoRefreshDownloadsAutomaticly = true;
var gt=0;
var gt2=0;

document.observe("dom:loaded", initDownload);

function initDownload() {
    clearDownload();
    getDownloadStateViaAjax("testID");
}

function generateDownload(item) {
    var text = "<div class='tx_pmtree_pi1_downloads'>";
    var i;
    var c = 0; 

    if (item != null) {
        c = parseInt(100.0 * parseInt(item.processedElements, 10)/(1.0 * parseInt(item.totalElements, 10 )),10);
    }    

    if (item != null) {
        text += "<div class='id_format'>"; 
        text += item.id + ". "+ item.fileFormat;
        text += "</div>";
    } else {
        text += "<div class='id_formatTitle'>";
        text += "Download";
        text += "</div>";
    }
    
    if (item != null) {  
        text += "<div class='progress_bar'>";
        for (i=0; i<10;i++) {
	    var ball = i<(c/10.0)?true:item.state=="done";
	    text += "<div class='" + (ball?"full":"empty") + "Block'>&nbsp;</div>";
        }
        text += "</div>";
    } else {
        text += "<div class='progress_barTitle'>";
        text += "Progress";
        text += "</div>";
    }

    if (item != null) {
        text+= "<div class='timePassed'>"; 
        if (!(item.state == "done" || item.state == "removed" ) ) {
            text+= createHMS(item.timePassed);
        } else {
            text+="-- -- --";	
        }
        text+= "</div>"; // elapsed
    } else {
        text+= "<div class='timePassedTitle'>"; 
        text+="Time elapsed";
        text+= "</div>"; // elapsed 
    }

    if (item != null) { 
        text+= "<div class='processedElements closedElement'>";
        if (item.state == "done") {
	    text+= item.totalElements;
        } else {
	    text+= item.processedElements+"/"+item.totalElements;
        }
        text+= "</div>"; 
    } else {
        text+= "<div class='processedElementsTitle'>";
        text+= "Accession Numbers";
        text+= "</div>";
    }
     
    if (item != null) { 
        text += "<div class='statusMessage'>";
    
    if (item.state == "done") {
	text += "<a href='"+item.url+"'>";
    }
     
    text += item.stateName;
    
    if (item.state == "done") {
	text += "</a>";
    }
     
    text += "</div>"; // statusMessage
} else {
    text += "<div class='statusMessageTitle'>";
    text += "Status";
    text += "</div>"; // statusMessage
}
//
////////////////////////////////////////////////

   
////////////////////////////////////////////////
// TIME REMAIN
if (item != null) { 
    var seqs =  parseInt(item.totalElements) - parseInt(item.processedElements, 10);
    var timePast = parseInt(timePast,10);
    var timeAdd = parseInt(item.timeAdd, 10);
    
    item.timePerSequence = parseFloat(item.timePerSequence);
   
    if (!(item.state == "done" || item.state == "removed" || item.state == "connect") ) {
	text+= "<div class='progress progress"+( (gt%12)+1 )+"'>&nbsp;</div>";
    }
    text+= "<div class='timeRemain'>";
    if (!(item.state == "done" || item.state == "removed")) {
	if (item.timePerSequence > 0) {          
	    text+= createHMS(item.timePerSequence * seqs +  timeAdd);          	
	} else {
	    text+= "&nbsp;-- -- --";
	}
    } else {
	text+= "&nbsp;-- -- --";
    }
    text+= "</div>"; // remain     
} else {      
    text+= "<div class='timeRemainTitle'>Time remaining</div>";
}
if (item != null) {
    if (!(item.state=="done" || item.state=="removed") ) {
	text+= "<div class='cancel'>";
	text+= '<a onFocus="this.blur();" href="javascript:cancelDownload('+item.id+')">cancel</a>';
	text+= "</div>";
    }
} else {
    text+= "<div class='cancelTitle'>";
    text+= "&nbsp;";
    text+= "</div>";
}

text+="</div>"; // tx_pmtree_pi1_downloads
   return text;
}

function createHMS(seconds) {
    var esTmp = seconds / 60.0 / 60.0;
   
    var esHi = parseInt(esTmp , 10);
    esTmp = (esTmp - esHi) * 60.0;
   
    var esMi = parseInt(esTmp ,10);
    esTmp = (esTmp - esMi) * 60.0;
    var esSi = parseInt(esTmp ,10);
    var timestr = " " + esSi + "s";
   
    if (esMi>0 || esHi>0) {
        timestr = " "+  esMi + "m " + timestr; 
    }            
 
    if (esHi>0) {
        timestr = " " + esHi + "h " + timestr; 
    }
    return timestr;
}

function viewDownload(json) { 
    gt++;
    var text = "<br><br><p>" + generateDownload(null) + "</p>";
    
    var allDone = true;  
    
    try {
	var items = json.downloads;
	if (items.length == 0){
	    if (gt%20==0){
		gt2++;
	    }
	    if (gt2%3==0){
		var ppp = "";
		if (gt%4==0)      {        ppp= ".";      }
		if (gt%4==1)      {        ppp= "..";      }
		if (gt%4==2)      {        ppp= "...";      }
		if (gt%4==3)      {        ppp= "....";      }
		text += "<p style='padding: 40px 15px;'>please wait" + ppp + "</p>";
	    } else {
		text += "<p style='padding: 40px 15px;'>No user defined downloads created. Please fill your list and generate a download file or download preconfigured ARB databases below.<p>";
	    }
	    $(gDOMID_Download).innerHTML = text;
	    setTimeout(getDownloadStateViaAjax, 3000);
	    return;
	} 
	items.each (function(item, index) {      
		allDone &= (item.state == "done");
		text += generateDownload(item);      
	    });
    } catch(e) {
	allDone = true;
    }  
  
    try {  
	$(gDOMID_Download).innerHTML = text;  
    }  catch(e)  {  }
    
    allDone=false;
    // refresh if its not done or aborted
    if (!allDone && gDoRefreshDownloadsAutomaticly) {
	var refreshTime = 5;
	try{
	    refreshTime = parseInt(json.data[0].updateTime , 10)* 1000;
	}catch(e){}
	setTimeout(getDownloadStateViaAjax, refreshTime); 
    }  
}

function getDownloadViaAjax_cb(t) {
    var json = eval(t.responseText); 
    viewDownload(json);
};
 
function cancelDownload(id) {
    var url = ajaxRequestURL;
    url += '&tx_pmtree_pi1[type]=download:cancel';
    url += '&tx_pmtree_pi1[id]='+id;
    var pars = '';
    var request = { 
	method: 'get', 
	parameters: pars
	//	onSuccess: getDownloadViaAjax_cb
    };  

    requestViaAjax("Download", url, request);
}

function clearDownload() {
    try{$(gDOMID_Download).innerHTML = "";}catch(e){}
}


function downloadClear() {
    var url = ajaxRequestURL;
    url += '&tx_pmtree_pi1[type]=download:clear';
    var pars = '';
    var request = { 
	method: 'get', 
	parameters: pars,    
	onSuccess: getDownloadViaAjax_cb
    };  
    requestViaAjax("Download", url, request);
}

function getDownloadStateViaAjax() {
    var url = ajaxRequestURL;
    url += '&tx_pmtree_pi1[type]=download:get';
    var pars = '';
    var request = { 
	method: 'get', 
	parameters: pars,    
	onSuccess: getDownloadViaAjax_cb
    };
  
    requestViaAjax("Download", url, request);
}
