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()", 500); // 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";

			// Hacemos otra llamada Ajax para saber si ha funcionado
			checkUploadError();
		}
		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;
}

function checkUploadError()
{
	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/getUploadResult07.asp?" + param;
		if (uploadObjXML)
		{
			isUploadInProcess = true;
			uploadObjXML.open('GET', uploadURL, true);
			uploadObjXML.onreadystatechange = printResult;
			uploadObjXML.send(null);
		}
	}
}

function printResult()
{
	if (uploadObjXML.readyState == 4)
	{
		var text = uploadObjXML.responseText;
		var jsonObject = eval('(' + text + ')');
		infoMessage = ("" == jsonObject.messageError && jsonObject.isError != "true")
					? "El archivo ha sido transmitido correctamente."
					: "Se ha producido un error:\n"  + jsonObject.messageError + ".\n\nPor favor, comprime la imagen y vuelve a intentarlo\n";

		alert(infoMessage);
		destinationURL = (jsonObject.isError != "true") 
					   ? redirectURL 
					   : "fotos/enviaFoto11.asp?quien=" + document.forms[0].quien.value + 
						 "&subject=" + document.forms[0].subject.value + 
						 "&comentario=" + document.forms[0].comentario.value;
		document.location.href = buildURL(destinationURL);
	}
}
