function fileQueueError(file, errorCode, message) {

	try {

		var imageName = "error.gif";

		var errorName = "";

		if (errorCode === SWFUpload.errorCode_QUEUE_LIMIT_EXCEEDED) {

			errorName = "You have attempted to queue too many files.";

		}



		if (errorName !== "") {

			alert(errorName);
			return;

		}



		switch (errorCode) {

		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:

			imageName = "zerobyte.gif";

			break;

		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:

			imageName = "http://ludatha.com/images/toobig.png";

			break;

		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:

		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:

		default:

			alert(message);

			break;

		}



		addImage(imageName);



	} catch (ex) {

		this.debug(ex);

	}



}



function fileDialogComplete(numFilesSelected, numFilesQueued) {

	try {

		if (numFilesQueued > 0) {

			this.startUpload();

		}

	} catch (ex) {

		this.debug(ex);

	}

}



function uploadProgress(file, bytesLoaded) {



	try {

		var percent = Math.ceil((bytesLoaded / file.size) * 100);



		var progress = new FileProgress(file,  this.customSettings.upload_target);

		progress.setProgress(percent);

		if (percent === 100) {

			progress.setStatus("Creating thumbnail...");

			progress.toggleCancel(false, this);

		} else {

			progress.setStatus("Uploading...");

			progress.toggleCancel(true, this);

		}

	} catch (ex) {

		this.debug(ex);

	}

}



function uploadSuccess(file, serverData) {

	try {

		var progress = new FileProgress(file,  this.customSettings.upload_target);



		if (serverData.substring(0, 7) === "FILEID:") {

			addImage("http://ludatha.com/processors/thumbnail/" + serverData.substring(7));



			progress.setStatus("Thumbnail Created.");

			progress.toggleCancel(false);

		} else {

			addImage("images/error.gif");

			progress.setStatus("Error.");

			progress.toggleCancel(false);

			alert(serverData);



		}





	} catch (ex) {

		this.debug(ex);

	}

}



function uploadComplete(file) {

	try {

		/*  I want the next upload to continue automatically so I'll call startUpload here */

		if (this.getStats().files_queued > 0) {

			this.startUpload();

		} else {

			var progress = new FileProgress(file,  this.customSettings.upload_target);

			progress.setComplete();

			progress.setStatus("All images received.");

			progress.toggleCancel(false);

		}

	} catch (ex) {

		this.debug(ex);

	}

}



function uploadError(file, errorCode, message) {

	var imageName =  "error.gif";

	var progress;

	try {

		switch (errorCode) {

		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:

			try {

				progress = new FileProgress(file,  this.customSettings.upload_target);

				progress.setCancelled();

				progress.setStatus("Cancelled");

				progress.toggleCancel(false);

			}

			catch (ex1) {

				this.debug(ex1);

			}

			break;

		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:

			try {

				progress = new FileProgress(file,  this.customSettings.upload_target);

				progress.setCancelled();

				progress.setStatus("Stopped");

				progress.toggleCancel(true);

			}

			catch (ex2) {

				this.debug(ex2);

			}

		case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:

			imageName = "uploadlimit.gif";

			break;

		default:

			alert(message);
			alert(message);
			break;

		}



		addImage("images/" + imageName);



	} catch (ex3) {

		this.debug(ex3);

	}



}



function addImage(src) {

	var newImg = document.createElement("img");

	newImg.style.margin = "5px";



	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 addImage(src) {

	

	var div = document.createElement("div");

	div.style.opacity = 0;



	

	var table = document.createElement("table");

	table.style.float = "left";

	

	var tr_1 = document.createElement("tr");

		

	var td_1 = document.createElement("td");

			

	var a_1 = document.createElement("a");

	a_1.href = src;

	a_1.rel = "lightbox[group]";

	

	var img_1 = document.createElement("img");

	img_1.src = src;

	img_1.width = 97;

	img_1.height = 97;

	

	a_1.appendChild(img_1);	

	td_1.appendChild(a_1);	

	tr_1.appendChild(td_1);

	

	var tr_2 = document.createElement("tr");

	var th_2 = document.createElement("th");

	

	tr_2.appendChild(th_2);	

	

	table.appendChild(tr_1);

	table.appendChild(tr_2);

	div.appendChild(table);

	document.getElementById("thumbnails").appendChild(div);

	if (div.filters) {

		try {

			div.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.

			div.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + 0 + ')';

		}

	} else {

		div.style.opacity = 0;

	}



	div.onload = function () {

		fadeIn(div, 0);

	};

}

*/

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

	}

}







/* ******************************************

 *	FileProgress Object

 *	Control object for displaying file info

 * ****************************************** */



function FileProgress(file, targetID) {

	this.fileProgressID = "divFileProgress";



	this.fileProgressWrapper = document.getElementById(this.fileProgressID);

	if (!this.fileProgressWrapper) {

		this.fileProgressWrapper = document.createElement("div");

		this.fileProgressWrapper.className = "progressWrapper";

		this.fileProgressWrapper.id = this.fileProgressID;



		this.fileProgressElement = document.createElement("div");

		this.fileProgressElement.className = "progressContainer";



		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(file.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);



		this.fileProgressWrapper.appendChild(this.fileProgressElement);



		document.getElementById(targetID).appendChild(this.fileProgressWrapper);

		fadeIn(this.fileProgressWrapper, 0);



	} else {

		this.fileProgressElement = this.fileProgressWrapper.firstChild;

		this.fileProgressElement.childNodes[1].firstChild.nodeValue = file.name;

	}



	this.height = this.fileProgressWrapper.offsetHeight;



}

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, swfuploadInstance) {

	this.fileProgressElement.childNodes[0].style.visibility = show ? "visible" : "hidden";

	if (swfuploadInstance) {

		var fileID = this.fileProgressID;

		this.fileProgressElement.childNodes[0].onclick = function () {

			swfuploadInstance.cancelUpload(fileID);

			return false;

		};

	}

};

