// Event Handler Function
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent("on"+evType, fn);
		return r;
	} else {
		return false;
	}
}

//
// AJAX Functions
//

// LiveSearch functions
function liveSearchStart(e) {
	// if the 'escape' key has been pressed while typing in the search box
	if (e.keyCode == 27) {
		resetEverything();
		return false;
	}

	// set vars to simplify code
	var searchInput = $('photoLivesearch');

	// clear the keyPressDelay if it exists from before
	if (keyPressDelay) {
		window.clearTimeout(keyPressDelay);
	}

	if (searchInput.value != '') {
	// wait 0.8 seconds after a keypress before running the search
		keyPressDelay = window.setTimeout('liveSearchDoSearch()', 800);
	}
	return true;
}

function liveSearchDoSearch() {
	// set vars to simplify code
	var searchInput = $('photoLivesearch');
	//var searchingImageDiv = $('photoSearchLoading');

	//searchingImageDiv.style.display = 'inline';
	processTimerCount = 0;
	processTimer();

	if (liveSearchLast != searchInput.value) {
		liveSearchLast = searchInput.value;
		searchParams = liveSearchLast;
		v = 'username='+username+'&album_id='+album_id+'&numThumbs='+numThumbs+'&searchParams='+liveSearchLast;
		loadThumbs(v);
	}
}

// Album Search functions
function albumSearchStart(e) {
	// set vars to simplify code
	var searchInput = $('albumTitle');

	// clear the keyPressDelay if it exists from before
	if (keyPressDelay) {
		window.clearTimeout(keyPressDelay);
	}
	
	var testInput = searchInput.value.replace(/^\s+|\s+$/g, '');
	if (testInput != '') {
	// wait 0.8 seconds after a keypress before running the search
		keyPressDelay = window.setTimeout('albumSearchDoSearch()', 800);
	}
	return true;
}

function albumSearchDoSearch() {
	// set vars to simplify code
	var searchInput = $('albumTitle');
	
	processTimerCount = 0;
	processTimer();

	if (albumSearchLast != searchInput.value) {
		albumSearchLast = searchInput.value;
		albumSearch = albumSearchLast;
		v = 'username='+username+'&searchParams='+albumSearchLast;
		searchAlbums(v);
	}
}


function processTimer() {
	// if process running normally
	if (processTimerCount != -1) {
		// loop if process time still under 3 seconds
		if (processTimerCount < 20) {
			processTimerCount++;
			setTimeout('processTimer()', 1000);
		} else {
			// timed out, process taken 3 seconds already
			// set vars to simplify code
			var searchInput = $('photoLivesearch');
			
			searchInput.value = searchInputMsgError;

			processTimerCount = 0;

			//liveSearchReq.abort();

			return false;
		}
	} else {
		processTimerCount = -1;
	}
	return true;
}

function resetEverything() {
	// set vars to simplify code
	var searchInput = $('photoLivesearch');
	//var searchingImageDiv = $('photoSearchLoading');

	searchInput.value = searchInputMsg;
	//searchingImageDiv.style.display = 'none';
	searchParams = '';
	v = 'username='+username+'&album_id='+album_id+'&numThumbs='+numThumbs+'&searchParams='+searchParams;
	loadThumbs(v);
	//liveSearchReq.abort();
}

function resetOnBlur() {
	// set vars to simplify code
	var searchInput = $('photoLivesearch');
	//var searchingImageDiv = $('photoSearchLoading');

	if (searchInput.value == '') {
		searchInput.value = searchInputMsg;
		searchParams = '';
		//searchingImageDiv.style.display = 'none';

		//liveSearchReq.abort();
	}
}

function clearSearchText() {
	// set vars to simplify code
	var searchInput = $('photoLivesearch');

	if (searchInput.value == searchInputMsg) {
		searchInput.value = '';
		searchParams = '';
	}
}

