// This script requires jsProgressBarHandler and the prototype javascript libraries

var start_time;

var sessionID = "XXX";

function validate_field(field, alerttext)
{
    if (field.value == null || field.value=="")
	{
	    field.focus();
	    alert(alerttext);
	    return false;
	}
    return true;
}

function postIt()
{
    document.forms[0].action="uploader?sid=" + sessionID;
    document.forms[0].submit();
}

function generate_sessionID() {
    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz";
    var string_length = 16;
    var randomstring = '';
    var d = new Date();
    Math.random(d.getTime());
    for (var i=0; i<string_length; i++) {
	var rnum = Math.floor(Math.random() * chars.length);
	randomstring += chars.substring(rnum,rnum+1);
	}
    return randomstring;
}

function openprogressbox()
{
  var box = document.getElementById('progress-box'); 
  document.getElementById('filter').style.display='block';
  
//  var content = document.getElementById('boxcontent');
//  content.style.padding="0";

  box.style.display='block';
}

function hideprogressbox()
{
  document.getElementById('filter').style.display='block';
  document.getElementById('progress-box').style.display='block';
  myJsProgressBarHandler.setPercentage('uploadProgress', 0);
}

function readDoc(url)
{
    var req = false;
  // For Safari, Firefox, and other non-MS browsers
  if (window.XMLHttpRequest)
{
    try {
	req = new XMLHttpRequest();
    } catch (e) {
	req = false;
    }
} else if (window.ActiveXObject)
{
  // For Internet Explorer on Windows
      try {
          req = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
      try {
          req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {
          req = false;
      }
  }
}
  if (req)
{
    // Synchronous request, wait till we have it all
	req.open('GET', url, false);
    req.send(null);
    return req.responseText;
}
return "error in http request";
}

function size_label(bytes)
{
  var divisor = 1, label = "Bytes";

  if (bytes > 1000)
      divisor = 1000; label = "KB";
  if (bytes > 1000000)
      divisor = 1000000; label = "MB";
  if (label == "MB")
      return (bytes / divisor).toFixed(2) + label;
  else
      return (bytes / divisor).toFixed(0) + label;
}

function speed_label(bytes, ms)
{ /* time in milleseconds */
      var bytes_per_second = bytes / (ms / 1000);
  var divisor = 1, label = "Bytes";

  if (bytes_per_second > 1000)
      divisor = 1000; label = "KB";
  if (bytes_per_second > 1000000)
      divisor = 1000000; label = "MB";
  if (label == "MB")
      return (bytes_per_second / divisor).toFixed(2) + label + "/second";
}

function update_progress()
{
    var status_div, upload_data={};
    status_div = document.getElementById('progress-text');
    eval(readDoc("/cgi-bin/progress.cgi?sessionid=" + sessionID));
    var elapsed_time = (new Date()).getTime() - start_time;
    var percentage = 0;
    var estimate = "";
    if (upload_data.upload_total > 0)
	{
        percentage = (100 * upload_data.upload_current / upload_data.upload_total).toFixed(0);
	estimate = "Estimated completion time: " + ((100 - percentage) / (percentage / (elapsed_time / 1000))).toFixed(0) + " seconds";
	}


    if (upload_data.upload_complete != "TRUE")
    {
        status_div.innerHTML = "<hr/>Uploaded " + size_label(upload_data.upload_current) + " of " + size_label(upload_data.upload_total) + " in " 
	    + (elapsed_time/1000).toFixed(0) +" seconds<br><br>Transfer Speed: " + speed_label(upload_data.upload_current, elapsed_time) + "<br><br>"+estimate;
	myJsProgressBarHandler.setPercentage('uploadProgress', percentage);
        setTimeout("update_progress();", 1000);
    }
    else
    {
	myJsProgressBarHandler.setPercentage('uploadProgress', 100);
        status_div.innerHTML = "Upload Completed in " + (elapsed_time /1000).toFixed(0) + " seconds.";
    }
}


function start_progress()
{
    sessionID = generate_sessionID();
    document.getElementById('sessionid').value = sessionID;
    if (!validate_field(document.forms[0].phone, "You must enter a phone number to complete this upload."))
	return;
    if (!validate_field(document.forms[0].name, "You must enter your name to complete this upload."))
	return;
    if (!validate_field(document.forms[0].upfile, "You must select a file."))
	return;
    postIt();
    start_time = (new Date()).getTime();
    document.getElementById('progress-text').innerHTML = "Loading...";
    openprogressbox();
    setTimeout("update_progress();", 1000);
}

