﻿var visibleGalleryId = 0;
var originalGalleries = new Object();

var galleriesPageSize   = 10;
var galleriesPageNumber = 1;
var galleriesNumResults = 0;

if (!gotEntryPoint)
{
	gotEntryPoint = true;

	$(document).ready(function() {
		initMain(true);

		if ($('#personalGalleryContainer').length > 0)
		{
			if (document.location.search.length > 0)
			{
				var parts = document.location.search.substr(1, document.location.search.length - 1).split('&');

				for (var i = 0; i < parts.length; i++)
				{
					var keyValue = parts[i].split('=');

					if (keyValue.length != 2)
						continue;

					if (keyValue[0] == 'id')
					{
						getSingleGallery(decodeURIComponent(keyValue[1]));
						return;
					}
				}
			}

			$('#personalGalleryContainer').html('No personal gallery was specified.  Please <a href="javascript:history.go(-1);">go back</a> and try again, or alternatively <a href="/onlinegallery/publicgalleries.html">browse all publicly available galleries</a>.');
			return;
		}

		var cookie = $.cookie('blLogin');

		if (!cookie)
		{
			$('.emailGalleryLink').addClass('invisible');
		}

//		$('.emailGalleryLink').click(emailGalleryLinkClick);

		$('#emailGalleryCancelButton').click(hideEmailGalleryNotes);

		$('#emailGallerySubmitButton').click(function(event) {
			var cookie = $.cookie('blLogin');

			if (!cookie)
				return;

			emailGallery($('#emailGalleryNotes textarea').val(), $('#emailGalleryToEmail input').val());
		});

		renderMyGalleriesLinks();

		updateMyGalleriesLinks(1);
	});
}

function getGalleryList(filter, target)
{
	$(target).text('Retrieving list of personal galleries, please wait...');

	$.ajax({
		cache:		false,

		type:		'POST',
		url:		galleryHandlerUrl,

		data: {
			Action:				'GetList',
			IDs:				(typeof(filter.IDs)					!= 'undefined'? filter.IDs: ''),
			ItemIDs:			(typeof(filter.ItemIDs)				!= 'undefined'? filter.ItemIDs: ''),
			ExcludingItemIDs:	(typeof(filter.ExcludingItemIDs)	!= 'undefined'? filter.ExcludingItemIDs: ''),
			UserIDs:			(typeof(filter.UserIDs)				!= 'undefined'? filter.UserIDs: ''),
			DetailLevel:		(typeof(filter.DetailLevel)			!= 'undefined'? filter.DetailLevel: ''),
			IsPublic:			(typeof(filter.IsPublic)			!= 'undefined'? filter.IsPublic: ''),

			SortBy:				(typeof(filter.SortBy)				!= 'undefined'? filter.SortBy: ''),
			SortDirection:		(typeof(filter.SortDirection)		!= 'undefined'? filter.SortDirection: ''),

			PageNumber:			(typeof(filter.PageNumber)			!= 'undefined'? filter.PageNumber: ''),
			PageSize:			(typeof(filter.PageSize)			!= 'undefined'? filter.PageSize: ''),

			Tag:				(typeof(filter.Tag)					!= 'undefined'? filter.Tag: '')
		},

		dataType:	'text',

		success:	function(data, textStatus)
		{
			$.xslt({
				xml:			data,
				xslUrl:			xslBaseUrl + 'MyGalleries.xsl',
				xslCache:		isLive,		/* Don't cache if debugging */
				dataTypeXML:	true,
				target:			target
			});
		},

		error:		function(XMLHttpRequest, textStatus, error)
		{
			$(target).text('The list of personal galleries could not be retrieved at this time, please try again later.');
		}
	});
}

function getGalleryListButtonClick(event)
{
	if (event && typeof(event.preventDefault) != 'undefined')
		event.preventDefault();

	renderMyGalleriesLinks();
	updateMyGalleriesLinks();
}

function showGallery(galleryId)
{
	hideEmailGalleryNotes();

	if (visibleGalleryId > 0)
		$('#gallery' + visibleGalleryId).hide();

	$('#gallery' + galleryId).show();

	visibleGalleryId = galleryId;
	if (window.location.href.lastIndexOf('publicgalleries.html') > 0)
	{
		window.location="showgallery.html?id=" + galleryId;
	}
}

