Mahoney = {
	AJAXClient: {
		resultsManager: {
			setViewStyle: function(viewMode) {
				setClass('searchResults', viewMode);
			
				new Ajax.Request(
					'Components/ajaxInterface.cfc', 
					{	method: 'post', 
						parameters:'method=setResultView&viewMode=' + viewMode
					}
				);
			},
			
			setResultsPerPage: function(numResults) {
				new Ajax.Request(
					'Components/ajaxInterface.cfc', 
					{	method: 'post', 
						parameters:'method=setResultPerPage&results=' + numResults,
						onComplete: function(r) {window.location = window.location;}
					}
				);
			}
		} // End resultsManager
	}, // End AJAXClient
	
	AJAXadmin: {
		privledgesChecker: {
			privledgeLevel: "none",
			privledges: ["none", "viewer", "manager", "admin", "super"],
			isAllowed: function(pLevel) {
				var allowed = (this.__getPrivValue(this.privledgeLevel) >= this.__getPrivValue(pLevel));
				if(!allowed) Mahoney.AJAXadmin.openConfirmDialog('privledges');
				return allowed;
			},
			__getPrivValue: function(pLevel) {
				for(var level = 0; level < this.privledges.length; level++ ) { 
					if(pLevel.toLowerCase() == this.privledges[level]) return level;
				}
				return 0;
			}
		},
		userManager: {
			removeUser: function(username) {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("admin")) return;
				new Ajax.Request(
					'Components/userHandler.cfc', 
					{	method: 'post', 
						parameters:'method=deleteUser&username=' + username,
						onComplete: function(r) {window.location = window.location;}
					}
				);
			},
			addUser: function(username, privledge){
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("admin")) return;
				new Ajax.Request(
					'Components/userHandler.cfc', 
					{	method: 'post', 
						parameters:'method=addUser&username=' + username + '&privledge=' + privledge,
						onComplete: function(r) {window.location = window.location;}
					}
				);
			},
			updateUser: function(username, fName, lName, privledge){
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("admin")) return;
				new Ajax.Request(
					'Components/userHandler.cfc', 
					{	method: 'post', 
						parameters:'method=updateUser&username=' + username + '&fname=' + fName + '&lname=' + lName + '&privledge=' + privledge,
						onComplete: function(r) {window.location = window.location;}
					}
				);
			}
		}, // End userManager
		
		bookManager: {
			searchBooks: function(searchString) {
				var showHidden = $('showHidden').checked ? "true" : "false";
				new Ajax.Request(
					'Components/updateHandler.cfc', 
					{	method: 'post', 
						parameters:'method=getAJAXBookCollection&keywords=' + searchString + "&showHidden=" + showHidden,
						onComplete: function(r) {$('leftPanel').innerHTML = r.responseText;}
					}
				);
			},
			populateBookRecord: function(bookId) {
				new Ajax.Request(
					'Components/updateHandler.cfc', 
					{	method: 'post', 
						parameters:'method=getAJAXBookRecord&bookid=' + bookId,
						evalScripts: true,
						onComplete: function(r) {
							Mahoney.AJAXadmin.imageManager.imageManagement = false;
							$('rightPanel').innerHTML = r.responseText; 
							$('searchString').value = $('search').value;
							implementImageHover();
						}
					}
				);
			},
			addBook: function() {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
				new Ajax.Request(
					'Components/updateHandler.cfc', 
					{	method: 'post', 
						parameters:'method=getAJAXBookAdd',
						onComplete: function(r) {
							Mahoney.AJAXadmin.imageManager.imageManagement = true;
							$('rightPanel').innerHTML = r.responseText;
							implementImageHover();
						}
					}
				);
			},
			deleteBook: function() {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
				new Ajax.Request(
					'Components/updateHandler.cfc', 
					{	method: 'post', 
						parameters:'method=deleteBook&bookId=' + $('nlBookId').value + '&searchString=' + $('searchString').value,
						onComplete: function(r) {
							Mahoney.AJAXadmin.imageManager.imageManagement = true;
							$('rightPanel').innerHTML = r.responseText;
							if($('search').value != "") Mahoney.AJAXadmin.bookManager.searchBooks($('search').value);
							Mahoney.AJAXadmin.closeConfirmDialog('deleteBook');
						}
					}
				);				
			}
		}, // END bookManager
		
		categoryManager: {
			init: function() {
				this.getCategoryListing();
			},
			getCategoryListing: function() {
				new Ajax.Updater(
					'categoryListing', 
					'Components/categoryHandler.cfc', 
					{
						method: 'post', 
						parameters: 'method=AJAX_getCategories'
					}
				);
			},
			deleteCategory: function(nlLibraryID) {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
				new Ajax.Request(
					'Components/categoryHandler.cfc', 
					{	method: 'post', 
						parameters:'method=deleteCategory&nlLibraryID=' + nlLibraryID,
						onComplete: function(r) {
							Mahoney.AJAXadmin.categoryManager.getCategoryListing();
							$('output').innerHTML = r.responseText;
						}
					}
				);
			},
			newAfter:	function(nlLibraryID) {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
				new Ajax.Request(
					'Components/categoryHandler.cfc', 
					{	method: 'post', 
						parameters:'method=newCategory&LibraryID=' + nlLibraryID,
						onComplete: function(r) {
							Mahoney.AJAXadmin.categoryManager.getCategoryListing();
							$('output').innerHTML = r.responseText;
						}
					}
				);
			},
			saveCategory: function(nlLibraryID) {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
				var nlOrderID = $F('nlOrderID_'+nlLibraryID);
				var tLibraryName = $F('tLibraryName_'+nlLibraryID);
				new Ajax.Request(
					'Components/categoryHandler.cfc', 
					{	method: 'post', 
						parameters:'method=saveCategory&nlLibraryID=' + nlLibraryID + '&nlOrderID=' + nlOrderID + '&tLibraryName=' + tLibraryName,
						onComplete: function(r) {
							$('output').innerHTML = r.responseText;
						}
					}
				);
			},
			saveCategories: function() {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
				new Ajax.Request(
					'Components/categoryHandler.cfc', 
					{	method: 'post', 
						parameters:'method=saveCategories',
						onComplete: function(r) {
							Mahoney.AJAXadmin.categoryManager.getCategoryListing();
						}
					}
				);
			}
		}, // END categoryManager
		
		imageManager: {
			imageManagement: true,
			analyzer: {
				status: "inactive",
				init: function() {
					if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
					$('imageAnalyze').style.display = "block";
					Mahoney.AJAXadmin.imageManager.analyzer.status = "active";
					Mahoney.AJAXadmin.imageManager.analyzer.getBigImages();
				},
				cancel: function() {
					// last request will still come, but it won't be handled
					Mahoney.AJAXadmin.imageManager.analyzer.__cleanUp();
				},
				__cleanUp: function() {
					Mahoney.AJAXadmin.imageManager.analyzer.status = "inactive";
					$('Analyze_step1').className = "";
					$('Analyze_step2').className = "";
					$('Analyze_step3').className = "";
					$('imageAnalyze').style.display = "none";
				},
				getBigImages: function() {
					new Ajax.Request(
						'Components/imageHandler.cfc', 
						{	method: 'post', 
							parameters:'method=compileBigImageFolder',
							onComplete: function(r) {
								if(Mahoney.AJAXadmin.imageManager.analyzer.status == "active") {
									$('Analyze_step1').className = "active";
									Mahoney.AJAXadmin.imageManager.analyzer.getThumbnailImages();
								}
							}
						}
					);
				},
				getThumbnailImages: function() {
					new Ajax.Request(
						'Components/imageHandler.cfc', 
						{	method: 'post', 
							parameters:'method=compileSmallImageFolder',
							onComplete: function(r) {
								if(Mahoney.AJAXadmin.imageManager.analyzer.status == "active") {
									$('Analyze_step2').className = "active";
									Mahoney.AJAXadmin.imageManager.analyzer.getNonIndexedImages();
								}
							}
						}
					);
				},
				getNonIndexedImages: function() {
					new Ajax.Request(
						'Components/imageHandler.cfc', 
						{	method: 'post', 
							parameters:'method=compileNonIndexedImages',
							onComplete: function(r) {
								if(Mahoney.AJAXadmin.imageManager.analyzer.status == "active") {
									$('Analyze_step3').className = "active";
									Mahoney.AJAXadmin.imageManager.analyzer.getMissingImages();
								}
							}
						}
					);
				},
				getMissingImages: function() {
					new Ajax.Request(
						'Components/imageHandler.cfc', 
						{	method: 'post', 
							parameters:'method=compileMissingImages',
							onComplete: function(r) {
								if(Mahoney.AJAXadmin.imageManager.analyzer.status == "active") {
									Mahoney.AJAXadmin.imageManager.displayNonIndexedImages();
									Mahoney.AJAXadmin.imageManager.analyzer.__cleanUp();
								}
							}
						}
					);
				}
			}, // END imageManager.Analyzer Object
			displayNonIndexedImages: function() {
				new Ajax.Request(
					'Components/imageHandler.cfc', 
					{	method: 'post', 
						parameters:'method=AJAX_getNonIndexImages',
						onComplete: function(r) {
							$('leftPanel').innerHTML = r.responseText;
							implementImageHover();
						}
					}
				);
			},
			displayMissingImages: function() {
				new Ajax.Request(
					'Components/imageHandler.cfc', 
					{	method: 'post', 
						parameters:'method=AJAX_getMissingImages',
						onComplete: function(r) {
							$('leftPanel').innerHTML = r.responseText;
							implementImageHover();
						}
					}
				);
			},
			searchImages: function(searchString) {
				new Ajax.Request(
					'Components/imageHandler.cfc', 
					{	method: 'post', 
						parameters:'method=AJAX_getImageCollection&keywords=' + searchString,
						onComplete: function(r) {
							$('leftPanel').innerHTML = r.responseText;
							implementImageHover();
						}
					}
				);
			},
			showImageDetails: function(imageId) {
				new Ajax.Request(
					'Components/imageHandler.cfc', 
					{	method: 'post', 
						parameters:'method=AJAX_getImageManager&imageId=' + imageId,
						onComplete: function(r) {
							Mahoney.AJAXadmin.imageManager.imageManagement = true;
							$('rightPanel').innerHTML = r.responseText;
							implementImageHover();
							$('searchstring').value = $F('search');
						}
					}
				);
			},
			deleteImage: function() {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
				new Ajax.Request(
					'Components/imageHandler.cfc', 
					{	method: 'post', 
						parameters:'method=deleteImage&imageId=' + $F('nlImageID'),
						onComplete: function(r) {
							Mahoney.AJAXadmin.imageManager.imageManagement = true;
							Mahoney.AJAXadmin.closeConfirmDialog('deleteImage');
							Mahoney.AJAXadmin.imageManager.closeImageEditor();
							if($('Img'+$F('nlImageID'))) $('Img'+$F('nlImageID')).style.display = "none";
						}
					}
				);
			},
			associateImage: function(imageId, associated) {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
				if(associated) {
					Mahoney.AJAXadmin.openConfirmDialog('associateImage');
					return;
				}
				var bookId = ($('nlBookId') && $F('nlBookId') != null) ? $F('nlBookId') : 0;
				new Ajax.Request(
					'Components/imageHandler.cfc',
					{	method: 'post', 
						parameters:'method=associateImage&imageId=' + imageId + '&newBookId=' + bookId,
						onComplete: function(r) {
							Mahoney.AJAXadmin.bookManager.populateBookRecord(bookId);
						}
					}
				);
			},
			unassociateImage: function(imageId) {
				if(!Mahoney.AJAXadmin.privledgesChecker.isAllowed("manager")) return;
				new Ajax.Request(
					'Components/imageHandler.cfc',
					{	method: 'post',
						parameters:'method=associateImage&imageId=' + imageId + '&newBookId=0',
						onComplete: function(r) {
							Mahoney.AJAXadmin.imageManager.showImageDetails(imageId);
						}
					}
				);
			},
			setUploadedBy: function(userString) {
				$('tUploadedBy_text').innerHTML = userString;
				$('tUploadedBy').value = userString;
			},

			closeImageEditor: function() {
				$('rightPanel').innerHTML = "";
			}
		}, // END imageManager
		
		timeoutManager: {
			start: function () {
				Mahoney.AJAXadmin.openConfirmDialog('timeout');
				Mahoney.AJAXadmin.timeoutManager.count(60);
				setTimeout(function () {
					window.location=window.location;
				}, 60*1000);
			},
			
			count: function (timeLeft) {
				setTimeout(function () {
					$('timeoutCounter').innerHTML = timeLeft;
					if(timeLeft >= 1) Mahoney.AJAXadmin.timeoutManager.count(--timeLeft);
				}, 1000);
			},
			
			stop: function () {
				Mahoney.AJAXadmin.closeConfirmDialog('timeout');
			}
		},
		
		openConfirmDialog: function(dialogID) {
			$(dialogID).style.display = "block";
			$('coverDiv').style.display = "block";
		},
		closeConfirmDialog: function(dialogID) {
			$(dialogID).style.display = "none";
			$('coverDiv').style.display = "none";
		}
		
	} // End AJAXadmin
} // End Mahoney 