// Load Folders
function loadFolders(sendVars) {
	var url = '/inc/Functions/dragdrop.inc.php';
	var pars = sendVars;
	pars += '&currentFolder='+currentFolder+'&call=loadFolders';
	var myAjax = new Ajax.Updater(
					{success: 'folder_holder'}, 
					url, 
					{
						method: 'get', 
						parameters: pars,
						onFailure: reportError,
						onComplete: _updateFolder
					});
}

// Load Thumbnails
function loadThumbs(sendVars) {
	var url = '/inc/Functions/dragdrop.inc.php';
	var pars = sendVars;
	pars += '&call=loadThumbs';
	var myAjax = new Ajax.Updater(
					{success: 'photos'}, 
					url, 
					{
						method: 'get', 
						parameters: pars,
						onFailure: reportError,
						onComplete: _update
					});
}

// Search Albums
function searchAlbums(sendVars) {
	var url = '/inc/Functions/dragdrop.inc.php';
	var pars = sendVars;
	pars += '&call=searchAlbums';
	var myAjax = new Ajax.Updater(
					{success: 'albumMessage'}, 
					url, 
					{
						method: 'get', 
						parameters: pars,
						onFailure: reportError,
						onComplete: _updateSearch
					});
}

// Add Folder
function addFolder(sendVars) {
	var url = '/inc/Functions/dragdrop.inc.php';
	var pars = sendVars;
	pars += '&call=addFolder';
	var myAjax = new Ajax.Updater(
					{success: 'albumMessage'}, 
					url, 
					{
						method: 'get', 
						parameters: pars,
						onFailure: reportError,
						onComplete: _updateAlbums
					});
}

// Make Drop
function makeDrop(element,dropon,event) {
	/*alert('photo_id: ' + encodeURIComponent(element.id) + '\n' +
			'photo_alt: ' + element.alt + '\n' +
			'photo_title: ' + element.title + '\n' +
			'folder_id: ' + dropon.id);*/
	var eNode = $(element.parentNode.parentNode);
	var pNode = $(element.parentNode.parentNode.parentNode);
	$(element.parentNode).className = 'photo_loading';
	element.style.visibility = 'hidden';
	var url = '/inc/Functions/dragdrop.inc.php';
	var pars = 'username='+username+'&photo_id='+element.id+'&album_id='+dropon.id;
	pars += '&call=makeDrop';
	var myAjax = new Ajax.Request(
					 url,
					 {
					 	method: 'get',
					 	parameters: pars,
					 	onFailure: function() {
					 		new Effect.Highlight(dropon, {startcolor:'#FF0000', endcolor:'#000000'});
					 		$(element.parentNode).className = 'photo';
							element.style.visibility = 'visible';
					 	},
					 	onComplete: function (resp) {
					 		if (resp.responseText) {
					 			loadThumbs('username='+username+'&album_id='+currentFolder+'&searchParams='+searchParams+'&pageNum='+photoPage+'&numThumbs='+numThumbs);
					 			loadFolders('username='+username+'&numFolders='+numFolders+'&pageNum='+folderPage+'&currentFolder='+currentFolder);
					 			new Effect.Highlight(dropon, {startcolor:'#00FF00', endcolor:'#000000'});
					 			pNode.removeChild(eNode);
					 		} else {
					 			new Effect.Highlight(dropon, {startcolor:'#FF0000', endcolor:'#000000'});
					 			$(element.parentNode).className = 'photo';
								element.style.visibility = 'visible';
					 		}
					 	}
					 });
}