function addToOrRemoveFromGallery(galleryId, add)
{
	var tag = $('#addOrRemoveGalleryLink' + galleryId + ' input');

	if (typeof(add) == 'undefined')
		add = !(tag[0].checked);

	if (add)
	{
		tag[0].checked = true;

		var itemDescription = $("meta[name='description']").attr('content');
		if (!itemDescription)
			itemDescription = document.title;

		var itemImage = $("meta[name='object-image']").attr('content');
		if (!itemImage)
			itemImage = defaultItemImage;

		$.ajax({
			cache:		false,

			type:		'POST',
			url:		galleryHandlerUrl,

			data: {
				Action:				'QuickAddItem',
				ID:					galleryId,
				ItemID:				$('#itemID').val(),
				ItemName:			document.title,
				ItemDescription:	itemDescription,
				ItemUrl:			document.location.href,
				ItemImageUrl:		itemImage,

				Tag:				''
			},

			dataType:	'text',

			success:	function(data, textStatus)
			{
				onAjaxWithoutXsltCallback(data);
			},

			error:		function(XMLHttpRequest, textStatus, error)
			{
				tag[0].checked = false;
			}
		});
	}
	else
	{
		tag[0].checked = false;

		$.ajax({
			cache:		false,

			type:		'POST',
			url:		galleryHandlerUrl,

			data: {
				Action:				'QuickRemoveItem',
				ID:					galleryId,
				ItemID:				$('#itemID').val(),

				Tag:				''
			},

			dataType:	'text',

			success:	function(data, textStatus)
			{
				onAjaxWithoutXsltCallback(data);
			},

			error:		function(XMLHttpRequest, textStatus, error)
			{
				tag[0].checked = true;
				onAjaxWithoutXsltCallback(data);
			}
		});
	}
}

function updateMyGalleriesLinks(pageNumber)
{
	var target = $('#myGalleriesLinksAddList');

	if (typeof(pageNumber) == 'undefined' || pageNumber == null)
		pageNumber = 0;

	galleriesPageNumber = pageNumber;

	if (target && target.length > 0)
	{
		getGalleryList({UserIDs: myUserId, DetailLevel: 'Everything', Tag: '<searchtype>QuickList</searchtype><itemid>' + $('#itemID').val() + '</itemid>'}, '#myGalleriesLinksAddList');
	}
	else
	{
		target = $('#galleryList');
		if (!target || !target.length)
		{
			target = $('#publicGalleryList');
			if (!target || !target.length)
				return;

			getGalleryList({IsPublic: true, Tag: '<searchtype>Public</searchtype>', DetailLevel: 'EverythingIncludingUserLookup', PageNumber: pageNumber, PageSize: (pageNumber > 0? galleriesPageSize: 0), SortBy: $('#publicGallerySortField select option:selected').val(), SortDirection: $('#publicGallerySortField select option:selected').attr('order')}, '#publicGalleryList');
		}
		else
			getGalleryList({UserIDs: myUserId, Tag: '<searchtype>Private</searchtype>', DetailLevel: 'EverythingIncludingUserLookup'}, '#galleryList');
	}
}

function renderMyGalleriesLinks()
{
	var cookie = $.cookie('blLogin');

	$('#myGalleriesLinks').removeClass('invisible');

	if (cookie)
	{
		$('#galleryList').removeClass('invisible');
		$('#seeMyGalleriesLink').removeClass('invisible');
		$('#myGalleriesLinksLabel').removeClass('invisible');
		$('#myGalleriesLinksLogin').addClass('invisible');
	}
	else
	{
		$('#galleryList').addClass('invisible');
		$('#seeMyGalleriesLink').addClass('invisible');
		$('#myGalleriesLinksLabel').addClass('invisible');
		$('#myGalleriesLinksLogin').removeClass('invisible');
	}
}

function editGalleryLinkClick(galleryId)
{
	var galleryNodeName = '#gallery' + galleryId;
	var galleryNameNode = $(galleryNodeName + ' .galleryName');
	var galleryName = galleryNameNode.text();

	originalGalleries[galleryId] = $(galleryNodeName).html();

	galleryNameNode.html('<input type="text" />');
	galleryNameNode.children(0).val(galleryName);

	var galleryDescriptionNode = $(galleryNodeName + ' .galleryDescription');
	var galleryDescription = galleryDescriptionNode.text();

	galleryDescriptionNode.html('<textarea rows="10" cols="40" />');
	galleryDescriptionNode.children(0).val(galleryDescription);

	$(galleryNodeName + ' .galleryItemName').each(function(index) {
		var node = $(this);

		var itemName = node.text();

		node.html('<input type="text" />').children(0).val(itemName);
	});

	$(galleryNodeName + ' .galleryItemDescription').each(function(index) {
		var node = $(this);

		var itemDescription = node.text();

		node.html('<textarea rows="10" cols="40" />').children(0).val(itemDescription);
	});

	$(galleryNodeName + ' .editGalleryLinks').hide();
	$(galleryNodeName + ' .saveGalleryLinks').show();
	$(galleryNodeName + ' .editGalleryItemLinks').show();
	$(galleryNodeName + ' .galleryIsPublicLabel').hide();
	$(galleryNodeName + ' .galleryIsPublic').attr('disabled', null);
	$(galleryNodeName + ' .galleryIsPublicCheckContainer').show();
}

