/*
   upload.js
   --------------------------------------------------------
   Funzioni di utilita' per upload file da client a server.
*/


/*
   Inizio riempimento progress bar.
*/
function startUploadProgressBar() {
  /*
     Si crea on-the-fly (o si riutilizza se gia' presente) un div (protettivo)
     per la pagina corrente.
  */
  var divProgressBarContainer = document.getElementById("progressBarContainer");
  if (divProgressBarContainer == null) {
    var divProgressBarContainer = document.createElement("div");
    divProgressBarContainer.id = "progressBarContainer";

    var divProgressBar = document.createElement("div");
    divProgressBar.id = "progressBar";

    var divProgressBarText = document.createElement("div");
    divProgressBarText.id = "progressBarText";
    divProgressBarText.align = "center";

    var divProgressBarBox = document.createElement("div");
    divProgressBarBox.id = "progressBarBox";

    var divProgressBarBoxContent = document.createElement("div");
    divProgressBarBoxContent.id = "progressBarBoxContent";

    var divUpdateStatusMsg = document.createElement("div");
    divUpdateStatusMsg.id = "updateStatusMsg";
    divUpdateStatusMsg.align = "center";

    /* Si inseriscono i vari div nella struttura del documento  */
    divProgressBarContainer.appendChild(divProgressBar);
    divProgressBar.appendChild(divProgressBarText);
    divProgressBar.appendChild(divProgressBarBox);
    divProgressBarBox.appendChild(divProgressBarBoxContent);
    divProgressBar.appendChild(divUpdateStatusMsg);
    document.body.appendChild(divProgressBarContainer);
  }

  /* Reset messaggio */
  updateUploadProgressBarStatusMessage("");

  /*
    Si centra il div (leggermente spostato verso il basso
    per non nascondere l'animazione di caricamento).
  */
  document.getElementById("progressBarContainer").style.display = "block";
  divProgressBar.style.top = ((YAHOO.util.Dom.getViewportHeight() - divProgressBar.clientHeight) / 2 + 70) + "px";
  divProgressBar.style.left = ((YAHOO.util.Dom.getViewportWidth() - divProgressBar.clientWidth) / 2)  + "px";

  document.getElementById("progressBarText").innerHTML = "Caricamento in corso: 0%";

  /* Si attende un momento per essere certi che l'upload sia iniziato */
  window.setTimeout("refreshUploadProgressBar()", 1500);

  return true;
}


/*
   Invocazione lato server del metodo getUploadInfo() per aggiornamento progress bar.
*/
function refreshUploadProgressBar() {
  UploadMonitor.getUploadInfo(updateUploadProgressBar);
}


/*
   Funzione di callback per metodo getUploadInfo() (aggiornamento progress bar).
*/
function updateUploadProgressBar(uploadInfo) {

  /* Se upload ancora in corso... */
  if (uploadInfo.inProgress) {
    var fileIndex = uploadInfo.fileIndex;
    var progressPercent = Math.ceil((uploadInfo.bytesRead / uploadInfo.totalSize) * 100);
    var remainingTime = ((uploadInfo.elapsedTime * uploadInfo.totalSize) / uploadInfo.bytesRead) - uploadInfo.elapsedTime;
    var speed = Math.round((uploadInfo.bytesRead / 1000) / uploadInfo.elapsedTime);
    document.getElementById("progressBarText").innerHTML = "Caricamento in corso: " + progressPercent + "% (" + formatBytes(uploadInfo.bytesRead) + " di " + formatBytes(uploadInfo.totalSize) + " @ " + speed + " KB/s)";
    document.getElementById("progressBarBoxContent").style.width = parseInt(progressPercent * document.getElementById("progressBarBox").clientWidth / 100) + "px";
    updateUploadProgressBarStatusMessage("Tempo trascorso: " + millisecondsToHours(uploadInfo.elapsedTime * 1000) + " (rimanente: " + millisecondsToHours(remainingTime * 1000) + ")");

    window.setTimeout("refreshUploadProgressBar()", 1000);
  }

  return true;
}


/*
   Termine riempimento progress bar.
*/
function hideUploadProgressBar() {
  document.getElementById("progressBarContainer").style.display = "none";
  document.getElementById("progressBarText").innerHTML = "";
}


/* Valorizzazione messaggio */
function updateUploadProgressBarStatusMessage(message){
  DWRUtil.setValue("updateStatusMsg", message);
}


/**
 * Definizione istanza UploadMonitor
 */

/* Costruttore */
function UploadMonitor() {}

/* Variabili */
UploadMonitor._path = '';

/* Funzione per chiamata a metodo getUploadInfo() */
UploadMonitor.getUploadInfo = function(callback) {
  DWREngine._execute(UploadMonitor._path, "UploadMonitor", "getUploadInfo", callback);
}

