function validAlbum() {
	try {
		title = document.album_form.album_title.value;
		description = document.album_form.album_description.value;
		valuesOk = true;
		// if (upload_album.getStats().files_queued < 1) { // Hardcoded object
		// name
		// valuesOk = false;
		// }
		if (title == null || title == "") {
			valuesOk = false;
		}
		if (queue_items > 0) {
			valuesOk = false;
		}
		if (queue_complete == false)
		{
			valuesOk = false;
		}
		document.getElementById('AbtnSubmit').disabled = !valuesOk;
		return valuesOk;

	} catch (e) {
		alert(e);
	}
}

// Called by the submit button
var queue_items = 0;
queue_complete = false;
function submitAlbum() {
	if (queue_complete && (queue_items < 1)) {
		try {
			if (!validAlbum())
			{
				alert('Please recheck form values, and submit manually');
				return false;	
			}
			if (AformChecker != null) {
				clearInterval(AformChecker);
				AformChecker = null;
			}
			$('#album_form').submit();
		} catch (ex) {
			alert("Error submitting form: " + ex.message);
		}
	} else
		alert('Cannot submit form, uploads are not complete!');
	return false;
}

/*******************************************************************************
 * 
 * Ajax handling of thumbnails - modified from application demo
 */
var ajaxManager1 = $.manageAjax( {
	manageType : 'queue',
	maxReq : 5,
	blockSameRequest : true
});
function processThumbnail(filename,target_id) {
	queue_items++;
	var tid = $('#form_token_album_id').val();
	var PHPSESSID = $('#PHPSESSID').val();
	ajaxManager1.add( {
		success : function(html) {
			completeThumbnail(html,target_id);
			queue_items--;
			if (validAlbum()) {
				var btnSubmit = document.getElementById("AbtnSubmit");
				btnSubmit.disabled = false;
				var checked = $('#autosubmit').is(':checked');
				if (checked) {
					submitAlbum();
				}
			}
		},
		error: function(){
	        alert('Error processing file ' + filename);
	    },
		type : 'POST',
		url : '/upload/',
		data : 'upload_type=album&single=1&filename=' + filename + '&form_token_album_id=' + tid + '&PHPSESSID=' + PHPSESSID,
	});
}
function completeThumbnail(server_response,target_id){
	var parts = server_response.split("|",2);
	var content_id = parts[0];
	var img_src = parts[1];
	$('#' + target_id + ' .contentTextBox').html('<a href="javascript:captionThumbnail('+content_id+',\''+target_id+'\')"><img src="/images/gfx/action_add.png" alt="Add caption">Add caption</a>');
	$('#' + target_id + ' .contentTextBox').addClass('empty_text_box');
	$('#' + target_id + ' .contentTextBox').removeClass('contentTextBox');
	$('#' + target_id + ' .progressStatus').html(''); //Blank out text over image
	$('#' + target_id + ' .contentThumbImg img:first').attr("src",img_src);
}

function captionThumbnail(id,target_id) {
	var caption = prompt("Please enter a caption", "");
	if (caption != null && caption != "") {
		$('#' + target_id + ' .empty_text_box').html('<img src="/images/loading.gif" alt="loading" height="10"/> Saving..');
		var key = $('#form_token_album').val();
		var PHPSESSID = $('#PHPSESSID').val(); 
		
		 $.ajax({
			   type: "POST",
			   url: "/adminHandlers.php?a=contentEdit&Aview=true",
			   data: "id="+ id + "&caption="
					+ caption + "&key="+key,
				success: function(msg){
			 		$('#' + target_id + ' .empty_text_box').html(msg);
			 		//alert(msg);
		 		},
		 		error: function(msg){
		 			$('#' + target_id + ' .empty_text_box').html('<a href="javascript:captionThumbnail('+content_id+',\''+target_id+'\')"><img src="/images/gfx/action_add.png" alt="Add caption">Add caption</a>');
			     alert( "Adding caption failed: " + msg);
			   }
			 });
	}
}

function old_PROTOTYPE_addThumbnail_old(filename) {

	var url = '/upload/';
	var tid = $('#form_token_album_id').val();
	var PHPSESSID = $('#PHPSESSID').val();
	var pars = 'upload_type=album&single=1&filename=' + filename + '&form_token_album_id=' + tid + '&PHPSESSID=' + PHPSESSID;

	new Ajax.Request(url, {
		method : 'post',
		parameters : pars,
		onSuccess : function(transport) {
			var newImg = document.createElement("div");
			document.getElementById("album_thumbnails").appendChild(newImg);
			newImg.innerHTML = transport.responseText;
			queue_items--;
			if (queue_items == 0) {
				var btnSubmit = document.getElementById("AbtnSubmit");
				btnSubmit.disabled = false;
				if ($F('autosubmit') == "1") {
					submitAlbum();
				}
			}
			// alert(transport.responseText);
	},
	onFailiure : function(transport) {
		alert(transport.responseText);
	},
	asynchronous : true,
	evalScripts : true
	});
}

