/* Demo Note:  This demo uses a FileProgress class that handles the UI for displaying the file name and percent complete.
The FileProgress class is not part of SWFUpload.
*/

//SWFObject Plugin

function swfUploadPreLoad() {
	var self = this;
	var loading = function () {
		//document.getElementById("divSWFUploadUI").style.display = "none";
		document.getElementById("divLoadingContent").style.display = "";

		var longLoad = function () {
			document.getElementById("divLoadingContent").style.display = "none";
			document.getElementById("divLongLoading").style.display = "";
		};
		this.customSettings.loadingTimeout = setTimeout(function () {
				longLoad.call(self)
			},
			15 * 1000
		);
	};
	
	this.customSettings.loadingTimeout = setTimeout(function () {
			loading.call(self);
		},
		1*1000
	);
}
function swfUploadLoaded() {
	var self = this;
	clearTimeout(this.customSettings.loadingTimeout);
	//document.getElementById("divSWFUploadUI").style.visibility = "visible";
	//document.getElementById("divSWFUploadUI").style.display = "block";
	document.getElementById("divLoadingContent").style.display = "none";
	document.getElementById("divLongLoading").style.display = "none";
	document.getElementById("divAlternateContent").style.display = "none";
	
	//document.getElementById("btnBrowse").onclick = function () { self.selectFiles(); };
	document.getElementById("btnCancel").onclick = function () { self.cancelQueue(); };
}
   
function swfUploadLoadFailed() {
	clearTimeout(this.customSettings.loadingTimeout);
	//document.getElementById("divSWFUploadUI").style.display = "none";
	document.getElementById("divLoadingContent").style.display = "none";
	document.getElementById("divLongLoading").style.display = "none";
	document.getElementById("divAlternateContent").style.display = "";
}

/* **********************
   Event Handlers
   These are my custom event handlers to make my
   web application behave the way I went when SWFUpload
   completes different tasks.  These aren't part of the SWFUpload
   package.  They are part of my application.  Without these none
   of the actions SWFUpload makes will show up in my application.
   ********************** */
function fileQueued(file) {
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setStatus("En attente...");
		progress.toggleCancel(true, this);

	} catch (ex) {
		this.debug(ex);
	}

}

function fileQueueError(file, errorCode, message) {
	
	try {
		var imageName = "error.gif";
		if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
			alert("Trop de fichiers dans la liste d'attente.\n" + (message === 0 ? "Limite d'envois atteinte." : "Vous devriez selectionner " + (message > 1 ? "jusqu'à " + message + " fichiers." : "un fichier.")));
			return;
		}

		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setError();
		progress.toggleCancel(false);

		switch (errorCode) {
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
			imageName = "toobig.gif";
			progress.setStatus("Fichier trop gros");
			this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
			imageName = "zerobyte.gif";
			progress.setStatus("Impossible de t&eacute;l&eacute;charger, aucune donn&eacute;es.");
			this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
			progress.setStatus("Type de fichier non valide");
			this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		default:
			if (file !== null) {
				progress.setStatus("Erreur non identifi&eacute;e");
			}
			this.debug("Code erreur: " + errorCode + ", nom fichier: " + file.name + ", taille du fichier: " + file.size + ", Message: " + message);
			break;
		}
		addImage("images/" + imageName);
	} catch (ex) {
        this.debug(ex);
    }
}



function fileDialogComplete(numFilesSelected, numFilesQueued) {
	try {
		if (numFilesSelected > 0) {
			document.getElementById(this.customSettings.cancelButtonId).disabled = false;
		}
		
		/* I want auto start the upload and I can do that here */
		this.startUpload();
	} catch (ex)  {
        this.debug(ex);
	}
}

function uploadStart(file) {
	try {
		/* I don't want to do any file validation or anything,  I'll just update the UI and
		return true to indicate that the upload should start.
		It's important to update the UI here because in Linux no uploadProgress events are called. The best
		we can do is say we are uploading.
		 */
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setStatus("En t&eacute;l&eacute;chargement");
		progress.toggleCancel(true, this);
	}
	catch (ex) {}
	
	return true;
}

function uploadProgress(file, bytesLoaded, bytesTotal) {    //byteTotal en troiscme paramctre
	try {
		//var percent = Math.ceil((bytesLoaded / file.size) * 100);
		var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);

		var progress = new FileProgress(file,  this.customSettings.progressTarget);
		progress.setProgress(percent);
		if (percent === 100) {
			progress.setStatus("Cr&eacute;ation de la vignette");
			progress.toggleCancel(false, this);
		} else {
			progress.setStatus("En t&eacute;l&eacute;chargement "+percent+"%");
			progress.toggleCancel(true, this);
		}
	} catch (ex) {
		this.debug(ex);
	}
}
/*
function uploadSuccess(file, serverData) {
	try {
		addImage("thumbnail.php?id=" + serverData);

		var progress = new FileProgress(file,  this.customSettings.progressTarget);
		progress.setComplete();
		progress.setStatus("Vignette cr&eacute;&eacute;e.");
		progress.toggleCancel(false);


	} catch (ex) {
		
		this.debug(ex);

	}
}
*/
function uploadSuccess(file, serverData) {
	try {
		var progress = new FileProgress(file,  this.customSettings.progressTarget);
		if(serverData.substring(0,7)==="FILEID:") {
			addImage("thumbnail.php?id=" + serverData.substring(7));
			progress.setComplete();
			progress.setStatus("Vignette cr&eacute;&eacute;e.");
			progress.toggleCancel(false);
		} else {
			addImage("images/error.gif");
			progress.setStatus("Erreur.");
			progress.toggleCancel(false);
			alert(serverData);
		}
	} catch (ex) {
		this.debug(ex);
	}
}

