var uploadObjXML = false;
var isUploadInProcess = false;
var uploadURL = "";
var uploadTimer = false;
var uploadId = "";
var nillsCount = 0;
var REFRESH_TIME = 2*1000; // en milisegundos
var redirectURL = "";

/*
Capas o elementos necesarios para que funcione

progress -->  Tabla que muestra la información de progreso
progress-bar --> Div dentro de <progress-bar> que muestra la barra de progreso
form-upload --> Formulario que contiene el archivo que se va a subir
submitter --> Iframe sobre el que se va a hacer el submit del formulario
*/

function upload(id, redirect)
{
	uploadId = id;
	redirectURL = redirect;

	// Barra e información de progreso
	document.getElementById("progress").style.display = getDisplayProperty();
	uploadTimer = setTimeout("updateStatus()", 1000); // la primera petición se hace después de un segundo

	// Ocultamos el formulario para evitar dobles pulsaciones
	document.getElementById("form-upload").style.display = "none";
}

function updateStatus()
{
	if (!isUploadInProcess)
	{
		try
		{
			uploadObjXML = new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch (e2)
		{
			uploadObjXML = false;
		}

		if (window.XMLHttpRequest)
			uploadObjXML = new XMLHttpRequest();

		if (!uploadObjXML && typeof XMLHttpRequest != 'undefined')
			uploadObjXML = new XMLHttpRequest();

		var currentTime = (new Date()).getTime();
		var param = 'UploadID=' + uploadId + '&timestamp=' + currentTime;
		uploadURL = "scripts/getProgressData07.asp?" + param;
		if (uploadObjXML)
		{
			isUploadInProcess = true;
			uploadObjXML.open('GET', uploadURL, true);
			uploadObjXML.onreadystatechange = printStatus;
			uploadObjXML.send(null);
		}
	}

	uploadTimer = setTimeout('updateStatus()', REFRESH_TIME);
}

function printStatus()
{
	isUploadInProcess = false;
	if (uploadObjXML.readyState == 4)
	{
		var text = uploadObjXML.responseText;
		var jsonObject = eval('(' + text + ')');

		// Estructura de datos : percBytesRead - percentRest - bytesRead - totalBytes - uploadTime - restTime - transferRate - isFinished - isError - messageError
		document.getElementById("percBytesRead").innerHTML = jsonObject.percBytesRead + " %";
		//document.getElementById("percentRest").innerHTML   = jsonObject.percentRest + " %";
		document.getElementById("bytesRead").innerHTML     = jsonObject.bytesRead;
		document.getElementById("totalBytes").innerHTML    = jsonObject.totalBytes;
		//document.getElementById("uploadTime").innerHTML    = jsonObject.uploadTime;
		//document.getElementById("restTime").innerHTML      = jsonObject.restTime;
		//document.getElementById("transferRate").innerHTML  = jsonObject.transferRate;
		//document.getElementById("isFinished").innerHTML    = (jsonObject.isFinished == "true") ? "s&iacute;" : "no";
		//document.getElementById("isError").innerHTML       = (jsonObject.isError == "true") ? "s&iacute;" : "no";
		//document.getElementById("messageError").innerHTML  = jsonObject.messageError;
		

		var aRead = (!isNaN(jsonObject.percBytesRead)) ? parseInt(jsonObject.percBytesRead, 10) : 0;
		var aRest = (!isNaN(jsonObject.percentRest)) ? parseInt(jsonObject.percentRest, 10) : 100;
		var bRead = Math.round(aRead / 2);
		var bRest = Math.round(aRest / 2);
		var htmlProgressBar = "";
		htmlProgressBar += repeatString("<td class=\"upload_read\">&nbsp;</td>", bRead);
		htmlProgressBar += repeatString("<td class=\"upload_rest\">&nbsp;</td>", bRest);
		htmlProgressBar = "<table><tr>" + htmlProgressBar + "</tr></table>";

		document.getElementById("progress-bar").innerHTML = htmlProgressBar;

		if ("true" == jsonObject.isFinished)
		{
			clearTimeout(uploadTimer);
			document.getElementById("progress").style.display = "none";
			infoMessage = ("" == jsonObject.messageError)
			            ? "El archivo ha sido transmitido correctamente."
						: "Se ha producido un error.\n" + jsonObject.messageError;
			infoMessage = (document.forms[0].elements["error"].value == "") ? infoMessage : document.forms[0].elements["error"].value;
			alert(infoMessage);
			document.location.href = buildURL(redirectURL);
		}
		else
		{
			if (jsonObject.transferRate == "?") 
				nillsCount++;
			else
				nillsCount = 0;
			if (nillsCount > 5)
				clearTimeout(uploadTimer);
		}
	}
}

function buildURL(relativeURL)
{
	var output = relativeURL;

	if (isInternetExplorer())
	{
		var position = relativeURL.lastIndexOf("/");
		output = relativeURL.substring(position + 1);
	}

	return output;
}