/*******************************************************************************
 * Event Handlers modified from overlay demo 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 AswfUploadPreLoad() {
	var self = this;
	var loading = function() {
		// document.getElementById("divSWFUploadUI").style.display = "none";
		document.getElementById("AdivLoadingContent").style.display = "";

		var longLoad = function() {
			document.getElementById("AdivLoadingContent").style.display = "none";
			document.getElementById("AdivLongLoading").style.display = "";
		};
		this.customSettings.loadingTimeout = setTimeout(function() {
			longLoad.call(self)
		}, 15 * 1000);
	};

	this.customSettings.loadingTimeout = setTimeout(function() {
		loading.call(self);
	}, 1 * 1000);
}

var AformChecker = null;
function AswfUploadLoaded() { // * modified
	var self = this;
	clearTimeout(this.customSettings.loadingTimeout);
	// document.getElementById("divSWFUploadUI").style.visibility = "visible";
	// document.getElementById("divSWFUploadUI").style.display = "block";
	document.getElementById("AdivLoadingContent").style.display = "none";
	document.getElementById("AdivLongLoading").style.display = "none";
	document.getElementById("AdivAlternateContent").style.display = "none";

	// document.getElementById("btnBrowse").onclick = function () {
	// self.selectFiles(); };
	document.getElementById("AbtnCancel").onclick = function() {
		self.cancelQueue();
	};

	var btnSubmit = document.getElementById("AbtnSubmit");
	btnSubmit.onclick = submitAlbum;
	btnSubmit.disabled = true;
	AformChecker = window.setInterval(validAlbum, 1000);
	validAlbum();
}

function AswfUploadLoadFailed() {
	clearTimeout(this.customSettings.loadingTimeout);
	// document.getElementById("divSWFUploadUI").style.display = "none";
	document.getElementById("AdivLoadingContent").style.display = "none";
	document.getElementById("AdivLongLoading").style.display = "none";
	document.getElementById("AdivAlternateContent").style.display = "";
}

function AfileQueued(file) {
	try {
		var progress = new FileProgress(file,
				this.customSettings.progressTarget);
		progress.setStatus("Pending...");
		//progress.toggleCancel(true, this);
		queue_complete = false;

	} catch (ex) {
		this.debug(ex);
	}

}

function AfileQueueError(file, errorCode, message) {
	try {
		if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
			alert("You have attempted to queue too many files.\n"
					+ (message === 0 ? "You have reached the upload limit."
							: "You may select "
									+ (message > 1 ? "up to " + message
											+ " files." : "one file.")));
			return;
		}

		var progress = new FileProgress(file,
				this.customSettings.progressTarget);
		//progress.setError();
		//progress.toggleCancel(false);

		switch (errorCode) {
		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
			progress.setStatus("File is too big.");
			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:
			progress.setStatus("Cannot upload Zero Byte files.");
			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("Invalid File Type.");
			this.debug("Error Code: Invalid File Type, File name: " + file.name
					+ ", File size: " + file.size + ", Message: " + message);
			break;
		default:
			if (file !== null) {
				progress.setStatus("Unhandled Error");
			}
			this.debug("Error Code: " + errorCode + ", File name: " + file.name
					+ ", File size: " + file.size + ", Message: " + message);
			break;
		}
	} catch (ex) {
		this.debug(ex);
	}
}

function AfileDialogComplete(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 AuploadStart(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("Uploading...");
		progress.toggleCancel(true, this);
		queue_items++;
	} catch (ex) {
	}

	var btnSubmit = document.getElementById("AbtnSubmit");
	btnSubmit.disabled = true;

	return true;
}

function AuploadProgress(file, bytesLoaded, bytesTotal) {
	try {
		var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);

		var progress = new FileProgress(file,
				this.customSettings.progressTarget);
		progress.setProgress(percent);
		progress.setStatus("Uploading...");
	} catch (ex) {
		this.debug(ex);
	}
}

function AuploadSuccess(file, serverData) { // * modified
	try {
		var progress = new FileProgress(file,
				this.customSettings.progressTarget);
		progress.setComplete();
		progress.setStatus("Upload complete. Please wait for server to process file..");
		// progress.toggleCancel(false);
		var target_id = file.id;
		$('#' + target_id + ' .progressbar').progressbar('destroy');
		processThumbnail(serverData,target_id);
	} catch (ex) {
		this.debug(ex);
	}
}

function AuploadError(file, errorCode, message) {
	try {
		var progress = new FileProgress(file,
				this.customSettings.progressTarget);
		progress.setError();
		progress.toggleCancel(false);

		switch (errorCode) {
		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
			progress.setStatus("Upload Error: " + message);
			this.debug("Error Code: HTTP Error, File name: " + file.name
					+ ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
			progress.setStatus("Upload Failed.");
			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("Server (IO) Error");
			this.debug("Error Code: IO Error, File name: " + file.name
					+ ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
			progress.setStatus("Security Error");
			this.debug("Error Code: Security Error, File name: " + file.name
					+ ", Message: " + message);
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
			progress.setStatus("Upload limit exceeded.");
			this.debug("Error Code: Upload Limit Exceeded, File name: "
					+ file.name + ", File size: " + file.size + ", Message: "
					+ message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
			progress.setStatus("Failed Validation.  Upload skipped.");
			this.debug("Error Code: File Validation Failed, File name: "
					+ file.name + ", File size: " + file.size + ", Message: "
					+ message);
			break;
		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
			// If there aren't any files left (they were all cancelled) disable
			// the cancel button
			if (this.getStats().files_queued === 0) {
				document.getElementById(this.customSettings.cancelButtonId).disabled = true;
			}
			progress.setStatus("Cancelled");
			progress.setCancelled();
			break;
		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
			progress.setStatus("Stopped");
			break;
		default:
			progress.setStatus("Unhandled Error: " + errorCode);
			this.debug("Error Code: " + errorCode + ", File name: " + file.name
					+ ", File size: " + file.size + ", Message: " + message);
			break;
		}
	} catch (ex) {
		this.debug(ex);
	}
}

function AuploadComplete(file) {
	if (this.getStats().files_queued === 0) {
		document.getElementById(this.customSettings.cancelButtonId).disabled = true;
	}
}

// This event comes from the Queue Plugin
function AqueueComplete(numFilesUploaded) {
	queue_complete = true;

	// var status = document.getElementById("divStatus");
	// status.innerHTML = numFilesUploaded + " file" + (numFilesUploaded === 1 ?
	// ""
	// : "s") + " uploaded.";
}

/*******************************************************************************
 * 
 * Copied from overlay demo 2.2.0.1
 * 
 * 
 * A simple class for displaying file information and progress Note: This is a
 * demonstration only and not part of SWFUpload. Note: Some have had problems
 * adapting this class in IE7. It may not be suitable for your application.
 */