// deletePhoto
function deletePhoto(element,dropon,event) {
	var eNode = $(element.parentNode.parentNode);
	var pNode = $(element.parentNode.parentNode.parentNode);
	$(element.parentNode).className = 'photo_loading';
	element.style.visibility = 'hidden';
	var url = '/inc/Functions/dragdrop.inc.php';
	var pars = 'username='+username+'&photo_id='+element.id+'&photo_title='+element.title;
	pars += '&call=deletePhoto';
	var myAjax = new Ajax.Request(
					 url,
					 {
					 	method: 'get',
					 	parameters: pars,
					 	onFailure: function() {
					 		new Effect.Highlight(dropon, {startcolor:'#FF0000', endcolor:'#000000'});
					 		$(element.parentNode).className = 'photo';
							element.style.visibility = 'visible';
					 	},
					 	onComplete: function (resp) {
					 		if (resp.responseText) {
					 			loadThumbs('username='+username+'&album_id='+currentFolder+'&searchParams='+searchParams+'&pageNum='+photoPage+'&numThumbs='+numThumbs);
					 			loadFolders('username='+username+'&numFolders='+numFolders+'&pageNum='+folderPage+'&currentFolder='+currentFolder);
					 			new Effect.Highlight(dropon, {startcolor:'#00FF00', endcolor:'#000000'});
					 			pNode.removeChild(eNode);
					 		} else {
					 			new Effect.Highlight(dropon, {startcolor:'#FF0000', endcolor:'#000000'});
					 			$(element.parentNode).className = 'photo';
								element.style.visibility = 'visible';
					 		}
					 	}
					 });
}

// deleteFolder
function deleteFolder(element,dropon,event) {
	var eNode = $(element);
	var pNode = $(element.parentNode);
	element.style.visibility = 'hidden';
	var url = '/inc/Functions/dragdrop.inc.php';
	var pars = 'username='+username+'&album_id='+element.id;
	pars += '&call=deleteFolder';
	var myAjax = new Ajax.Request(
					 url,
					 {
					 	method: 'get',
					 	parameters: pars,
					 	onFailure: function() {
					 		new Effect.Highlight(dropon, {startcolor:'#FF0000', endcolor:'#000000'});
							element.style.visibility = 'visible';
					 	},
					 	onComplete: function (resp) {
					 		if (resp.responseText) {
					 			loadThumbs('username='+username+'&album_id='+currentFolder+'&searchParams='+searchParams+'&pageNum='+photoPage+'&numThumbs='+numThumbs);
					 			loadFolders('username='+username+'&numFolders='+numFolders+'&pageNum='+folderPage+'&currentFolder='+currentFolder);
					 			new Effect.Highlight(dropon, {startcolor:'#00FF00', endcolor:'#000000'});
					 			pNode.removeChild(eNode);
					 		} else {
					 			new Effect.Highlight(dropon, {startcolor:'#FF0000', endcolor:'#000000'});
								element.style.visibility = 'visible';
					 		}
					 	}
					 });
}

function _updateAlbums() {
	loadFolders('username='+username+'&currentFolder='+currentFolder+'&pageNum='+folderPage+'&numFolders='+numFolders);
	var msg = $('albumMessage');
	//new Effect.Highlight(msg);
}

function _updateFolder() {
	// Apply Behaviour Rules
	Behaviour.apply();
}

function _updateSearch() {
	// halt the process timer
	processTimerCount = -1;
	processTimer(0);
	// Apply Behaviour Rules
	Behaviour.apply();
	var msg = $('albumMessage');
	//new Effect.Highlight(msg);
}

function _update() {
	// Make sure Thumb search is available
	$('photo_search').style.visibility = 'visible';
	$('photos').style.display = 'block';
	$('trash').style.display = 'block';
	$('dd_help').style.display = 'none';
	$('dd_help_hide').style.display = 'block';
	// halt the process timer
	processTimerCount = -1;
	processTimer(0);
	// Apply Behaviour Rules
	Behaviour.apply();
}

function _toggleInstructions(show) {
	if ( show )
	{
		$('photo_search').style.visibility = 'hidden';
		$('photos').style.display = 'none';
		$('trash').style.display = 'none';
		$('dd_help').style.display = 'block';
	}
	else
	{
		$('photo_search').style.visibility = 'visible';
		$('photos').style.display = 'block';
		$('trash').style.display = 'block';
		$('dd_help').style.display = 'none';
	}
}

function reportError(request) {
	// hide loading
	alert('Sorry. There was an error.  '+request);
}