function deleteGalleryLinkClick(galleryId)
{
	if (!confirm('Are you sure you wish to permanently delete gallery ' + $('#gallery' + galleryId + ' .galleryName').text() + " ?\nClick OK to continue or Cancel to keep the gallery."))
		return;

	var galleryNodeName = '#gallery' + galleryId;

	$(galleryNodeName + ' .editGalleryItemLinks').hide();
	$(galleryNodeName + ' .saveGalleryStatus').text('Deleting gallery, please wait...').show();

	$.ajax({
		cache:		false,

		type:		'POST',
		url:		galleryHandlerUrl,

		data: {
			Action:			'Remove',
			IDs:			galleryId,

			Tag:			''
		},

		dataType:	'text',

		success:	function(data, textStatus)
		{
			if (onAjaxWithoutXsltCallback(data))
			{
				if (!isSuccessResult(data))
				{
					$(galleryNodeName + ' .saveGalleryStatus').text('Your gallery could not be deleted at this time, please try again later...');

					setTimeout(function() {
						$(galleryNodeName + ' .saveGalleryStatus').hide();
						$(galleryNodeName + ' .editGalleryLinks').show();
					}, 10000);
				}
				else
				{
					$(galleryNodeName + 'Link').remove();
					$(galleryNodeName).remove();
				}
			}
		},

		error:		function(XMLHttpRequest, textStatus, error)
		{
			$(galleryNodeName + ' .saveGalleryStatus').text('Your gallery could not be deleted at this time, please try again later...');

			setTimeout(function() {
				$(galleryNodeName + ' .saveGalleryStatus').hide();
				$(galleryNodeName + ' .editGalleryLinks').show();
			}, 10000);
		}
	});
}

function cancelGalleryLinkClick(galleryId)
{
	$('#gallery' + galleryId).html(originalGalleries[galleryId]);
	originalGalleries[galleryId] = undefined;
}

function saveGalleryLinkClick(galleryId)
{
	var galleryNodeName = '#gallery' + galleryId;

	$(galleryNodeName + ' .saveGalleryLinks').hide();
	$(galleryNodeName + ' .editGalleryItemLinks').hide();
	$(galleryNodeName + ' .saveGalleryStatus').text('Saving gallery, please wait...').show();

	var galleryNameNode = $(galleryNodeName + ' .galleryName');

	galleryNameNode.text(galleryNameNode.children(0).remove().val());

	var galleryDescriptionNode = $(galleryNodeName + ' .galleryDescription');

	galleryDescriptionNode.text(galleryDescriptionNode.children(0).remove().val());

	$(galleryNodeName + ' .galleryItemName').each(function(index) {
		var node = $(this);

		node.text(node.children(0).remove().val());
	});

	$(galleryNodeName + ' .galleryItemDescription').each(function(index) {
		var node = $(this);

		node.text(node.children(0).remove().val());
	});

	var isPublic = $(galleryNodeName + ' .galleryIsPublic').attr('disabled', 'true').attr('checked');
	$(galleryNodeName + ' .galleryIsPublicCheckContainer').hide();
	$(galleryNodeName + ' .galleryIsPublicLabel').text('This gallery is ' + (!isPublic? 'not ': '') + 'public.').show();

	var gallery = buildGalleryObject(galleryId);

	gallery.Action = 'Save';
	gallery.Tag    = '';

	$.ajax({
		cache:		false,

		type:		'POST',
		url:		galleryHandlerUrl,

		data:		gallery,

		dataType:	'text',

		success:	function(data, textStatus)
		{
			if (onAjaxWithoutXsltCallback(data))
			{
				if (!isSuccessResult(data))
				{
					$(galleryNodeName + ' .saveGalleryStatus').text('Your gallery could not be saved at this time, please try again later...');

					setTimeout(function() {
						$(galleryNodeName + ' .saveGalleryStatus').hide();
						$(galleryNodeName + ' .editGalleryLinks').show();
					}, 10000);
				}
				else
				{
					$('#gallery' + galleryId + 'Link a').text(galleryNameNode.text());
					$(galleryNodeName + ' .saveGalleryStatus').hide();
					$(galleryNodeName + ' .editGalleryLinks').show();
				}
			}
		},

		error:		function(XMLHttpRequest, textStatus, error)
		{
			$(galleryNodeName + ' .saveGalleryStatus').text('Your gallery could not be saved at this time, please try again later...');

			setTimeout(function() {
				$(galleryNodeName + ' .saveGalleryStatus').hide();
				$(galleryNodeName + ' .editGalleryLinks').show();
			}, 10000);
		}
	});
}