// Constructor
// file is a SWFUpload file object
// targetID is the HTML element id attribute that the FileProgress HTML
// structure will be added to.
// Instantiating a new FileProgress object with an existing file will
// reuse/update the existing DOM elements
function FileProgress(file, targetID) {
	this.fileProgressID = file.id;

	this.fileProgressWrapper = document.getElementById(this.fileProgressID);
	if (!this.fileProgressWrapper) {
		this.fileProgressWrapper = document.createElement("div");
		this.fileProgressWrapper.className = "thumbBox";
		this.fileProgressWrapper.id = this.fileProgressID;
	
		this.fileProgressElement = document.createElement("div");
		this.fileProgressElement.className = "contentThumbSquare";
		this.fileProgressElement.height= '225px';
		
		/* Cancel button */
		var progressCancel = document.createElement("a");
		progressCancel.className = "progressCancel";
		progressCancel.href = "#";
		progressCancel.style.visibility = "hidden";
		progressCancel.appendChild(document.createTextNode(" "));

		/* Filename in caption box */
		var progressText = document.createElement("div");
		progressText.className = "contentTextBox";
		progressText.appendChild(document.createTextNode(file.name));

		/* Image area */
		var thumbImg = document.createElement("div");
		thumbImg.className = "contentThumbImg";
		thumbImg.style.position= 'relative';
		
		var oImg=document.createElement("img");
		oImg.setAttribute('src', '/images/timeflies.jpg');
		oImg.setAttribute('alt', 'Uploading..');
		
		var progressBar = document.createElement("div");
		progressBar.className = "progressbar";

		/* Status text */
		var progressStatus = document.createElement("div");
		progressStatus.className = "progressStatus";
		progressStatus.innerHTML = "&nbsp;";
		progressStatus.style.width= '125px';
		progressStatus.style.height= '125px';
		progressStatus.style.position= 'absolute';
		progressStatus.style.left= '15px';
		progressStatus.style.top= '25px';

		/* Add to document */
		thumbImg.appendChild(progressCancel);
		thumbImg.appendChild(progressStatus);
		thumbImg.appendChild(oImg);
		thumbImg.appendChild(progressBar);
		
		this.fileProgressElement.appendChild(thumbImg);
		this.fileProgressElement.appendChild(progressText);
		
		this.fileProgressWrapper.appendChild(this.fileProgressElement);

		document.getElementById(targetID).appendChild(this.fileProgressWrapper);
		
		/* Load progressbar */
		$('#' + this.fileProgressID + ' .progressbar').progressbar();
		$('#' + this.fileProgressID + ' .progressbar').height(10);

	} else {
		$('#' + this.fileProgressID + ' .contentTextBox').html(file.name);
	}
}
FileProgress.prototype.setProgress = function(percentage) {
	$('#' + this.fileProgressID + ' .progressbar').progressbar( 'value' , percentage );
	// this.fileProgressElement.className = "progressContainer green";
	// this.fileProgressElement.childNodes[3].className =
	// "progressBarInProgress";
	// this.fileProgressElement.childNodes[3].style.width = percentage + "%";
};
FileProgress.prototype.setComplete = function() {

	$('#' + this.fileProgressID + ' .contentTextBox').html('<img src="/images/loading.gif" alt="loading.." height="10"/> loading..');

	// this.appear();
	// this.fileProgressElement.className = "progressContainer blue";
	// this.fileProgressElement.childNodes[3].className = "progressBarComplete";
	// this.fileProgressElement.childNodes[3].style.width = "";

	// var oSelf = this;
	// setTimeout(function() {
	// oSelf.disappear();
	// }, 10000);
};
/*
 * FileProgress.prototype.setError = function() { this.appear();
 * this.fileProgressElement.className = "progressContainer red";
 * this.fileProgressElement.childNodes[3].className = "progressBarError";
 * this.fileProgressElement.childNodes[3].style.width = "";
 * 
 * var oSelf = this; setTimeout(function() { oSelf.disappear(); }, 5000); };
 * FileProgress.prototype.setCancelled = function() { this.appear();
 * this.fileProgressElement.className = "progressContainer";
 * this.fileProgressElement.childNodes[3].className = "progressBarError";
 * this.fileProgressElement.childNodes[3].style.width = "";
 * 
 * var oSelf = this; setTimeout(function() { oSelf.disappear(); }, 2000); };
 */
