function uploadStart(fileObj) {
	try {
		// You might include code here that prevents the form from being submitted while the upload is in
		// progress.  Then you'll want to put code in the Queue Complete handler to "unblock" the form
		var progress = new FileProgress(fileObj, this.getSetting("progress_target"));
		progress.SetStart();
		progress.SetStatus("Prêt pour le transfert...");
		progress.ToggleCancel(true, this);	// I pass in the SWFUpload instance here so the cancel button can call the [SWFUpload Object].cancelUpload method.

	} catch (e) { this.debugMessage(e);/*Console.Writeln("Upload started");*/ }

}

function uploadProgress(fileObj, bytesLoaded) {

	try {
		var percent = Math.ceil((bytesLoaded / fileObj.size) * 100)

		var progress = new FileProgress(fileObj, this.getSetting("progress_target"));
		progress.SetProgress(percent);
		progress.SetStatus("Transfert en cours...");
	} catch (e) { /*Console.Writeln("Upload Progress: " + fileObj.name + " " + percent);*/ }
}

function uploadComplete(fileObj) {
	try {


		var progress = new FileProgress(fileObj, this.getSetting("progress_target"));
		progress.SetComplete();
		progress.SetStatus("Terminé.");
		progress.ToggleCancel(false);

	} catch (e) { /*Console.Writeln("Upload Complete: " + fileObj.name);*/ }
}

function uploadQueueComplete(fileObj) {
	try {
        uploadDone(this.getSetting("form_id"), this.getSetting("multiple_id"));
	} catch (e) { /* Console.Writeln("Queue Done"); */ }
}

function uploadDialogCancel() {
/*	try {
		Console.Writeln("Pressed Cancel");
	} catch (e) { Console.Writeln("Error displaying file cancel information"); }
*/
}

function uploadCancel(fileObj) {
	try {
		var progress = new FileProgress(fileObj, this.getSetting("progress_target"));
		progress.SetCancelled();
		progress.SetStatus("Annulé");
		progress.ToggleCancel(false);
	}
	catch (ex) {
        this.debugMessage(ex);
    }
}

function uploadError(error_code, fileObj, message) {
	try {
		// Handle this error separately because we don't want to create a FileProgress element for it.
		switch(error_code) {
			case SWFUpload.ERROR_CODE_QUEUE_LIMIT_EXCEEDED:
				alert("Vous avez choisi trop de fichiers.\n" + (message == 0 ? "Vous avez atteint le nombre limite de fichiers." : "Vous pouvez sélectionner " + (message > 1 ? "jusqu'à " + message + " fichiers." : "UN fichier.")));
				return;
				break;
			case SWFUpload.ERROR_CODE_MISSING_UPLOAD_TARGET:
				alert("Il y a une erreur de configuration. \nVous ne pourrez effectuer un transfert tant qu'il n'aura pas été résolu. \nMerci de contactez notre équipe.");
				this.debugMessage("Error Code: No backend file, File name: " + fileObj.name + ", Message: " + message);
				return;
				break;
			case SWFUpload.ERROR_CODE_FILE_EXCEEDS_SIZE_LIMIT:
				alert("Le fichier choisi est trop lourd.");
				this.debugMessage("Error Code: File too big, File name: " + fileObj.name + ", File size: " + fileObj.size + ", Message: " + message);
				return;
				break;
			case SWFUpload.ERROR_CODE_ZERO_BYTE_FILE:
				alert("Le fichier que vous avez choisi est vide.  Veuillez choisir un autre fichier.");
				this.debugMessage("Error Code: Zero byte file, File name: " + fileObj.name + ", File size: " + fileObj.size + ", Message: " + message);
				return;
				break;
			case SWFUpload.ERROR_CODE_UPLOAD_LIMIT_EXCEEDED:
				alert("Vous ne pouvez transferer qu'un seul fichier.");
				this.debugMessage("Error Code: Upload Limit Exceeded, File name: " + fileObj.name + ", File size: " + fileObj.size + ", Message: " + message);
				return;
				break;
			default:
				alert("Une erreur a lieu lors du transfert");
				this.debugMessage("Error Code: " + error_code + ", File name: " + fileObj.name + ", File size: " + fileObj.size + ", Message: " + message);
				return;
				break;
		}

		var progress = new FileProgress(fileObj, this.getSetting("progress_target"));
		progress.SetError();
		progress.ToggleCancel(false);

		switch(error_code) {
			case SWFUpload.ERROR_CODE_HTTP_ERROR:
				progress.SetStatus("Echec de connexion HTTP");
				this.debugMessage("Error Code: HTTP Error, File name: " + fileObj.name + ", Message: " + message);
				break;
			case SWFUpload.ERROR_CODE_UPLOAD_FAILED:
				progress.SetStatus("Echec de transfert.");
				this.debugMessage("Error Code: Upload Failed, File name: " + fileObj.name + ", File size: " + fileObj.size + ", Message: " + message);
				break;
			case SWFUpload.ERROR_CODE_IO_ERROR:
				progress.SetStatus("Echec de connexion serveur");
				this.debugMessage("Error Code: IO Errorrrr, File name: " + fileObj.name + ", Message: " + message);
				break;
			case SWFUpload.ERROR_CODE_SECURITY_ERROR:
				progress.SetStatus("Erreur de sécurité");
				this.debugMessage("Error Code: Security Error, File name: " + fileObj.name + ", Message: " + message);
				break;
		}
	} catch (e) {}
}

function FileProgress(fileObj, target_id) {
		this.file_progress_id = fileObj.id;
		//var file_progress_id = (fileObj.name + fileObj.size).replace(/[^a-zA-Z0-9_]/g, "");
		this.fileProgressElement = document.getElementById(this.file_progress_id);
		if (!this.fileProgressElement) {
			this.fileProgressElement = document.createElement("div");
			this.fileProgressElement.className = "progressContainer";
			this.fileProgressElement.id = this.file_progress_id;

			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);

			document.getElementById(target_id).appendChild(this.fileProgressElement);

		}

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

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) {
		this.fileProgressElement.childNodes[0].style.visibility = show ? "visible" : "hidden";
		if (upload_obj) {
			var file_id = this.file_progress_id;
			this.fileProgressElement.childNodes[0].onclick = function() { upload_obj.cancelUpload(file_id); return false; };
		}
}