function deleteGalleryItemLinkClick(galleryId, itemRefId, itemId)
{
//	if (!confirm('Are you sure you wish to remove gallery item ' + $('#galleryItem' + itemRefId + ' .galleryItemName').text() + " from this gallery ?\nThe item will not be removed permanently until the gallery is saved.\nClick OK to continue or Cancel to keep the item."))
	if (!confirm('Do you want to remove this item from your gallery?'))
		return;

	$('#galleryItem' + itemRefId).remove();

	return;

	var galleryItemNodeName = '#galleryItem' + itemRefId;

	$(galleryItemNodeName + ' .editGalleryItemLinks').hide();
	$(galleryItemNodeName + ' .editGalleryItemStatus').text('Removing item, please wait...').show();

	$.ajax({
		cache:		false,

		type:		'POST',
		url:		galleryHandlerUrl,

		data: {
			Action:			'QuickRemoveItem',
			ID:				galleryId,
			ItemID:			itemId,

			Tag:			''
		},

		dataType:	'text',

		success:	function(data, textStatus)
		{
			if (onAjaxWithoutXsltCallback(data))
			{
				if (!isSuccessResult(data))
				{
					$(galleryNodeName + ' .editGalleryItemStatus').text('Your item could not be removed at this time, please try again later...');

					setTimeout(function() {
						$(galleryNodeName + ' .editGalleryItemStatus').hide();
						$(galleryNodeName + ' .editGalleryItemLinks').show();
					}, 10000);
				}
				else
					$('#galleryItem' + itemRefId).remove();
			}
		},

		error:		function(XMLHttpRequest, textStatus, error)
		{
			$(galleryItemNodeName + ' .editGalleryItemStatus').text('Item could not be removed at this time, please try again later...');

			setTimeout(function() {
				$(galleryItemNodeName + ' .editGalleryItemStatus').hide();
				$(galleryItemNodeName + ' .editGalleryItemLinks').show();
			}, 10000);
		}
	});
}

function buildGalleryObject(galleryId)
{
	var galleryNodeName = '#gallery' + galleryId;
	var galleryNameNode = $(galleryNodeName + ' .galleryName');
	var galleryDescriptionNode = $(galleryNodeName + ' .galleryDescription');
	var galleryIsPublicNode = $(galleryNodeName + ' .galleryIsPublic');

	var gallery = new Object();

	gallery['ID']          = galleryId;
	gallery['Name']        = galleryNameNode.text();
	gallery['Description'] = galleryDescriptionNode.text();
	gallery['IsPublic']    = galleryIsPublicNode.attr('checked');

	$(galleryNodeName + ' .galleryItem').each(function(index) {
		gallery['Item[' + index + '].ID']          = $('.galleryItemRefId', this).val();
		gallery['Item[' + index + '].Name']        = $('.galleryItemName', this).text();
		gallery['Item[' + index + '].Description'] = $('.galleryItemDescription', this).text();
		gallery['Item[' + index + '].ImageUrl']    = $('img', this).attr('src');
	});

	return(gallery);
}