FileProgress.prototype.setStatus = function(status) {
	$('#' + this.fileProgressID + ' .progressStatus').html(status);
	// this.fileProgressElement.childNodes[2].innerHTML = status;
	
};
/*
 * // Show/Hide the cancel button 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; }; } };
 *  // Makes sure the FileProgress box is visible FileProgress.prototype.appear =
 * function() { if (this.fileProgressWrapper.filters) { try {
 * this.fileProgressWrapper.filters
 * .item("DXImageTransform.Microsoft.Alpha").opacity = 100; } catch (e) { // If
 * it is not set initially, the browser will throw an error. This // will set it
 * if it is not set yet. this.fileProgressWrapper.style.filter =
 * "progid:DXImageTransform.Microsoft.Alpha(opacity=100)"; } } else {
 * this.fileProgressWrapper.style.opacity = 1; }
 * 
 * this.fileProgressWrapper.style.height = ""; this.height =
 * this.fileProgressWrapper.offsetHeight; this.opacity = 100;
 * this.fileProgressWrapper.style.display = "";
 *  };
 *  // Fades out and clips away the FileProgress box.
 * FileProgress.prototype.disappear = function() {
 * 
 * var reduceOpacityBy = 15; var reduceHeightBy = 4; var rate = 30; // 15 fps
 * 
 * if (this.opacity > 0) { this.opacity -= reduceOpacityBy; if (this.opacity <
 * 0) { this.opacity = 0; }
 * 
 * if (this.fileProgressWrapper.filters) { try {
 * this.fileProgressWrapper.filters
 * .item("DXImageTransform.Microsoft.Alpha").opacity = this.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. this.fileProgressWrapper.style.filter =
 * "progid:DXImageTransform.Microsoft.Alpha(opacity=" + this.opacity + ")"; } }
 * else { this.fileProgressWrapper.style.opacity = this.opacity / 100; } }
 * 
 * if (this.height > 0) { this.height -= reduceHeightBy; if (this.height < 0) {
 * this.height = 0; }
 * 
 * this.fileProgressWrapper.style.height = this.height + "px"; }
 * 
 * if (this.height > 0 || this.opacity > 0) { var oSelf = this;
 * setTimeout(function() { oSelf.disappear(); }, rate); } else {
 * this.fileProgressWrapper.style.display = "none"; } };
 */