function uploadError(file, errorCode, message) {
		var imageName =  "error.gif";
		//var adresse="http://www.atome77.com/phototheque/foncfonction.php";
		//var monAjax = new Ajax(adresse,{method: 'post',postBody: 'maReponse='+errorCode}).request();
		
	try {
		var progress = new FileProgress(file, this.customSettings.progressTarget);
		progress.setError();
		progress.toggleCancel(false);
		
		switch (errorCode) {
		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
			progress.setStatus("Erreur d'envoi: " + message);
			this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
		
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
			progress.setStatus("Envoi &eacute;chou&eacute;.");
	
			this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.IO_ERROR:
			progress.setStatus("Erreur serveur(IO)");
			this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
			
			break;
		case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
			progress.setStatus("Erreur de s&eacute;curit&eacute;");
		
			this.debug("Code d'erreur: erreur de s&eacute;curit&eacute;, nom fichier: " + file.name + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
			imageName = "uploadlimit.gif";
			progress.setStatus("Limite d'envoi d&eacute;pass&eacute;e.");
		
			this.debug("Error Code: Limite d'envoi d&eacute;pass&eacute;e, nom fichier: " + file.name + ", taille fichier: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
			progress.setStatus("Failed Validation.  Upload skipped.");
		
			this.debug("Code erreur: validation du fichier &eacute;chou&eacute;e, nom fichier: " + file.name + ", taille fichier: " + file.size + ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
	
			try {
				if (this.getStats().files_queued === 0) {
				document.getElementById(this.customSettings.cancelButtonId).disabled = true;
			}
				progress = new FileProgress(file,  this.customSettings.progressTarget);
				progress.setCancelled();
				progress.setStatus("Annul&eacute;");
				progress.toggleCancel(false);
			}
			catch (ex1) {
				this.debug(ex1);
			}
			// If there aren't any files left (they were all cancelled) disable the cancel button


			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
					try {
				progress = new FileProgress(file,  this.customSettings.progressTarget);
				progress.setCancelled();
				progress.setStatus("Stopp&eacute;");
				progress.toggleCancel(true);
			}
			catch (ex2) {
				this.debug(ex2);
			}
			
			break;
		default:
			progress.setStatus("Unhandled Error: " + errorCode);
			this.debug("Code erreur: " + errorCode + ", Nom fichier: " + file.name + ", Taille du fichier: " + file.size + ", Message: " + message);
			break;
		}
				addImage("images/" + imageName);
	} catch (ex) {
        this.debug(ex);
    }
}


function uploadComplete(file) {
	//window.alert("taille: "+file.temp);
	try {
		/*  I want the next upload to continue automatically so I'll call startUpload here */
		if (this.getStats().files_queued > 0) {
			this.startUpload();
		} else {
			document.getElementById(this.customSettings.cancelButtonId).disabled = true;
			var progress = new FileProgress(file,  this.customSettings.progressTarget);
			progress.setComplete();
			progress.setStatus("Images re&ccedil;ues.");
			progress.toggleCancel(false);
			
			if(this.getStats().successful_uploads>0){
			var temp=setTimeout(function(){
			top.location.href="../../../phototheque_formulaire.php?cpt=0";
			clearTimeout(temp);
										 },3000);
			document.getElementById("divStatus").innerHTML+="<br /><strong>Vous allez &ecirc;tre redirig&eacute; dans 3 secondes sur la page du formulaire, cliquez <a href=\"/phototheque_formulaire.php?cpt=0\">ici</a> pour ne pas attendre.</strong>";
			}
			//alert(swfu.customSettings.queue_cancelled_flag);
		}
	} catch (ex) {
		this.debug(ex);
	}
}


// This event comes from the Queue Plugin
function queueComplete(numFilesUploaded) {
	var status = document.getElementById("divStatus");
	status.innerHTML = numFilesUploaded + " fichier" + (numFilesUploaded === 1 ? "" : "s") + " t&eacute;l&eacute;charg&eacute;"+(numFilesUploaded ===1 ? "" : "s")+".";
	this.numFileUploaded=numFilesUploaded;
	document.getElementById("divStatus").innerHTML+="<br /><strong>Vous allez &ecirc;tre redirig&eacute; dans 3 secondes sur la page du formulaire, cliquez <a href=\"/phototheque_formulaire.php?cpt=0\">ici</a> pour ne pas attendre.</strong>";
}


//IMAGES

function addImage(src) {

		
		//var test=createElement('span');
		//body.appendChild(test);

		
	var newImg = document.createElement("img");
	newImg.style.margin = "5px";
//	document.getElementById("Thumbnails").innerHTML=document.getElementById("Thumbnail").nodeText+;

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

	newImg.onload = function () {
		fadeIn(newImg, 0);
	};
	newImg.src = src;
}

function fadeIn(element, opacity) {
	var reduceOpacityBy = 5;
	var rate = 30;	// 15 fps


	if (opacity < 100) {
		opacity += reduceOpacityBy;
		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);
	}
}