function addNewGalleryLinkClick()
{
//	if (!confirm("Adding a new gallery will cause the list to be refreshed and you will lose any unsaved changes to galleries you are editing.\nClick OK to continue or Cancel to go back and save changes first."))
	if (!confirm("Do you want to create a new gallery?"))
		return;

	$('#addNewGalleryLink').hide();

	var newRegex = /^New Gallery ([0-9]+)$/;
	var newNumber = 1;

	do {
		var newNumberTaken = false;
		$('.galleryName:contains("New Gallery ' + newNumber + '")').each(function(index) {
			if ($(this).text() == 'New Gallery ' + newNumber)
			{
				newNumberTaken = true;
				newNumber++;

				return(false);
			}
		});
	} while (newNumberTaken);

	var newGalleryName = 'New Gallery ' + newNumber;

	$.ajax({
		cache:		false,

		type:		'POST',
		url:		galleryHandlerUrl,

		data: {
			Action:			'Save',
			ID:				-1,
			Name:			newGalleryName,
			Description:	'Add a description of your gallery.',
			IsPublic:		false,

			Tag:			''
		},

		dataType:	'text',

		success:	function(data, textStatus)
		{
			if (onAjaxWithoutXsltCallback(data))
			{
				updateMyGalleriesLinks();
			}
		},

		error:		function(XMLHttpRequest, textStatus, error)
		{
			alert('You could not add a new gallery at this time, please try again later...');
			$('#addNewGalleryLink').show();
		}
	});
}

function setGalleryPageNumber(event, pageNumber)
{
	if (event && typeof(event.preventDefault) != 'undefined')
		event.preventDefault();

	updateMyGalleriesLinks(pageNumber);
}

function hideEmailGalleryNotes(event)
{
	if (event && typeof(event.preventDefault) != 'undefined')
		event.preventDefault();

	$('#emailGalleryNotes').hide();
};

function emailGalleryLinkClick(galleryId, galleryName, event)
{
	event = jQuery.event.fix(event || window.event);

	var emailDiv = $('#emailGalleryNotes');

	emailDiv.css('top',  event.pageY + 'px');
	emailDiv.css('left', event.pageX + 'px');

	$('#emailGalleryId',   emailDiv).val(galleryId);
	$('#emailGalleryName', emailDiv).val(galleryName);

	emailDiv.show();
}

function emailGallery(comments, emailTo)
{
	$('#emailGalleryButtons').addClass('invisible');
	$('#emailGalleryStatus').text('Emailing gallery to your friend, please wait...');

	$.ajax({
		cache:		false,

		type:		'POST',
		url:		galleryHandlerUrl,

		data: {
			Action:		'EmailToFriend',
			IDs:		$('#emailGalleryId').val(),
			Comments:	comments,
			EmailTo:	emailTo,

			Tag:		''
		},

		dataType:	'text',

		success:	function(data, textStatus)
		{
			$.xslt({
				xml:			data,
				xslUrl:			xslBaseUrl + 'MyGalleries.xsl',
				xslCache:		isLive,		/* Don't cache if debugging */
				dataTypeXML:	true,
				target:			'#emailGalleryStatus'
			});

			$('#emailGalleryButtons').removeClass('invisible');
			$('#emailGalleryStatus').addClass('invisible');
			$('#emailGalleryNotes').hide();

			$('#emailGalleryNotes textarea').val('');
			$('#emailGalleryToEmail input').val('');
		},

		error:		function(XMLHttpRequest, textStatus, error)
		{
			$('#emailGalleryStatus').text('The gallery could not be emailed at this time, please try again later...');

			setTimeout(function() {
				$('#emailGalleryStatus').addClass('invisible');
				$('#emailGalleryButtons').removeClass('invisible');
			}, 10000);
		}
	});
}

function updateRecentGalleries()
{
	getGalleryList({IsPublic: true, DetailLevel: 'EverythingIncludingUserLookup', SortBy: 'CreatedDate', SortDirection: 'Descending', PageNumber: 1, PageSize: 3, Tag: '<searchtype>Recent</searchtype>'}, '#recentPersonalGalleriesList');
}

function getSingleGallery(id)
{
	$('#personalGalleryContainer').text('Retrieving personal gallery, please wait...');

	$.ajax({
		cache:		false,

		type:		'POST',
		url:		galleryHandlerUrl,

		data: {
			Action:			'GetList',
			IDs:			(isNaN(parseInt(id))? '-1': parseInt(id)),
			IsPublic:		true,
			DetailLevel:	'EverythingIncludingUserLookup',

			Tag:			'<searchtype>Single</searchtype>'
		},

		dataType:	'text',

		success:	function(data, textStatus)
		{
			$.xslt({
				xml:			data,
				xslUrl:			xslBaseUrl + 'MyGalleries.xsl',
				xslCache:		isLive,		/* Don't cache if debugging */
				dataTypeXML:	true,
				target:			'#personalGalleryContainer'
			});
		},

		error:		function(XMLHttpRequest, textStatus, error)
		{
			$('#personalGalleryContainer').text('The specified personal gallery could not be retrieved at this time, please try again later.');
		}
	});
}

