/* ******************************************
 * FileProgress Object
 * Control object for displaying file info
 * ****************************************** */

function FileProgress(fileObj, target_id) {
 this.file_progress_id = "divFileProgress";

 this.fileProgressWrapper = document.getElementById(this.file_progress_id);
 if (!this.fileProgressWrapper) {
   this.fileProgressWrapper = document.createElement("div");
   this.fileProgressWrapper.className = "progressWrapper";
   this.fileProgressWrapper.id = this.file_progress_id;

   this.fileProgressElement = document.createElement("div");
   this.fileProgressElement.className = "progressContainer";

   var progressCancel = document.createElement("a");
   progressCancel.className = "progressCancel";
   progressCancel.href = "#";
   progressCancel.style.visibility = "hidden";
   progressCancel.appendChild(document.createTextNode(" "));

   var progressText = document.createElement("div");
   progressText.className = "progressName";
   progressText.appendChild(document.createTextNode(fileObj.name));

   var progressBar = document.createElement("div");
   progressBar.className = "progressBarInProgress";

   var progressStatus = document.createElement("div");
   progressStatus.className = "progressBarStatus";
   progressStatus.innerHTML = "&nbsp;";

   this.fileProgressElement.appendChild(progressCancel);
   this.fileProgressElement.appendChild(progressText);
   this.fileProgressElement.appendChild(progressStatus);
   this.fileProgressElement.appendChild(progressBar);

   this.fileProgressWrapper.appendChild(this.fileProgressElement);

   document.getElementById(target_id).appendChild(this.fileProgressWrapper);
   FadeIn(this.fileProgressWrapper, 0);

 } else {
   this.fileProgressElement = this.fileProgressWrapper.firstChild;
   this.fileProgressElement.childNodes[1].firstChild.nodeValue = fileObj.name;
 }

 this.height = this.fileProgressWrapper.offsetHeight;

}
FileProgress.prototype.SetProgress = function(percentage) {
 this.fileProgressElement.className = "progressContainer green";
 this.fileProgressElement.childNodes[3].className = "progressBarInProgress";
 this.fileProgressElement.childNodes[3].style.width = percentage + "%";
};

FileProgress.prototype.SetComplete = function() {
 this.fileProgressElement.className = "progressContainer blue";
 this.fileProgressElement.childNodes[3].className = "progressBarComplete";
 this.fileProgressElement.childNodes[3].style.width = "";
};

FileProgress.prototype.SetError = function() {
 this.fileProgressElement.className = "progressContainer red";
 this.fileProgressElement.childNodes[3].className = "progressBarError";
 this.fileProgressElement.childNodes[3].style.width = "";
};

FileProgress.prototype.SetCancelled = function() {
 this.fileProgressElement.className = "progressContainer";
 this.fileProgressElement.childNodes[3].className = "progressBarError";
  this.fileProgressElement.childNodes[3].style.width = "";
};

FileProgress.prototype.SetStatus = function(status) {
 this.fileProgressElement.childNodes[2].innerHTML = status;
};

FileProgress.prototype.ToggleCancel = function(show, upload_obj, file_id) {
 this.fileProgressElement.childNodes[0].style.visibility = show ? "visible" : "hidden";
 if (upload_obj) {
   this.fileProgressElement.childNodes[0].onclick = function() { upload_obj.cancelUpload(); return false; };
 }
};

function FadeIn(element, opacity) {
 var reduce_opacity_by = 15;
 var rate = 30;  // 15 fps


 if (opacity < 100) {
   opacity += reduce_opacity_by;
   if (opacity > 100) {opacity = 100;}

   if (element.filters) {
     try {
       element.filters.item("DXImageTransform.Microsoft.Alpha").opacity = opacity;
     } catch (e) {
       // If it is not set initially, the browser will throw an error.  This will set it if it is not set yet.
       element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')';
     }
   } else {
     element.style.opacity = opacity / 100;
   }
 }

 if (opacity < 100) {
   setTimeout(function() { FadeIn(element, opacity); }, rate);
 }
}
