/* Minification failed. Returning unminified contents.
(8225,46-47): run-time error JS1195: Expected expression: .
(8225,59-60): run-time error JS1003: Expected ':': )
(8226,6-7): run-time error JS1009: Expected '}': s
(8226,6-7): run-time error JS1006: Expected ')': s
(8229,5-7): run-time error JS1009: Expected '}': if
(8229,5-7): run-time error JS1006: Expected ')': if
(8240,66-67): run-time error JS1195: Expected expression: .
(8240,79-80): run-time error JS1003: Expected ':': )
(8241,8-9): run-time error JS1009: Expected '}': s
(8241,8-9): run-time error JS1006: Expected ')': s
(8243,6-7): run-time error JS1006: Expected ')': }
(8242,8): run-time error JS1004: Expected ';'
(8243,7-8): run-time error JS1195: Expected expression: )
(8272,65-66): run-time error JS1195: Expected expression: .
(8272,78-79): run-time error JS1003: Expected ':': )
(8273,9-10): run-time error JS1009: Expected '}': s
(8273,9-10): run-time error JS1006: Expected ')': s
(8277,6-10): run-time error JS1006: Expected ')': else
(8279,66-67): run-time error JS1195: Expected expression: .
(8279,79-80): run-time error JS1003: Expected ':': )
(8280,8-9): run-time error JS1009: Expected '}': s
(8280,8-9): run-time error JS1006: Expected ')': s
(8283,6): run-time error JS1004: Expected ';'
(8283,6-7): run-time error JS1195: Expected expression: )
(8287,65-66): run-time error JS1195: Expected expression: .
(8287,78-79): run-time error JS1003: Expected ':': )
(8288,7-8): run-time error JS1009: Expected '}': s
(8288,7-8): run-time error JS1006: Expected ')': s
(8292,5-6): run-time error JS1002: Syntax error: }
(8311,4-5): run-time error JS1002: Syntax error: }
(8311,5-6): run-time error JS1195: Expected expression: ,
(8312,20-21): run-time error JS1010: Expected identifier: (
(8316,3-4): run-time error JS1002: Syntax error: }
(8316,4-5): run-time error JS1195: Expected expression: )
(8317,2-3): run-time error JS1002: Syntax error: }
(8840,1-2): run-time error JS1002: Syntax error: }
 */
// Declare namespaces
var CivicWeb = CivicWeb || {};
CivicWeb.Documents = CivicWeb.Documents || {};

//Create classes
CivicWeb.Documents.DocumentOperation = function (args)
{
	var documentsListViewClientId = 'document-list-view';
	var documentCheckboxClientId = 'document-checkbox-';
	var documentDeleteConfirmWindowClientId = 'document-delete-confirm-window';
	var documentDeletePasswordExplanationClientId = 'document-delete-password-explanation';
	var documentRestorePasswordExplanationClientId = 'document-restore-password-explanation';
	var documentDeleteFollowingClientId = 'document-delete-following';
	var documentRestoreFollowingClientId = 'document-restore-following';
	var documentToDeleteListClientId = 'documents-to-delete';
	var documentRestoreLegendClientId = 'document-restore-legend';
	var confirmPasswordInputClientId = 'confirm-password-input';
	var confirmDeleteButtonClientId = 'confirm-delete-button';
	var cancelDeleteButtonClientId = 'cancel-delete-button';
	var deleteResultClientId = 'delete-result';

	var isRecycleBin = !!args.documentRecycleBinView;
	var documentParentIds = args.documentParentIds;

	var dataType = {
		folder: 'folder',
		document: 'document',
		favoritesFolder: 'favorites-folder'
	};

	var action = {
		'delete': 'delete',
		deleteParent: 'deleteParent',
		restore: 'restore',
		purge: 'purge'
	};

	var images = {
		groupImageUrl: 'cw-icon-users-lg',
		userImageUrl: 'cw-icon-user-lg',
		userPublicImageUrl: 'cw-icon-user-public-lg',
		expandImageUrl: 'cw-icon-node-open',
		collapseImageUrl: 'cw-icon-node-close',
		folderImageUrl: 'https://i.civicweb.net/Images/folder.png',
		favoritesFolderImageUrl: 'https://i.civicweb.net/Images/favorite_folder.png',
		documentImageUrl: 'https://i.civicweb.net/Images/icon-file-24.png'
	};

	var localization = args.localization;

	var selectedDocuments = null;
	var closeDeletePopupTimeoutHandle = null;

	//Event Handlers
	this.documentDeleteButtonClick = function ()
	{
		var ids = getDocumentIds();
		if (ids.length > 0)
		{
			confirmDocumentPopUp(ids, action.delete);
		}
		else if ($(document.getElementById('parent-folder')).attr('data-selected') === 'true')
		{
			confirmDocumentPopUp([$(document.getElementById('parent-folder')).attr('data-id')], action.deleteParent);
		}
	};

	this.restoreDocumentButtonClick = function (callback)
	{
		var ids = getDocumentIds();
		if (ids.length > 0)
		{
			confirmDocumentPopUp(ids, action.restore, null, callback);
		}
	};

	this.purgeDocumentButtonClick = function (callback)
	{
		var ids = getDocumentIds();
		if (ids.length > 0)
		{
			confirmDocumentPopUp(ids, action.purge, null, callback);
		}
	};

	this.getCurrentUrlQueryValues = function ()
	{
		var vars = [], hash;
		var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
		for (var i = 0; i < hashes.length; i++)
		{
			hash = hashes[i].split('=');
			vars.push(hash[0]);
			vars[hash[0]] = hash[1];
		}
		return vars;
	};

	//Methods
	var getDocumentIds = function ()
	{
		var documentIds = [];
		var isChechboxesExist = $('input:checkbox[id^=' + documentCheckboxClientId + ']').length > 0;
		if (isChechboxesExist)
		{
			var documents = [];
			$.each($('input:checkbox[id^=' + documentCheckboxClientId + ']:checked'), function ()
			{
				var checkBox = $(this);
				var id = checkBox.attr('data-id') || '0';
				var listItem = checkBox.closest('li').find('.document-list-view-documents[data-id="' + id + '"]');
				if (listItem.length > 0)
				{
					documents.push({ id: parseInt(id), parentId: parseInt(listItem.attr('data-parentid') || '0') });
				}
			});

			//Exclude children
			for (var index = 0; index < documents.length; index++)
			{
				var found = false;
				for (var index2 = 0; index2 < documents.length; index2++)
				{
					if (found = (documents[index].parentId === documents[index2].id))
					{
						break;
					}
				}

				if (!found)
				{
					documentIds.push(documents[index].id);
				}
			}
		}
		else
		{
			var list = $(document.getElementById(documentsListViewClientId));
			var grid = list.data('kendoTreeView');
			if (grid.select().length)
			{
				documentIds.push(grid.dataItem(grid.select()).id);
			}
		}

		return documentIds;
	};

	var getDocumentList = function (options)
	{
		var data;
		if (selectedDocuments)
		{
			data = selectedDocuments;

			selectedDocuments = null;

			options.success(data);
		}
		else
		{
			$.ajax({
				url: !isRecycleBin ? '/api/document/' + (options && options.data && options.data.Id > 0 ? options.data.Id.toString() : '0') + '/getchildlist?resultsPerPage=100' : '/api/documents/recyclebin/' + (options && options.data && options.data.Id > 0 ? options.data.Id.toString() : '0'),
				contentType: 'application/json', dataType: 'json', async: true, type: 'GET', timeout: 30000,
				success: function (data)
				{
					for (var index = 0; index < data.length; index++)
					{
						var document = data[index];
						document.ImageUrl = document.Folder ? images.folderImageUrl : images.documentImageUrl;
					}

					options.success(data);
				},
				error: function (data)
				{
					options.error(data);
				}
			});
		}
	};

	var documentAction = function (documentIds, userAction, callback)
	{
		var userPassword = $(document.getElementById(confirmPasswordInputClientId)).val();

		var deleteDocumentsData = {};
		deleteDocumentsData.documentIds = documentIds;
		deleteDocumentsData.userPassword = userPassword;
		$('#wrong-password-warning').remove();

		var inProgressBtnText = '';
		var notificationText = '';
		var actionUrl = '';
		var requestType = '';

		switch (userAction)
		{
			case action.restore:
				actionUrl = '/api/documents/restore';
				inProgressBtnText = localization.restoringText;
				notificationText = localization.retoringSucceededNotificationText;
				requestType = 'POST';
				break;

			case action.purge:
				actionUrl = '/api/documents/purge';
				inProgressBtnText = localization.deletingText;
				notificationText = localization.deletingSucceededNotificationText;
				requestType = 'DELETE';
				break;

			case action['delete']:
			case action.deleteParent:
				actionUrl = '/api/documents/delete';
				inProgressBtnText = localization.deletingText;
				notificationText = localization.deletingSucceededNotificationText;
				requestType = 'DELETE';
				break;
		}

		CivicWeb.Common.Button.update(confirmDeleteButtonClientId, inProgressBtnText, true, true);

		return $.ajax({
			url: actionUrl,
			contentType: 'application/json',
			dataType: 'json',
			async: true,
			cache: false,
			type: requestType,
			data: JSON.stringify(deleteDocumentsData)
		}).done(function (result)
		{
			if (result.noDeletePermission && result.noDeletePermission.length > 0)
			{
				var deleteWarning = $('<div></div>').attr({ 'id': 'wrong-password-warning' }).css({ 'color': 'red', 'clear': 'both' }).text(localization.noPermissionToDelete + ':');
				var docList = $('<ul></ul>').css({ 'padding-left': '20px' });
				for (var i = 0; i < result.noDeletePermission.length; i++)
				{
					docList.append($('<li></li>').text(result.noDeletePermission[i]));
				}
				deleteWarning.append(docList);
				$(document.getElementById(confirmPasswordInputClientId)).after(deleteWarning);
			}

			if (result.Result)
			{
				CivicWeb.Common.Notification.show(deleteResultClientId, CivicWeb.Common.Notification.types.success, notificationText);
				$(document.getElementById(confirmDeleteButtonClientId)).addClass('hidden');
				$(document.getElementById(cancelDeleteButtonClientId)).text(localization.continueButtonText);
				closeDeletePopupTimeoutHandle = setTimeout(function ()
				{
					$(document.getElementById(documentDeleteConfirmWindowClientId)).data('kendoWindow').close();
				}, 5000);

				if (userAction === action.deleteParent)
				{
					var previousParent = documentParentIds.length > 1 ? documentParentIds[documentParentIds.length - 2] : 0;
					window.location.href = '/filepro/documents/' + previousParent;
				}
				else
				{
					for (var index = 0; index < documentIds.length; index++)
					{
						$('.document-list-view-documents[data-id="' + documentIds[index] + '"]').closest('li').remove();
						$('.document-thumbnail-view-documents[data-id="' + documentIds[index] + '"]').remove();
					}
				}
			}
			else if (!result.noDeletePermission)
			{
				$(document.getElementById(confirmPasswordInputClientId)).after($('<div></div>').attr({ 'id': 'wrong-password-warning' }).css({ 'color': 'red', 'clear': 'both' }).text(localization.invalidPassword));
			}

			if ('function' === typeof callback)
			{
				callback(result.Result);
			}
		}).fail(function ()
		{
			if ('function' === typeof callback)
			{
				callback(false);
			}
		}).always(function ()
		{
			CivicWeb.Common.Button.update(confirmDeleteButtonClientId, localization.confirmPasswordText, false, false);
		});
	};

	this.displayDeletionPopup = function (documents, callback)
	{
		if (documents && documents.length > 0)
		{
			var ids = [];
			documents.forEach(function (currentValue)
			{
				ids.push(currentValue.id);
			});

			confirmDocumentPopUp(ids, action.delete, documents, callback);
		}
	};

	var confirmDocumentPopUp = function (documentIds, userAction, documentsInformation, callback)
	{
		$(document.getElementById(cancelDeleteButtonClientId)).off('click').on('click', function () { clearTimeout(closeDeletePopupTimeoutHandle); closeDeletePopupTimeoutHandle = null; $(document.getElementById(documentDeleteConfirmWindowClientId)).addClass('hidden').data('kendoWindow').close(); });
		$(document.getElementById(confirmDeleteButtonClientId)).off('click').on('click', function () { documentAction(documentIds, userAction, callback); return false; });
		$(document.getElementById(confirmPasswordInputClientId)).off('keyup').on('keyup', function (e) { if (e.keyCode === 13) { documentAction(documentIds, userAction, callback); }; }).val('');

		//Make sure to destoy the existing treeview
		var deletionList = $(document.getElementById(documentToDeleteListClientId)).css({ 'width': '' });;
		var treeView = deletionList.data('kendoTreeView');
		if (treeView)
		{
			treeView.destroy();
		}
		deletionList.empty().toggleClass('document-restore-list', userAction === action.restore);
		$(document.getElementById(documentDeletePasswordExplanationClientId)).toggleClass('hidden', userAction === action.restore);
		$(document.getElementById(documentRestorePasswordExplanationClientId)).toggleClass('hidden', userAction !== action.restore);
		$(document.getElementById(documentDeleteFollowingClientId)).toggleClass('hidden', userAction === action.restore);
		$(document.getElementById(documentRestoreFollowingClientId)).toggleClass('hidden', userAction !== action.restore);
		$(document.getElementById(documentRestoreLegendClientId)).toggleClass('hidden', userAction !== action.restore);
		$('#wrong-password-warning').remove();

		$(document.getElementById(confirmDeleteButtonClientId)).removeClass('hidden');
		$(document.getElementById(cancelDeleteButtonClientId)).text(localization.cancelButtonText);
		var deleteWindow = $(document.getElementById(documentDeleteConfirmWindowClientId)).removeClass('hidden').css({ 'visibility': '' }).data('kendoWindow');
		deleteWindow.title(userAction === action.restore ? localization.confirmRestoreHeaderText : localization.confirmDeleteHeaderText);
		deleteWindow.setOptions({
			width: userAction === action.restore ? 1000 : 500
		});
		deleteWindow.center().open();

		//Load tree
		selectedDocuments = [];
		if (userAction !== action.deleteParent)
		{
			if (documentsInformation)
			{
				documentIds.forEach(function (currentValue, index)
				{
					var documentInformation = documentsInformation[index];
					selectedDocuments.push({ Id: currentValue, Folder: documentInformation.folder, Title: documentInformation.title, HasChildren: documentInformation.folder, ImageUrl: documentInformation.folder ? images.folderImageUrl : images.documentImageUrl, Class: documentInformation.class });
				});
			}
			else
			{
				$.each(documentIds, function (index, value)
				{
					var listItem = $('.document-list-view-documents[data-id="' + value.toString() + '"]').not('.k-drag-clue div');
					var documentDescription = $.trim(listItem.find('.document-list-view-name a').text() || '');
					documentDescription = documentDescription.length > 0 ? documentDescription : $.trim(listItem.find('.document-list-view-name span').text() || '');
					var documentType = listItem.attr('data-type');
					var documentClass = listItem.find('em[class^=\'icon-file-\']').attr('class');
					var isFolder = documentType === dataType.folder;
					selectedDocuments.push({ Id: parseInt(value), Folder: isFolder, Title: documentDescription || '', HasChildren: isFolder, ImageUrl: isFolder ? images.folderImageUrl : images.documentImageUrl, Class: documentClass, UpdateAllowed: listItem.attr('data-update-allowed') === 'true', IsPublic: listItem.attr('data-public') === 'true' });
				});
			}
		}
		else
		{
			var parentFolder = $(document.getElementById('parent-folder'));
			var folderDescription = $.trim(parentFolder.find('.parent-folder-label').text() || '');
			selectedDocuments.push({ Id: parseInt(documentIds[0]), Folder: true, Title: folderDescription || '', HasChildren: true, ImageUrl: images.folderImageUrl, Class: '' });
		}

		deletionList.kendoTreeView({
			dataSource: new kendo.data.HierarchicalDataSource({
				transport: {
					read: getDocumentList
				},
				schema: {
					model: {
						id: 'Id',
						hasChildren: 'HasChildren'
					}
				}
			}),
			dataTextField: 'Title',
			template: function (dataItem)
			{
				var document = dataItem.item;
				var html = '';
				if (document.Folder)
				{
					html += '<img class="folder-image" src="' + document.ImageUrl + '" alt="Folder" />';
				}
				else
				{
					html += '<em class="' + (document.Class ? document.Class : CivicWeb.Common.getFileIconClass(document.FileFormat)) + '"></em>';
				}

				html = html + ' <span data-type="' + (document.Folder ? 'folder' : 'document') + '">';
				if (userAction === action.restore && document.UpdateAllowed)
				{
					html = html + '<a href="/filepro/document/' + document.Id.toString() + '?tab=security&deleted=true" target="_blank">' + document.Title + '</a>';
				}
				else
				{
					html = html + document.Title;
				}
				html = html + '</span>';

				if (userAction === action.restore)
				{
					html = html + ' <span class="cw-icon-' + (document.Folder ? 'folder' : 'document') + '-' + (document.IsPublic ? 'permit' : 'forbid') + '"></span>';
				}

				return html;
			}
		});
	};

	this.changePreviewUrl = function (id)
	{
		if (window.history && history.pushState)
		{
			var currentPage = window.location.protocol + '//' + window.location.host + window.location.pathname + window.location.search;
			var urlQueryObj = CivicWeb.Documents.DocumentOperations.instance.getCurrentUrlQueryValues();
			var pageUrl;

			if (id != null && Number(id) > 0)
			{
				pageUrl = CivicWeb.Common.addUrlParameter(currentPage, 'preview', id.toString());

				if (urlQueryObj)
				{
					if (urlQueryObj.splitscreen)
					{
						pageUrl = CivicWeb.Common.addUrlParameter(pageUrl, 'splitscreen', 'true');
					}
					if (urlQueryObj.notes)
					{
						pageUrl = CivicWeb.Common.addUrlParameter(pageUrl, 'notes', 'true');
					}
					if (urlQueryObj.media)
					{
						pageUrl = CivicWeb.Common.addUrlParameter(pageUrl, 'media', 'true');
					}
					if (urlQueryObj.attachmenturl)
					{
						pageUrl = CivicWeb.Common.addUrlParameter(pageUrl, 'attachmenturl', 'urlQueryObj.attachmenturl');
					}
				}
			}
			else
			{
				pageUrl = window.location.protocol + '//' + window.location.host + window.location.pathname;
			}

			if (window.location.hash && window.location.hash.length > 0)
			{
				pageUrl = pageUrl + window.location.hash;
			}

			history.pushState('Document Id ' + id, document.title, pageUrl);
		}
	};

	this.favoriteDocument = function (id, add, isLoggedIn, successFn, failFn)
	{
		if (id)
		{
			if (isLoggedIn)
			{
				$.ajax({
					url: '/api/documents/' + (add ? 'addfavorites' : 'removefavorites') + '/' + id,
					contentType: 'application/json', dataType: 'json', async: true, cache: false, type: (add ? 'POST' : 'DELETE')
				})
					.done(function (result)
					{
						if (result.Result)
						{
							successFn();
						}
					})
					.fail(function ()
					{
						failFn();
					});
			}
			else if (localStorageAvailable())
			{
				if (add && Number(id) !== -1)
				{
					var favoriteItems = JSON.parse(localStorage.getItem('favoriteItems'));
					favoriteItems = favoriteItems != null ? favoriteItems : [];
					if (favoriteItems.indexOf(id.toString()) === -1)
					{
						favoriteItems.push(id);
					}
					localStorage.setItem('favoriteItems', JSON.stringify(favoriteItems));

					successFn();
				}
				else
				{
					var favoriteItems = JSON.parse(localStorage.getItem('favoriteItems'));
					favoriteItems = favoriteItems != null ? favoriteItems : [];
					favoriteItems.splice(favoriteItems.indexOf(id.toString()), 1);
					localStorage.setItem('favoriteItems', JSON.stringify(favoriteItems));

					successFn();
				}
			}
		}
	};

	this.kendoWindowOpen = function ()
	{
		$(document.getElementById('document-preview-view')).addClass('hidden');
	};

	this.kendoWindowClose = function ()
	{
		if ($(document.getElementById('file-pro-list-view-preview')).hasClass('background-color'))
		{
			$(document.getElementById('document-preview-view')).removeClass('hidden');
		}
	};

	var localStorageAvailable = function ()
	{
		try
		{
			if (localStorage)
			{
				localStorage.setItem('test', 'test');
				localStorage.removeItem('test');

				return true;
			}
			else
			{
				return false;
			}
		}
		catch (ex)
		{
			return false;
		}

	};

	(function ()
	{
		$(document.getElementById(documentDeleteConfirmWindowClientId)).kendoWindow({
			modal: true,
			visible: false,
			title: localization.confirmDeleteHeaderText,
			width: 500,
			open: CivicWeb.Documents.DocumentOperations.Events.kendoWindowOpen,
			close: CivicWeb.Documents.DocumentOperations.Events.kendoWindowClose,
			activate: function ()
			{
				$(document.getElementById(confirmPasswordInputClientId)).select();
				$(document.getElementById(documentDeleteConfirmWindowClientId)).css({ 'width': '' });
			}
		});
	})();
}

CivicWeb.Documents.DocumentOperations = {
	instance: null,

	createInstance: function (args)
	{
		if (this.instance)
		{
			delete this.instance;
		}
		this.instance = new CivicWeb.Documents.DocumentOperation(args);
	},

	Events: {
		documentDeleteButtonClick: function ()
		{
			CivicWeb.Documents.DocumentOperations.instance.documentDeleteButtonClick();
		},

		displayDeletionPopup: function (documents, callback)
		{
			CivicWeb.Documents.DocumentOperations.instance.displayDeletionPopup(documents, callback);
		},

		restoreDocumentButtonClick: function (callback)
		{
			CivicWeb.Documents.DocumentOperations.instance.restoreDocumentButtonClick(callback);
		},

		purgeDocumentButtonClick: function (callback)
		{
			CivicWeb.Documents.DocumentOperations.instance.purgeDocumentButtonClick(callback);
		},

		getCurrentUrlQueryValues: function ()
		{
			return CivicWeb.Documents.DocumentOperations.instance.getCurrentUrlQueryValues();
		},

		changePreviewUrl: function (id)
		{
			CivicWeb.Documents.DocumentOperations.instance.changePreviewUrl(id);
		},

		favoriteDocument: function (id, add, isLoggedIn, successFn, failFn)
		{
			CivicWeb.Documents.DocumentOperations.instance.favoriteDocument(id, add, isLoggedIn, successFn, failFn);
		},

		kendoWindowOpen: function (e)
		{
			CivicWeb.Documents.DocumentOperations.instance.kendoWindowOpen(e);
		},

		kendoWindowClose: function (e)
		{
			CivicWeb.Documents.DocumentOperations.instance.kendoWindowClose(e);
		}
	}
}
;
// Declare namespaces
var CivicWeb = CivicWeb || {};
CivicWeb.Documents = CivicWeb.Documents || {};

//Create classes
CivicWeb.Documents.DocumentList = function (args)
{
	//#region Properties
	var fileProListViewClientId = 'file-pro-list-view';
	var fileProThumbnailViewClientId = 'file-pro-list-view-thumbnails';
	var fileProPreviewViewClientId = 'file-pro-list-view-preview';
	var fileProSortDropDownClientElem = $(document.getElementById('file-pro-sort-dropdown'));

	var addFolderButtonClientId = 'add-folder-button';
	var uploadDocumentsButtonClientId = 'upload-documents-button';
	var restoreDocumentButtonClientId = 'restore-document-button';
	var purgeDocumentButtonClientId = 'purge-document-button';

	var editSortButtonClientId = 'edit-default-order';
	var toogleOrderingModeButtonClientElem = $(document.getElementById('toogle-ordering-mode'));
	var orderingModeWarningClientId = 'ordering-mode-warning';
	var sortOptionDefault = 'sort-option-default';
	var sortOptionAscending = 'sort-option-ascending';
	var thirdPartyUploadDropDownClientId = 'upload-thirdparty-documents-dropdown';
	var thirdPartyUploadDropDownButtonClientId = 'upload-thirdparty-documents-dropdown-button';

	var socialMediaShareContainerClientId = 'social-media-control';

	var documentsListViewClientElem = $(document.getElementById('document-list-view'));
	var favoriteListViewClientElem = $(document.getElementById('favorite-folder'));
	var documentBreadCrumbsClientId = 'document-bread-crumbs';
	var documentListSelectAllClientId = 'document-list-select-all';
	var documentCheckboxClientId = 'document-checkbox-';
	var socialMediaShareClientId = 'social-media-share-';

	var documentThumbnailViewClientElem = $(document.getElementById('document-thumbnail-view'));

	var documentPreviewViewClientId = 'document-preview-view';
	var documentPreviewOptionsClientElem = $(document.getElementById('document-preview-options'));
	var documentPreviewEditClientId = 'document-preview-edit';
	var documentPreviewFavoriteClientId = 'document-preview-favorite';
	var documentPreviewShareClientId = 'document-preivew-share';
	var folderPreviewContainerClientId = 'folder-list-preview';

	var folderPreviewButtonClientElem = $(document.getElementById('preview-folder-list'));
	var folderContentListViewClientId = 'folder-content-list-view';
	var folderContentListViewClientElem = $(document.getElementById('folder-content-list-view'));

	var documentDeleteConfirmWindowClientId = 'document-delete-confirm-window';
	var documentTitleWarningClientId = 'documents-title-warning';
	var folderTitleWarningClientId = 'folder-title-warning';

	var orderSavedMessageClientId = 'order-saved-message';

	var availableToAllClientId = 'available-to-all-';
	var availablePermissionsClientId = 'available-permissions-';
	var addPermissionsButtonClientId = '-add-permissions-button';
	var removePermissionsButtonClientId = '-remove-permissions-button';
	var selectedPermissionsClientId = 'selected-permissions-';
	var applyToChildrenClientId = 'apply-to-children-';
	var disableAvailableToAllClientId = 'disable-available-to-all-';

	var documentUploadInputClientId = 'document-upload-input';
	var documentUploadFormClientId = 'document-upload-form';
	var uploadedDocumentsConfirmSecurityWindowClientId = 'uploaded-documents-confirm-security-window';
	var uploadDocumentsPermissionsClientId = 'uploaded-documents-permissions';
	var uploadedDocumentListClientId = 'uploaded-document-list';
	var confirmSecurityButtonClientId = 'confirm-security-button';
	var cancelSecurityButtonClientId = 'cancel-security-button';
	var uploadSortingNotificationClientId = 'upload-sorting-notification';

	var createFolderWindowClientId = 'create-folder-window';
	var createFolderTextboxClientId = 'new-folder-name-input';
	var createFolderPermissionsClientId = 'create-folder-permissions';
	var createFolderButtonClientId = 'create-folder';
	var createFolderCancelClientId = 'create-folder-cancel';

	var createFolderResult = 'create-folder-result';
	var documentSecurityResult = 'documents-security-result';

	var fileProRecycleBinClientId = 'file-pro-recycle-bin';

	var columnHeaderLinkNameClientId = 'column-header-link-name';
	var columnHeaderLinkModifiedClientId = 'column-header-link-modified';
	var columnHeaderLinkSizeClientId = 'column-header-link-size';
	var columnHeaderLinkDeletedByClientId = 'column-header-link-deleted-by';

	var saveToTopOrderWarningClientId = 'save-to-top-order-warning';
	var saveFolderToTopOrderWarningClientId = 'save-folder-to-top-order-warning';

	var uploadPermissionRequiredWindowClientId = 'upload-permission-required-window';
	var uploadPermissionRequiredNotificationClientId = 'upload-permission-required-notification';
	var permissionsContactAdministratorButtonClientId = 'permissions-contact-administrator-button';
	var uploadPermissionRequiredCloseButtonClientId = 'upload-permission-required-close-button';

	var documentId = args.documentId;
	var previewId = args.previewId;
	var attachmentUrl = args.attachmentUrl;
	var documentPath = args.documentPath;
	var documentParentIds = args.documentParentIds;
	var initialDocumentList = args.initialDocumentList;
	var setAlphaOrder = args.setAlphaOrder;
	var initialViewMode = args.initialViewMode;
	var sortField = args.sortField;
	var sortOption = args.sortOption;

	var users = args.users;
	var selectedUsers = args.selectedUsers;
	var selectedGroups = args.selectedGroups;
	var groups = args.groups;
	var canDelete = args.canDelete;
	var simplePermissions = args.simplePermissions;
	var isLoggedIn = args.isLoggedIn;
	var currentUserSort = args.currentUserSort;
	var agendaNotesLiteEnabled = args.agendaNotesLiteEnabled;
	var moveToTop = args.moveToTop;

	var documentReorderAllowed = args.documentReorderAllowed;

	var thirdPartyDocumentSourceTypes = args.thirdPartyDocumentSourceTypes;
	var canMakeAvailableToAll = args.canMakeAvailableToAll;
	var showPublicOnlyItemsForAllUsers = args.showPublicOnlyItemsForAllUsers;

	var canControl = args.canControl;
	var canUpdate = args.canUpdate;
	var canUpdatePortalItems = args.canUpdatePortalItems;
	var currentFolderUpdateAllowed = args.currentFolderUpdateAllowed;

	var isFreemium = args.isFreemium;
	var fromWidget = args.fromWidget;
	var purchasedRms = args.purchasedRms;
	var classifyAsRecord = args.classifyAsRecord;
	var classifyArguements = args.classifyArguements;

	var displaySetup = args.displaySetup;
	var roleSetupOptions = args.roleSetupOptions;
	var loadFolderPage = args.loadFolderPage;

	var documentTreeView = null;
	var favoriteTreeView = null;
	var folderContentListView = null;
	var documentThumbnailView = null;
	var documentPreviewView = null;
	var previousNodesSelected = [];
	var documentsUploaded = 0;
	var listInitialized = false;
	var previewLoaded = false;
	var useAsyncGetChildList = true;
	var currentId = 0;
	var documentRecycleBinView = args.documentRecycleBinView;
	var currentSortField = 'Default';
	var uploadedDocumentIds = [];
	var topLevelUploadFolder = { id: 0, parentCount: 100000000, parentId: 0 };
	var lastScrollTop = 0;
	var fileName = '';
	var changeSetId = 0;

	var localization = args.localization;
	var documentSelectorArguments = args.documentSelectorArguments;
	var contactAdministratorArguments = args.contactAdministratorArguments;

	var socialMediaLocalization = {
		bookmarkListRadioLabel: args.localization.bookmarkListRadioLabel,
		bookmarkDisplayRadioLabel: args.localization.bookmarkDisplayRadioLabel,
		copyLinkMessage: args.localization.copyLinkMessage
	};

	var thumbnailsLoading = false;
	var pendingThumbnailLoad = { e: null };
	var expandingNode = null;
	var scrollTimer = null;
	var fileList = [];
	var documentsToUpload = [];
	var caseFileData = { classification: '', destructionDate: '' };
	var nodesFromUrlExpanding = false;
	var nodeReodering = false;
	var dropHint = $('<div>', { 'class': 'k-drop-hint' });

	var isInternetExplorer = (/msie/.test(navigator.userAgent.toLowerCase())) || (/trident/.test(navigator.userAgent.toLowerCase()));
	var isiPad = navigator.userAgent.match(/(iPad)/) !== null;
	var mobildeDimensions = (window.matchMedia !== null && window.matchMedia('screen and (max-width:320px), (max-device-width: 320px), (max-width:481px), (max-device-width: 481px)').matches) || $(window).width() < 481;
	var mobileBrowser = navigator.userAgent.match(/(Android|webOS|iPhone|iPod|BlackBerry|IEMobile|Opera Mini)/);
	var mobileDevice = mobildeDimensions || mobileBrowser !== null;
	var treeViewPageSize = 100;
	var recycleBinTreeViewPageSize = 200;
	var recycleBinPage = 1;
	var totalRecycleBinDocuments = 0;
	var loadingMoreDocuments = false;

	var deletedByHeaderWidth;
	var nameHeaderWidth;
	var modifiedHeaderWidth;
	var sizeHeaderWidth;

	var images = {
		groupImageUrl: 'cw-icon-users-lg',
		userImageUrl: 'cw-icon-user-lg',
		userPublicImageUrl: 'cw-icon-user-public-lg',
		expandImageClass: 'cw-icon-node-open',
		collapseImageClass: 'cw-icon-node-close',
		folderImageUrl: 'cw-icon-folder-lg',
		favoritesFolderImageUrl: 'cw-icon-folder-favorite-lg',
		closedCaseFileImageUrl: 'cw-icon-folder-case-close-lg',
		openCaseFileImageUrl: 'cw-icon-folder-case-open-lg',
		folderPageFolderImageUrl: 'cw-icon-folder-document-lg',
		privateFolderImageUrl: 'cw-icon-folder-lock-lg'
	};

	var favorite = {
		enable: 'cw-fp-icon-star',
		disable: 'cw-fp-icon-star-disabled'
	};

	var sort = {
		none: 'none',
		ascending: 'ascending',
		descending: 'descending'
	};

	var dataType = {
		folder: 'folder',
		document: 'document',
		favoritesFolder: 'favorites-folder'
	};

	var schemaTypes = {
		groups: 'groups',
		users: 'users',
		folder: 'folder',
		documents: 'documents'
	};

	var documentViewType = {
		listView: 'list',
		thumbnailView: 'thumbnails',
		previewView: 'preview'
	};

	var documentView = documentViewType.listView;

	var favoriteDataItem = {};
	favoriteDataItem.Id = '-1';
	favoriteDataItem.Order = '0';
	favoriteDataItem.Description = localization.favoritesFolderToolTip,
		favoriteDataItem.Title = localization.favoritesFolderLabel;
	favoriteDataItem.DateUpdated = '';
	favoriteDataItem.DateUpdatedFormatted = '';
	favoriteDataItem.FileSize = '';
	favoriteDataItem.Folder = true;
	favoriteDataItem.FavoriteFolder = true;
	favoriteDataItem.HasChildren = true;

	var permissionSchemas = {
		folder: {
			groups: {
				items: groups,
				selectedPermissions: selectedGroups,
				type: schemaTypes.groups,
				id: 'id',
				name: 'name',
				deleted: 'deleted',
				selected: 'selected',
				prefix: 'G',
				subCollections: [{ type: schemaTypes.groups, collection: 'groups', recurse: true }, { type: schemaTypes.users, collection: 'users', recurse: false }],
				imageUrl: images.groupImageUrl,
				toolTip: localization.groupToolTipText,
				noSubItemsExistText: localization.groupHasNoMembersLabelText,
				sort: function (a, b)
				{
					var nameA = a ? a.name.toLowerCase() : '';
					var nameB = b ? b.name.toLowerCase() : '';

					return nameA < nameB ? -1 : (nameA > nameB ? 1 : 0);
				}
			},
			users: {
				items: users,
				selectedPermissions: selectedUsers,
				type: schemaTypes.users,
				id: 'id',
				name: 'name',
				deleted: 'deleted',
				selected: 'selected',
				prefix: 'U',
				subCollections: [],
				imageUrl: images.userImageUrl,
				userPublicImageUrl: images.userPublicImageUrl,
				toolTip: localization.userToolTipText,
				noSubItemsExistText: '',
				sort: function (a, b)
				{
					var nameA = a ? a.name.toLowerCase() : '';
					var nameB = b ? b.name.toLowerCase() : '';
					var publicA = a ? a.isPublic : false;
					var publicB = b ? b.isPublic : false;

					return (publicA === publicB && nameA < nameB) || (publicA && !publicB) ? -1 : ((publicA === publicB && nameA > nameB) || (!publicA && publicB) ? 1 : 0);
				}
			},
			type: schemaTypes.folder,
			selected: 'selected',
			lastSelection: {
				available: null,
				selected: null
			},
			controlIds: {
				availableToAll: availableToAllClientId + schemaTypes.folder,
				available: availablePermissionsClientId + schemaTypes.folder,
				selected: selectedPermissionsClientId + schemaTypes.folder,
				addButton: schemaTypes.folder + addPermissionsButtonClientId,
				removeButton: schemaTypes.folder + removePermissionsButtonClientId,
				applyToChildren: applyToChildrenClientId + schemaTypes.folder,
				disableAvailableToAll: disableAvailableToAllClientId + schemaTypes.folder
			}
		},
		documents: {
			groups: {
				items: groups,
				selectedPermissions: null,
				type: schemaTypes.groups,
				id: 'id',
				name: 'name',
				deleted: 'deleted',
				selected: 'selected',
				prefix: 'G',
				subCollections: [{ type: schemaTypes.groups, collection: 'groups', recurse: true }, { type: schemaTypes.users, collection: 'users', recurse: false }],
				imageUrl: images.groupImageUrl,
				toolTip: localization.groupToolTipText,
				noSubItemsExistText: localization.groupHasNoMembersLabelText,
				sort: function (a, b)
				{
					var nameA = a ? a.name.toLowerCase() : '';
					var nameB = b ? b.name.toLowerCase() : '';

					return nameA < nameB ? -1 : (nameA > nameB ? 1 : 0);
				}
			},
			users: {
				items: users,
				selectedPermissions: null,
				type: schemaTypes.users,
				id: 'id',
				name: 'name',
				deleted: 'deleted',
				selected: 'selected',
				prefix: 'U',
				subCollections: [],
				imageUrl: images.userImageUrl,
				userPublicImageUrl: images.userPublicImageUrl,
				toolTip: localization.userToolTipText,
				noSubItemsExistText: '',
				sort: function (a, b)
				{
					var nameA = a ? a.name.toLowerCase() : '';
					var nameB = b ? b.name.toLowerCase() : '';
					var publicA = a ? a.isPublic : false;
					var publicB = b ? b.isPublic : false;

					return (publicA === publicB && nameA < nameB) || (publicA && !publicB) ? -1 : ((publicA === publicB && nameA > nameB) || (!publicA && publicB) ? 1 : 0);
				}
			},
			type: schemaTypes.documents,
			selected: 'selected',
			lastSelection: {
				available: null,
				selected: null
			},
			controlIds: {
				availableToAll: availableToAllClientId + schemaTypes.documents,
				available: availablePermissionsClientId + schemaTypes.documents,
				selected: selectedPermissionsClientId + schemaTypes.documents,
				addButton: schemaTypes.documents + addPermissionsButtonClientId,
				removeButton: schemaTypes.documents + removePermissionsButtonClientId,
				applyToChildren: applyToChildrenClientId + schemaTypes.documents,
				disableAvailableToAll: disableAvailableToAllClientId + schemaTypes.documents
			}
		}
	};
	//#endregion

	var windowResize = function ()
	{
		if (/ipad/i.test(navigator.userAgent.toLowerCase()))
		{
			//Fix header cut off in iPad Safari
			//TODO: Check if this is still needed as new iOS versions come out
			var headerHeight = $(document.getElementById('menuHeader')).height();
			var customHeader = $(document.getElementById('custom-header')).css({ 'top': '' });
			var mainContainer = $('main').parent().css({ 'top': '' });
			var currentOffsetTop = $('.content').scrollTop() + customHeader.offset().top;
			if (currentOffsetTop !== headerHeight)
			{
				customHeader.offset({ top: headerHeight, left: 0 });
				mainContainer.offset({ top: headerHeight + customHeader.height(), left: 0 });;
			}
		}
	};

	//#region Data Binding
	var documentsDataBound = function (e)
	{
		if (!nodeReodering)
		{
			if ($('.document-list-view-documents').length === 0)
			{
				$('#no-documents-warning').remove();
				documentsListViewClientElem.append($('<div></div>').attr({ 'id': 'no-documents-warning' }).css({ 'margin': '1em' }).text(localization.noDocumentsInFolderWarning));
				documentThumbnailViewClientElem.append($('<div></div>').attr({ 'id': 'no-documents-warning' }).css({ 'margin': '1em' }).text(localization.noDocumentsInFolderWarning));
			}

			if (toogleOrderingModeButtonClientElem.attr('data-enabled') === 'true')
			{
				$('.folder-link').addClass('link-disabled');
				$('.folder-link').off('click').on('click', function (e)
				{
					e.preventDefault();
					return false;
				});
			}
			else
			{
				$('.folder-link').removeClass('link-disabled');
			}

			$('.document-link').off('click').on('click', documentListClick);
			$('.favorite-icon').off('click').on('click', favoriteClick).on('keydown', favoriteKeyDown);
			$('.k-in').off('click', documentNodeClick).on('click', documentNodeClick);
			$('.k-in').off('mousedown', documentNodeMouseDown).on('mousedown', documentNodeMouseDown);

			$('[id^=' + documentCheckboxClientId + ']').off('click', nodeCheckboxClicked).on('click', nodeCheckboxClicked);

			if (documentView === documentViewType.previewView)
			{
				$('.document-list-view-modified').addClass('hidden');
				$('.document-list-view-size').addClass('hidden');

				if (folderContentListViewClientElem.find('.document-list-view-documents').length === 0)
				{
					folderContentListViewClientElem.append($('<div></div>').attr({ 'id': 'no-documents-warning' }).css({ 'margin': '1em' }).text(localization.noDocumentsInFolderWarning));
				}

				if ($(document.getElementById('preview-folder-list')).attr('data-show') === 'false')
				{
					loadPreviewDocument(previewId !== null && previewId > 0 ? previewId : documentId);
				}
				else if (!previewLoaded)
				{
					previewDocumentContent(documentId);
					previewLoaded = true;
				}
			}

			if (expandingNode != null)
			{
				$(document.getElementById(documentCheckboxClientId + expandingNode.id)).prop('checked', expandingNode.checked);
				if (expandingNode.checked)
				{
					$(e.node).find('input[type=\'checkbox\']').prop('checked', expandingNode.checked);
				}
			}

			if (documentView !== documentViewType.thumbnailView)
			{
				expandNodesFromUrl();
			}

			var listheight = ($(window).height() - $(document.getElementById('document-list-container')).offset().top) - ($('div#favorite-folder:visible').outerHeight() + $('div#parent-folder:visible').outerHeight() + $('footer.footer').outerHeight());
			documentsListViewClientElem.height(listheight + 'px');

			if (e && e.node != null)
			{
				var nodeId = Number($(e.node).find('[data-id]').attr('data-id'));
				var dataItem = documentTreeView.dataSource.get(nodeId);
				var childData = dataItem.children.data();
				if (childData && childData.length === treeViewPageSize && childData[0].TotalDocuments > treeViewPageSize && !documentRecycleBinView)
				{
					var dataItemUid = dataItem ? dataItem.uid : null;
					if (dataItemUid && dataItemUid.length)
					{
						var itemElem = $(documentTreeView.findByUid(dataItemUid));
						itemElem.find('div.scroll-load').remove();
						itemElem.append($('<div></div>', { 'class': 'scroll-load', 'data-id': nodeId }));
					}
				}
			}
			else
			{
				documentsListViewClientElem.find('.scroll-load').remove();
				var treeViewData = documentTreeView.dataSource.data();
				if (treeViewData.length > 0 && treeViewData.length < treeViewData[0].TotalDocuments && treeViewData[0].TotalDocuments > treeViewPageSize && !documentRecycleBinView)
				{
					documentsListViewClientElem.append($('<div></div>', { 'class': 'scroll-load', 'data-id': documentId }));
				}
			}

			resizeDocumentList();

			setTimeout(function () { $(document.getElementById('sort-processing')).addClass('hidden'); }, 500);
		}

		if (!mobileBrowser && !isiPad)
		{
			$('.document-link-container').tooltip({ delay: { show: 500, hide: 250 }, trigger: 'hover' });
		}
	};

	var previewDocumentsDataBound = function (e)
	{
		if (typeof (FileReader) !== 'undefined')
		{
			$('.document-list-view-documents').off('dragover', dragOverUploadDocument).on('dragover', dragOverUploadDocument);
			$('.document-list-view-documents').off('dragleave', dragOutUploadDocument).on('dragleave', dragOutUploadDocument);
			$('.document-list-view-documents').off('drop', dropUploadDocument).on('drop', dropUploadDocument);
			$(window).off('drop', dropUploadDocument).on('drop', dropUploadDocument);
			$(window).off('dragover', dragOverUploadDocument).on('dragover', dragOverUploadDocument);
			$(window).off('dragleave', dragOutUploadDocument).on('dragleave', dragOutUploadDocument);
		}

		if (toogleOrderingModeButtonClientElem.attr('data-enabled') === 'true')
		{
			$('.folder-link').addClass('link-disabled');
			$('.folder-link').off('click').on('click', function (e)
			{
				e.preventDefault();
				return false;
			});
		}
		else
		{
			$('.folder-link').removeClass('link-disabled');
		}
		$('.document-link').off('click').on('click', documentListClick);
		$('.favorite-icon').off('click').on('click', favoriteClick).on('keydown', favoriteKeyDown);
		$('.k-in').off('click', documentNodeClick).on('click', documentNodeClick);
		$('.k-in').off('mousedown', documentNodeMouseDown).on('mousedown', documentNodeMouseDown);

		$('[id^=' + documentCheckboxClientId + ']').off('click', nodeCheckboxClicked).on('click', nodeCheckboxClicked);

		$('.document-list-view-modified').addClass('hidden');
		$('.document-list-view-size').addClass('hidden');

		if (folderContentListViewClientElem.find('.document-list-view-documents').length === 0)
		{
			folderContentListViewClientElem.append($('<div></div>').attr({ 'id': 'no-documents-warning' }).css({ 'margin': '1em' }).text(localization.noDocumentsInFolderWarning));
		}

		if (e && e.node != null)
		{
			var nodeId = Number($(e.node).find('[data-id]').attr('data-id'));
			var dataItem = folderContentListView.dataSource.get(nodeId);
			var childData = dataItem.children.data();
			if (childData && childData.length === treeViewPageSize && childData[0].TotalDocuments > treeViewPageSize && !documentRecycleBinView)
			{
				var dataItemUid = dataItem ? dataItem.uid : null;
				if (dataItemUid && dataItemUid.length)
				{
					var itemElem = $(folderContentListView.findByUid(dataItemUid));
					itemElem.find('div.scroll-load').remove();
					itemElem.append($('<div></div>', { 'class': 'scroll-load', 'data-id': nodeId }));
				}
			}
		}
		else
		{
			$('div#folder-content-list-view-container > .scroll-load').remove();
			if (folderContentListView.dataSource.data().length < folderContentListView.dataSource.data()[0].TotalDocuments && folderContentListView.dataSource.data()[0].TotalDocuments > treeViewPageSize && !documentRecycleBinView)
			{
				var docId = Number(folderPreviewButtonClientElem.attr('data-id'));
				$('div#folder-content-list-view-container').append($('<div></div>', { 'class': 'scroll-load', 'data-id': docId }));
			}
		}

		$('.document-link-container').tooltip({ delay: { show: 500, hide: 250 }, trigger: 'hover' });
	};

	var documentsFavoriteDataBound = function ()
	{
		$(favoriteListViewClientElem.find('.document-link')).off('click').on('click', documentListClick);
		$(favoriteListViewClientElem.find('.favorite-icon')).off('click').on('click', favoriteClick).on('keydown', favoriteKeyDown);
		$(favoriteListViewClientElem.find('.k-in')).off('click', documentNodeClick);
		$(favoriteListViewClientElem.find('.k-in')).off('mousedown', documentNodeMouseDown).on('mousedown', documentNodeMouseDown);
		$(favoriteListViewClientElem.find('[id^=' + documentCheckboxClientId + ']')).off('click', nodeCheckboxClicked).on('click', nodeCheckboxClicked);
		resizeFavoriteList();
	};

	var documentsThumbnailViewDataBound = function ()
	{
		$('.document-thumbnail-link').off('click').on('click', documentThumbnailClick);
		$('.document-thumbnail-view-documents').find('.document-thumbnail-image img').off('click').on('click', documentThumbnailClick);
		$('.document-thumbnail-view-documents').find('.document-thumbnail-folder-image span').off('click').on('click', documentThumbnailClick);
		$('.document-thumbnail-view-documents').find('.select-thumbnail-checkbox').off('click', documentThumbnailSelect).on('click', documentThumbnailSelect);
		$('.favorite-icon').off('click').on('click', favoriteClick).on('keydown', favoriteKeyDown);
		$.each($('.document-thumbnail-view-documents'), function (index, value)
		{
			var nodeId = $(value).attr('data-id');
			var socialMediaLink = window.location.protocol + '//' + window.location.hostname + (isFreemium ? '/document/' : '/filepro/documents/') + nodeId;
			var title = $(value).attr('data-title');
			CivicWeb.Common.SocialMediaShares.createInstance({ clientId: (socialMediaShareClientId + '-thumbnail-' + nodeId), url: socialMediaLink, title: title, itemId: nodeId, localization: socialMediaLocalization, show: true });
			documentThumbnailViewClientElem.find(document.getElementById(socialMediaShareClientId + '-thumbnail-' + nodeId)).css({ 'position': 'absolute', 'right': '0', 'top': '0', 'margin': '0' }).removeClass('hidden');
		});

		if (documentView === documentViewType.thumbnailView)
		{
			$(document).ready(function ()
			{
				loadThumbnailImages();
			});
		}

		var listheight = $(window).height() - documentThumbnailViewClientElem.offset().top - 32 - 13;
		documentThumbnailViewClientElem.height(listheight + 'px');
	};
	//#endregion

	//#region Node Events
	var nodeSelected = function (e)
	{
		var nodeId = $(e.node).find('[data-id]').attr('data-id');
		var title = $(e.node).find('[data-title]').attr('data-title');
		if (nodeId >= 0)
		{
			var checked = $(e.node).find($(document.getElementById(documentCheckboxClientId + nodeId))).prop('checked');
			var isFolder = $(e.node).find('[data-type]').attr('data-type') === dataType.folder;
			$(e.node).find('.social-media-share').first().attr({ 'id': socialMediaShareClientId + nodeId });
			var socialMediaLink = window.location.protocol + '//' + window.location.hostname + (isFreemium && !isFolder ? '/document/' : '/filepro/documents/') + nodeId;
			CivicWeb.Common.SocialMediaShares.createInstance({
				clientId: socialMediaShareClientId + nodeId,
				url: socialMediaLink,
				title: title,
				itemId: nodeId,
				localization: socialMediaLocalization,
				isFolder: isFolder,
				show: (documentView === documentViewType.listView)
			});

			$('.k-in').find('.folder-link').css('color', '');
			$('.k-in').find('.document-link').css('color', '');

			$(document.getElementById('document-list-select-all')).prop('checked', false);

			$(document.getElementById('parent-folder')).removeClass('background-color');
			$(document.getElementById('document-parent-options')).addClass('hidden');

			if (documentView === documentViewType.previewView)
			{
				CivicWeb.Common.SocialMediaShares.createInstance({
					clientId: documentPreviewShareClientId,
					url: socialMediaLink,
					title: title,
					itemId: nodeId,
					localization: socialMediaLocalization,
					isFolder: isFolder
				});
				documentPreviewOptionsClientElem.attr('data-id', nodeId);

				if (documentRecycleBinView)
				{
					documentPreviewOptionsClientElem.find('.social-media-share').addClass('hidden');
					$(document.getElementById(documentPreviewFavoriteClientId)).addClass('hidden');
					if (nodeId > 0)
					{
						documentPreviewOptionsClientElem.removeClass('hidden');
					}
				}
				else
				{
					if (!isFreemium)
					{
						documentPreviewOptionsClientElem
							.find('.social-media-share')
							.removeClass('background-color')
							.removeClass('hidden');
					}

					if (nodeId > 0)
					{
						$(document.getElementById(documentPreviewFavoriteClientId)).removeClass('hidden');
					}
					else
					{
						$(document.getElementById(documentPreviewFavoriteClientId)).addClass('hidden');
					}
				}

				var previewEditButton = $(document.getElementById(documentPreviewEditClientId))
					.off('click')
					.on('click',
						function () { window.open('/filepro/document/' + nodeId + (documentRecycleBinView ? '?deleted=True' : '')) });
				var updateAllowed = $(e.node).find('[data-update-allowed]').attr('data-update-allowed') === 'true';
				if (updateAllowed)
				{
					previewEditButton.removeClass('hidden');
				}
				else
				{
					previewEditButton.addClass('hidden');
				}

				if ($(e.node).closest('div#' + folderContentListViewClientId).length === 0)
				{
					if ($(e.node).find('[data-type]').attr('data-type') === dataType.folder)
					{
						folderPreviewButtonClientElem.attr({ 'data-id': nodeId });
						if (folderPreviewButtonClientElem.attr('data-show') === 'true')
						{
							loadFolderContentPreview(nodeId);
						}
						else
						{
							folderContentListViewClientElem.addClass('hidden');
							if (folderPreviewButtonClientElem.attr('data-folder-page') === 'false')
							{
								$(document.getElementById('document-folder-view-documents')).removeClass('hidden');
								$(document.getElementById('document-preview')).addClass('hidden');
							}
							else
							{
								$(document.getElementById('document-folder-view-documents')).addClass('hidden');
								$(document.getElementById('document-preview')).removeClass('hidden');
							}
						}
					}
					else if (toogleOrderingModeButtonClientElem.length === 0 ||
						toogleOrderingModeButtonClientElem.attr('data-enabled') === 'false')
					{
						folderPreviewButtonClientElem.attr({ 'data-id': documentId });
						folderPreviewButtonClientElem.find('em').addClass('glyphicon-th-lines');
						folderPreviewButtonClientElem.find('em').removeClass('glyphicon-folder-close');
						folderPreviewButtonClientElem.attr('data-show', false);
						$(document.getElementById(folderPreviewContainerClientId)).removeClass('hidden');
						folderContentListViewClientElem.addClass('hidden');
						$(document.getElementById('document-preview')).removeClass('hidden');
					}
				}
			}
			else if (checked)
			{
				if (!isFreemium)
				{
					$(e.node).find('.social-media-share:not(.document-quickview)').first().removeClass('hidden');
				}
				var updateAllowed = $(e.node).find('[data-update-allowed]').attr('data-update-allowed') === 'true';
				if (updateAllowed)
				{
					$(e.node).find('.edit-node-icon').first().removeClass('hidden');
				}
				$(e.node).find('.favorite-icon').first().removeClass('hidden');
			}
		}

		if (nodeId < 0)
		{
			previousNodesSelected = [];

			e.preventDefault();
		}
	};

	var nodeChanged = function ()
	{
		if (previousNodesSelected && previousNodesSelected.length > 0)
		{
			documentsListViewClientElem.find('.k-state-selected').removeClass('k-state-selected');
			$.each(previousNodesSelected, function (index, value)
			{
				$(value).closest('.k-item').find('input:checkbox').prop('checked', true);
				if (!$(value).hasClass('k-state-selected'))
				{
					$(value).addClass('k-state-selected');
				}
			});
		}
	};

	var nodeCheckboxClicked = function (e)
	{
		var node = $(e.target).closest('.k-item').find('.k-in');
		var nodeId = $(e.target).attr('data-id');
		var title = $(e.target).attr('data-title');
		var checked = $(e.target).prop('checked');
		var isFolder = $(node).find('[data-type]').attr('data-type') === dataType.folder;
		var currentListViewElem = $(e.target).closest('div#folder-content-list-view').length > 0 ? folderContentListViewClientElem : documentsListViewClientElem;
		var socialMediaLink = window.location.protocol + '//' + window.location.hostname + (isFreemium && !isFolder ? '/document/' : '/filepro/documents/') + nodeId;

		previousNodesSelected = [];
		if (!checked)
		{
			node.removeClass('k-state-selected');
			$(e.target).closest('.k-item').find('input:checkbox').prop('checked', false);
			node.find('.social-media-share').addClass('hidden');
			node.find('.edit-node-icon').addClass('hidden');
			node.find('.favorite-icon').addClass('hidden');
			if (documentView === documentViewType.previewView)
			{
				$(document.getElementById(documentPreviewFavoriteClientId)).addClass('hidden');
				$(document.getElementById(documentPreviewShareClientId)).addClass('hidden');
			}
		}
		else
		{
			node.find('.social-media-share').first().attr({ 'id': socialMediaShareClientId + nodeId });
			CivicWeb.Common.SocialMediaShares.createInstance({ clientId: socialMediaShareClientId + nodeId, url: socialMediaLink, title: title, itemId: nodeId, localization: socialMediaLocalization, isFolder: isFolder, show: (documentView === documentViewType.listView) });

			node.addClass('k-state-selected');
			$(e.target).closest('.k-item').find('input:checkbox').prop('checked', true);
			if (documentView !== documentViewType.previewView)
			{
				if (documentView !== documentViewType.previewView)
				{
					if (!isFreemium)
					{
						node.find('.social-media-share').removeClass('hidden');
					}
					node.find('.edit-node-icon').removeClass('hidden');
					node.find('.favorite-icon').removeClass('hidden');
				}
				else
				{
					$(document.getElementById(documentPreviewFavoriteClientId)).removeClass('hidden');
					$(document.getElementById(documentPreviewShareClientId)).removeClass('hidden');
				}
			}
		}
		previousNodesSelected = currentListViewElem.find('.k-state-selected');

		if (documentView === documentViewType.previewView)
		{
			CivicWeb.Common.SocialMediaShares.createInstance({ clientId: documentPreviewShareClientId, url: socialMediaLink, title: title, itemId: nodeId, localization: socialMediaLocalization, isFolder: isFolder });
			documentPreviewOptionsClientElem.attr('data-id', nodeId);

			if (documentRecycleBinView)
			{
				documentPreviewOptionsClientElem.find('.social-media-share').addClass('hidden');
				$(document.getElementById(documentPreviewFavoriteClientId)).addClass('hidden');
			}
			else if (checked)
			{
				if (!isFreemium)
				{
					documentPreviewOptionsClientElem.find('.social-media-share').removeClass('background-color').removeClass('hidden');
				}
				$(document.getElementById(documentPreviewFavoriteClientId)).removeClass('hidden');
			}

			var previewEditButton = $(document.getElementById(documentPreviewEditClientId)).off('click').on('click', function () { window.open('/filepro/document/' + nodeId + (documentRecycleBinView ? '?deleted=True' : '')) });
			var updateAllowed = $(node).find('[data-update-allowed]').attr('data-update-allowed') === 'true';
			if (updateAllowed && checked)
			{
				previewEditButton.removeClass('hidden');
			}
			else
			{
				previewEditButton.addClass('hidden');
			}

			if (checked)
			{
				previewDocument(nodeId);

				if ($(node).closest('div#' + folderContentListViewClientId).length === 0 && folderPreviewButtonClientElem.attr('data-show') === 'false')
				{
					if (isFolder)
					{
						folderPreviewButtonClientElem.attr({ 'data-id': nodeId });
						if (folderPreviewButtonClientElem.attr('data-show') === 'true')
						{
							loadFolderContentPreview(nodeId);
						}
						else
						{
							folderContentListViewClientElem.addClass('hidden');
							if (folderPreviewButtonClientElem.attr('data-folder-page') === 'false')
							{
								$(document.getElementById('document-folder-view-documents')).removeClass('hidden');
								$(document.getElementById('document-preview')).addClass('hidden');
							}
							else
							{
								$(document.getElementById('document-folder-view-documents')).addClass('hidden');
								$(document.getElementById('document-preview')).removeClass('hidden');
							}
						}
					}
					else
					{
						folderPreviewButtonClientElem.find('em').addClass('glyphicon-th-lines');
						folderPreviewButtonClientElem.find('em').removeClass('glyphicon-folder-close');
						folderPreviewButtonClientElem.attr('data-show', false);
						$(document.getElementById(folderPreviewContainerClientId)).removeClass('hidden');
						folderContentListViewClientElem.addClass('hidden');
						$(document.getElementById('document-preview')).removeClass('hidden');
					}
				}
			}
		}
	};

	var nodeExpanded = function (e)
	{
		if (!nodesFromUrlExpanding)
		{
			expandNode($(e.node));
		}
	};

	var nodeCollapsed = function (e)
	{
		collapseNode($(e.node));
	};

	var documentNodeDragStart = function (e)
	{
		if (($(e.sourceNode).find('[data-type]').attr('data-type') === 'favorites-folder') || ($(e.sourceNode).find('[data-secure]').attr('data-secure') === 'true'))
		{
			e.preventDefault();
		}
		else
		{
			$(document.getElementById('drag-scroll-up')).off('mouseover').on('mouseover', scrollUp).removeClass('hidden');
			$(document.getElementById('drag-scroll-down')).off('mouseover').on('mouseover', scrollDown).removeClass('hidden');

			var dragHelper = $('.k-drag-clue');
			if (dragHelper && dragHelper.length > 0)
			{
				dragHelper.find('.document-list-view-documents').remove();
				var currentTreeView = documentTreeView.dataSource.getByUid($(e.sourceNode).attr('data-uid')) !== null ? documentTreeView : (folderContentListView && folderContentListView.dataSource.getByUid($(e.sourceNode).attr('data-uid')) ? folderContentListView : null);
				var selectedNodes = getSelectedNodes();
				if (selectedNodes.length > 0 && currentTreeView !== null)
				{
					$.each(selectedNodes, function (index, value)
					{
						dragHelper.append($(value).html());
					});
				}
				else
				{
					dragHelper.append($(e.sourceNode).find('.document-list-view-documents').clone());
				}

				dragHelper.find('.document-list-view-modified').remove();
				dragHelper.find('.document-list-view-size').remove();
				dragHelper.find('.social-media-share').remove();
				dragHelper.find('.favorite-icon').remove();
				dragHelper.find('.edit-node-icon').remove();
				dragHelper.width('20em');
			}
		}
	};

	var documentNodeDrag = function (e)
	{
		var dropTarget = $(e.dropTarget);
		var dropTargetDataType = dropTarget.closest('[data-type]').attr('data-type');
		var closestItem = dropTarget.closest('li.k-item');
		var status = e.statusClass;

		if ((dropTargetDataType === dataType.document && status === 'i-add') || (dropTargetDataType === dataType.folder && dropTarget.closest('[data-secure]').attr('data-secure') === 'true'))
		{
			e.setStatusClass('k-i-cancel');
		}
	};

	var scrollUp = function ()
	{
		scrollTimer = window.setInterval(function ()
		{
			var docListElem = document.getElementById('document-list-container');
			$(docListElem).animate({ scrollTop: $(docListElem).scrollTop() - 5 }, 0);
			$(document.getElementById('drag-scroll-down')).removeClass('hidden');
		}, 5);
	};

	var scrollDown = function ()
	{
		scrollTimer = window.setInterval(function ()
		{
			var docListElem = document.getElementById('document-list-container');
			$(docListElem).animate({ scrollTop: $(docListElem).scrollTop() + 5 }, 0);
			$(document.getElementById('drag-scroll-up')).removeClass('hidden');
			if ($(docListElem).scrollTop() + $(docListElem).innerHeight() >= docListElem.scrollHeight)
			{
				$(document.getElementById('drag-scroll-down')).addClass('hidden');
			}
		}, 5);
	};

	var stopScroll = function ()
	{
		window.clearInterval(scrollTimer);
	};

	//Occurs when node is being dropped, but before node moves to new location
	var documentNodeDrop = function (e)
	{
		e.preventDefault();

		$(document.getElementById('drag-scroll-up')).off('mouseover').addClass('hidden');
		$(document.getElementById('drag-scroll-down')).off('mouseover').addClass('hidden');
		var sourceDataItem = $(e.sourceNode).closest('#document-list-view').length > 0 ? documentTreeView.dataSource.getByUid($(e.sourceNode).attr('data-uid')) : ($(e.sourceNode).closest('#folder-content-list-view').length > 0 ? folderContentListView.dataSource.getByUid($(e.sourceNode).attr('data-uid')) : null);
		var destinationDataItem = $(e.destinationNode).closest('#document-list-view').length > 0 ? documentTreeView.dataSource.getByUid($(e.destinationNode).attr('data-uid')) : ($(e.destinationNode).closest('#folder-content-list-view').length > 0 ? folderContentListView.dataSource.getByUid($(e.destinationNode).attr('data-uid')) : null);
		var destinationParetnDataItem = $(e.destinationNode).closest('#document-list-view').length > 0 ? documentTreeView.dataSource.getByUid($(e.destinationNode.parentElement).closest('[data-uid]').attr('data-uid')) : ($(e.destinationNode).closest('#folder-content-list-view').length > 0 ? folderContentListView.dataSource.getByUid($(e.destinationNode.parentElement).closest('[data-uid]').attr('data-uid')) : null);

		if ($(e.dropTarget).closest('#file-pro-recycle-bin').length > 0 && canDelete)
		{
			var selectedDocumentsId = [];
			var selectedNodes = getSelectedNodes();
			if (selectedNodes.length > 0)
			{
				$.each(selectedNodes, function (index, value)
				{
					selectedDocumentsId.push($(value).find('[data-id]').attr('data-id'));
				});
			}
			else if (sourceDataItem != null)
			{
				selectedDocumentsId.push(sourceDataItem.Id);
			}
			CivicWeb.Documents.DocumentOperations.Events.documentDeleteButtonClick();
		}
		else if (sourceDataItem != null && destinationDataItem != null)
		{
			if (e.dropPosition === 'before' || e.dropPosition === 'after')
			{
				if (sourceDataItem.ParentId !== destinationDataItem.ParentId)
				{
					if (destinationParetnDataItem != null)
					{
						if (destinationParetnDataItem.HasAccess)
						{
							checkDestinationSecurityBeforeMove(e, function (matchSecurity) { moveDocument(e, destinationParetnDataItem.Id, matchSecurity); });
						}
						else
						{
							e.preventDefault();
						}
					}
					else
					{
						checkDestinationSecurityBeforeMove(e, function (matchSecurity) { moveDocument(e, documentId > 0 ? documentId : 0, matchSecurity); });
					}
				}
				else
				{
					reorderDocument(e, true);
				}
			}
			else if (e.dropPosition === 'over' && destinationDataItem.Folder && destinationDataItem.HasAccess)
			{
				if (e.sourceNode !== e.destinationNode && sourceDataItem.Id !== destinationDataItem.Id)
				{
					checkDestinationSecurityBeforeMove(e, function (matchSecurity) { moveDocument(e, destinationDataItem.Id, matchSecurity); });
				}
			}
		}

		stopScroll();
	};

	var documentNodeClick = function (e)
	{
		var currentListViewElem = $(e.target).closest('div#folder-content-list-view').length > 0 ? folderContentListViewClientElem : ($(e.target).closest('div#favorite-folder').length > 0 ? favoriteListViewClientElem : documentsListViewClientElem);
		if ($(e.target).closest('.document-options-container').length === 0)
		{
			previousNodesSelected = [];
			var documentRow = $(e.target).closest('.k-item');
			var nodeId = $(documentRow).find('[data-id]').first().attr('data-id');
			var checked = $(documentRow).find('input#' + (documentCheckboxClientId + nodeId)).prop('checked');

			if (e.ctrlKey)
			{
				$('[aria-selected=true]').attr('aria-selected', false);
				if (!$(documentRow).find('.k-in').hasClass('k-state-selected'))
				{
					previousNodesSelected = currentListViewElem.find('.k-state-selected');
					previousNodesSelected.push($(documentRow).find('.k-in'));
					if (documentView !== documentViewType.previewView)
					{
						if (!isFreemium)
						{
							$(documentRow).find('.social-media-share').removeClass('hidden');
						}
						$(documentRow).find('.edit-node-icon').removeClass('hidden');
						$(documentRow).find('.favorite-icon').removeClass('hidden');
					}
					$(documentRow).attr('aria-selected', true);
				}
				else
				{
					$(documentRow).find('.k-state-selected').removeClass('k-state-selected');
					$(documentRow).find('input#' + (documentCheckboxClientId + nodeId)).prop('checked', false);
					$(documentRow).find('.social-media-share').addClass('hidden');
					$(documentRow).find('.edit-node-icon').addClass('hidden');
					$(documentRow).find('.favorite-icon').addClass('hidden');
					previousNodesSelected = currentListViewElem.find('.k-state-selected');
					if (previousNodesSelected.length)
					{
						$(previousNodesSelected[0]).closest('.k-item').attr('aria-selected', true);
					}
				}
				$(documentRow).find('input#' + (documentCheckboxClientId + nodeId)).prop('checked', !checked);
				currentListViewElem.find('.k-state-hover').removeClass('k-state-hover');
			}
			else if (e.shiftKey)
			{
				currentListViewElem.find('.social-media-share').addClass('hidden');
				currentListViewElem.find('.edit-node-icon').addClass('hidden');
				currentListViewElem.find('.favorite-icon').addClass('hidden');

				var lastSelectedUid = $('[aria-selected=true]').attr('data-uid');
				var currentSelectedUid = $(e.target).closest('.k-item').attr('data-uid');
				var selecting = false;
				if (lastSelectedUid !== currentSelectedUid)
				{
					$('input[id^=' + documentCheckboxClientId + ']').prop('checked', false);
					var listItems = currentListViewElem.find('.k-item');
					$.each(listItems, function (i, node)
					{
						var currentNodeUid = $(node).attr('data-uid');
						if (selecting)
						{
							previousNodesSelected.push($(node).find('.k-in'));
							$(node).find('input[id^=' + documentCheckboxClientId + ']').prop('checked', true);
							if (documentView !== documentViewType.previewView)
							{
								$(node).find('.social-media-share').removeClass('hidden');
								$(node).find('.edit-node-icon').removeClass('hidden');
								$(node).find('.favorite-icon').removeClass('hidden');
							}
							if ((currentNodeUid === lastSelectedUid) || (currentNodeUid === currentSelectedUid))
							{
								selecting = !selecting;
							}
						}
						else if ((currentNodeUid === lastSelectedUid) || (currentNodeUid === currentSelectedUid))
						{
							previousNodesSelected.push($(node).find('.k-in'));
							$(node).find('input[id^=' + documentCheckboxClientId + ']').prop('checked', true);
							if (documentView !== documentViewType.previewView)
							{
								$(node).find('.social-media-share').removeClass('hidden');
								$(node).find('.edit-node-icon').removeClass('hidden');
								$(node).find('.favorite-icon').removeClass('hidden');
							}
							selecting = !selecting;
						}
						if (i === listItems.length)
						{
							$(node).attr('aria-selected', true);
						}
					});
				}
				currentListViewElem.find('.k-state-hover').removeClass('k-state-hover');
			}
			else
			{
				$('input[id^=' + documentCheckboxClientId + ']').prop('checked', false);
				currentListViewElem.find('.k-state-selected').removeClass('k-state-selected');
				currentListViewElem.find('.k-state-hover').removeClass('k-state-hover');
				currentListViewElem.find('.k-state-focused').removeClass('k-state-focused');

				$('[aria-selected=true]').attr('aria-selected', false);
				previousNodesSelected.push($(documentRow).find('.k-in'));
				$(documentRow).find('.k-in').addClass('k-state-focused');
				$(documentRow).attr('aria-selected', true);

				currentListViewElem.find('.social-media-share').addClass('hidden');
				currentListViewElem.find('.edit-node-icon').addClass('hidden');
				currentListViewElem.find('.favorite-icon').addClass('hidden');
				$(documentRow).find('input#' + (documentCheckboxClientId + nodeId)).prop('checked', true);
			}
		}
	};

	var documentNodeMouseDown = function (e)
	{
		var currentListViewElem = $(e.target).closest('div#folder-content-list-view').length > 0 ? folderContentListViewClientElem : documentsListViewClientElem;
		if ($(e.target).closest('.document-options-container').length === 0 && !e.ctrlKey && !e.shiftKey)
		{
			var documentRow = $(e.target).closest('.k-item');
			var nodeId = $(documentRow).find('[data-id]').first().attr('data-id');
			if (!$(documentRow).find('input#' + (documentCheckboxClientId + nodeId)).prop('checked') && nodeId > 0)
			{
				$('input[id^=' + documentCheckboxClientId + ']').prop('checked', false);
				currentListViewElem.find('.k-state-selected').removeClass('k-state-selected');
				currentListViewElem.find('.k-state-hover').removeClass('k-state-hover');
				currentListViewElem.find('.k-state-focused').removeClass('k-state-focused');
				$('[aria-selected=true]').attr('aria-selected', false);
				previousNodesSelected = [];
				previousNodesSelected.push($(documentRow).find('.k-in'));
				$(documentRow).find('.k-in').addClass('k-state-focused');
				$(documentRow).find('.k-in').addClass('k-state-selected');
				$(documentRow).attr('aria-selected', true);

				currentListViewElem.find('.social-media-share').addClass('hidden');
				currentListViewElem.find('.edit-node-icon').addClass('hidden');
				currentListViewElem.find('.favorite-icon').addClass('hidden');
				$(documentRow).find('input#' + (documentCheckboxClientId + nodeId)).prop('checked', true);
			}
		}
	};
	//#endregion

	//#region Selecting Document Events
	var documentListClick = function (e)
	{
		var evt = e || window.event;
		if (evt.which === 1 || evt.button === 0)
		{
			var id = $(this).closest('.document-list-view-documents').attr('data-id');
			var title = $(this).closest('.document-list-view-documents').attr('data-title');
			var ids = $('.document-list-view-documents[data-type=\'document\']').map(function () { return $(this).attr('data-id'); }).get();
			if (id > 0)
			{
				if (documentView !== documentViewType.previewView)
				{
					if (!mobileBrowser)
					{
						CivicWeb.Common.QuickViews.loadQuickView(id, ids, { viewDeleted: documentRecycleBinView, attachmentUrl: attachmentUrl });
					}
					else
					{
						window.open('/document/' + id);
					}
				}
				else
				{
					CivicWeb.Documents.DocumentOperations.Events.changePreviewUrl(id);
					previewDocument(id);
				}

				if (!documentRecycleBinView)
				{
					var isFolder = $(this).closest('.document-thumbnail-view-documents').attr('data-type') === dataType.folder;
					CivicWeb.Common.SocialMediaShares.createInstance({ clientId: socialMediaShareClientId + 'quick-view', url: window.location.protocol + '//' + window.location.hostname + (isFreemium && !isFolder ? '/document/' : '/filepro/documents/') + id, title: title, itemId: id, localization: socialMediaLocalization, isFolder: isFolder });
					setTimeout(function () { $(document.getElementById(socialMediaShareClientId + 'quick-view')).removeClass('hidden'); }, 0);
				}
			}
			e.preventDefault();
		}
	};

	var documentThumbnailClick = function (e)
	{
		var id = $(this).closest('.document-thumbnail-view-documents').attr('data-id');
		var title = $(this).closest('.document-thumbnail-view-documents').attr('data-title');
		var type = $(this).closest('.document-thumbnail-view-documents').attr('data-type');
		var ids = $('.document-thumbnail-view-documents[data-type=\'document\']').map(function () { return $(this).attr('data-id'); }).get();
		if (id > 0 && type === 'document')
		{
			CivicWeb.Common.QuickViews.loadQuickView(id, ids, { viewDeleted: documentRecycleBinView, attachmentUrl: attachmentUrl });
			CivicWeb.Common.SocialMediaShares.createInstance({ clientId: socialMediaShareClientId + 'quick-view', url: window.location.protocol + '//' + window.location.hostname + (isFreemium && type != dataType.folder ? '/document/' : '/filepro/documents/') + id, title: title, itemId: id, localization: socialMediaLocalization, isFolder: type === dataType.folder });
			setTimeout(function () { $(document.getElementById(socialMediaShareClientId + 'quick-view')).removeClass('hidden').css({ 'margin-top': '0.4em', 'margin-left': '1em', 'float': 'left' }); }, 0);
		}
		else if (type === 'folder')
		{
			window.location.href = '/filepro/documents/' + id;
		}

		e.preventDefault();
	};

	var documentThumbnailSelect = function (e)
	{
		var thumbnailCheckbox = $(this).closest('.document-thumbnail-view-documents').find('.select-thumbnail-checkbox');
		var documentId = $(this).closest('.document-thumbnail-view-documents').find('.select-thumbnail-checkbox').attr('data-id');
		var checked = thumbnailCheckbox.prop('checked');
		if (!$(e.target).hasClass('select-thumbnail-checkbox'))
		{
			thumbnailCheckbox.prop('checked', !checked);
			$(document.getElementById(documentCheckboxClientId + documentId)).prop('checked', !checked);
		}
		else
		{
			$(document.getElementById(documentCheckboxClientId + documentId)).prop('checked', checked);
		}
	};

	var selectAllDocumentsClicked = function ()
	{
		$('input[id^=' + documentCheckboxClientId + ']:not(input[id=' + documentCheckboxClientId + '-1])').prop('checked', this.checked);
		$('[aria-selected=true]').attr('aria-selected', false);
		if (documentView !== documentViewType.previewView)
		{
			if (this.checked)
			{
				$('.k-in:not(:has(div[data-id="-1"]))').addClass('k-state-selected');
				if (!isFreemium)
				{
					documentsListViewClientElem.find('.social-media-share').removeClass('hidden');
				}
				documentsListViewClientElem.find('.edit-node-icon').removeClass('hidden');
				documentsListViewClientElem.find('.favorite-icon').removeClass('hidden');
			}
			else
			{
				$('.k-in').removeClass('k-state-selected');
				documentsListViewClientElem.find('.social-media-share').addClass('hidden');
				documentsListViewClientElem.find('.edit-node-icon').addClass('hidden');
				documentsListViewClientElem.find('.favorite-icon').addClass('hidden');
			}
		}
	};
	//#endregion

	//#region Upload Document Events
	var uploadDocumentClick = function ()
	{
		if (setTopLevelSelectedFolder())
		{
			if (checkCreatePermissions())
			{
				if (window.FormData === null)
				{
					$(document.getElementById('document-upload-form-iframe')).contents().find('body').append($(document.getElementById(documentUploadFormClientId)));
					$(document.getElementById('document-upload-form-iframe')).contents().find('#' + documentUploadInputClientId).trigger('click');
				}
				else
				{
					//Open file selector window
					$(document.getElementById(documentUploadInputClientId)).trigger('click');
				}
			}
			else
			{
				displayUploadPermissionRequiredWindow(localization.warningMessageUpdatePermissionsRequiredToUploadDocument);
				//alert(localization.warningMessageUpdatePermissionsRequiredToUploadDocument);
			}
			CivicWeb.Common.Instrumentation.recordAction('DC - Direct Upload button');
		}
		else
		{
			alert(localization.documentsUploadSelectedFolderWarning);
		}
	};

	var dropUploadDocument = function (e)
	{
		e.stopPropagation();
		e.preventDefault();
		if ($(e.target).attr('id') !== (selectedPermissionsClientId + schemaTypes.folder) && $(e.target).attr('id') !== (selectedPermissionsClientId + schemaTypes.documents) && $(e.target).closest('[data-id]').attr('data-id') > 0 || ($(e.target).attr('id') === 'document-list-view'))
		{
			$(e.target).css({ 'background-color': '' });
			var documentUploadListData = {};
			documentUploadListData.files = [];
			documentUploadListData.parentId = $(e.target).closest('[data-id]').attr('data-id') !== null && $(e.target).closest('.k-item').find('[data-type]').attr('data-type') === dataType.folder ? $(e.target).closest('[data-id]').attr('data-id') : (documentId > 0 ? documentId : 0);
			if (e.originalEvent.dataTransfer)
			{
				var files = e.originalEvent.dataTransfer.files;
				var count = 1;
				$.each(files, function (i, file)
				{
					var reader = new FileReader();
					reader.onload = (function (file)
					{
						return function (evt)
						{
							if (file)
							{
								var fileToUpload = {};
								fileToUpload.title = file.name;
								fileToUpload.type = file.type;
								fileToUpload.size = file.size;
								fileToUpload.data = evt.target.result;
								documentUploadListData.files.push(fileToUpload);
								if (count === files.length)
								{
									dragUploadDocuments(documentUploadListData);
								}
								count++;
							}
						};
					})(file);
					reader.readAsDataURL(file);
				});
			}
			CivicWeb.Common.Instrumentation.recordAction('DC - Direct Upload Drag Drop');
		}
	};

	var dragOverUploadDocument = function (e)
	{
		e.stopPropagation();
		e.preventDefault();
		e.originalEvent.dataTransfer.dropEffect = 'copy';
		$(e.target).closest('.k-item').find('.k-in').addClass('k-state-hover');
	};

	var dragOutUploadDocument = function (e)
	{
		$(e.target).closest('.k-item').find('.k-in').removeClass('k-state-hover');
	};

	var confirmUploadedDocumentSecurityClick = function (documentIds)
	{
		var documentListData = {};
		documentListData.documents = [];
		var validTitles = true;
		var classificationDocuments = [];
		$.each(documentIds, function (index, value)
		{
			var currentDoc = {};
			currentDoc.id = value;
			var titleField = $(document.getElementById(uploadedDocumentListClientId)).find('input.uploaded-document-rename[data-id=' + value + ']');
			if (titleField.val().trim().length === 0)
			{
				validTitles = false;
				titleField.focus();
			}
			currentDoc.title = titleField.val();
			currentDoc.record = $(document.getElementById(uploadedDocumentListClientId)).find('input:checkbox[data-id=' + value + '][data-type=\'record\']').prop('checked');
			currentDoc.agenda = agendaNotesLiteEnabled ? $(document.getElementById(uploadedDocumentListClientId)).find('input:checkbox[data-id=' + value + '][data-type=\'agenda\']').prop('checked') : false;
			documentListData.documents.push(currentDoc);

			//Get the documents to classify
			if (classifyAsRecord && currentDoc.record)
			{
				classificationDocuments.push({ id: currentDoc.id, type: titleField.attr('data-document-type') || '', title: currentDoc.title });
			}
		});
		documentListData.saveToTop = $(document.getElementById('save-to-top-radio')).prop('checked');

		if (!validTitles)
		{
			CivicWeb.Common.Notification.show(documentTitleWarningClientId, CivicWeb.Common.Notification.types.warning, localization.titleRequiredWarningMessageText);
		}
		else
		{
			$(document.getElementById(documentTitleWarningClientId)).addClass('hidden');
			documentListData.documentIds = documentIds;
			documentListData.permissions = CivicWeb.Common.Permissions.buildPermissionsObject(schemaTypes.documents);
			var existingButtonText = CivicWeb.Common.Button.update(confirmSecurityButtonClientId, localization.savingText, true, true);

			checkLockout(schemaTypes.documents).then(function ()
			{
				return $.ajax({
					url: '/api/documents/updatesecurity',
					contentType: 'application/json',
					dataType: 'json',
					async: true,
					cache: false,
					type: 'POST',
					data: JSON.stringify(documentListData)
				}).done(function (response)
				{
					if (response.Result)
					{
						CivicWeb.Common.Notification.show(documentSecurityResult, CivicWeb.Common.Notification.types.success, localization.savingSucceededNotificationText);

						//Classify
						classificationDocuments.classification = caseFileData.classification;
						classificationDocuments.destructionDate = caseFileData.destructionDate;
						CivicWeb.Common.Classifies.load(classificationDocuments, function () { setTimeout(function () { window.location.reload(); }, 1500); });
					}

					CivicWeb.Common.Button.update(confirmSecurityButtonClientId, existingButtonText, false, false);
				}).fail(function ()
				{
					CivicWeb.Common.Button.update(confirmSecurityButtonClientId, existingButtonText, false, false);
				});
			}, function ()
				{
					CivicWeb.Common.Button.update(confirmSecurityButtonClientId, existingButtonText, false, false);
				});
		}
	};

	var checkLockout = function (schemaType)
	{
		var lockedOutPromise = $.Deferred();
		CivicWeb.Common.Permissions.isLockedOut(schemaType).then(function (lockedOut)
		{
			if (!lockedOut || confirm(localization.securityLockOutWarningMessageText))
			{
				lockedOutPromise.resolve();
			}
			else
			{
				lockedOutPromise.reject();
			}
		}, function ()
			{
				lockedOutPromise.reject();
			});

		return lockedOutPromise;
	};
	//#endregion

	//#region Sorting/Moving Document Events
	var editSortClick = function (e)
	{
		$(document.getElementById('sort-processing')).removeClass('hidden');
		var field = $('input[name=sortField]:checked').val();
		var sortDirection = $('input[name=sortOption]:checked').val().toLowerCase() === sort.ascending ? 'asc' : 'desc';
		setTimeout(function ()
		{
			sortDocumentList(documentTreeView, field, sortDirection);
			$(document.getElementById('sort-processing')).addClass('hidden');
			if (!isLoggedIn)
			{
				CivicWeb.Common.Cookie.set('sortField', field, 365);
				CivicWeb.Common.Cookie.set('sortOption', sortDirection, 365);

				sortField = field;
				sortOption = sortDirection;
			}
			else
			{
				if (toogleOrderingModeButtonClientElem.attr('data-enabled') === 'true')
				{
					CivicWeb.Common.Button.update('save-order-button', localization.saveOrderText, false, false);
					$(document.getElementById('save-order-button')).removeClass('hidden');
				}
				else
				{
					saveCurrentSort(field, sortDirection);
				}
			}
		}, 500);

		e.preventDefault();
	};

	var documentsHeaderLinkClicked = function (e)
	{
		$(document.getElementById('sort-processing')).removeClass('hidden');
		var header = e.target;
		var field = $(header).attr('data-sort') === sort.descending ? 'Order' : $(header).attr('data-field');
		var sortDirection = ($(header).attr('data-sort') === sort.none || $(header).attr('data-sort') === sort.descending) ? 'asc' : 'desc';

		setTimeout(function ()
		{
			sortDocumentList(documentTreeView, field, sortDirection);
			$(document.getElementById('sort-processing')).addClass('hidden');

			//Set the sort dropdown values
			fileProSortDropDownClientElem.find('input[value=' + field + '][name=sortField]').prop('checked', true);
			fileProSortDropDownClientElem.find('input[value=' + (sortDirection === 'asc' ? 'Ascending' : 'Descending') + '][name=sortOption]').prop('checked', true);
			if (isLoggedIn && toogleOrderingModeButtonClientElem.attr('data-enabled') === 'true')
			{
				CivicWeb.Common.Button.update('save-order-button', localization.saveOrderText, false, false);
				$(document.getElementById('save-order-button')).removeClass('hidden');
			}
		}, 500);
	};

	var toogleOrderingModeClick = function ()
	{
		if (documentTreeView !== null)
		{
			$(document.getElementById('sort-processing')).removeClass('hidden');
			var enabled = toogleOrderingModeButtonClientElem.attr('data-enabled');
			if (enabled === 'false')
			{
				CivicWeb.Common.Instrumentation.recordAction('DocumentCenter - enable ordering mode clicked');
				sortDocumentList(documentTreeView, 'Order', 'asc');
				saveCurrentSort('Order', 'asc');
				//Set sort for the user
				if (!isLoggedIn)
				{
					CivicWeb.Common.Cookie.set('sortField', 'Order', 365);
					CivicWeb.Common.Cookie.set('sortOption', 'asc', 365);

					sortField = 'Order';
					sortOption = 'asc';
				}
				else if (currentUserSort)
				{
					currentUserSort.DocumentSortField = 'Order';
					currentUserSort.DocumentSortOrder = 'asc';
				}
				documentTreeView.setDataSource(getTreeViewDataSource(documentId, true));
				documentTreeView.dataSource.read();
				documentTreeView.setOptions({ 'dragAndDrop': true });
				documentTreeView.bind('dragstart', documentNodeDragStart);
				documentTreeView.bind('drag', documentNodeDrag);
				documentTreeView.bind('drop', documentNodeDrop);

				if (folderContentListView !== null)
				{
					folderContentListView.setOptions({ 'dragAndDrop': true });
					folderContentListView.setDataSource(getTreeViewDataSource(documentId, true));
					sortDocumentList(folderContentListView, 'Order', 'asc');
				}
				$(document.getElementById(sortOptionDefault)).prop('checked', true);
				$(document.getElementById(sortOptionAscending)).prop('checked', true);
				toogleOrderingModeButtonClientElem.attr('data-enabled', true);
				toogleOrderingModeButtonClientElem.text(localization.documentDisableOrderingMode);
				$(document.getElementById(orderingModeWarningClientId)).text(localization.documentOrderingModeEnabled);
				$(document.getElementById(orderingModeWarningClientId)).removeClass('hidden');
				$(document.getElementById('file-pro-sort-label')).click();
			}
			else
			{
				documentTreeView.setDataSource(getTreeViewDataSource(documentId, false));
				documentTreeView.dataSource.read();
				documentTreeView.setOptions({ 'dragAndDrop': false });
				documentTreeView.unbind('dragstart', documentNodeDragStart);
				documentTreeView.unbind('drag', documentNodeDrag);
				documentTreeView.unbind('drop', documentNodeDrop);

				if (folderContentListView !== null)
				{
					folderContentListView.setOptions({ 'dragAndDrop': false });
					folderContentListView.setDataSource(getTreeViewDataSource(documentId, false));
					sortDocumentList(folderContentListView, 'Order', 'asc');
				}
				toogleOrderingModeButtonClientElem.attr('data-enabled', false);
				toogleOrderingModeButtonClientElem.text(localization.documentEnableOrderingMode);
				$(document.getElementById(orderingModeWarningClientId)).text(localization.documentOrderingModeDisabled);
				$(document.getElementById(orderingModeWarningClientId)).addClass('hidden');
				$(document.getElementById('file-pro-sort-label')).click();
				$(document.getElementById('redo-reorder-button')).addClass('hidden');
				$(document.getElementById('undo-reorder-button')).addClass('hidden');
				$(document.getElementById('save-order-button')).addClass('hidden');
			}
			resizeDocumentList();
		}
	};

	var reorderDocument = function (e, reorderOnly)
	{
		var currentActions = { action: (e.dropPosition === 'over' ? 'move' : 'reorder') };
		var documentReorderList = [];
		var destinationObj = {};
		var sourceObj = {};

		var destinationNode = $(e.destinationNode);
		var destinationNodeId = Number(destinationNode.find('[data-id]').attr('data-id'));
		var destinationTreeView = destinationNode.closest('div#folder-content-list-view').length > 0 ? folderContentListView : (documentTreeView.dataSource.get(destinationNodeId) !== null ? documentTreeView : null);
		var destinationDataItem = destinationTreeView.dataSource.get(destinationNodeId);
		var destinationUid = destinationDataItem.uid;
		var otherDestinationTreeView = destinationNode.closest('div#document-list-view').length > 0 ? (folderContentListView && folderContentListView.dataSource.get(destinationNodeId) !== null ? folderContentListView : null) : (documentTreeView.dataSource.get(destinationNodeId) !== null ? documentTreeView : null);
		var otherDestinationDataItem = otherDestinationTreeView ? otherDestinationTreeView.dataSource.get(destinationNodeId) : null;
		var otherDestinationUid = otherDestinationDataItem ? otherDestinationDataItem.uid : null;

		destinationObj = {
			destinationNode: destinationNode,
			destinationNodeId: destinationNodeId,
			destinationTreeView: destinationTreeView,
			destinationDataItem: destinationDataItem,
			destinationUid: destinationUid,
			otherDestinationTreeView: otherDestinationTreeView,
			otherDestinationDataItem: otherDestinationDataItem,
			otherDestinationUid: otherDestinationUid
		};
		var selectedNodes = getSelectedNodes();
		if (selectedNodes.length > 0)
		{
			let folderlist = [];
			for (let i = 0; i < selectedNodes.length; i++) {
				let sourceNode = $(selectedNodes[i]);
				let sourceNodeId = sourceNode.find('[data-id]').attr('data-id');
				let isFolder = sourceNode.find('[data-parentid]').attr('data-type') === dataType.folder;
				if (isFolder) {
					folderlist.push(sourceNodeId);
				}
			}
			for (var i = selectedNodes.length - 1; i >= 0; i--)
			{
				var sourceNode = $(selectedNodes[i]);
				var sourceNodeId = Number(sourceNode.find('[data-id]').attr('data-id'));
				var sourceTreeView = sourceNode.closest('div#folder-content-list-view').length > 0 ? folderContentListView : (documentTreeView.dataSource.get(sourceNodeId) !== null ? documentTreeView : null);
				var sourceDataItem = sourceTreeView.dataSource.get(sourceNodeId);
				var sourceNodeUid = sourceDataItem.uid;

				var otherSourceTreeView = sourceNode.closest('div#document-list-view').length > 0 ? (folderContentListView && folderContentListView.dataSource.get(sourceNodeId) !== null ? folderContentListView : null) : (documentTreeView.dataSource.get(sourceNodeId) !== null ? documentTreeView : null);
				var otherSourceDataItem = otherSourceTreeView ? otherSourceTreeView.dataSource.get(sourceNodeId) : null;
				var otherSourceUid = otherSourceDataItem ? otherSourceDataItem.uid : null;
				sourceObj = {
					sourceNode: sourceNode,
					sourceNodeId: sourceNodeId,
					sourceTreeView: sourceTreeView,
					sourceDataItem: sourceDataItem,
					sourceNodeUid: sourceNodeUid,
					otherSourceTreeView: otherSourceTreeView,
					otherSourceDataItem: otherSourceDataItem,
					otherSourceUid: otherSourceUid
				};
				if (folderlist.indexOf($(sourceNode).find('[data-parentid]').attr('data-parentid')) < 0)
				{
					documentReorderList.push(reorderDocumentsInTreeView(sourceObj, destinationObj, e.dropPosition));
				}
				var movedLi = $(document.getElementById('document-checkbox-' + sourceNodeId)).closest('li');
				if (movedLi && movedLi.length)
				{
					movedLi.find('#document-checkbox-' + sourceNodeId).off('click', nodeCheckboxClicked).on('click', nodeCheckboxClicked);
					movedLi.find('.document-link').off('click').on('click', documentListClick);
					movedLi.find('.favorite-icon').off('click').on('click', favoriteClick).on('keydown', favoriteKeyDown);
					movedLi.find('.k-in').off('click', documentNodeClick).on('click', documentNodeClick);
					movedLi.find('.k-in').off('mousedown', documentNodeMouseDown).on('mousedown', documentNodeMouseDown);

					var leftOffset = movedLi.find('.document-list-view-name').offset().left;
					movedLi.find('.document-list-view-name').width(((nameHeaderWidth - leftOffset + 5)) + 'px');
					movedLi.find('.document-list-view-modified').width((modifiedHeaderWidth + 5) + 'px');
					movedLi.find('.document-list-view-size').width((sizeHeaderWidth - (sizeHeaderWidth * 0.3)) + 'px');
				}
			}
		}
		else
		{
			var sourceNode = $(e.sourceNode);
			var sourceNodeId = Number(sourceNode.find('[data-id]').attr('data-id'));
			var sourceTreeView = sourceNode.closest('div#folder-content-list-view').length > 0 ? folderContentListView : (documentTreeView.dataSource.get(sourceNodeId) !== null ? documentTreeView : null);
			var sourceDataItem = sourceTreeView.dataSource.get(sourceNodeId);
			var sourceNodeUid = sourceDataItem.uid;

			var otherSourceTreeView = sourceNode.closest('div#document-list-view').length > 0 ? (folderContentListView && folderContentListView.dataSource.get(sourceNodeId) !== null ? folderContentListView : null) : (documentTreeView.dataSource.get(sourceNodeId) !== null ? documentTreeView : null);
			var otherSourceDataItem = otherSourceTreeView ? otherSourceTreeView.dataSource.get(sourceNodeId) : null;
			var otherSourceUid = otherSourceDataItem ? otherSourceDataItem.uid : null;
			sourceObj = {
				sourceNode: sourceNode,
				sourceNodeId: sourceNodeId,
				sourceTreeView: sourceTreeView,
				sourceDataItem: sourceDataItem,
				sourceNodeUid: sourceNodeUid,
				otherSourceTreeView: otherSourceTreeView,
				otherSourceDataItem: otherSourceDataItem,
				otherSourceUid: otherSourceUid
			};
			documentReorderList.push(reorderDocumentsInTreeView(sourceObj, destinationObj, e.dropPosition));
		}

		var documentList = [];
		var parentId = destinationTreeView.dataSource.get(destinationNode.find('[data-id]').attr('data-id')).ParentId;
		if (e.dropPosition === 'before' || e.dropPosition === 'after')
		{
			documentList = $(e.destinationNode.parentElement).find('.document-list-view-documents').filter(function ()
			{
				return parseInt($(this).attr('data-parentid')) === parentId || $(this).attr('data-id') === $(e.sourceNode).find('.document-list-view-documents').attr('data-id');
			});
		}

		var documentListObject = [];
		for (var index = 0; index < documentList.length; index++)
		{
			var value = documentList[index];
			var documentNode = {};
			var order = index + 1;
			$(value).attr({ 'data-order': order, 'data-parentid': parentId });
			documentNode.id = $(value).attr('data-id');
			documentListObject.push(documentNode);
			destinationObj.destinationTreeView.dataSource.get(documentNode.id).Order = Number(documentNode.order);
			destinationObj.destinationTreeView.dataSource.get(documentNode.id).ParentId = Number(parentId);

			for (var index2 = 0; index2 < documentReorderList.length; index2++)
			{
				if ($(value).attr('data-id') === documentReorderList[index2].Id)
				{
					documentReorderList[index2].newPosition.order = order;
				}
			}
		}

		//Record action in localstorage for undo
		if (localStorageAvailable())
		{
			currentActions.documents = documentReorderList;
			var lastStoredIndex = localStorage.getItem('lastStoredOrderIndex') !== null ? localStorage.getItem('lastStoredOrderIndex') : -1;
			if (lastStoredIndex < 5)
			{
				var previousSteps = localStorage.getItem('documentListActionHistory');
				previousSteps = previousSteps !== null ? JSON.parse(previousSteps) : [];
				previousSteps.push(currentActions);
				if (previousSteps.length === 5)
				{
					previousSteps.shift();
				}
				localStorage.setItem('documentListActionHistory', JSON.stringify(previousSteps));
				lastStoredIndex = previousSteps.length - 1;
				localStorage.setItem('lastStoredOrderIndex', lastStoredIndex);
				$(document.getElementById('undo-reorder-button')).removeClass('hidden');
			}
		}

		if (documentListObject.length)
		{
			saveDocumentListOrder(documentListObject, reorderOnly);
		}
	};

	var reorderDocumentsInTreeView = function (sourceData, destinationData, dropPosition)
	{
		var prevSourceNode = sourceData.sourceTreeView.findByUid(sourceData.sourceNodeUid).prev();
		var nextSourceNode = sourceData.sourceTreeView.findByUid(sourceData.sourceNodeUid).next();

		var siblingNode = prevSourceNode.length > 0 ? prevSourceNode : (nextSourceNode.length > 0 ? nextSourceNode : null);
		var position = prevSourceNode.length > 0 ? 'after' : (nextSourceNode.length > 0 ? 'before' : (dropPosition === 'over' ? '' : 'over'));
		var dataItemSibling = sourceData.sourceTreeView.dataSource.get($(siblingNode).find('[data-id]').attr('data-id'));
		var documentAction = {};
		documentAction.Id = sourceData.sourceNodeId;
		documentAction.oldPosition = {
			parentId: sourceData.sourceDataItem.ParentId,
			position: position,
			siblingId: dataItemSibling ? dataItemSibling.Id : 0,
			order: sourceData.sourceNode.find('[data-order]').attr('data-order'),
			treeViewId: sourceData.sourceTreeView.wrapper.attr('id')
		};

		documentAction.newPosition = {
			parentId: dropPosition === 'over' ? destinationData.destinationNodeId : destinationData.destinationTreeView.dataSource.get(destinationData.destinationNodeId).ParentId,
			position: dropPosition === 'over' ? '' : 'over',
			siblingId: 0,
			treeViewId: destinationData.destinationTreeView.wrapper.attr('id')
		};

		var otherTreeViewDestinationExists = destinationData.otherDestinationUid && destinationData.otherDestinationTreeView.findByUid(destinationData.otherDestinationUid).length;
		var otherTreeViewSourceExists = sourceData.otherSourceUid && sourceData.otherSourceTreeView.findByUid(sourceData.otherSourceUid).length;
		var otherTreeViewDataExists = otherTreeViewSourceExists && otherTreeViewDestinationExists;

		nodeReodering = true;
		switch (dropPosition)
		{
			case 'before':
				if (destinationData.destinationNode.attr('data-uid') !== null)
				{
					destinationData.destinationTreeView.insertBefore(sourceData.sourceTreeView.findByUid(sourceData.sourceNodeUid), destinationData.destinationTreeView.findByUid(destinationData.destinationUid));
					if (otherTreeViewDataExists)
					{
						destinationData.otherDestinationTreeView.insertBefore(sourceData.otherSourceTreeView.findByUid(sourceData.otherSourceUid), destinationData.otherDestinationTreeView.findByUid(destinationData.otherDestinationUid));
					}
					else if (otherTreeViewDestinationExists)
					{
						destinationData.otherDestinationTreeView.insertBefore(sourceData.sourceDataItem, destinationData.otherDestinationTreeView.findByUid(destinationData.otherDestinationUid));
					}
					else if (otherTreeViewSourceExists)
					{
						sourceData.otherSourceTreeView.detach(sourceData.otherSourceTreeView.findByUid(sourceData.otherSourceUid));
					}
					documentAction.newPosition.position = 'before';
					documentAction.newPosition.siblingId = destinationData.destinationNodeId;
				}
				else
				{
					destinationData.destinationTreeView.append(sourceData.sourceTreeView.findByUid(sourceData.sourceNodeUid));
				}
				break;

			case 'after':
				if (destinationData.destinationNode.attr('data-uid') !== null)
				{
					destinationData.destinationTreeView.insertAfter(sourceData.sourceTreeView.findByUid(sourceData.sourceNodeUid), destinationData.destinationTreeView.findByUid(destinationData.destinationUid));
					if (otherTreeViewDataExists)
					{
						destinationData.otherDestinationTreeView.insertAfter(sourceData.otherSourceTreeView.findByUid(sourceData.otherSourceUid), destinationData.otherDestinationTreeView.findByUid(destinationData.otherDestinationUid));
					}
					else if (otherTreeViewDestinationExists)
					{
						destinationData.otherDestinationTreeView.insertAfter(sourceData.sourceDataItem, destinationData.otherDestinationTreeView.findByUid(destinationData.otherDestinationUid));
					}
					else if (otherTreeViewSourceExists)
					{
						sourceData.otherSourceTreeView.detach(sourceData.otherSourceTreeView.findByUid(sourceData.otherSourceUid));
					}
					documentAction.newPosition.position = 'after';
					documentAction.newPosition.siblingId = destinationData.destinationNodeId;
				}
				else
				{
					destinationData.destinationTreeView.append(sourceData.sourceTreeView.findByUid(sourceData.sourceNodeUid));
					if (destinationData.otherDestinationUid && sourceData.otherSourceUid)
					{
						destinationData.otherDestinationTreeView.append(sourceData.otherSourceTreeView.findByUid(sourceData.otherSourceUid));
					}
				}
				break;

			case 'over':
				useAsyncGetChildList = false;
				if (otherTreeViewDataExists)
				{
					destinationData.otherDestinationTreeView.dataSource.get(destinationData.destinationNodeId).load();
					if (moveToTop)
					{
						var firstNode = destinationData.otherDestinationTreeView.findByUid(destinationData.otherDestinationUid).find('li.k-item').first();
						destinationData.otherDestinationTreeView.insertBefore(sourceData.otherSourceTreeView.findByUid(sourceData.otherSourceUid), destinationData.otherDestinationTreeView.findByUid(firstNode.attr('data-uid')));
					}
					else
					{
						var lastNode = destinationData.otherDestinationTreeView.findByUid(destinationData.otherDestinationUid).find('li.k-item').last();
						destinationData.otherDestinationTreeView.insertAfter(sourceData.otherSourceTreeView.findByUid(sourceData.otherSourceUid), destinationData.otherDestinationTreeView.findByUid(lastNode.attr('data-uid')));
					}
				}
				else if (otherTreeViewSourceExists)
				{
					sourceData.otherSourceTreeView.detach(sourceData.otherSourceTreeView.findByUid(sourceData.otherSourceUid));
				}

				if (destinationData.destinationDataItem.hasChildren)
				{
					nodeReodering = false;
					destinationData.destinationTreeView.expand(destinationData.destinationTreeView.findByUid(destinationData.destinationUid));
					nodeReodering = true;
					if (moveToTop)
					{
						var firstNode = destinationData.destinationNode.find('li.k-item').first();
						destinationData.destinationTreeView.insertBefore(sourceData.sourceNode.closest('li.k-item'), firstNode);
						documentAction.newPosition.position = 'before';
						documentAction.newPosition.siblingId = firstNode.find('div[data-id]').attr('data-id');
					}
					else
					{
						var lastNode = destinationData.destinationNode.find('li.k-item').last();
						destinationData.destinationTreeView.insertAfter(sourceData.sourceNode.closest('li.k-item'), lastNode);
						documentAction.newPosition.position = 'after';
						documentAction.newPosition.siblingId = lastNode.find('div[data-id]').attr('data-id');
					}
				}
				else
				{
					destinationData.destinationTreeView.append(sourceData.sourceNode.closest('li.k-item'), destinationData.destinationNode.closest('li.k-item'));
				}

				useAsyncGetChildList = true;
				break;
		}
		nodeReodering = false;

		//Update parentId for order number update
		setTimeout(function ()
		{
			let data = destinationData.destinationTreeView.findByUid(destinationData.destinationTreeView.dataSource.get(sourceData.sourceNodeId).uid).find('div[data-parentid]');
			let folderlist = [];
			for (let i = 0; i < data.length; i++) {
				let isFolder = $(data[i]).attr('data-type') === dataType.folder;
				if (isFolder)
				{
					folderlist.push($(data[i]).attr('data-id'));
				}
				if (folderlist.indexOf($(data[i]).attr('data-parentid')) < 0) {
					$(data[i]).attr('data-parentid', documentAction.newPosition.parentId);
				}
			}
		}, 0);
		return documentAction;
	};

	var moveDocument = function (e, destinationParentId, matchSecurity)
	{
		var documentList = [];
		var selectedNodes = getSelectedNodes();
		reorderDocument(e);
		setTimeout(function ()
		{
			var destinationTreeViewElem = $(e.destinationNode).closest('div#folder-content-list-view').length > 0 ? folderContentListViewClientElem : documentsListViewClientElem;
			if (selectedNodes.length > 0)
			{
				let folderlist = [];
				$.each(selectedNodes, function (index, value)
				{
					var document = {};
					var nodeId = $(value).find('[data-id]').attr('data-id');
					var node = destinationTreeViewElem.find('div[data-id=' + nodeId + ']');
					document.id = $(node).attr('data-id');
					document.order = $(node).attr('data-order');
					document.parentId = destinationParentId;
					let isFolder = $(node).attr('data-type') === dataType.folder;
					if (isFolder) {
						folderlist.push(nodeId);
					}
					if (folderlist.indexOf($(value).find('[data-parentid]').attr('data-parentid')) < 0)
						documentList.push(document);
				});
			}
			else
			{
				var documentObj = {};
				var node = $(e.sourceNode).find('[data-id]');
				documentObj.id = $(node).attr('data-id');
				documentObj.order = $(node).attr('data-order');
				documentObj.parentId = destinationParentId;
				documentList.push(documentObj);
			}

			var orderSavedNotice = CivicWeb.Common.Notification.hide(orderSavedMessageClientId);
			$.ajax({
				url: '/api/documents/move',
				contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'POST', data: JSON.stringify({ parentId: destinationParentId, documentList: documentList, matchSecurity: matchSecurity }),
				success: function (result)
				{
					if (result.Result)
					{
						CivicWeb.Common.Notification.show(orderSavedNotice, CivicWeb.Common.Notification.types.success, localization.orderSavedText, true);
						setTimeout(function () { CivicWeb.Common.Notification.hide(orderSavedMessageClientId); }, 1500);
					}
				},
				error: function ()
				{
				}
			});
		}, 0);
	};

	var undoReorderButtonClick = function ()
	{
		if (localStorageAvailable())
		{
			var lastStoredIndex = localStorage.getItem('lastStoredOrderIndex') !== null ? localStorage.getItem('lastStoredOrderIndex') : 0;
			var previousSteps = localStorage.getItem('documentListActionHistory');
			if (previousSteps !== null)
			{
				var documentList = [];
				previousSteps = JSON.parse(previousSteps);

				var documentListObject = lastStoredIndex < previousSteps.length ? previousSteps[lastStoredIndex] : previousSteps[previousSteps.length - 1];
				if (documentListObject)
				{
					$.each(documentListObject.documents, function (index, node)
					{
						undoRedoNodeOrder(node, true, documentList);
					});

					if (lastStoredIndex === 0)
					{
						$(document.getElementById('undo-reorder-button')).addClass('hidden');
					}
					if (lastStoredIndex > 0)
					{
						lastStoredIndex--;
					}
					localStorage.setItem('lastStoredOrderIndex', lastStoredIndex);
					if (lastStoredIndex < previousSteps.length)
					{
						$(document.getElementById('redo-reorder-button')).removeClass('hidden');
					}

					var orderSavedNotice = CivicWeb.Common.Notification.hide(orderSavedMessageClientId);
					$.ajax({
						url: '/api/documents/move',
						contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'POST', data: JSON.stringify(documentList),
						success: function (result)
						{
							if (result.Result)
							{
								CivicWeb.Common.Notification.show(orderSavedNotice, CivicWeb.Common.Notification.types.success, localization.orderSavedText, true);
								setTimeout(function () { CivicWeb.Common.Notification.hide(orderSavedMessageClientId); }, 1500);
							}
						},
						error: function ()
						{
						}
					});
				}
			}
		}
	};

	var redoReorderButtonClick = function ()
	{
		if (localStorageAvailable())
		{
			var previousSteps = localStorage.getItem('documentListActionHistory');
			if (previousSteps !== null)
			{
				var documentList = [];
				previousSteps = JSON.parse(previousSteps);
				var lastStoredIndex = localStorage.getItem('lastStoredOrderIndex') !== null ? localStorage.getItem('lastStoredOrderIndex') : 0;
				var documentListObject = lastStoredIndex < previousSteps.length ? previousSteps[lastStoredIndex] : null;
				if (documentListObject)
				{
					$.each(documentListObject.documents, function (index, node)
					{
						undoRedoNodeOrder(node, false, documentList);
					});

					if (lastStoredIndex === previousSteps.length)
					{
						$(document.getElementById('redo-reorder-button')).addClass('hidden');
					}
					if (lastStoredIndex === (previousSteps.length - 1))
					{
						$(document.getElementById('redo-reorder-button')).addClass('hidden');
					}
					else
					{
						lastStoredIndex++;
					}
					localStorage.setItem('lastStoredOrderIndex', lastStoredIndex);
					$(document.getElementById('undo-reorder-button')).removeClass('hidden');

					var orderSavedNotice = CivicWeb.Common.Notification.hide(orderSavedMessageClientId);
					$.ajax({
						url: '/api/documents/move',
						contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'POST', data: JSON.stringify(documentList),
						success: function (result)
						{
							if (result.Result)
							{
								CivicWeb.Common.Notification.show(orderSavedNotice, CivicWeb.Common.Notification.types.success, localization.orderSavedText, true);
								setTimeout(function () { CivicWeb.Common.Notification.hide(orderSavedMessageClientId); }, 1500);
							}
						},
						error: function ()
						{
						}
					});
				}
			}
			else
			{
				$.each(JSON.parse(localStorage.getItem('currentDocumentListOrder')), function (index, value)
				{
					if (documentTreeView)
					{
						documentTreeView.dataSource.get(value.id).Order = Number(value.order);
					}
					documentsListViewClientElem.find('div[data-id=' + value.id + ']').attr({ 'data-order': value.order });
				});
				documentTreeView.dataSource.sort({ field: 'Order', dir: 'asc' });
			}
		}
	};

	var undoRedoNodeOrder = function (node, undo, documentList)
	{
		var oldPositionTreeView = node.oldPosition.treeViewId === 'folder-content-list-view' && folderContentListView !== null ? folderContentListView : documentTreeView;
		var oldPositionOtherTreeView = node.oldPosition.treeViewId === 'folder-content-list-view' && folderContentListView !== null ? documentTreeView : (folderContentListView !== null ? folderContentListView : null);
		var newPositionTreeView = node.newPosition.treeViewId === 'folder-content-list-view' && folderContentListView !== null ? folderContentListView : documentTreeView;
		var newPositionOtherTreeView = node.newPosition.treeViewId === 'folder-content-list-view' && folderContentListView !== null ? documentTreeView : (folderContentListView !== null ? folderContentListView : null);

		var nodePosition = undo ? node.oldPosition : node.newPosition;
		var nodePositionTreeView = undo ? oldPositionTreeView : newPositionTreeView;
		var nodePositionOtherTreeView = undo ? oldPositionOtherTreeView : newPositionOtherTreeView;

		var currentPositionTreeView = undo ? newPositionTreeView : oldPositionTreeView;
		var currentPositionOtherTreeView = undo ? newPositionOtherTreeView : oldPositionOtherTreeView;

		var currentNodeItem = currentPositionTreeView.dataSource.get(node.Id);
		var currentNode = currentNodeItem ? currentPositionTreeView.findByUid(currentPositionTreeView.dataSource.get(node.Id).uid) : null;
		var currentOtherNode = currentPositionOtherTreeView && currentPositionOtherTreeView.dataSource.get(node.Id) ? currentPositionOtherTreeView.findByUid(currentPositionOtherTreeView.dataSource.get(node.Id).uid) : null;

		var siblingNode = undo ? nodePositionTreeView.findByUid(nodePositionTreeView.dataSource.get(nodePosition.siblingId).uid) : (nodePosition.position !== 'over' ? nodePositionTreeView.findByUid(nodePositionTreeView.dataSource.get(nodePosition.siblingId).uid) : nodePositionTreeView.findByUid(nodePositionTreeView.dataSource.get(nodePosition.parentId).uid));
		var siblingOtherNode = nodePositionOtherTreeView && nodePositionOtherTreeView.dataSource.get(nodePosition.siblingId) ? (undo ? nodePositionOtherTreeView.findByUid(nodePositionOtherTreeView.dataSource.get(nodePosition.siblingId).uid) : (nodePosition.position !== 'over' ? nodePositionOtherTreeView.findByUid(nodePositionOtherTreeView.dataSource.get(nodePosition.siblingId).uid) : nodePositionOtherTreeView.findByUid(nodePositionOtherTreeView.dataSource.get(nodePosition.parentId).uid))) : null;

		switch (nodePosition.position)
		{
			case 'after':
				nodePositionTreeView.insertAfter(currentNode, siblingNode);
				if (nodePositionOtherTreeView && currentOtherNode)
				{
					if (siblingOtherNode && currentOtherNode.length > 0)
					{
						nodePositionOtherTreeView.insertAfter(currentOtherNode, siblingOtherNode);
					}
					else if (siblingOtherNode)
					{
						nodePositionOtherTreeView.insertAfter(currentNodeItem, siblingOtherNode);
					}
					else
					{
						nodePositionOtherTreeView.detach(currentOtherNode);
					}
				}
				break;
			case 'before':
				nodePositionTreeView.insertBefore(currentNode, siblingNode);
				if (nodePositionOtherTreeView && currentOtherNode)
				{
					if (siblingOtherNode && currentOtherNode.length > 0)
					{
						nodePositionOtherTreeView.insertBefore(currentOtherNode, siblingOtherNode);
					}
					else if (siblingOtherNode)
					{
						nodePositionOtherTreeView.insertBefore(currentNodeItem, siblingOtherNode);
					}
					else
					{
						nodePositionOtherTreeView.detach(currentOtherNode);
					}
				}
				break;
			case 'over':
				nodePositionTreeView.append(currentNode, siblingNode);
				if (nodePositionOtherTreeView && currentOtherNode)
				{
					if (siblingOtherNode && currentOtherNode.length > 0)
					{
						nodePositionOtherTreeView.append(currentOtherNode, siblingOtherNode);
					}
					else if (siblingOtherNode)
					{
						nodePositionOtherTreeView.append(currentNodeItem, siblingOtherNode);
					}
					else
					{
						nodePositionOtherTreeView.detach(currentOtherNode);
					}
				}
				break;
		}

		var document = {};
		document.id = node.Id;
		document.order = nodePosition.order;
		document.parentId = nodePosition.parentId;
		documentList.push(document);
	};

	var saveOrderButtonClick = function ()
	{
		var documentIds = [];
		CivicWeb.Common.Button.update('save-order-button', localization.savingText, true, true);
		var orderSavedNotice = CivicWeb.Common.Notification.hide(orderSavedMessageClientId);
		$.each($(document.getElementById('document-list-view')).find('ul.k-group'), function (index, documentList)
		{
			documentIds = [];
			documentIds = $(documentList).find('> li > div').find('div[data-id]').map(function ()
			{
				if ($(this).attr('data-id') > 0) { return { 'id': $(this).attr('data-id') }; }
				return null;
			}).get();
			if (documentIds.length > 0)
			{
				$.ajax({
					url: '/api/documents/updateorder?reorderonly=true',
					contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'POST', data: JSON.stringify(documentIds),
					success: function ()
					{
					},
					error: function ()
					{
					}
				});
			}
		});
		setTimeout(function ()
		{
			CivicWeb.Common.Notification.show(orderSavedNotice, CivicWeb.Common.Notification.types.success, localization.orderSavedText, true);
			setTimeout(function () { CivicWeb.Common.Notification.hide(orderSavedMessageClientId); }, 1500);
			$(document.getElementById('save-order-button')).addClass('hidden');
			CivicWeb.Common.Button.update('save-order-button', localization.saveOrderText, false, false);
		}, 1500);
	};

	var saveDocumentListOrder = function (documentListObj, reorderOnly)
	{
		var orderSavedNotice = CivicWeb.Common.Notification.hide(orderSavedMessageClientId);
		$.ajax({
			url: '/api/documents/updateorder?reorderonly=' + (reorderOnly ? 'true' : 'false'),
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'POST', data: JSON.stringify(documentListObj),
			success: function (result)
			{
				if (result.Result)
				{
					CivicWeb.Common.Notification.show(orderSavedNotice, CivicWeb.Common.Notification.types.success, localization.orderSavedText, true);
					setTimeout(function () { CivicWeb.Common.Notification.hide(orderSavedMessageClientId); }, 1500);
				}
			},
			error: function ()
			{
				console.log('error ordering');
			}
		});
	};

	var checkDestinationSecurityBeforeMove = function (e, callback)
	{
		var sourceDocIds = [];
		var dst = 0;
		var sourceDataItem = $(e.sourceNode).closest('#document-list-view').length > 0 ? documentTreeView.dataSource.getByUid($(e.sourceNode).attr('data-uid')) : ($(e.sourceNode).closest('#folder-content-list-view').length > 0 ? folderContentListView.dataSource.getByUid($(e.sourceNode).attr('data-uid')) : null);
		var destinationDataItem = $(e.destinationNode).closest('#document-list-view').length > 0 ? documentTreeView.dataSource.getByUid($(e.destinationNode).attr('data-uid')) : ($(e.destinationNode).closest('#folder-content-list-view').length > 0 ? folderContentListView.dataSource.getByUid($(e.destinationNode).attr('data-uid')) : null);
		var destinationParentDataItem = $(e.destinationNode).closest('#document-list-view').length > 0 ? documentTreeView.dataSource.getByUid($(e.destinationNode.parentElement).closest('[data-uid]').attr('data-uid')) : ($(e.destinationNode).closest('#folder-content-list-view').length > 0 ? folderContentListView.dataSource.getByUid($(e.destinationNode.parentElement).closest('[data-uid]').attr('data-uid')) : null);
		if (destinationDataItem != null)
		{
			if (sourceDataItem.ParentId !== destinationDataItem.ParentId && destinationParentDataItem != null && (e.dropPosition === 'before' || e.dropPosition === 'after'))
			{
				dst = destinationParentDataItem.Id;
			}
			else if (destinationDataItem != null && e.dropPosition === 'over')
			{
				dst = destinationDataItem.Id;
			}
		}
		var selectedNodes = getSelectedNodes();
		if (selectedNodes.length > 0)
		{
			$.each(selectedNodes, function (index, value)
			{
				var nodeId = $(value).find('[data-id]').attr('data-id');
				sourceDocIds.push(nodeId);
			});
		}
		else
		{
			var nodeId = $(e.sourceNode).find('[data-id]').attr('data-id');
			sourceDocIds.push(nodeId);
		}
		$.ajax({
			url: '/api/documents/checksecurity',
			contentType: 'application/json', dataType: 'json', async: true, type: 'POST', data: JSON.stringify({ sourceIds: sourceDocIds, destinationId: dst }),
			success: function (response)
			{
				var securityIssues = response != null && response.securityIssues && response.securityIssues.length > 0 ? response.securityIssues : null;
				var destinationItem = response.destination;
				if (securityIssues)
				{
					var content = $('<div/>');
					content.append($('<div/>').css({ 'margin-bottom': '10px' }).html(localization.labelDocumentPermissionsDestinationDifference + ':'));
					var sourceUl = $('<ul/>', { 'class': 'col-md-6' }).css({ 'list-style': 'none', 'margin': '0' });
					for (var i = 0; i < securityIssues.length; i++)
					{
						var issueDoc = securityIssues[i];
						sourceUl.append($('<li/>').append($('<span/>', { 'class': CivicWeb.Common.getFileIconClass(issueDoc.fileExtension) }).css({ 'vertical-align': 'middle' }))
							.append($('<span/>').css({ 'vertical-align': 'middle' }).text(issueDoc.name))
							.append($('<span></span>', { 'class': 'label' + (issueDoc.isPublic ? ' label-success' : ' label-danger') }).css({ 'padding': '2px', 'margin': '4px' })
								.append($('<span></span>', { 'class': (issueDoc.isPublic ? 'cw-icon-folder-permit' : 'cw-icon-folder-forbid') }))
								.append($('<span></span>').css({ 'color': '#fff' }).text((issueDoc.isPublic ? localization.labelPublic : localization.labelPrivate)))));
					}

					var docList = $('<div/>', { 'class': 'row' }).css({ 'margin-bottom': '10px' })
						.append(sourceUl)
						.append($('<div/>', { 'class': 'col-md-1' }).append($('<span/>', { 'class': 'glyphicon glyphicon-play' })))
						.append($('<div/>', { 'class': 'col-md-5' }).append($('<span/>', { 'class': 'folder-image cw-icon-folder-lg' })).append($('<span/>').css({ 'vertical-align': 'middle' }).text(destinationItem.name))
							.append($('<span></span>', { 'class': 'label' + (destinationItem.isPublic ? ' label-success' : ' label-danger') }).css({ 'padding': '2px', 'margin': '4px' })
								.append($('<span></span>', { 'class': (destinationItem.isPublic ? 'cw-icon-folder-permit' : 'cw-icon-folder-forbid') }))
								.append($('<span></span>').css({ 'color': '#fff' }).text((destinationItem.isPublic ? localization.labelPublic : localization.labelPrivate)))));

					content.append(docList).append($('<div/>').html(localization.labelMoveDocumentPermissionsOptions));

					CivicWeb.Common.Confirmation.createYesNo('move-document-confirmation', {
						localization: localization.moveDocumentPermissionsYesNoLocalization,
						width: '580px',
						content: content,
						yes: function ()
						{
							callback(true);
						},
						no: function ()
						{
							callback(false);
						}
					}).open();
				}
				else
				{
					callback(false);
				}
			},
			error: function ()
			{
				e.preventDefault();
			}
		});
	};
	//#endregion

	//#region ThirdParty Document Events
	var expandThirdPartyUploadClick = function ()
	{
		if ($(document.getElementById(thirdPartyUploadDropDownClientId)).hasClass('hidden'))
		{
			$(document.getElementById(thirdPartyUploadDropDownClientId)).removeClass('hidden');
		}
		else
		{
			$(document.getElementById(thirdPartyUploadDropDownClientId)).addClass('hidden');
		}
	};

	var thirdPartyUploadDocumentClick = function (e)
	{
		CivicWeb.Common.DocumentSelector.find('upload-documents-' + $(e.target).attr('data-type')).open();
	};

	var thirdPartyDocumentSelected = function (e)
	{
		var fileType = $(e.node).find('span[data-type]').attr('data-type');
		var fileProvider = $(e.node).find('span[data-provider]').attr('data-provider');
		if (fileType === 'folder')
		{
			e.treeView.expand(e.node);
		}
		else if (fileType === 'document')
		{
			$(e.node.firstChild).prepend($('<span></span>').attr({ 'class': 'k-icon k-loading' }));
			switch (fileProvider)
			{
				case 'sharepoint':
					var documentPath = e.treeView.dataItem($(e.node));
					$.ajax({
						url: '/api/documents/thirdpartyupload/' + fileProvider + '/' + documentId,
						contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'POST', data: JSON.stringify(documentPath),
						success: function (result)
						{
							if (result.Result)
							{
								$(e.node.firstChild).find('.k-icon').remove();
								$(e.node.firstChild).find('.k-image').remove();
								if ($(e.node.firstChild).find('.document-uploaded').length === 0)
								{
									$(e.node.firstChild).prepend($('<span></span>').attr({ 'class': 'document-uploaded cw-icon-import' }));
								}
							}
						},
						error: function ()
						{
						}
					});
					break;

				case 'laserfiche':
					var fileId = e.treeView.dataItem($(e.node));
					$.ajax({
						url: '/api/documents/thirdpartyupload/' + fileProvider + '/' + documentId,
						contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'POST', data: JSON.stringify(fileId),
						success: function (result)
						{
							if (result.Result)
							{
								$(e.node.firstChild).find('.k-icon').remove();
								$(e.node.firstChild).find('.k-image').remove();
								if ($(e.node.firstChild).find('.document-uploaded').length === 0)
								{
									$(e.node.firstChild).prepend($('<span></span>').attr({ 'class': 'document-uploaded cw-icon-import' }));
								}
							}
							else
							{
								alert('No results returned from the Laserfiche server');
							}
						},
						error: function ()
						{
						}
					});
					break;
			}
		}
	};

	var thirdPartySelectorClose = function ()
	{
		window.location.reload();
	};
	//#endregion

	//#region Misc Events
	var buttonClick = function (e)
	{
		if (e.keyCode === 46)
		{
			//Delete Key
			var documentIds = [];
			$.each($('input:checkbox[id^=' + documentCheckboxClientId + ']:checked'), function (index, value)
			{
				documentIds.push($(value).attr('id').replace(documentCheckboxClientId, ''));
			});

			if (documentIds.length > 0)
			{
				CivicWeb.Documents.DocumentOperations.Events.documentDeleteButtonClick(e);
			}
		}
		else if (e.keyCode === 27)
		{
			//Escape Key
			CivicWeb.Documents.DocumentListPage.Events.ClosePreview();
		}
	};

	this.ClosePreview = function ()
	{
		$('.document-quickview').addClass('hidden');
	};

	var addNewFolderClick = function ()
	{
		if (setTopLevelSelectedFolder())
		{
			if (checkCreatePermissions())
			{
				CivicWeb.Common.Permissions.createInstance({ schemas: permissionSchemas, enabled: canControl, simplePermissions: simplePermissions, canMakeAvailableToAll: canMakeAvailableToAll, showPublicOnlyItemsForAllUsers: showPublicOnlyItemsForAllUsers, localization: { deletedText: localization.deletedText, makingPubliclyAvailableWarningMessageText: localization.makingPubliclyAvailableWarningMessageText, publicUserAndAllInternalUsersText: localization.publicUserAndAllInternalUsersText }, images: { expandImageClass: images.expandImageClass, collapseImageClass: images.collapseImageClass } });
				$(document.getElementById(createFolderButtonClientId)).off('click').on('click', createFolder);
				$(document.getElementById(createFolderWindowClientId)).removeClass('hidden').css({ 'visibility': '' }).data('kendoWindow').center().open();

				if (canControl || !isFreemium)
				{
					$(document.getElementById(createFolderPermissionsClientId)).removeClass('hidden');
				}

				$(document.getElementById('folder-order-position')).removeClass('hidden');
				CivicWeb.Common.Notification.hide(uploadSortingNotificationClientId);
				$(document.getElementById(saveFolderToTopOrderWarningClientId)).text(localization.warningSaveToTopAppliesToDefaultOrder.replace('{0}', currentSortField));
			}
			else
			{
				displayUploadPermissionRequiredWindow(localization.warningMessageUpdatePermissionsRequiredToUploadDocument);
			}
		}
		else
		{
			alert(localization.documentsUploadSelectedFolderWarning);
		}
	};

	var favoriteKeyDown = function (e)
	{
		if (e.which == 13 || e.which == 32) {
			favoriteClick(e);
		}
	}

	var favoriteClick = function (e)
	{
		CivicWeb.Common.Instrumentation.recordAction('DocumentCenter - favorite button clicked - favoriteClick');
		var docId = $(e.target).closest('[data-id]').attr('data-id');
		var add = $(e.target).attr('data-type') === 'add';
		$(e.target).removeClass(favorite.enable).removeClass(favorite.disable).addClass((add ? favorite.enable : favorite.disable));
		$(e.target).attr('data-type', (add ? 'remove' : 'add'));

		CivicWeb.Documents.DocumentOperations.Events.favoriteDocument(docId, add, isLoggedIn, function ()
		{
			if (isLoggedIn)
			{
				if (add && documentId !== '-1')
				{
					if (documentView !== documentViewType.thumbnailView)
					{
						var node = documentTreeView.dataItem(documentTreeView.findByUid($(e.target).closest('[data-uid]').attr('data-uid')));
						var newNode = {};
						newNode.Id = node.Id;
						newNode.Order = node.Order;
						newNode.Description = node.Description;
						newNode.Title = node.Title;
						newNode.DateUpdated = node.DateUpdated;
						newNode.DateUpdatedFormatted = node.DateUpdatedFormatted;
						newNode.FileSize = node.FileSize;
						newNode.FileFormat = node.FileFormat;
						newNode.Folder = node.Folder;
						newNode.Favorite = true;
						newNode.HasChildren = node.HasChildren;
						newNode.HasAccess = node.HasAccess;
						newNode.UpdateAllowed = node.UpdateAllowed;
						newNode.FavoriteFolder = node.FavoriteFolder;
						if ($('[data-type=favorites-folder]').closest('li').attr('aria-expanded'))
						{
							favoriteTreeView.append(newNode, $('[data-type=favorites-folder]').closest('li'));
						}
						else
						{
							favoriteTreeView.expand(favoriteTreeView.findByUid($('[data-type=favorites-folder]').closest('[data-uid]').attr('data-uid')));
						}
					}
				}
				else
				{
					if (Number(documentId) < 0)
					{
						var favDocUid = documentsListViewClientElem.find('[data-id=' + docId + ']').closest('[data-uid]').attr('data-uid');
						favoriteTreeView.remove(favoriteTreeView.findByUid(favDocUid));
					}
					else
					{
						favoriteTreeView.remove(favoriteTreeView.findByUid($('li[data-uid=\'' + favoriteTreeView.dataSource.get(-1).uid + '\']').find('[data-id=' + docId + ']').closest('[data-uid]').attr('data-uid')));
					}
					documentsListViewClientElem.find('[data-id=' + docId + ']').find('.favorite-icon').attr({ 'data-type': 'add' }).removeClass(favorite.enable).addClass(favorite.disable);
				}
			}
			else if (localStorageAvailable())
			{
				if (add && documentId !== '-1')
				{
					if (documentView !== documentViewType.thumbnailView)
					{
						var node = documentTreeView.dataItem(documentTreeView.findByUid($(e.target).closest('[data-uid]').attr('data-uid')));
						var newNode = {};
						newNode.Id = node.Id;
						newNode.Order = node.Order;
						newNode.Description = node.Description;
						newNode.Title = node.Title;
						newNode.DateUpdated = node.DateUpdated;
						newNode.DateUpdatedFormatted = node.DateUpdatedFormatted;
						newNode.FileSize = node.FileSize;
						newNode.FileFormat = node.FileFormat;
						newNode.Folder = node.Folder;
						newNode.Favorite = true;
						newNode.HasChildren = node.HasChildren;
						newNode.HasAccess = node.HasAccess;
						if ($('[data-type=favorites-folder]').closest('li').attr('aria-expanded'))
						{
							favoriteTreeView.append(newNode, $('[data-type=favorites-folder]').closest('li'));
						}
						else
						{
							favoriteTreeView.expand(favoriteTreeView.findByUid($('[data-type=favorites-folder]').closest('[data-uid]').attr('data-uid')));
						}
					}
				}
				else
				{
					if (Number(documentId) < 0)
					{
						var favDocUid = documentsListViewClientElem.find('[data-id=' + docId + ']').closest('[data-uid]').attr('data-uid');
						favoriteTreeView.remove(favoriteTreeView.findByUid(favDocUid));
					}
					else
					{
						favoriteTreeView.select().remove();
					}
					documentsListViewClientElem.find('[data-id=' + docId + ']').find('.favorite-icon').attr({ 'src': 'https://i.civicweb.net/Images/star-icon-disabled.png', 'data-type': 'add' });
				}
			}
		}, null);
	};

	var parentFolderClick = function (e)
	{
		if ($(document.getElementById('parent-folder')).hasClass('background-color'))
		{
			if ($(e.target).closest('#document-parent-options').length === 0)
			{
				$(document.getElementById('parent-folder')).removeClass('background-color');
				$(document.getElementById('document-parent-options')).addClass('hidden');
			}
			$(document.getElementById('parent-folder')).attr('data-selected', false);
		}
		else
		{
			$(document.getElementById('parent-folder')).addClass('background-color');

			$('input[id^=' + documentCheckboxClientId + ']').prop('checked', false);
			documentsListViewClientElem.find('.k-state-selected').removeClass('k-state-selected');
			documentsListViewClientElem.find('.k-state-hover').removeClass('k-state-hover');
			documentsListViewClientElem.find('.k-state-focused').removeClass('k-state-focused');
			$('[aria-selected=true]').attr('aria-selected', false);

			documentsListViewClientElem.find('.social-media-share').addClass('hidden');
			documentsListViewClientElem.find('.edit-node-icon').addClass('hidden');
			documentsListViewClientElem.find('.favorite-icon').addClass('hidden');

			if (isLoggedIn)
			{
				if (documentView !== documentViewType.previewView)
				{
					$(document.getElementById('document-parent-options')).removeClass('hidden');
					$(document.getElementById('document-parent-share')).removeClass('hidden');
				}
				else
				{
					$(document.getElementById(documentPreviewEditClientId)).off('click').on('click', function ()
					{
						if (documentId > 0)
						{
							window.open('/filepro/document/' + documentId + (documentRecycleBinView ? '?deleted=True' : ''));
						}
						else
						{
							window.open('/documents/titlepage.aspx');
						}
					});
				}
			}
			$(document.getElementById('parent-folder')).attr('data-selected', true);
		}

		previewDocumentContent(documentId);
	};

	var previewFolderContentsClick = function ()
	{
		var parentId = $(this).attr('data-id');
		var previewButton = folderPreviewButtonClientElem;
		if (previewButton.attr('data-show') === 'true')
		{
			if (previewButton.attr('data-folder-page') === 'false')
			{
				$(document.getElementById('document-folder-view-documents')).removeClass('hidden');
				$(document.getElementById('document-preview')).addClass('hidden');
				$(document.getElementById('document-preview-print')).addClass('hidden');
			}
			else
			{
				$(document.getElementById('document-folder-view-documents')).addClass('hidden');
				$(document.getElementById('document-preview')).removeClass('hidden');

				var documentNodeUid = documentsListViewClientElem.find('[data-id=' + previewId + ']').closest('[data-uid]').attr('data-uid');
				var item = documentTreeView !== null ? documentTreeView.dataSource.getByUid(documentNodeUid) : null;
				if (item != null && !item.Folder)
				{
					switch (item.FileFormat.toLowerCase())
					{
						case 'docx':
						case 'doc':
						case 'odt':
						case 'png':
						case 'jpg':
						case 'jpeg':
						case 'bmp':
						case 'html':
						case 'htm':
						case 'xml':
						case 'txt':
						case 'splitscreen':
							$(document.getElementById('document-preview-print')).removeClass('hidden');
							break;
					}
				}
			}
			previewButton.find('em').addClass('glyphicon-th-lines');
			previewButton.find('em').removeClass('glyphicon-folder-close');
			folderContentListViewClientElem.addClass('hidden');
			previewButton.attr('data-show', false);
			previewButton.attr('title', localization.toolTipPreviewFolderContent);

			documentPreviewOptionsClientElem.attr('data-id', documentsListViewClientElem.find('input:checked').first().attr('data-id'));
			$(document.getElementById(documentPreviewEditClientId)).off('click').on('click', function ()
			{
				var selectedDocument = documentsListViewClientElem.find('input:checked').first();
				if (selectedDocument && selectedDocument.length)
				{
					window.open('/filepro/document/' + selectedDocument.attr('data-id') + (documentRecycleBinView ? '?deleted=True' : ''));
				}
				else
				{
					if (parentId > 0)
					{
						window.open('/filepro/document/' + parentId + (documentRecycleBinView ? '?deleted=True' : ''));
					}
					else
					{
						window.open('/documents/titlepage.aspx');
					}
				}
			});
		}
		else
		{
			$(document.getElementById('document-folder-view-documents')).addClass('hidden');
			$(document.getElementById('document-preview')).addClass('hidden');
			previewButton.find('em').removeClass('glyphicon-th-lines');
			previewButton.find('em').addClass('glyphicon-folder-close');
			folderContentListViewClientElem.removeClass('hidden');
			previewButton.attr('data-show', true);
			loadFolderContentPreview(parentId);
			$(document.getElementById('document-preview-print')).addClass('hidden');
			previewButton.attr('title', localization.toolTipHidePreviewFolderContent);
			documentPreviewOptionsClientElem.attr('data-id', parentId);
			$(document.getElementById(documentPreviewEditClientId)).off('click').on('click', function ()
			{
				if (parentId > 0)
				{
					window.open('/filepro/document/' + parentId + (documentRecycleBinView ? '?deleted=True' : ''));
				}
				else
				{
					window.open('/documents/titlepage.aspx');
				}
			});
		}
	};

	var navigateHistory = function (evt)
	{
		var expandedIdsString = getQueryStringValue('expanded');
		var expandedIds = expandedIdsString && expandedIdsString.length > 0 ? expandedIdsString.split(',') : [];
		var itemId = 0;
		var nodeExpanded = false;
		var allExpandedFolders = $('li[data-expanded=true]');

		if (evt && evt.state)
		{
			var expandString = evt.state.split('-');
			if (expandString.length > 0 && expandString[0] === 'expanded' && expandString[1] > 0)
			{
				var expandId = expandString[1];
				var node = $('div[data-id=' + expandId + ']').closest('li');
				if (node.length && node.attr('data-expanded') !== 'true')
				{
					documentTreeView.unbind('expand', nodeExpanded);
					documentTreeView.expand(node);
					documentTreeView.bind('expand', nodeExpanded);
					nodeExpanded = true;
				}
			}
		}

		if (!nodeExpanded)
		{
			for (var i = allExpandedFolders.length - 1; i >= 0; i--)
			{
				var node = allExpandedFolders[i];
				var currentId = $(node).find('[data-id]').attr('data-id');
				if (expandedIds.indexOf(currentId) < 0)
				{
					itemId = currentId;
					var node = $('div[data-id=' + currentId + ']').closest('li');
					documentTreeView.unbind('collapse', nodeCollapsed);
					documentTreeView.collapse(node);
					documentTreeView.bind('collapse', nodeCollapsed);
					break;
				}
			}
		}

		var previewIdString = getQueryStringValue('preview');
		var quickViewVisible = $('div.document-quickview').is(':visible');
		if (!previewIdString && quickViewVisible)
		{
			$('.document-quickview').addClass('hidden');

			if ($('.document-quickview-content').find('audio').length > 0)
			{
				var audio = $('.document-quickview-content').find('audio');
				audio[0].pause();
				audio.remove();
			}
			else if ($('.document-quickview-content').find('video').length > 0)
			{
				var video = $('.document-quickview-content').find('video');
				video[0].pause();
				video.remove();
			}
		}
		else if (previewIdString && !quickViewVisible)
		{
			loadPreviewDocument(previewIdString);
		}
	};

	var recycleBinPageClick = function (e)
	{
		recycleBinPage = parseInt($(e.target).closest('a').attr('data-page'));
		var currentTreeView = documentTreeView;
		switch (documentView)
		{
			case documentViewType.previewView:
				currentTreeView = scrollLoadMoreDoc.closest('div#folder-content-list-view-container').length > 0 ? folderContentListView : documentTreeView;
				break;
			case documentViewType.thumbnailView:
				currentTreeView = documentThumbnailView;
				break;
		}
		$(document.getElementById('sort-processing')).removeClass('hidden');
		var newPageDataSource = getTreeViewDataSource(documentId, false, recycleBinPage);
		newPageDataSource.read();
		currentTreeView.setDataSource(newPageDataSource);
		generateRecycleBinPager();
	};

	var recycleBinPurgeRestoreCallback = function (e)
	{
		var currentTreeView = documentTreeView;
		switch (documentView)
		{
			case documentViewType.previewView:
				currentTreeView = scrollLoadMoreDoc.closest('div#folder-content-list-view-container').length > 0 ? folderContentListView : documentTreeView;
				break;
			case documentViewType.thumbnailView:
				currentTreeView = documentThumbnailView;
				break;
		}
		var newPageDataSource = getTreeViewDataSource(documentId, false, recycleBinPage);
		newPageDataSource.read();
		currentTreeView.setDataSource(newPageDataSource);
	};
	//#endregion

	var permissionsContactAdministratorButtonClick = function (e)
	{
		$.ajax({
			url: '/api/document/' + topLevelUploadFolder.id.toString() + '/path',
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'GET',
			success: function (response)
			{
				CivicWeb.Common.ContactAdministrator.load({ isPermissions: contactAdministratorArguments.isPermissions, documentId: topLevelUploadFolder.id, path: response.join('\\'), localization: contactAdministratorArguments.localization, kendoEditorLocalization: contactAdministratorArguments.kendoEditorLocalization, reload: true });

				closeUploadPermissionRequiredWindow();
			}
		});

		e.preventDefault();
	};

	var uploadPermissionRequiredCloseButtonClick = function (e)
	{
		closeUploadPermissionRequiredWindow();

		e.preventDefault();
	};

	//#region Load Methods
	var thumbnailLoaded = false;

	var loadDocumentThumbnailList = function ()
	{
		if (!thumbnailLoaded)
		{
			//Load thumbnail list
			documentThumbnailView = documentThumbnailViewClientElem.kendoListView({
				dataSource: documentTreeView.dataSource,
				dataBound: documentsThumbnailViewDataBound,
				template: function (dataItem)
				{
					var description = $('<div />').html(dataItem.Title).text();

					var documentRow = '<div class=\'document-thumbnail-view-documents\' data-id=' + dataItem.Id + ' data-title="' + description + '" data-order=' + dataItem.Order + ' data-type=' + (dataItem.Folder ? (dataItem.FavoriteFolder ? dataType.favoritesFolder : dataType.folder) : dataType.document) + '>';
					if (isLoggedIn && !dataItem.FavoriteFolder)
					{
						documentRow += '<input ' + (canDelete && !isiPad ? '' : 'class=\'hidden\'') + ' type=\'checkbox\' aria-labelledby=\'#= item.id #\' id=\'thumbnail-checkbox-' + dataItem.Id + '\' data-id=' + dataItem.Id + ' class=\'select-thumbnail-checkbox\' title=\'' + description.replace('\'', '\'') + '\' />';
					}
					if (dataItem.Folder)
					{
						documentRow += '<div class=\'document-thumbnail-folder-image\'>';
						documentRow += '<span class=\'cw-fp-icon-folder-4x \' title=' + description.replace('\'', '\'') + ' />';
						documentRow += '</div>';

						documentRow += '<div class=\'document-thumbnail-folder-info\'>';
						documentRow += '<span class=\'document-thumbnail-view-name\'>';
						if (dataItem.FavoriteFolder)
						{
							documentRow += '<span class=\'folder-image ' + images.favoritesFolderImageUrl + ' \' title="' + localization.favoritesFolderToolTip + '"></span> ';

						} else
						{
							documentRow += '<span class=\'folder-image ' + images.folderImageUrl + '\'></span> ';
						}
						documentRow += '<a href=\'/filepro/documents/' + dataItem.Id + '\'>' + (description.length > 0 ? description : localization.untitledDocumentName) + '</a>';
						documentRow += '</span>';
					}
					else
					{
						var fileName = (description.length > 0 ? description.replace('\'', '\'') : localization.untitledDocumentName);
						if (dataItem.Thumbnails)
						{
							documentRow += '<div class=\'document-thumbnail-image\'>';
							var documentThumbnailData = JSON.parse(dataItem.Thumbnails);
							documentRow += '<img src=\'' + documentThumbnailData.small + '\' alt=\'' + fileName + '\' data-loaded=\'true\' />';
						}
						else
						{
							documentRow += '<div class=\'document-thumbnail-image\'>';
							var documentExtension = CivicWeb.Common.getFileIconClass(dataItem.FileFormat).replace('icon-file-', '').replace('-24', '');
							if (documentExtension === 'blank')
							{
								documentExtension = '_blank';
							}
							else if (documentExtension === 'page')
							{
								documentExtension = '_page';
							}
							documentRow += '<img src=\'https://i.civicweb.net/Images/IconFiles206/' + documentExtension + '.png\' aria-labelledby=\'' + dataItem.Id + 'Thumb\' data-loaded=\'false\' style=\'width: 206px;\' />';
						}
						documentRow += '</div>';

						documentRow += '<div class=\'document-thumbnail-info\'>';
						documentRow += '<span class=\'document-thumbnail-view-name\'>';
						documentRow += '<em style=\'vertical-align: middle;\' class=\'' + CivicWeb.Common.getFileIconClass(dataItem.FileFormat) + '\' title=' + dataItem.FileFormat.toLowerCase() + '></em>';
						documentRow += '<a data-documentlink=\'\' href=\'#\' id=\'' + dataItem.Id + 'Thumb\' class=\'document-thumbnail-link\'>' + fileName.replace('\'', '\'') + '</a>';
						documentRow += '</span>';
					}
					if (!dataItem.FavoriteFolder)
					{
						documentRow += '<div class=\'document-thumbnail-view-size\'>' + localization.sizeColumnHeaderText + ': ' + dataItem.FileSize + '</div>';
						documentRow += '<div class=\'document-thumbnail-view-modified\' title=\'' + localization.lastModifiedLabel + '\'>' + localization.modifiedColumnHeaderText + ': ' + dataItem.DateUpdatedFormatted + '</div>';
					}
					documentRow += '</div>';
					documentRow += '<div class=\'document-thumbnail-options\'>';

					if (dataItem.Id > 0)
					{
						if (isLoggedIn && dataItem.UpdateAllowed)
						{
							var editUrl = '/filepro/document/' + dataItem.Id + (documentRecycleBinView ? '?deleted=True' : '');
							documentRow += '<a class=\'edit-node-icon cw-fp-icon-edit-disabled\' href=\'' + editUrl + '\' title=\'' + localization.editToolTipText + '\'></a>';
						}

						if (dataItem.parentNode() && Number(dataItem.parentNode().Id) < 0 && !documentRecycleBinView)
						{
							documentRow += '<span role="button" tabindex="0" class=\'favorite-icon cw-fp-icon-star\' data-type=\'remove\' title=\'' + localization.favoritesStarToolTip + '></span>';
						}
						else if (!documentRecycleBinView)
						{
							documentRow += '<span role="button" tabindex="0 class=\'favorite-icon cw-fp-icon-star-disabled\' data-type=\'add\' title=\'' + localization.favoritesStarToolTip + '\'></span>';
						}

						if (!documentRecycleBinView)
						{
							var socialMedia = $(document.getElementById(socialMediaShareContainerClientId)).clone();
							socialMedia.find('.social-media-share').attr('id', socialMediaShareClientId + '-thumbnail-' + dataItem.Id).removeClass('background-color').addClass('social-media-share-thumbnail').removeClass('hidden');
							documentRow += socialMedia.html();
						}
					}
					documentRow += '</div></div>';

					return documentRow;
				}
			}).data('kendoListView');
			thumbnailLoaded = true;
			var treeViewData = documentTreeView.dataSource.data();
			if (treeViewData.length > 0 && treeViewData[0].TotalDocuments > treeViewPageSize && !documentRecycleBinView)
			{
				documentThumbnailViewClientElem.append($('<div></div>', { 'class': 'scroll-load', 'data-id': documentId }));
			}
		}
	};

	var loadThumbnailImages = function (e)
	{
		if (!thumbnailsLoading)
		{
			thumbnailsLoading = true;

			var docViewTop = $(window).scrollTop();
			var docViewBottom = docViewTop + $(window).height();
			var docThumbnails = $('.document-thumbnail-view-documents');
			if (documentView === documentViewType.thumbnailView)
			{
				for (var i = 0; i < docThumbnails.length; i++)
				{
					var thumbnailDocument = $(docThumbnails[i]);
					if (thumbnailDocument.attr('data-type') === 'document')
					{
						var elemTop = thumbnailDocument.offset().top;
						if (elemTop <= docViewBottom)
						{
							var thumbnailImg = thumbnailDocument.find('.document-thumbnail-image img');
							var imgLoaded = thumbnailImg.attr('data-loaded');
							if (imgLoaded && imgLoaded === 'false')
							{
								thumbnailImg.attr({ 'data-loaded': 'true' });
								$.ajax({
									url: '/api/documents/getdocument/' + thumbnailDocument.attr('data-id'),
									contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'GET',
									context: thumbnailDocument,
									success: function (result)
									{
										if (result && result.Thumbnails && result.Thumbnails.length > 0)
										{
											var resultThumbnail = JSON.parse(decodeURIComponent(result.Thumbnails));
											var thumbnailResultImg = $(this).find('.document-thumbnail-image img');
											thumbnailResultImg.attr({ 'src': '' + resultThumbnail.small });
											thumbnailResultImg.on('load', function ()
											{
												if (thumbnailResultImg)
												{
													if ($(thumbnailResultImg).height() <= $(thumbnailResultImg).width())
													{
														thumbnailResultImg.width('95%');
														thumbnailResultImg.height('auto');
													}
													else
													{
														thumbnailResultImg.height('277px');
														thumbnailResultImg.width('auto');
													}
												}
											});
										}
									},
									error: function ()
									{
									}
								});
							}
						}
					}
				}
			}

			thumbnailsLoading = false;

			if (pendingThumbnailLoad.e)
			{
				e = pendingThumbnailLoad.e;
				pendingThumbnailLoad.e = null;
				loadThumbnailImages(e);
			}
		}
		else if (!pendingThumbnailLoad.e)
		{
			pendingThumbnailLoad.e = e;
		}
	};

	var loadThirdpartySources = function ()
	{
		$(document.getElementById(thirdPartyUploadDropDownButtonClientId)).off('click').on('click', expandThirdPartyUploadClick);
		for (var i = 0; i < thirdPartyDocumentSourceTypes.length; i++)
		{
			var thirdPartyType = thirdPartyDocumentSourceTypes[i];
			$(document.getElementById(thirdPartyUploadDropDownClientId)).append($('<div></div>').attr({ 'id': 'thirdparty-upload-' + thirdPartyType.Provider, 'data-type': thirdPartyType.Provider, 'class': 'background-color-hover' }).text(thirdPartyType.Text));
			CivicWeb.Common.DocumentSelector.create('upload-documents-' + thirdPartyType.Provider, { options: documentSelectorArguments, includeDocuments: true, provider: thirdPartyType.Provider, select: thirdPartyDocumentSelected, close: thirdPartySelectorClose, title: 'Select Document to Upload' });
		}
		$('div[id^=thirdparty-upload-]').off('click').on('click', thirdPartyUploadDocumentClick);
	};

	var loadPreviewDocument = function (previewDocumentId, fromWidget)
	{
		var ids = $('.document-list-view-documents[data-type=\'document\']').map(function () { return $(this).attr('data-id'); }).get();
		if (documentView !== documentViewType.previewView)
		{
			CivicWeb.Common.QuickViews.loadQuickView(previewDocumentId.toString(), ids, { viewDeleted: documentRecycleBinView, fromWidget: !!fromWidget, attachmentUrl: attachmentUrl });
		}
		else
		{
			var socialMediaLink = isFreemium ? window.location.protocol + '//' + window.location.hostname + '/document/' + previewDocumentId : window.location.href;
			CivicWeb.Common.SocialMediaShares.createInstance({ clientId: documentPreviewShareClientId, url: socialMediaLink, title: document.title, itemId: previewDocumentId ? previewDocumentId : '', localization: socialMediaLocalization, show: true });
			documentPreviewOptionsClientElem.attr('data-id', previewDocumentId);
			if (documentRecycleBinView)
			{
				documentPreviewOptionsClientElem.addClass('hidden');
			}
			else
			{
				if (!isFreemium)
				{
					documentPreviewOptionsClientElem.find('.social-media-share').removeClass('hidden');
				}
			}
			if (previewDocumentId && previewDocumentId > 0)
			{
				$(document.getElementById(documentPreviewFavoriteClientId)).removeClass('hidden');
			}
			else
			{
				$(document.getElementById(documentPreviewFavoriteClientId)).addClass('hidden');
			}
			$(document.getElementById(documentPreviewEditClientId)).off('click').on('click', function ()
			{
				if (previewDocumentId !== null && previewDocumentId > 0)
				{
					window.open('/filepro/document/' + previewDocumentId + (documentRecycleBinView ? '?deleted=True' : '') + (attachmentUrl ? '&attachmenturl=' + encodeURI(attachmentUrl) : ''));
				}
				else
				{
					window.open('/documents/titlepage.aspx');
				}
			});
			var currentPreviewUpdateAllowed = previewDocumentId === documentId ? currentFolderUpdateAllowed : documentsListViewClientElem.find('[data-id=' + previewDocumentId + ']').attr('data-update-allowed') === 'true';
			if (isLoggedIn && ((!previewDocumentId && canUpdatePortalItems) || (previewDocumentId && currentPreviewUpdateAllowed)))
			{
				$(document.getElementById(documentPreviewEditClientId)).removeClass('hidden');
			}
			var documentNodeUid = documentsListViewClientElem.find('[data-id=' + previewDocumentId + ']').closest('[data-uid]').attr('data-uid');
			var item = documentTreeView !== null ? documentTreeView.dataSource.getByUid(documentNodeUid) : null;
			if (item != null && item.Folder)
			{
				folderPreviewButtonClientElem.attr({ 'data-id': previewDocumentId });
				if (folderPreviewButtonClientElem.attr('data-show') === 'true')
				{
					loadFolderContentPreview(previewDocumentId);
				}
				else
				{
					folderContentListViewClientElem.addClass('hidden');
					$(document.getElementById('document-preview')).removeClass('hidden');
					if (!item.FolderPageExists)
					{
						$('.DownloadDocumentPreviewPane').hide();
						$(document.getElementById('document-preview')).addClass('hidden');
						if (folderPreviewButtonClientElem.attr('data-show') === 'false')
						{
							$(document.getElementById('document-folder-view-documents')).removeClass('hidden');
						}
						setFolderPreviewInfo(item);

						previewLoaded = true;
					}
				}
			}
			else
			{
				folderPreviewButtonClientElem.find('em').addClass('glyphicon-th-lines');
				folderPreviewButtonClientElem.find('em').removeClass('glyphicon-folder-close');
				folderPreviewButtonClientElem.attr('data-show', false);
				$(document.getElementById(folderPreviewContainerClientId)).removeClass('hidden');
				folderContentListViewClientElem.addClass('hidden');
				$(document.getElementById('document-preview')).removeClass('hidden');
			}

			if (previewDocumentId !== documentId)
			{
				CivicWeb.Documents.DocumentOperations.Events.changePreviewUrl(previewDocumentId);
			}
			else
			{
				folderContentListViewClientElem.addClass('hidden');
				if (folderPreviewButtonClientElem.attr('data-folder-page') === 'false')
				{
					$(document.getElementById('document-folder-view-documents')).removeClass('hidden');
					$(document.getElementById('document-preview')).addClass('hidden');
				}
				else
				{
					$(document.getElementById('document-folder-view-documents')).addClass('hidden');
					$(document.getElementById('document-preview')).removeClass('hidden');
				}
			}

			if (!previewLoaded)
			{
				previewDocumentContent(previewDocumentId);
				previewLoaded = true;
			}
		}

		CivicWeb.Common.SocialMediaShares.createInstance({ clientId: socialMediaShareClientId + 'quick-view', url: window.location.protocol + '//' + window.location.hostname + (isFreemium ? '/document/' : '/filepro/documents/') + previewDocumentId, title: document.title, itemId: previewDocumentId, localization: socialMediaLocalization });
		setTimeout(function ()
		{
			$(document.getElementById(socialMediaShareClientId + 'quick-view')).removeClass('hidden');
			var node = $('div[data-id="' + previewId + '"]').closest('li[data-uid]');
			if (documentTreeView && node && node.length > 0)
			{
				documentTreeView.select(node);
				documentTreeView.trigger('select', { node: node });
			}
		}, 0);
	};

	var loadFolderContentPreview = function (parentId)
	{
		if (folderContentListView)
		{
			folderContentListView.destroy();
			folderContentListViewClientElem.empty();
		}
		folderContentListView = folderContentListViewClientElem.kendoTreeView({
			autoBind: false,
			dataSource: getTreeViewDataSource(parentId, toogleOrderingModeButtonClientElem.attr('data-enabled') === 'true'),
			dataBound: previewDocumentsDataBound,
			dragAndDrop: (!documentRecycleBinView && !mobileDevice ? documentReorderAllowed && toogleOrderingModeButtonClientElem.attr('data-enabled') === 'true' : null),
			dragstart: (!documentRecycleBinView && !mobileDevice ? documentNodeDragStart : null),
			drag: (!documentRecycleBinView && !mobileDevice ? documentNodeDrag : null),
			drop: (!documentRecycleBinView && !mobileDevice ? documentNodeDrop : null),
			select: nodeSelected,
			change: nodeChanged,
			loadOnDemand: true,
			navigate: function (e) { $('.k-in').removeClass('background-color'); $(e.node).find('.k-in').first().addClass('background-color'); },
			expand: nodeExpanded,
			collapse: nodeCollapsed,
			template: function (dataItem)
			{
				return getTreeItemTemplate(dataItem.item);
			},
			checkboxes: {
				template: '<input ' + (canDelete && !isiPad ? '' : 'class=\'hidden\'') + ' type=\'checkbox\' aria-labelledby=\'#= item.id #\' id=\'' + documentCheckboxClientId + '#= item.id #\' data-id=\'#= item.id #\' title=\'#= $(\'<div/>\').html(item.Title).text() #\' style=\'vertical-align: middle;\' />'
			}
		}).data('kendoTreeView');
		folderContentListView.dataSource.read();

		//Workaround for IE to stop jumping when clicking a document while scrolled down
		if (isInternetExplorer)
		{
			folderContentListView.wrapper.off('focus keydown');
			folderContentListView.focus = $.noop;
		}

		$(document.getElementById('document-preview')).attr({ 'data-hidden': 'True' }).addClass('hidden');
		$(document.getElementById('document-folder-view-documents')).addClass('hidden');
		folderContentListViewClientElem.removeClass('hidden');
	};

	var loadMoreDocuments = function ()
	{
		var scrollLoadMoreDocs = $('.scroll-load');
		if (scrollLoadMoreDocs && scrollLoadMoreDocs.length)
		{
			for (var j = 0; j < scrollLoadMoreDocs.length; j++)
			{
				var scrollLoadMoreDoc = $(scrollLoadMoreDocs[j]);
				var $window = $(window);
				var docViewTop = $window.scrollTop();
				var docViewBottom = docViewTop + $window.height();
				var elemTop = scrollLoadMoreDoc.offset().top;
				var elemBottom = elemTop + scrollLoadMoreDoc.height();

				if (scrollLoadMoreDoc.is(':visible') && (elemBottom <= docViewBottom) && (elemTop >= docViewTop) && !loadingMoreDocuments)
				{
					addDocumentsToDataSource(scrollLoadMoreDoc);
				}
			}
		}
	};

	var addDocumentsToDataSource = function (scrollLoadMoreDoc)
	{
		var itemId = Number(scrollLoadMoreDoc.attr('data-id'));
		itemId = isNaN(itemId) ? 0 : itemId;
		var currentDocumentId = Number(scrollLoadMoreDoc.closest('div#folder-content-list-view-container').length > 0 ? folderPreviewButtonClientElem.attr('data-id') : documentId);
		currentDocumentId = isNaN(currentDocumentId) ? 0 : currentDocumentId;
		var currentTreeView = documentTreeView;
		var currentDataBoundFunction = scrollLoadMoreDoc.closest('div#folder-content-list-view-container').length > 0 ? previewDocumentsDataBound : documentsDataBound;
		switch (documentView)
		{
			case documentViewType.listView:
				currentTreeView.unbind('dataBound', documentsDataBound);
				break;
			case documentViewType.previewView:
				currentTreeView = scrollLoadMoreDoc.closest('div#folder-content-list-view-container').length > 0 ? folderContentListView : documentTreeView;
				currentTreeView.unbind('dataBound', currentDataBoundFunction);
				break;
			case documentViewType.thumbnailView:
				currentTreeView = documentThumbnailView;
				currentTreeView.unbind('dataBound', documentsThumbnailViewDataBound);
				currentDataBoundFunction = documentsThumbnailViewDataBound;
				break;
		}
		var currentDataSource = itemId === currentDocumentId ? currentTreeView.dataSource : currentTreeView.dataSource.get(itemId).children;

		loadingMoreDocuments = true;
		var dataCount = currentDataSource.data().length;
		var totlaCount = currentDataSource.data()[0].TotalDocuments;
		var docTreeViewDataSource = getTreeViewDataSource(itemId, toogleOrderingModeButtonClientElem.attr('data-enabled') === 'true', (dataCount / treeViewPageSize) + 1);
		var newDataCount = dataCount + treeViewPageSize;
		newDataCount = newDataCount > totlaCount ? totlaCount : newDataCount;
		scrollLoadMoreDoc.html('<div title=\'Loading more documents\' class=\'loader\'></div> ' + localization.loadingDocumentOrderText + ' (' + newDataCount + ' of ' + totlaCount + ')');
		docTreeViewDataSource.fetch(function ()
		{
			var data = this.data();
			for (var i = 0; i < data.length; i++)
			{
				currentDataSource.add(data[i]);
			}
			loadingMoreDocuments = false;
			currentTreeView.bind('dataBound', currentDataBoundFunction);
			currentDataBoundFunction();
			scrollLoadMoreDoc.html('');
			if (documentView === documentViewType.thumbnailView)
			{
				documentThumbnailViewClientElem.append(scrollLoadMoreDoc);
			}
			if (currentDataSource.data().length === currentDataSource.data()[0].TotalDocuments)
			{
				scrollLoadMoreDoc.remove();
			}
			else
			{
				var dataItem = currentTreeView.dataSource.get(itemId);
				var dataItemUid = dataItem ? dataItem.uid : null;
				if (dataItemUid && dataItemUid.length)
				{
					var itemElem = $(documentTreeView.findByUid(dataItemUid));
					itemElem.find('div.scroll-load').remove();
					itemElem.append($('<div></div>', { 'class': 'scroll-load', 'data-id': itemId }));
				}
			}
		});
	};
	//#endregion

	//#region Create/Upload Methods
	var createFolder = function ()
	{
		var input = $(document.getElementById(createFolderTextboxClientId));
		if (input.val().trim().length === 0)
		{
			input.focus();
			CivicWeb.Common.Notification.show(folderTitleWarningClientId, CivicWeb.Common.Notification.types.warning, localization.titleRequiredWarningMessageText);
		}
		else
		{
			$(document.getElementById(folderTitleWarningClientId)).addClass('hidden');
			var newFolder = {};
			newFolder.name = input.val();
			newFolder.permissions = CivicWeb.Common.Permissions.buildPermissionsObject(schemaTypes.folder);
			newFolder.parentId = topLevelUploadFolder.id > 0 ? Number(topLevelUploadFolder.id) : (documentId > 0 ? documentId : 0);
			newFolder.saveToTop = $(document.getElementById('save-folder-to-top-radio')).prop('checked');

			CivicWeb.Common.Button.update($(document.getElementById(createFolderButtonClientId)), localization.creatingNotificationText, true, true);

			checkLockout(schemaTypes.folder).then(function ()
			{
				return $.ajax({
					url: '/api/folder/create',
					contentType: 'application/json',
					dataType: 'json',
					async: true,
					cache: false,
					type: 'PUT',
					data: JSON.stringify(newFolder)
				}).done(function (result)
				{
					if (result.Id > 0)
					{
						CivicWeb.Common.Notification.show(createFolderResult, CivicWeb.Common.Notification.types.success, localization.creatingSucceededNotificationText);
						CivicWeb.Common.Button.update($(document.getElementById(createFolderButtonClientId)), localization.createButtonText, false, false);
						// Not sure why the 1.5 seconds to reload page? could we not just add the elements to the page client side?
						setTimeout(function ()
						{
							$(document.getElementById(createFolderWindowClientId)).addClass('hidden').data('kendoWindow').close();
							window.location.href = '/filepro/documents/' + result.Id;
						}, 1500);
					}
				});
			}, function ()
				{
					CivicWeb.Common.Button.update($(document.getElementById(createFolderButtonClientId)), localization.createButtonText, false, false);
				});
		}
	};

	var uploadDocuments = function ()
	{
		documentsUploaded = 0;
		$(document.getElementById(uploadedDocumentListClientId)).empty();
		$(document.getElementById('document-progress')).remove();
		$(document.getElementById('document-permission-issue')).remove();

		var form = $(document.getElementById(documentUploadFormClientId)).length ? $(document.getElementById(documentUploadFormClientId)) : $(document.getElementById('document-upload-form-iframe')).contents().find('#' + documentUploadFormClientId);
		var documentData = {};
		documentData.parentId = topLevelUploadFolder.id > 0 ? Number(topLevelUploadFolder.id) : (documentId > 0 ? documentId : 0);
		documentData.uploading = true;
		documentData.postBack = false;
		form.find('input[type="hidden"]').remove();
		form.append($('<input />').attr({ 'type': 'hidden', 'name': 'data' }).val(JSON.stringify(documentData)));

		if (window.FormData)
		{
			fileList = Array.prototype.slice.call(document.getElementById(documentUploadInputClientId).files).filter(function (file)
			{
				//Exclude invalid files
				var extension = file.name.substring(file.name.lastIndexOf('.')).toLowerCase();

				return !isFreemium || !CivicWeb.Common.excludedFileTypes.includes(extension);
			});
			if (fileList && fileList.length > 0)
			{
				var progressBar = $('<div/>').attr({ 'id': 'document-progress', 'class': 'progress' }).append($('<div/>').attr({ 'id': 'document-progress-bar', 'class': 'progress-bar progress-bar-striped progress-bar-success active', 'role': 'progressbar' }).text('0%').width('3%'));
				$(document.getElementById(uploadedDocumentListClientId)).before(progressBar);

				var documentList = $('<ul></ul>').attr('class', 'uploading-document-progress');
				var documentClass = 'icon-file-blank-24';

				for (var i = 0, file; file = fileList[i]; i++)
				{
					documentData.fileNumber = i;
					var fileData = new FormData();
					fileData.append(file.name, file);
					fileData.append('data', JSON.stringify(documentData));

					var documentType = file.name.substring(file.name.lastIndexOf('.')).replace('.', '');
					var documentName = file.name.substring(0, file.name.lastIndexOf('.'));
					documentClass = CivicWeb.Common.getFileIconClass(documentType);
					var documentLi = $('<li></li>').attr({ 'id': 'document-' + i }).css({ 'list-style-type': 'none' });
					documentLi.append($('<em></em>').attr({ 'class': documentClass }))
						.append($('<input/>').attr({ 'id': 'uploaded-document-title-input-' + i, 'type': 'text', 'class': 'uploaded-document-rename', 'required': 'required', 'data-document-type': documentType }).val(documentName))
						.append($('<input/>').attr({ 'id': 'flag-record-' + i, 'class': 'hidden', 'type': 'checkbox' }).css({ 'margin': '5px' }))
						.append($('<label/>').attr({ 'id': 'flag-record-label-' + i, 'for': 'flag-record-' + i, 'class': 'hidden' }).css({ 'vertical-align': 'middle' }).text(classifyAsRecord ? localization.formFieldLabelClassifyAsRecord : localization.flagAsRecordLabel));
					if (agendaNotesLiteEnabled && (documentType === 'html' || documentType === 'doc' || documentType === 'docx' || documentType === 'odt'))
					{
						documentLi.append($('<input/>').attr({ 'id': 'flag-agenda-' + i, 'class': 'hidden', 'type': 'checkbox' }).css({ 'margin': '5px' }))
							.append($('<label/>').attr({ 'id': 'flag-agenda-label-' + i, 'for': 'flag-agenda-' + i, 'class': 'hidden' }).css({ 'vertical-align': 'middle' }).text(localization.flagAsAgendaLabel));
					}

					if (file.size < 500000000)
					{
						documentLi.append((isInternetExplorer ? $('<div></div>', { 'id': 'document-upload-throbber-' + i }).css({ 'float': 'right' }).append(CivicWeb.Common.Button.getThrobber()) : $('<div></div>', { 'id': 'document-upload-throbber-' + i, 'class': 'loader' }).css({ 'float': 'right' })));
						uploadedDocumentIds = [];
						documentsToUpload.push(fileData);
					}
					else
					{
						documentLi.append($('<span></span>', { 'class': 'pull-right' }).css({ 'width': '500px', 'height': '40px', 'margin-top': '-11px', 'overflow': 'hidden' }).append(CivicWeb.Common.Notification.create('doc-size-warning-' + i, 'warning', localization.warningDocumentSizeUploadLimit, false, false)));
					}
					documentList.append(documentLi);
					$(document.getElementById(uploadedDocumentListClientId)).append(documentList);
				}
				if (documentList.length > 0)
				{
					if ($(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).hasClass('hidden'))
					{
						$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).removeClass('hidden').css({ 'visibility': '' }).data('kendoWindow').center().open();
						$(document.getElementById(saveToTopOrderWarningClientId)).text(localization.warningSaveToTopAppliesToDefaultOrder.replace('{0}', currentSortField));
					}
				}
				processUploadQueue(false);
			}
		}
		else
		{
			$(document.getElementById('document-upload-form-iframe')).get(0).onload = uploadIframeEvent;
			form.attr({ 'action': '/api/documents/upload' });
			$(document.getElementById('document-upload-form-iframe')).contents().find('form').trigger('submit');
		}
	};

	var uploadDocumentSuccess = function (result)
	{
		documentsUploaded++;
		if (navigator.userAgent.match(/MSIE 9/) && result.fileNumber === null)
		{
			result.fileNumber = 0;
		}
		$.each(result.Documents, function (index, value)
		{
			var currentDocument = value;
			uploadedDocumentIds.push(currentDocument.Id);
			$(document.getElementById('uploaded-document-title-input-' + result.fileNumber)).attr('data-id', currentDocument.Id);
			$(document.getElementById('document-title-' + result.fileNumber)).attr('data-id', currentDocument.Id);
			$(document.getElementById('flag-record-' + result.fileNumber)).attr({ 'data-id': currentDocument.Id, 'data-type': 'record' });
			$(document.getElementById('flag-agenda-' + result.fileNumber)).attr({ 'data-id': currentDocument.Id, 'data-type': 'agenda' });
		});
		$(document.getElementById(confirmSecurityButtonClientId)).off('click').on('click', function () { confirmUploadedDocumentSecurityClick(uploadedDocumentIds); return false; });
		$(document.getElementById(cancelSecurityButtonClientId)).off('click').on('click', cancelSecurityButtonClick);

		if (typeof (fileList) !== 'undefined')
		{
			var percentage = Math.round((documentsUploaded / fileList.length) * 100);
			$(document.getElementById('document-progress-bar')).text(percentage + '%').width(percentage + '%');
		}
		$(document.getElementById('document-upload-throbber-' + result.fileNumber)).remove();
		$(document.getElementById('document-' + result.fileNumber)).append($('<span></span>').attr({ 'class': 'cw-icon-check-lg' }).css({ 'float': 'right' }));
		if (purchasedRms)
		{
			$(document.getElementById('flag-record-' + result.fileNumber)).removeClass('hidden');
			$(document.getElementById('flag-record-label-' + result.fileNumber)).removeClass('hidden');
		}
		$(document.getElementById('flag-agenda-' + result.fileNumber)).removeClass('hidden');
		$(document.getElementById('flag-agenda-label-' + result.fileNumber)).removeClass('hidden');
		$(document.getElementById('rename-document-' + result.fileNumber)).removeClass('hidden');
		$(document.getElementById('rename-document-' + result.fileNumber)).attr('data-id', result.fileNumber);
		$(document.getElementById('rename-document-cancel-' + result.fileNumber)).attr('data-id', result.fileNumber);
		$(document.getElementById('document-order-position')).removeClass('hidden');

		if (typeof (fileList) === 'undefined' || fileList.length === 0 || documentsUploaded === fileList.length)
		{
			permissionSchemas.documents.groups.selectedPermissions = result.selectedGroupPermissions;
			permissionSchemas.documents.users.selectedPermissions = result.selectedUserPermissions;
			var availableToAll = (result.selectedGroupPermissions && result.selectedGroupPermissions.length === 0) && (result.selectedUserPermissions && result.selectedUserPermissions.length === 0);
			$(document.getElementById(permissionSchemas.documents.controlIds.availableToAll)).prop('checked', availableToAll);
			CivicWeb.Common.Permissions.createInstance({ schemas: permissionSchemas, enabled: canControl, simplePermissions: simplePermissions, canMakeAvailableToAll: canMakeAvailableToAll, showPublicOnlyItemsForAllUsers: showPublicOnlyItemsForAllUsers, localization: { deletedText: localization.deletedText, makingPubliclyAvailableWarningMessageText: localization.makingPubliclyAvailableWarningMessageText, publicUserAndAllInternalUsersText: localization.publicUserAndAllInternalUsersText }, images: { expandImageClass: images.expandImageClass, collapseImageClass: images.collapseImageClass } });

			if (canControl || !isFreemium)
			{
				$(document.getElementById(uploadDocumentsPermissionsClientId)).removeClass('hidden');
			}

			$(document.getElementById('processing-image')).remove();
			$(document.getElementById('document-progress-bar')).text('100%').width('100%');
			setTimeout(function () { $(document.getElementById('document-progress')).slideUp(); }, 1000);
			$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).find('.button-row').removeClass('hidden');
			$(document.getElementById(uploadedDocumentListClientId)).css('max-height', '20em');
		}

		caseFileData.classification = result.Classification;
		caseFileData.destructionDate = result.DestructionDate;
	};

	var cancelSecurityButtonClick = function ()
	{
		closePermissionsWindowAndReload();
	};

	var closePermissionsWindowAndReload = function (closing)
	{
		if (!closing)
		{
			$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).addClass('hidden').data('kendoWindow').close();
		}

		window.location.reload();
	};

	var uploadIframeEvent = function (e)
	{
		e.preventDefault();

		var responseJson = $(document.getElementById('document-upload-form-iframe')).contents().find('body').text();
		var result = JSON.parse(responseJson);

		if (result !== null && result.Result && result.Documents)
		{
			$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).removeClass('hidden').css({ 'visibility': '' }).data('kendoWindow').center().open();

			var documentList = $('<ul></ul>').attr('class', 'uploading-document-progress');
			var documentClass = 'icon-file-blank-24';
			for (var i = 0; i < result.Documents.length; i++)
			{
				var currentDocument = result.Documents[i];
				var description = currentDocument.Description;
				var documentType = currentDocument.FileFormat.trim('.');
				var documentLi = $('<li></li>').attr({ 'id': 'document-' + i }).css({ 'list-style-type': 'none' });
				documentClass = 'icon-file-' + (documentType.length > 0 ? documentType.replace('docx', 'doc') : 'blank') + '-24';
				documentLi.append($('<em></em>').attr({ 'class': documentClass }))
					.append($('<input/>').attr({ 'id': 'uploaded-document-title-input-' + i, 'type': 'text', 'class': 'uploaded-document-rename', 'required': 'required', 'data-id': currentDocument.Id, 'data-document-type': documentType }).val(description))
					.append($('<input/>').attr({ 'id': 'flag-record-' + i, 'class': 'hidden', 'type': 'checkbox' }).css({ 'margin': '5px' }))
					.append($('<label/>').attr({ 'id': 'flag-record-label-' + i, 'for': 'flag-record-' + i, 'class': 'hidden' }).css({ 'vertical-align': 'middle' }).text(classifyAsRecord ? localization.formFieldLabelClassifyAsRecord : localization.flagAsRecordLabel));
				if (agendaNotesLiteEnabled && (documentType === 'html' || documentType === 'doc' || documentType === 'docx' || documentType === 'odt'))
				{
					documentLi.append($('<input/>').attr({ 'id': 'flag-agenda-' + i, 'class': 'hidden', 'type': 'checkbox' }).css({ 'margin': '5px' }))
						.append($('<label/>').attr({ 'id': 'flag-agenda-label-' + i, 'for': 'flag-agenda-' + i, 'class': 'hidden' }).css({ 'vertical-align': 'middle' }).text(localization.flagAsAgendaLabel));
				}
				documentList.append(documentLi);
			}
			$(document.getElementById(uploadedDocumentListClientId)).append(documentList);

			uploadDocumentSuccess(result);

			$(document.getElementById('document-upload-form-iframe')).prepend($('<form/>', { 'id': 'document-upload-form', 'method': 'post', 'enctype': 'multipart/form-data', 'target': 'document-upload-form-iframe' }).append(
				$('<input/>', { 'id': 'document-upload-input', 'name': 'file', 'multiple': 'multiple', 'type': 'file' })));
			$(document.getElementById('document-upload-form-iframe')).contents().find('body').html('');
		}
	};

	var dragUploadDocuments = function (documentListData)
	{
		if (documentListData)
		{
			documentsUploaded = 0;
			$(document.getElementById(uploadedDocumentListClientId)).empty();
			var documentList = $('<ul></ul>').attr('class', 'uploading-document-progress');
			var progressBar = $('<div/>').attr({ 'id': 'document-progress', 'class': 'progress progress-striped active' }).append($('<div/>').attr({ 'id': 'document-progress-bar', 'class': 'progress-bar progress-bar-success' }).text('0%').width('3%'));
			$(document.getElementById(uploadedDocumentListClientId)).before(progressBar);
			$(document.getElementById(uploadedDocumentListClientId)).append(documentList);

			var documentData = {};
			documentData.parentId = documentListData.parentId;
			fileList = documentListData.files;
			var documentClass = 'icon-file-blank-24';

			for (var i = 0, file; file = documentListData.files[i]; i++)
			{
				documentData.files = [];
				var fileToUpload = {};
				fileToUpload.title = file.title;
				fileToUpload.type = file.type;
				fileToUpload.data = file.data;
				documentData.files.push(fileToUpload);
				documentData.fileNumber = i;

				var documentType = file.title.substring(file.title.lastIndexOf('.')).replace('.', '');
				var documentName = file.title.substring(0, file.title.lastIndexOf('.'));
				documentClass = CivicWeb.Common.getFileIconClass(documentType);
				var documentLi = $('<li></li>').attr({ 'id': 'document-' + i }).css({ 'list-style-type': 'none' });
				documentLi.append($('<em></em>').attr({ 'class': documentClass }))
					.append($('<input/>').attr({ 'id': 'uploaded-document-title-input-' + i, 'type': 'text', 'class': 'uploaded-document-rename', 'data-document-type': documentType }).val(documentName))
					.append($('<a/>').attr({ 'id': 'rename-document-' + i, 'class': 'hidden', 'href': '#' }).css({ 'vertical-align': 'middle', 'margin': '0 1em' }).off('click').on('click', renameDocument).text(localization.renameLinkText))
					.append($('<a/>').attr({ 'id': 'rename-document-cancel-' + i, 'class': 'hidden', 'href': '#' }).css({ 'vertical-align': 'middle', 'margin': '0 0.5em' }).off('click').on('click', cancelRename).text(localization.cancelButtonText))
					.append($('<input/>').attr({ 'id': 'flag-record-' + i, 'class': 'hidden', 'type': 'checkbox' }).css({ 'margin': '5px' }))
					.append($('<label/>').attr({ 'id': 'flag-record-label-' + i, 'for': 'flag-record-' + i, 'class': 'hidden' }).css({ 'vertical-align': 'middle' }).text(classifyAsRecord ? localization.formFieldLabelClassifyAsRecord : localization.flagAsRecordLabel));
				if (agendaNotesLiteEnabled && (documentType === 'html' || documentType === 'doc' || documentType === 'docx' || documentType === 'odt'))
				{
					documentLi.append($('<input/>').attr({ 'id': 'flag-agenda-' + i, 'class': 'hidden', 'type': 'checkbox' }).css({ 'margin': '5px' }))
						.append($('<label/>').attr({ 'id': 'flag-agenda-label-' + i, 'for': 'flag-agenda-' + i, 'class': 'hidden' }).css({ 'vertical-align': 'middle' }).text(localization.flagAsAgendaLabel));
				}

				if (file.size < 500000000)
				{
					documentLi.append(CivicWeb.Common.Button.getThrobber('document-upload-throbber-' + i).css({ 'float': 'right', 'height': '24px' }));
					uploadedDocumentIds = [];
					documentsToUpload.push(JSON.stringify(documentData));
				}
				else
				{
					documentLi.append($('<span></span>', { 'class': 'pull-right' }).css({ 'width': '500px', 'height': '40px', 'margin-top': '-11px', 'overflow': 'hidden' }).append(CivicWeb.Common.Notification.create('doc-size-warning-' + i, 'warning', localization.warningDocumentSizeUploadLimit, false, false)));
				}

				documentList.append(documentLi);
				$(document.getElementById(uploadedDocumentListClientId)).append(documentList);
			}

			if (documentList.length > 0)
			{
				if ($(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).hasClass('hidden'))
				{
					$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).removeClass('hidden').css({ 'visibility': '' }).data('kendoWindow').center().open();
					$(document.getElementById(saveToTopOrderWarningClientId)).text(localization.warningSaveToTopAppliesToDefaultOrder.replace('{0}', currentSortField));
				}
			}
			processUploadQueue(true);
		}
	};

	var processUploadQueue = function (dragUpload)
	{
		if (documentsToUpload.length > 0)
		{
			var fileData = documentsToUpload.shift();
			resizePopup();
			if ($(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).hasClass('hidden'))
			{
				$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).removeClass('hidden').css({ 'visibility': '' }).data('kendoWindow').center().open();
				$(document.getElementById(saveToTopOrderWarningClientId)).text(localization.warningSaveToTopAppliesToDefaultOrder.replace('{0}', currentSortField));
			}
			$.ajax({
				url: '/api/documents/' + (dragUpload ? 'dragupload' : 'upload') + (changeSetId > 0 ? '?changeSetId=' + changeSetId : ''),
				contentType: (dragUpload ? 'application/json' : false), dataType: 'json', async: true, cache: false, type: 'POST', data: fileData, processData: false,
				xhr: function ()
				{
					var progressListener = function (e)
					{
						if (e.lengthComputable)
						{
							var percentComplete = (e.loaded / e.total) * 0.9;
							var percentage = Math.round((((documentsUploaded + percentComplete) / fileList.length)) * 100);
							$(document.getElementById('document-progress-bar')).text(percentage + '%').width(percentage + '%');
						}
					};

					// ReSharper disable once InconsistentNaming
					var xmlHttpRequest = new XMLHttpRequest();

					//Download progress
					if (xmlHttpRequest.addEventListener)
					{
						// ReSharper disable once Html.EventNotResolved
						xmlHttpRequest.addEventListener('progress', progressListener, false);
					}
					if (xmlHttpRequest.upload && xmlHttpRequest.upload.addEventListener)
					{
						// ReSharper disable once Html.EventNotResolved
						xmlHttpRequest.upload.addEventListener('progress', progressListener, false);
					}

					return xmlHttpRequest;
				}
			})
				.done(function (result)
				{
					if (result.Result && result.Documents)
					{
						topLevelUploadFolder = { id: 0, parentCount: 100000000, parentId: 0 };
						if (result.ChangeSetId)
						{
							changeSetId = result.ChangeSetId;
						}
						uploadDocumentSuccess(result);
						processUploadQueue(dragUpload);
					}
				})
				.fail(function (result)
				{
					topLevelUploadFolder = { id: 0, parentCount: 100000000, parentId: 0 };
					if (result.statusText === 'Forbidden')
					{
						$(document.getElementById(uploadedDocumentListClientId)).empty();
						$(document.getElementById('document-progress')).remove();
						$(document.getElementById('document-permission-issue')).remove();
						$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).height('100px');
						$(document.getElementById(uploadedDocumentListClientId)).before($('<div/>', { 'id': 'document-permission-issue' }).css({ 'text-align': 'center' }).text(localization.warningMessageUploadDocumentsFolderPermissions)
							.append($('<div/>', { 'class': 'button-row' }).append($('<button/>', { 'class': 'button background-color-hover' }).text(localization.closeButtonText).off('click').on('click', function (e)
							{
								$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).addClass('hidden').data('kendoWindow').close();
								e.preventDefault();
							}))));
					}
					else
					{
						processUploadQueue(dragUpload);
					}
				});
		}
		else
		{
			fileList = [];
			changeSetId = 0;
		}
	};

	var renameDocument = function (e)
	{
		var renameTextBox = $(document.getElementById('uploaded-document-title-input-' + $(e.target).attr('data-id')));
		var renameLabel = $(document.getElementById('document-title-' + $(e.target).attr('data-id')));
		var renameLink = $(document.getElementById('rename-document-' + $(e.target).attr('data-id')));
		var renameCancelLink = $(document.getElementById('rename-document-cancel-' + $(e.target).attr('data-id')));
		if (renameTextBox.hasClass('hidden'))
		{
			renameLabel.addClass('hidden');
			renameTextBox.removeClass('hidden');
			renameTextBox.val(renameLabel.text());
			renameLink.text(localization.acceptLinkText);
			renameCancelLink.removeClass('hidden');
		}
		else
		{
			renameLabel.text(renameTextBox.val());
			renameTextBox.addClass('hidden');
			renameLabel.removeClass('hidden');
			renameCancelLink.addClass('hidden');
			renameLink.text(localization.renameLinkText);
		}

		e.preventDefault();
	};

	var cancelRename = function (e)
	{
		var renameTextBox = $(document.getElementById('uploaded-document-title-input-' + $(e.target).attr('data-id')));
		var renameLabel = $(document.getElementById('document-title-' + $(e.target).attr('data-id')));
		var renameLink = $(document.getElementById('rename-document-' + $(e.target).attr('data-id')));
		var renameCancelLink = $(document.getElementById('rename-document-cancel-' + $(e.target).attr('data-id')));

		renameTextBox.addClass('hidden');
		renameLabel.removeClass('hidden');
		renameCancelLink.addClass('hidden');
		renameLink.text('Rename');
	};
	//#endregion

	//#region Sort Methods
	var getSelectedNodes = function () {
		return $('.k-checkbox-wrapper input[type="checkbox"]:checked').closest('li').find('.k-in');
	}

	var sortDocumentList = function (currentTreeView, sortField, sortDirection)
	{
		if (currentTreeView)
		{
			$(document.getElementById('document-list-view-headers')).children().removeClass('background-color');
			$(document.getElementById('header-sort-arrow')).remove('*');
			var sortArrow = $('<span></span>').attr({ 'id': 'header-sort-arrow', 'title': '' });
			var sortOption = [];

			switch (sortDirection)
			{
				case 'asc':
					sortArrow.attr('title', localization.ascendingToolTip).html(' &#9650;'); //Up arrow
					break;
				case 'desc':
					sortArrow.attr('title', localization.descendingToolTip).html(' &#9660;'); // Down arrow
					break;
			}

			$('.document-list-view-header-name').find('a').attr('data-sort', sort.none);
			$('.document-list-view-header-modified').find('a').attr('data-sort', sort.none);
			$('.document-list-view-header-size').find('a').attr('data-sort', sort.none);
			switch (sortField)
			{
				case 'Title':
					$('.document-list-view-header-name').addClass('background-color');
					$('.document-list-view-header-name').find('a#column-header-link-name').after(sortArrow);
					$('.document-list-view-header-name').find('a#column-header-link-name').attr('data-sort', (sortDirection === 'asc' ? sort.ascending : sort.descending));
					currentSortField = 'Name';
					sortField = 'NaturalSortTitle';
					break;

				case 'DateUpdated':
					$('.document-list-view-header-modified').addClass('background-color');
					$('.document-list-view-header-modified').find('a#column-header-link-modified').after(sortArrow);
					$('.document-list-view-header-modified').find('a#column-header-link-modified').attr('data-sort', (sortDirection === 'asc' ? sort.ascending : sort.descending));
					currentSortField = 'DateUpdated';
					break;

				case 'FileSizeInBytes':
					$('.document-list-view-header-size').addClass('background-color');
					$('.document-list-view-header-size').find('a#column-header-link-size').after(sortArrow);
					$('.document-list-view-header-size').find('a#column-header-link-size').attr('data-sort', (sortDirection === 'asc' ? sort.ascending : sort.descending));
					currentSortField = 'Size';
					break;
			}

			if (sortField !== 'Order')
			{
				sortOption.push({
					field: 'Folder',
					dir: 'desc'
				});
			}

			sortOption.push({
				field: sortField,
				dir: sortDirection
			});

			$(document.getElementById('sort-processing')).removeClass('hidden');

			currentTreeView.dataSource.sort(sortOption);
			sortExpandedFolders(sortOption);

			resizeDocumentList();
		}
	};

	var sortExpandedFolders = function (sortOption)
	{
		var expandedIdsString = getQueryStringValue('expanded');
		var expandedIds = expandedIdsString && expandedIdsString.length > 0 ? expandedIdsString.split(',') : [];
		if (expandedIds && expandedIds.length > 0)
		{
			$.each(expandedIds, function (index, value)
			{
				var element = $(document.getElementById('document-list-view')).find('div[data-id=\'' + value + '\']');
				var item = documentTreeView.dataSource.getByUid($(element).closest('[data-uid]').attr('data-uid'));
				if (item && item.children && item.hasChildren)
				{
					item.children.sort(sortOption);
				}
			});
		}
	};

	var saveCurrentSort = function (field, sortDirection)
	{
		$.ajax({
			url: '/api/documents/sort/' + (field.length > 0 ? field : 'Order') + '/' + (sortDirection.length > 0 ? sortDirection : 'asc'),
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'POST',
			success: function (result)
			{
				if (result.Result)
				{
					currentSortField = field;
				}
			},
			error: function ()
			{
			}
		});
	};
	//#endregion

	//#region Document View Methods
	var loadView = function (loadInitial)
	{
		if (localStorageAvailable() && localStorage.getItem('documentViewType'))
		{
			documentView = localStorage.getItem('documentViewType');
		}
		if (documentId > 0 && loadFolderPage)
		{
			documentView = documentViewType.previewView;
		}
		if (loadInitial && (initialViewMode === documentViewType.listView || initialViewMode === documentViewType.thumbnailView || initialViewMode === documentViewType.previewView))
		{
			documentView = initialViewMode;
		}

		switch (documentView)
		{
			case documentViewType.listView:
				setListView();
				break;

			case documentViewType.thumbnailView:
				setThumbnailView();
				break;

			case documentViewType.previewView:
				setPreviewView();
				break;
		}
	};

	var setListView = function ()
	{
		documentView = documentViewType.listView;

		$(document.getElementById('document-list-container')).removeClass('document-list-preview');

		$(document.getElementById(documentPreviewViewClientId)).addClass('hidden');
		$(document.getElementById('document-preview-view-headers')).addClass('hidden');
		$(document.getElementById(fileProPreviewViewClientId)).removeClass('background-color');

		$(document.getElementById('horizontal-splitter')).removeClass('hidden');

		documentThumbnailViewClientElem.addClass('hidden');
		$(document.getElementById('document-thumbnail-view-header')).addClass('hidden');
		$(document.getElementById(fileProThumbnailViewClientId)).removeClass('background-color');

		documentPreviewRemoveClass();

		if (documentRecycleBinView)
		{
			$('.document-recycle-bin-list-view-header-name').width('');
			$('.document-list-view-deleted-by').removeClass('hidden');
			$('.document-list-view-header-deleted-by').removeClass('hidden');
		}

		$('.document-list-view-header-name').css({ 'width': '' });
		$('.document-link-container').css({ 'max-width': '', 'width': '' });
		$('.document-list-view-modified').removeClass('hidden');
		$('.document-list-view-header-modified').removeClass('hidden');
		$('.document-list-view-size').removeClass('hidden');
		$('.document-list-view-header-size').removeClass('hidden');
		$(document.getElementById('document-list-view-headers')).removeClass('hidden');
		folderContentListViewClientElem.addClass('hidden');
		documentsListViewClientElem.removeClass('hidden');
		$(document.getElementById(fileProListViewClientId)).addClass('background-color');

		$('#previousQuickView').off('click', highlightRow).on('click', highlightRow);
		$('#nextQuickView').off('click', highlightRow).on('click', highlightRow);

		var listheight = $(window).height() - documentsListViewClientElem.offset().top - 32;
		documentsListViewClientElem.height(listheight + 'px');
		previewLoaded = false;
	};

	var setThumbnailView = function ()
	{
		loadDocumentThumbnailList();

		documentView = documentViewType.thumbnailView;

		$(document.getElementById('document-list-container')).removeClass('document-list-preview');

		$.each($('.document-thumbnail-view-documents'), function (index, value)
		{
			var nodeId = $(value).attr('data-id');
			var title = $(value).attr('data-title');
			var socialMediaLink = window.location.protocol + '//' + window.location.hostname + (isFreemium ? '/document/' : '/filepro/documents/') + nodeId;
			CivicWeb.Common.SocialMediaShares.createInstance({ clientId: (socialMediaShareClientId + '-thumbnail-' + nodeId), url: socialMediaLink, title: title, itemId: nodeId, localization: socialMediaLocalization, show: true });
			documentThumbnailViewClientElem.find(document.getElementById(socialMediaShareClientId + '-thumbnail-' + nodeId)).css({ 'position': 'absolute', 'top': '0', 'margin': '0' });
		});

		$(document.getElementById(documentPreviewViewClientId)).addClass('hidden');
		$(document.getElementById('document-preview-view-headers')).addClass('hidden');
		$(document.getElementById(fileProPreviewViewClientId)).removeClass('background-color');

		$(document.getElementById('horizontal-splitter')).addClass('hidden');

		$(document.getElementById('document-list-view-headers')).addClass('hidden');
		documentsListViewClientElem.addClass('hidden');
		$(document.getElementById(fileProListViewClientId)).removeClass('background-color');

		$(document.getElementById('document-thumbnail-view-header')).removeClass('hidden');
		documentThumbnailViewClientElem.removeClass('hidden');
		$(document.getElementById(fileProThumbnailViewClientId)).addClass('background-color');

		documentPreviewRemoveClass();

		$('#previousQuickView').off('click', highlightRow);
		$('#nextQuickView').off('click', highlightRow);

		loadThumbnailImages();

		var listheight = $(window).height() - documentThumbnailViewClientElem.offset().top - 32;
		documentThumbnailViewClientElem.height(listheight + 'px');
		previewLoaded = false;
	};

	var setPreviewView = function ()
	{
		documentView = documentViewType.previewView;

		$(document.getElementById('document-list-container')).addClass('document-list-preview');

		documentThumbnailViewClientElem.addClass('hidden');
		$(document.getElementById('document-thumbnail-view-header')).addClass('hidden');
		$(document.getElementById(fileProThumbnailViewClientId)).removeClass('background-color');

		$(document.getElementById('document-list-view-headers')).removeClass('hidden');
		documentsListViewClientElem.removeClass('hidden');
		$(document.getElementById(fileProListViewClientId)).removeClass('background-color');

		$(document.getElementById(documentPreviewViewClientId)).removeClass('hidden');
		$(document.getElementById('document-preview-view-headers')).removeClass('hidden');
		$(document.getElementById(fileProPreviewViewClientId)).addClass('background-color');

		documentsListViewClientElem.find('.social-media-share').addClass('hidden');
		documentsListViewClientElem.find('.edit-node-icon').addClass('hidden');
		documentsListViewClientElem.find('.favorite-icon').addClass('hidden');

		documentPreviewRemoveClass();

		$(document.getElementById('horizontal-splitter')).removeClass('hidden');
		documentPreviewView = $(document.getElementById('horizontal-splitter')).kendoSplitter({
			orientation: 'horizontal',
			panes: [{ collapsible: true, scrollable: false, size: '30%' }, { scrollable: false, size: '70%' }],
			resize: function ()
			{
				$('.document-list-view-header-name').width('100%');
			}
		}).data('kendoSplitter');

		$('.document-list-view-header-name').width('100%');
		$('.document-list-view-name').width('100%');
		$('.document-link-container').width('90%');
		$('.document-link-container').css('max-width', '100%');
		$('.document-recycle-bin-list-view-header-name').width('100%');
		var previewHeight = $('.footer').offset().top - $('#horizontal-splitter').offset().top;
		$('#horizontal-splitter').height(previewHeight + 'px');
		$('.left-pane').height(previewHeight + 'px');
		$('.right-pane').height(previewHeight + 'px');
		$('.right-pane').width('70%');
		$('.k-splitbar').height(previewHeight + 'px');
		$(document.getElementById('document-preview')).height((previewHeight - 40) + 'px');
		documentsListViewClientElem.height(((previewHeight - 35) - 40) + 'px');

		if (documentRecycleBinView)
		{
			$('.document-list-view-deleted-by').addClass('hidden');
			$('.document-list-view-header-deleted-by').addClass('hidden');
		}
		$('.document-list-view-modified').addClass('hidden');
		$('.document-list-view-header-modified').addClass('hidden');
		$('.document-list-view-size').addClass('hidden');
		$('.document-list-view-header-size').addClass('hidden');

		folderPreviewButtonClientElem.off('click').on('click', previewFolderContentsClick);

		$('#previousQuickView').off('click', highlightRow).on('click', highlightRow);
		$('#nextQuickView').off('click', highlightRow).on('click', highlightRow);

		var selectedDocument = $('span.k-state-selected').first();
		if (selectedDocument && selectedDocument.length > 0 && !previewLoaded)
		{
			previewDocumentContent(selectedDocument.find('[data-id]').attr('data-id'));
			previewLoaded = true;
		}

		loadPreviewDocument(previewId !== null && previewId > 0 ? previewId : documentId);
	};

	var setView = function (view)
	{
		stopPreviewMediaFrame();
		switch (view)
		{
			case documentViewType.listView:
				setListView();
				resizeDocumentList();
				break;

			case documentViewType.previewView:
				setPreviewView();
				break;

			case documentViewType.thumbnailView:
				setThumbnailView();
				break;
		}

		if (localStorageAvailable())
		{
			localStorage.setItem('documentViewType', view);
		}
	};
	//#endregion

	var documentPreviewRemoveClass = function ()
	{
		if (documentPreviewView)
		{
			$('.k-splitbar').remove();
			var pane = $('.left-pane');
			pane.removeClass('k-pane');
			pane.removeAttr('role');
			pane.removeAttr('style');

			pane = $('.right-pane');
			pane.removeClass('k-pane');
			pane.removeAttr('role');
			pane.removeAttr('style');
		}
	};

	//#region Misc Methods
	var getTreeItemTemplate = function (dataItem)
	{
		var favoriteItems = [];
		if (!isLoggedIn)
		{
			var favoriteItemsString = localStorage.getItem('favoriteItems');
			if (favoriteItemsString && favoriteItemsString.length)
			{
				favoriteItems = JSON.parse(favoriteItemsString);
			}
		}
		var description = $('<div/>').html(dataItem.Title).text();
		var documentRow = $('<div></div>');
		var documentListViewDocument = $('<div></div>', {
			'class': 'document-list-view-documents',
			'data-id': dataItem.Id,
			'id': dataItem.Id,
			'data-title': description,
			'data-parentId': dataItem.ParentId,
			'data-order': dataItem.Order,
			'data-type': (dataItem.FavoriteFolder ? 'favorites-folder' : (dataItem.Folder ? 'folder' : 'document')),
			'data-secure': !dataItem.HasAccess,
			'data-update-allowed': ((!dataItem.FavoriteFolder && dataItem.UpdateAllowed) || false).toString()
		});
		if (typeof dataItem.IsPublic === 'boolean')
		{
			documentListViewDocument.attr({ 'data-public': dataItem.IsPublic });
		}

		var spanDocumentListViewName = $('<span></span>', { 'class': 'document-list-view-name' + (documentRecycleBinView ? ' document-recycle-bin-list-view-name' : '') });
		var title = description.length > 0 ? description : localization.untitledDocumentName;
		var documentLinkContainer = $('<div></div>', { 'class': 'document-link-container', 'data-container': 'body' });

		if (dataItem.Folder)
		{
			var folderIconUrl = dataItem.FavoriteFolder ? images.favoritesFolderImageUrl : (!dataItem.HasAccess ? images.privateFolderImageUrl : (dataItem.CaseFile ? (dataItem.OpenCaseFile ? images.openCaseFileImageUrl : images.closedCaseFileImageUrl) : dataItem.FolderPageExists ? images.folderPageFolderImageUrl : images.folderImageUrl));
			var folderToolTip = dataItem.FavoriteFolder ? localization.favoritesFolderToolTip : (!dataItem.HasAccess ? localization.securedFolderToolTip : (dataItem.CaseFile ? (dataItem.OpenCaseFile ? localization.openCaseFileToolTip : localization.closedCaseFileToolTip) : dataItem.FolderPageExists ? localization.folderPageToolTip : localization.folderLabel));

			documentLinkContainer.append($('<span></span>', { 'class': 'folder-image ' + folderIconUrl, 'title': folderToolTip }));
			if (dataItem.HasAccess)
			{
				documentLinkContainer.append($((toogleOrderingModeButtonClientElem.attr('data-enabled') === 'true' ? '<span></span>' : '<a></a>'), { 'class': 'folder-link', 'href': '/filepro/documents/' + (documentRecycleBinView ? 'recyclebin/' : '') + dataItem.Id }).text(title));
			}
			else
			{
				documentLinkContainer.append($('<span></span>').text(title));
			}
		}
		else
		{
			documentLinkContainer.append($('<em></em>', { 'class': CivicWeb.Common.getFileIconClass(dataItem.FileFormat), 'title': dataItem.FileFormat.toLowerCase() }));
			if (dataItem.HasAccess)
			{
				documentLinkContainer.append($((toogleOrderingModeButtonClientElem.attr('data-enabled') === 'true' ? '<span></span>' : '<a></a>'), { 'class': 'document-link', 'href': ('/filepro/documents/' + (documentRecycleBinView ? 'recyclebin/' : '') + '?preview=' + dataItem.Id) }).text(title));
			}
			else
			{
				documentLinkContainer.append($('<span></span>').text(title));
			}
		}

		spanDocumentListViewName.append(documentLinkContainer);
		var documentOptionsContainer = $('<div></div>', { 'class': 'document-options-container' });
		if (dataItem.HasAccess)
		{
			if (isLoggedIn && dataItem.UpdateAllowed)
			{
				documentOptionsContainer.append($('<a></a>', { 'class': 'edit-node-icon cw-fp-icon-edit-disabled hidden', 'title': localization.editToolTipText + ' ' + (title), 'href': '/filepro/document/' + dataItem.Id + (documentRecycleBinView ? '?deleted=True' : '') }));
			}
			if (!documentRecycleBinView)
			{
				if (documentId < 0 || dataItem.Favorite || (!isLoggedIn && favoriteItems.indexOf(dataItem.Id.toString()) >= 0))
				{
					documentOptionsContainer.append($('<span></span>', { 'role':'button', 'tabindex':'0', 'class': 'favorite-icon hidden cw-fp-icon-star', 'data-type': 'remove', 'title': localization.favoritesStarToolTip + ' ' + (title) }));
				}
				else
				{
					documentOptionsContainer.append($('<span></span>', { 'role': 'button', 'tabindex': '0', 'class': 'favorite-icon hidden cw-fp-icon-star-disabled', 'data-type': 'add', 'title': localization.favoritesStarToolTip + ' ' + (title) }));
				}
				var socialMedia = $(document.getElementById(socialMediaShareContainerClientId)).clone();
				documentOptionsContainer.append(socialMedia.children());
			}
		}
		spanDocumentListViewName.append(documentOptionsContainer);
		documentListViewDocument.append(spanDocumentListViewName);

		if (documentRecycleBinView)
		{
			documentListViewDocument.append($('<span></span>', { 'class': 'document-list-view-deleted-by', 'title': localization.deletedByToolTip + ' ' + dataItem.DeletedBy }).text(dataItem.DeletedBy));
		}

		if ((!canDelete || isiPad) && dataItem.FavoriteFolder)
		{
			documentListViewDocument.css('padding-left', '0');
		}
		documentListViewDocument.append($('<span></span>', { 'class': 'document-list-view-modified', 'title': (documentRecycleBinView ? localization.dateDeletedToolTip : localization.lastModifiedToolTip) + ' ' + dataItem.DateUpdatedFormatted }).text(dataItem.DateUpdatedFormatted));
		documentListViewDocument.append($('<span></span>', { 'class': 'document-list-view-size', 'title': localization.sizeToolTip }).text(dataItem.FileSize));
		documentRow.append(documentListViewDocument);

		return documentRow.html();
	};

	var getTreeViewDataSource = function (docId, includeAll, page)
	{
		var treeViewDataSource = new kendo.data.HierarchicalDataSource({
			transport: {
				read: function (options)
				{
					var url = '/api/document/' + (options.data && options.data.Id > 0 ? options.data.Id.toString() : (docId && docId > 0 ? docId.toString() : '0')) + '/getchildlist?includeAll=' + (!!includeAll).toString() + '&page=' + (options.data && options.data.Id > 0 ? 1 : page) + '&resultsPerPage=' + treeViewPageSize;
					if (documentRecycleBinView && isLoggedIn)
					{
						url = '/api/documents/recyclebin/' + (options.data && options.data.Id > 0 ? options.data.Id.toString() : (docId && docId > 0 ? docId.toString() : '0')) + '?page=' + page + '&resultsPerPage=' + recycleBinTreeViewPageSize;
					}
					else
					{
						if (Number(docId) < 0 || Number(options.data.Id) < 0)
						{
							url = (isLoggedIn ? '/api/documents/favorites' : '/api/documents/documentlistbyids');
						}
					}

					if (listInitialized || nodesFromUrlExpanding)
					{
						$.ajax({
							url: url, type: 'GET', dataType: 'json', contentType: 'application/json', cache: false, async: useAsyncGetChildList, data: (!isLoggedIn ? { 'documentIdList': localStorage.getItem('favoriteItems') } : {}),
							success: function (result)
							{
								options.success(result);
							},
							error: function (result)
							{
								options.error(result);
							}
						});
					}
					else
					{
						if (initialDocumentList && initialDocumentList.length && initialDocumentList[0].TotalDocuments > treeViewPageSize && !documentRecycleBinView)
						{
							documentsListViewClientElem.append($('<div></div>', { 'class': 'scroll-load', 'data-id': documentId }));
						}
						options.success(initialDocumentList);
						listInitialized = true;
					}
				}
			},
			sort: getInitialSort(),
			schema: {
				model: {
					id: 'Id',
					hasChildren: 'HasChildren',
					fields: {
						Id: { type: 'number' },
						Folder: { type: 'boolean' },
						Title: { type: 'string' },
						Description: { type: 'string' },
						FileFormat: { type: 'string' },
						Order: { type: 'number' },
						ParentId: { type: 'number' },
						DateUpdated: { type: 'datetime' },
						DateUpdatedFormatted: { type: 'datetime' },
						HasChildren: { type: 'boolean' },
						ContentUrl: { type: 'string' },
						Favorite: { type: 'boolean' },
						FavoriteFolder: { type: 'boolean' },
						FileSizeInBytes: { type: 'number' },
						UpdateAllowed: { type: 'boolean' }
					}
				}
			}
		});

		return treeViewDataSource;
	};

	var getFavoriteTreeViewDataSource = function ()
	{
		var favoriteTreeViewDataSource = new kendo.data.HierarchicalDataSource({
			transport: {
				read: function (options)
				{
					if (options.data && options.data.Id)
					{
						var url = Number(options.data.Id) < 0 ? (isLoggedIn ? '/api/documents/favorites' : '/api/documents/documentlistbyids') : '/api/document/' + options.data.Id.toString() + '/getchildlist?resultsPerPage=100';
						$.ajax({
							url: url, type: 'GET', dataType: 'json', contentType: 'application/json', cache: false, async: true, data: (!isLoggedIn ? { 'documentIdList': localStorage.getItem('favoriteItems') } : {}),
							success: function (result)
							{
								options.success(result);
							},
							error: function (result)
							{
								options.error(result);
							}
						});
					}
					else
					{
						options.success([favoriteDataItem]);
					}
				}
			},
			schema: {
				model: {
					id: 'Id',
					hasChildren: 'HasChildren',
					fields: {
						Id: { type: 'number' },
						Folder: { type: 'boolean' },
						Title: { type: 'string' },
						Description: { type: 'string' },
						FileFormat: { type: 'string' },
						Order: { type: 'number' },
						ParentId: { type: 'number' },
						DateUpdated: { type: 'datetime' },
						DateUpdatedFormatted: { type: 'datetime' },
						HasChildren: { type: 'boolean' },
						ContentUrl: { type: 'string' },
						Favorite: { type: 'boolean' },
						FavoriteFolder: { type: 'boolean' },
						FileSizeInBytes: { type: 'number' },
						UpdateAllowed: { type: 'boolean' }
					}
				}
			}
		});

		return favoriteTreeViewDataSource;
	};

	var setTopLevelSelectedFolder = function ()
	{
		var valid;
		var selectedFolder = $('input[id^=' + documentCheckboxClientId + '][data-type=folder]:checked');
		topLevelUploadFolder = { id: 0, parentCount: 100000000, parentId: 0 };
		if (selectedFolder.length > 1)
		{
			for (var i = 0; i < selectedFolder.length; i++)
			{
				var currentFolder = $(selectedFolder[i]);
				var folderParentCount = currentFolder.parents('ul').length;
				if (folderParentCount < topLevelUploadFolder.parentCount)
				{
					topLevelUploadFolder.id = currentFolder.attr('data-id');
					topLevelUploadFolder.parentCount = folderParentCount;
					topLevelUploadFolder.parentId = currentFolder.attr('data-parentid');
				}
			}

			valid = $('input[data-parentid=' + topLevelUploadFolder.parentId + '][data-type=folder]:checked').length === 1;
		}
		else
		{
			topLevelUploadFolder.id = $('input[id^=' + documentCheckboxClientId + '][data-type=folder]:checked').attr('data-id') || 0;
			valid = true;
		}

		return valid;
	};

	var checkCreatePermissions = function ()
	{
		var valid = false;
		$.ajax({
			url: '/api/document/' + topLevelUploadFolder.id.toString() + '/permissions',
			contentType: 'application/json', dataType: 'json', async: false, cache: false, type: 'GET',
			success: function (result)
			{
				valid = result && result.UpdateAllowed;
			}
		});

		return valid;
	};

	var localStorageAvailable = function ()
	{
		try
		{
			if (localStorage)
			{
				localStorage.setItem('test', 'test');
				localStorage.removeItem('test');

				return true;
			}
			else
			{
				return false;
			}
		}
		catch (ex)
		{
			return false;
		}

	};

	var expandNodesFromUrl = function ()
	{
		if (documentTreeView !== null && !nodesFromUrlExpanding)
		{
			var expandedIdString = getQueryStringValue('expanded');
			if (expandedIdString && expandedIdString.length)
			{
				nodesFromUrlExpanding = true;
				var expandedNodes = expandedIdString.split(',').map(Number);
				documentTreeView.expandPath(expandedNodes, function ()
				{
					nodesFromUrlExpanding = false;

					resizeDocumentList();
				});
			}
		}
	};

	var setBreadCrumbs = function ()
	{
		var slash = $('<span></span>').attr({ 'class': 'divider' });

		var breadCrumbs = $(document.getElementById(documentBreadCrumbsClientId)).empty()
			.append($('<a></a>').attr({ 'id': 'document-bread-crumbs-links', 'href': '/filepro/documents', 'title': localization.homeLinkToolTip, 'data-placement': 'bottom' })
				.append($('<span></span>').attr({ 'class': 'glyphicon glyphicon-home' }))
				.append($('<span></span>').text(localization.homeLinkText)));
		if (documentId && documentId > 0)
		{
			if (documentRecycleBinView)
			{
				breadCrumbs
					.append(slash.clone())
					.append($('<a></a>').attr({ 'href': '/filepro/documents/recyclebin', 'title': localization.recycleBinLabel, 'data-placement': 'bottom' }).text(localization.recycleBinLabel + '(' + totalRecycleBinDocuments + ')'));
			}

			if (documentPath && documentParentIds)
			{
				var documentpathDocuments = $.trim(documentPath).split('\\');
				$(documentpathDocuments).each(function (index, value)
				{
					var pathName = $('<div />').html(value).text();
					if (index === documentpathDocuments.length - 1)
					{
						breadCrumbs
							.append(slash.clone())
							.append($('<span></span>').attr({ 'title': pathName, 'data-placement': 'bottom' }).text(pathName));
					}
					else if (value.length > 0)
					{
						breadCrumbs
							.append(slash.clone())
							.append($('<a></a>').attr({ 'href': '/filepro/documents/' + (documentRecycleBinView ? 'recyclebin/' : '') + documentParentIds[index], 'title': pathName, 'data-placement': 'bottom' }).text(pathName));
					}
				});
			}
		}
		else
		{
			if (Number(documentId) === -1)
			{
				breadCrumbs
					.append(slash.clone())
					.append($('<span></span>').attr({ 'title': localization.favoritesLabel, 'data-placement': 'bottom' }).text(localization.favoritesLabel));
			}
			else if (Number(documentId) === 0 && documentRecycleBinView)
			{
				breadCrumbs
					.append(slash.clone())
					.append($('<span></span>').attr({ 'title': localization.recycleBinLabel, 'data-placement': 'bottom' }).text(localization.recycleBinLabel));
			}
		}

		breadCrumbs.find('[title]').tooltip();
	};

	var resizePopup = function ()
	{
		var availableWidth = $(window).width();
		var availableHeight = $(window).height();

		var height = availableHeight * 0.20;
		var width = availableWidth * 0.30;

		$(document.getElementById(documentDeleteConfirmWindowClientId)).css({ 'width': width, 'min-width': '480px', 'min-height': height });
		$(document.getElementById(createFolderWindowClientId)).css({ 'height': availableHeight * .8, 'width': availableWidth * .7, 'min-width': '480px' });
		$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).css({ 'height': availableHeight * .80, 'width': availableWidth * .7, 'min-width': '480px' });
	};

	var resizeDocumentList = function ()
	{
		deletedByHeaderWidth = $('.document-list-view-header-deleted-by').outerWidth();
		nameHeaderWidth = $('.document-list-view-header-name').outerWidth();
		modifiedHeaderWidth = $('.document-list-view-header-modified').outerWidth();
		sizeHeaderWidth = $('.document-list-view-header-size').width();

		switch (documentView)
		{
			case documentViewType.listView:
				//Resize the row's columns so they align properly
				if (documentRecycleBinView)
				{
					$.each($('.document-list-view-deleted-by'), function (i, documentDeletedByElement)
					{
						$(documentDeletedByElement).width((deletedByHeaderWidth - 5) + 'px');
					});
				}
				$.each($('.document-list-view-name'), function (i, documentNameElement)
				{
					var leftOffset = $(documentNameElement).offset().left;
					$(documentNameElement).width(((nameHeaderWidth - leftOffset + 5)) + 'px');
				});
				$.each($('.document-list-view-modified'), function (i, documentModifiedElement)
				{
					$(documentModifiedElement).width((modifiedHeaderWidth) + 'px');
					$(documentModifiedElement).width((modifiedHeaderWidth + 5) + 'px');
				});
				$.each($('.document-list-view-size'), function (i, documentSizeElement)
				{
					$(documentSizeElement).width((sizeHeaderWidth - (sizeHeaderWidth * 0.3)) + 'px');
				});
				break;
		}

		if (mobileDevice)
		{
			setTimeout(function ()
			{
				var listheight = ($(window).height() - $(document.getElementById('document-list-container')).offset().top) - ($('div#favorite-folder:visible').outerHeight() + $('div#parent-folder:visible').outerHeight() + $('footer.footer').outerHeight());
				documentsListViewClientElem.height(listheight + 'px');
			}, 0);
		}
	};

	var resizeFavoriteList = function ()
	{
		var nameHeaderWidth = $('.document-list-view-header-name').outerWidth();
		var modifiedHeaderWidth = $('.document-list-view-header-modified').outerWidth();
		var sizeHeaderWidth = $('.document-list-view-header-size').width();

		switch (documentView)
		{
			case documentViewType.listView:
				//Resize the row's columns so they align properly
				$.each($('#favorite-folder .document-list-view-name'), function (i, documentNameElement)
				{
					var leftOffset = $(documentNameElement).offset().left;
					$(documentNameElement).width(((nameHeaderWidth - leftOffset + 5)) + 'px');
				});
				$.each($('#favorite-folder .document-list-view-modified'), function (i, documentModifiedElement)
				{
					$(documentModifiedElement).width((modifiedHeaderWidth) + 'px');
					$(documentModifiedElement).width((modifiedHeaderWidth + 5) + 'px');
				});
				$.each($('#favorite-folder .document-list-view-size'), function (i, documentSizeElement)
				{
					$(documentSizeElement).width((sizeHeaderWidth - (sizeHeaderWidth * 0.3)) + 'px');
				});
				break;
		}
	};

	var getQueryStringValue = function (key)
	{
		var value = CivicWeb.Documents.DocumentOperations.Events.getCurrentUrlQueryValues()[key];
		if (value && value.length)
		{
			return value;
		}

		return '';
	};

	var highlightRow = function ()
	{
		var id = CivicWeb.Common.QuickViews.getCurrentId();
		if (id > 0)
		{
			documentsListViewClientElem.find('.social-media-share').addClass('hidden');
			documentsListViewClientElem.find('.edit-node-icon').addClass('hidden');
			documentsListViewClientElem.find('.favorite-icon').addClass('hidden');
			$('input[id^=document-checkbox]:checked').prop('checked', false);
			var node = $('div[data-id="' + id + '"]').closest('li[data-uid]');
			$(document.getElementById('document-checkbox-' + id)).prop('checked', true);
			documentTreeView.select($());
			documentTreeView.select(node);
			documentTreeView.trigger('select', { node: node });
			previousNodesSelected = [];
		}
	};

	var previewDocument = function (nodeId)
	{
		var element = $(document.getElementById('document-list-view')).find('div[data-id=\'' + nodeId + '\']');
		var item = documentTreeView.dataSource.getByUid($(element).closest('[data-uid]').attr('data-uid'));
		if (item && item.Folder && !item.FolderPageExists)
		{
			$(document.getElementById('document-preview-print')).addClass('hidden');
			$('.DownloadDocumentPreviewPane').hide();
			$(document.getElementById('document-preview')).attr({ 'data-hidden': 'True' }).addClass('hidden');
			if (folderPreviewButtonClientElem.attr('data-show') === 'false')
			{
				$(document.getElementById('document-folder-view-documents')).removeClass('hidden');
			}
			setFolderPreviewInfo(item);
		}
		else
		{
			previewDocumentContent(nodeId);
		}
	};

	var previewDocumentContent = function (id)
	{
		if (id)
		{
			id = id.toString();
		}
		currentId = id = (id && id.length > 0 && Number(id)) > 0 ? id : (documentId && Number(documentId) > 0 ? documentId : '0');

		$.ajax({
			url: '/api/documents/getdocument/' + id + (documentRecycleBinView ? '?deleted=True' : ''),
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'GET', data: id,
			success: function (result)
			{
				if (result)
				{
					fileName = result.UrlFriendlyFileName;
					$(document.getElementById('document-preview')).attr({ 'data-hidden': 'False' }).removeClass('hidden').empty();
					previewId = id;
					switch (result.FileFormat.toLowerCase())
					{
						case 'docx':
						case 'doc':
						case 'odt':
							$('.DownloadDocumentPreviewPane').show();
							$('.DownloadDocumentPreviewPane').off('click').on('click', downloadWordDocumentClick);
							$(document.getElementById('document-preview')).attr({ 'src': result.ContentUrl });
							$(document.getElementById('document-preview-print')).removeClass('hidden');

							break;
						case 'pdf':
							$('.DownloadDocumentPreviewPane').hide();
							$(document.getElementById('document-preview')).attr({ 'src': result.ContentUrl });
							$(document.getElementById('document-preview-print')).addClass('hidden');
							break;
						case 'png':
						case 'jpg':
						case 'jpeg':
						case 'bmp':
						case 'html':
						case 'htm':
						case 'xml':
						case 'txt':
						case 'splitscreen':
							$('.DownloadDocumentPreviewPane').hide();
							$(document.getElementById('document-preview')).attr({ 'src': result.ContentUrl });
							$(document.getElementById('document-preview-print')).removeClass('hidden');
							break;
						case 'm4a':
						case 'mp3':
						case 'wav':
							//audio
							if (result.FileFormat.toLowerCase() === 'mp3') {
								result.FileFormat = 'mpeg';
							}
							else if (result.FileFormat.toLowerCase() === 'm4a') {
								result.FileFormat = 'mp4';
							}
							$('.DownloadDocumentPreviewPane').show();
							$('.DownloadDocumentPreviewPane').off('click').on('click', downloadWordDocumentClick);
							$(document.getElementById('document-preview')).attr({ 'src': '' });
							break;
						case 'm4v':
						case 'wmv':
						case 'ogg':
						case 'mp4':
						case 'avi':
						case 'mov':
						case 'mpg':
						case 'webm':
						case 'mpeg':
							//Video
							$('.DownloadDocumentPreviewPane').show();
							$('.DownloadDocumentPreviewPane').off('click').on('click', downloadWordDocumentClick);
							$(document.getElementById('document-preview')).attr({ 'src': '' });
							break;

						default:
							if (!result.Folder && result.Id > 0)
							{
								$('.DownloadDocumentPreviewPane').show();
								$('.DownloadDocumentPreviewPane').off('click').on('click', function () { downloadDocument(result.ContentUrl); return false; });
								var documentExtension = CivicWeb.Common.getFileIconClass(result.FileFormat).replace('icon-file-', '').replace('-24', '');;
								if (documentExtension === 'blank')
								{
									documentExtension = '_blank';
								}
								else if (documentExtension === 'page')
								{
									documentExtension = '_page';
								}
								folderPreviewButtonClientElem.attr({ 'data-folder-page': true });
								$(document.getElementById('document-preview')).attr({ 'src': 'https://i.civicweb.net/Images/IconFiles512/' + documentExtension + '.png' });
								$(document.getElementById('document-preview')).load(function ()
								{
									$(document.getElementById('document-preview')).contents().find('img[src*=\'https://i.civicweb.net/Images/IconFiles512/\']').css({ 'display': 'block', 'margin': 'auto' });
								});
							}
							else
							{
								$('.DownloadDocumentPreviewPane').hide();
								if (result.FolderPageExists || parseInt(id) === 0)
								{
									folderPreviewButtonClientElem.attr({ 'data-folder-page': true });
									$(document.getElementById('document-preview')).attr({ 'src': result.ContentUrl });
								}
								else
								{
									$(document.getElementById('document-preview')).addClass('hidden');
									if (folderPreviewButtonClientElem.attr('data-show') === 'false')
									{
										$(document.getElementById('document-folder-view-documents')).removeClass('hidden');
									}
									setFolderPreviewInfo(result);
								}
							}
							$(document.getElementById('document-preview-print')).addClass('hidden');
							break;
					}

					if (isLoggedIn && result.UpdateAllowed)
					{
						$(document.getElementById(documentPreviewEditClientId)).removeClass('hidden');
					}

					$(document.getElementById('document-preview')).off('load').on('load', function ()
					{
						$($(document.getElementById('document-preview')).get(0).contentWindow.document).off('keydown', CivicWeb.Documents.DocumentListPage.Events.windowKeyDown).on('keydown', CivicWeb.Documents.DocumentListPage.Events.windowKeyDown);
						switch (result.FileFormat.toLowerCase())
						{
							case 'docx':
							case 'doc':
							case 'odt':
							case 'html':
							case 'htm':
								$(document.getElementById('document-preview')).contents().find('div#ToogleNotes').off('click').on('click', function ()
								{
									var newUrl = result.ContentUrl + (result.ContentUrl.indexOf('?') > 0 ? '&' : '?') + 'splitscreen=true&notes=1';
									window.open(newUrl);
									$(document.getElementById('document-preview')).get(0).contentWindow.location.reload();
									$(document.getElementById('document-folder-view-documents')).addClass('hidden');
								});
								break;

							case 'splitscreen':
								$(document.getElementById('document-preview')).contents().find('div#ToogleNotes').off('click').on('click', function ()
								{
									var newUrl = result.ContentUrl + (result.ContentUrl.indexOf('?') > 0 ? '&' : '?') + 'notes=1';
									window.open(newUrl);
									$(document.getElementById('document-preview')).get(0).contentWindow.location.reload();
									$(document.getElementById('document-folder-view-documents')).addClass('hidden');
								});
								break;

							case 'm4a':
							case 'mp3':
								//audio
								result.FileFormat = 'mpeg';
							case 'wav':
								if (result.FileFormat.toLowerCase() === 'mp3') {
									result.FileFormat = 'mpeg';
								}
								else if (result.FileFormat.toLowerCase() === 'm4a') {
									result.FileFormat = 'mp4';
								}
								$(document.getElementById('document-preview')).contents().find('body').html('<audio id=\'preview-content\' style=\'margin-top:30%; margin-left: 30%\' controls><source src=\'' + result.ContentUrl + '\' type=\'audio/' + result.FileFormat + '\'></audio>');
								break;

							case 'm4v':
							case 'wmv':
							case 'ogg':
							case 'mp4':
							case 'avi':
							case 'mov':
							case 'mpg':
							case 'webm':
							case 'mpeg':
								$(document.getElementById('document-preview')).contents().find('body').html('<video id=\'preview-content\' style=\'width: 100%;\' width=\'600\' height=\'450\' controls><source src=\'' + result.ContentUrl + '\' type=\'video/' + result.FileFormat + '\'></video>');
								break;
						}
					});
				}
			},
			error: function ()
			{
			}
		});
	};

	var setFolderPreviewInfo = function (item)
	{
		folderPreviewButtonClientElem.attr({ 'data-folder-page': false });
		var description = $('<div/>').html(item.Description && item.Description.length ? item.Description.replace('\'', '\'') : item.Title.replace('\'', '\'')).text();
		var documentRow = '<div class=\'document-thumbnail-folder-image\' style=\'height:auto;\'>';
		documentRow += '<span style=\'cursor: default; \' class=\'cw-fp-icon-folder-4x\' title="' + description + '"></span>';
		documentRow += '<div class=\'document-thumbnail-folder-info\'>';
		documentRow += '<span class=\'document-thumbnail-view-name\' style=\'text-align:left; padding-left:4em;\'>';
		documentRow += '<div class=\'document-thumbnail-view-name\'>' + localization.nameColumnHeaderText + ': ' + '<a href=\'/filepro/documents/' + item.Id + '\'>' + description + '</a></div>';
		documentRow += '<div class=\'document-thumbnail-view-size\'>' + localization.sizeColumnHeaderText + ': ' + item.FileSize + '</div>';
		documentRow += '<div class=\'document-thumbnail-view-modified\' title=\'' + localization.lastModifiedLabel + '\'>' + localization.modifiedColumnHeaderText + ': ' + item.DateUpdatedFormatted + '</div>';
		documentRow += '</span></div></div>';

		$(document.getElementById('document-folder-view-documents')).html(documentRow);
	};

	var downloadWordDocumentClick = function (e)
	{
		window.location.href = '/filepro/document/' + currentId.toString() + '/' + (fileName.length > 0 ? fileName : localization.untitledDocumentName) + '?viewOriginal=True';

		e.preventDefault();
	};

	var downloadDocument = function (currentContentUrl)
	{
		$('<iframe>').attr('src', currentContentUrl).css({ 'display': 'none' }).appendTo('body').load(function ()
		{
			$(this).remove();
		});
	};

	var getInitialSort = function ()
	{
		$(document.getElementById(sortOptionDefault)).prop('checked', true);
		$(document.getElementById(sortOptionAscending)).prop('checked', true);
		
		if (!isLoggedIn)
		{
			sortField = sortField || (setAlphaOrder ? 'Title' : 'Order');
			sortOption = sortOption && !setAlphaOrder ? sortOption : 'asc';

			fileProSortDropDownClientElem.find('input[value=' + sortField + '][name=sortField]').prop('checked', true);
			fileProSortDropDownClientElem.find('input[value=' + (sortOption === 'asc' ? 'Ascending' : 'Descending') + '][name=sortOption]').prop('checked', true);
		}
		else if (currentUserSort)
		{
			sortField = currentUserSort && currentUserSort.DocumentSortField.length > 0 ? currentUserSort.DocumentSortField : (setAlphaOrder ? 'Title' : 'Order');
			sortOption = currentUserSort.DocumentSortOrder !== null ? (currentUserSort.DocumentSortOrder === 'desc' && !setAlphaOrder ? 'desc' : 'asc') : 'asc';

			fileProSortDropDownClientElem.find('input[value=' + sortField + '][name=sortField]').prop('checked', true);
			fileProSortDropDownClientElem.find('input[value=' + (sortOption === 'desc' ? 'Descending' : 'Ascending') + '][name=sortOption]').prop('checked', true);
		}

		//Set header arrow
		$(document.getElementById('document-list-view-headers')).find('.background-color').removeClass('background-color');
		$(document.getElementById('header-sort-arrow')).remove();
		var sortArrow = $('<span></span>').attr({ 'id': 'header-sort-arrow', 'title': '' });
		var initialSort = [];

		switch (sortOption)
		{
			case 'asc':
				sortArrow.attr('title', localization.ascendingToolTip).html(' &#9650;'); //Up arrow
				break;
			case 'desc':
				sortArrow.attr('title', localization.descendingToolTip).html(' &#9660;'); //Down arrow
				break;
		}

		switch (sortField)
		{
			case 'Title':
				$('.document-list-view-header-name').addClass('background-color');
				$(document.getElementById(columnHeaderLinkNameClientId)).after(sortArrow);
				$(document.getElementById(columnHeaderLinkNameClientId)).attr('data-sort', (sortOption === 'asc' ? sort.ascending : sort.descending));
				currentSortField = 'Name';
				sortField = 'NaturalSortTitle';
				break;

			case 'DateUpdated':
				$('.document-list-view-header-modified').addClass('background-color');
				$(document.getElementById(columnHeaderLinkModifiedClientId)).after(sortArrow);
				$(document.getElementById(columnHeaderLinkModifiedClientId)).attr('data-sort', (sortOption === 'asc' ? sort.ascending : sort.descending));
				currentSortField = 'Date Updated';
				break;

			case 'FileSizeInBytes':
				$('.document-list-view-header-size').addClass('background-color');
				$(document.getElementById(columnHeaderLinkSizeClientId)).after(sortArrow);
				$(document.getElementById(columnHeaderLinkSizeClientId)).attr('data-sort', (sortOption === 'asc' ? sort.ascending : sort.descending));
				currentSortField = 'Size';
				break;
		}

		if (sortField !== 'Order')
		{
			initialSort.push({
				field: 'Folder',
				dir: 'desc'
			});
		}

		initialSort.push({
			field: sortField,
			dir: sortOption
		});

		return initialSort;
	};

	var bindEvents = function ()
	{
		if (canDelete && !isiPad)
		{
			if (!documentRecycleBinView)
			{
				$(document).off('keyup', buttonClick).on('keyup', buttonClick);
			}
			else
			{
				$(document.getElementById(purgeDocumentButtonClientId)).off('click').on('click', function () { CivicWeb.Documents.DocumentOperations.Events.purgeDocumentButtonClick(recycleBinPurgeRestoreCallback); });
				$(document.getElementById(restoreDocumentButtonClientId)).off('click').on('click', function () { CivicWeb.Documents.DocumentOperations.Events.restoreDocumentButtonClick(recycleBinPurgeRestoreCallback); });
			}
		}
		else
		{
			$(document.getElementById(documentListSelectAllClientId)).addClass('hidden');
		}

		documentThumbnailViewClientElem.scroll(loadThumbnailImages);
		$(window).off('resize', resizeDocumentList).on('resize', resizeDocumentList);

		//Header sort events
		$(document.getElementById(columnHeaderLinkNameClientId)).off('click').on('click', documentsHeaderLinkClicked);
		$(document.getElementById(columnHeaderLinkModifiedClientId)).off('click').on('click', documentsHeaderLinkClicked);
		$(document.getElementById(columnHeaderLinkSizeClientId)).off('click').on('click', documentsHeaderLinkClicked);
		if (documentRecycleBinView)
		{
			$(document.getElementById(columnHeaderLinkDeletedByClientId)).off('click').on('click', documentsHeaderLinkClicked);
		}
		$(document.getElementById(documentListSelectAllClientId)).off('click').on('click', selectAllDocumentsClicked);
		$(document.getElementById(uploadDocumentsButtonClientId)).find('a#upload-documents-icon').off('click').on('click', uploadDocumentClick);
		$(document.getElementById(documentUploadInputClientId)).change(uploadDocuments);
		$(document.getElementById(fileProRecycleBinClientId)).off('click').on('click', CivicWeb.Documents.DocumentOperations.Events.documentDeleteButtonClick);

		$(document.getElementById(addFolderButtonClientId)).off('click').on('click', addNewFolderClick);
		$(document.getElementById(createFolderCancelClientId)).off('click').on('click', function () { $(document.getElementById(createFolderWindowClientId)).addClass('hidden').data('kendoWindow').close(); });

		$(document.getElementById(editSortButtonClientId)).off('click').on('click', editSortClick);
		if (documentReorderAllowed && !documentRecycleBinView && !mobileDevice)
		{
			toogleOrderingModeButtonClientElem.off('click').on('click', toogleOrderingModeClick);
			toogleOrderingModeButtonClientElem.removeClass('hidden');
		}

		if (documentView === documentViewType.listView)
		{
			$('#previousQuickView').off('click', highlightRow).on('click', highlightRow);
			$('#nextQuickView').off('click', highlightRow).on('click', highlightRow);
		}

		$(document.getElementById(fileProListViewClientId)).off('click').on('click', function () { setView(documentViewType.listView); });
		$(document.getElementById(fileProThumbnailViewClientId)).off('click').on('click', function () { setView(documentViewType.thumbnailView); CivicWeb.Common.Instrumentation.recordAction('DocumentCenter - thumbnail list view button clicked'); });
		$(document.getElementById(fileProPreviewViewClientId)).off('click').on('click', function () { setView(documentViewType.previewView); CivicWeb.Common.Instrumentation.recordAction('DocumentCenter - preview list view button clicked'); });
		$('.DownloadDocumentPreviewPane').off('click').on('click', downloadWordDocumentClick);

		if (localStorageAvailable())
		{
			clearRedoData();
			$(document.getElementById('undo-reorder-button')).off('click').on('click', undoReorderButtonClick);
			$(document.getElementById('redo-reorder-button')).off('click').on('click', redoReorderButtonClick);
		}

		$(document.getElementById('parent-folder')).off('click').on('click', parentFolderClick);
		$(document.getElementById('document-parent-edit')).off('click').on('click', function (e)
		{
			window.location.href = (documentId > 0 ? '/filepro/document/' + documentId + ((documentRecycleBinView ? '&' : '?') + 'p=' + documentId) : '/Documents/TitlePage.aspx');

			e.preventDefault();
		});
		$(document.getElementById('document-preview-print')).off('click').on('click', function ()
		{
			$(document.getElementById('document-preview')).get(0).contentWindow.focus();
			$(document.getElementById('document-preview')).get(0).contentWindow.print();
		});

		if (mobileDevice)
		{
			$(document.getElementById('document-list-container')).off('scroll').on('scroll', function ()
			{
				var st = $(this).scrollTop();
				if (st > lastScrollTop)
				{
					//Scroll down
					$(document.getElementById('custom-header')).slideUp('normal');
					resizeDocumentList();
				}

				lastScrollTop = st;
			});
		}

		$(document.getElementById('save-order-button')).off('click').on('click', saveOrderButtonClick);
		$(window).off('keydown', CivicWeb.Documents.DocumentListPage.Events.windowKeyDown).on('keydown', CivicWeb.Documents.DocumentListPage.Events.windowKeyDown);
		$(document.getElementById('file-pro-sort')).find('.dropdown-toggle').off('mouseover').off('mouseout');
		$(document.getElementById('file-pro-sort')).find('.dropdown-menu').off('mouseenter').off('mouseleave');
		$(document.getElementById('file-pro-sort')).find('.dropdown-menu').off('click');
		$(document.getElementById('file-pro-sort')).find('.dropdown-toggle').off('click');
		$(document.getElementById('file-pro-sort')).off('click').on('click', function ()
		{
			if (!$(document.getElementById('file-pro-sort')).hasClass('open'))
			{
				$('iframe').filter(function ()
				{
					if ($(this).attr('src') && $(this).attr('src').indexOf('.pdf') > -1)
					{
						return $(this);
					}
					return null;
				}).addClass('invisible');
			}
			else
			{
				$('iframe').removeClass('invisible');
			}
		});
		$('body').on('click', function ()
		{
			if ($(document.getElementById('file-pro-sort')).hasClass('open'))
			{
				$('iframe').removeClass('invisible');
			}
		});

		$(document.getElementById(permissionsContactAdministratorButtonClientId)).off('click').on('click', permissionsContactAdministratorButtonClick);
		$(document.getElementById(uploadPermissionRequiredCloseButtonClientId)).off('click').on('click', uploadPermissionRequiredCloseButtonClick);

		$(document.getElementById('drag-scroll-up')).off('mouseout').on('mouseout', stopScroll);
		$(document.getElementById('drag-scroll-down')).off('mouseout').on('mouseout', stopScroll);

		$('.document-list-container').scroll(loadMoreDocuments);
		$(document.getElementById('document-thumbnail-view')).scroll(loadMoreDocuments);

		if (typeof (FileReader) !== 'undefined')
		{
			$('.document-list-view-documents').off('dragover', dragOverUploadDocument).on('dragover', dragOverUploadDocument);
			$('.document-list-view-documents').off('dragleave', dragOutUploadDocument).on('dragleave', dragOutUploadDocument);
			$('.document-list-view-documents').off('drop', dropUploadDocument).on('drop', dropUploadDocument);
			$(window).off('drop', dropUploadDocument).on('drop', dropUploadDocument);
			$(window).off('dragover', dragOverUploadDocument).on('dragover', dragOverUploadDocument);
			$(window).off('dragleave', dragOutUploadDocument).on('dragleave', dragOutUploadDocument);
		}
	};

	var clearRedoData = function ()
	{
		if (localStorage.getItem('documentListActionHistory') !== null && localStorage.getItem('lastStoredOrderIndex') !== null)
		{
			localStorage.removeItem('documentListActionHistory');
			localStorage.removeItem('lastStoredOrderIndex');
		}
	};

	this.windowKeyDown = function (e)
	{
		if (e.ctrlKey && e.which === 80)
		{
			if (documentView === documentViewType.previewView)
			{
				$(document.getElementById('document-preview')).get(0).contentWindow.focus();
				if (!isInternetExplorer)
				{
					$(document.getElementById('document-preview')).get(0).contentWindow.print();
				}
			}
			else
			{
				$(document.getElementById('documentQuickViewCell')).find('iframe').get(0).contentWindow.focus();
				if (!isInternetExplorer)
				{
					$(document.getElementById('documentQuickViewCell')).find('iframe').get(0).contentWindow.print();
				}
			}
			e.preventDefault();
			e.stopPropagation();
		}
	};

	var expandNode = function (node)
	{
		var uri = window.location.href;
		var nodeId = node.find('[data-id]').attr('data-id');
		var currentTreeview = node.closest('div#folder-content-list-view').length > 0 ? folderContentListView : documentTreeView;
		var nodeObj = currentTreeview.dataSource.get(nodeId);
		if (nodeId > 0 && nodeObj && nodeObj.hasChildren)
		{
			expandingNode = {
				id: nodeId,
				checked: node.find('input:checked').length > 0
			};
			var expandedIdsString = getQueryStringValue('expanded');
			var expandedIds = expandedIdsString && expandedIdsString.length > 0 ? expandedIdsString.split(',') : [];
			if (expandedIds.indexOf(nodeId) < 0)
			{
				expandedIds.splice(nodeObj.level(), 0, nodeId);
			}

			var re = new RegExp('([?|&])expanded=.*?(&|$)', 'i');
			var newUri;
			var separator = uri.indexOf('?') !== -1 ? '&' : '?';
			if (uri.match(re))
			{
				newUri = uri.replace(re, '$1expanded=' + expandedIds.join(',') + '$2');
			}
			else
			{
				newUri = uri + separator + 'expanded=' + expandedIds.join(',');
			}

			//check for html 5 history support and change the url
			if (history && history.pushState)
			{
				history.pushState('expanded-' + nodeId, document.title, newUri);
			}
		}
	};

	var collapseNode = function (node)
	{
		var uri = window.location.href;
		var nodeId = node.find('[data-id]').attr('data-id');
		var expandedIdsString = getQueryStringValue('expanded');
		var expandedIds = expandedIdsString && expandedIdsString.length > 0 ? expandedIdsString.split(',') : [];

		expandedIds.splice(expandedIds.indexOf(nodeId), 1);

		var newUri;
		var re = new RegExp('([?|&])expanded=.*?(&|$)', 'i');
		var separator = uri.indexOf('?') !== -1 ? '&' : '?';

		if (uri.match(re))
		{
			newUri = uri.replace(re, '$1expanded=' + expandedIds.join(',') + '$2');
		}
		else
		{
			newUri = uri + separator + 'expanded=' + expandedIds.join(',');
		}

		if (expandedIds.length === 0)
		{
			var expanded = newUri.indexOf('?expanded=') === -1 ? '&expanded=' : '?expanded=';
			newUri = newUri.replace(expanded, '');
		}

		//check for html 5 history support and change the url
		if (history && history.pushState)
		{
			history.pushState('collapsed-' + nodeId, document.title, newUri);
		}

		node.find('input[type=checkbox][data-parentid=\'' + nodeId + '\']').attr('checked', false);
	};

	var stopPreviewMediaFrame = function ()
	{
		if ($('#document-preview').attr('src') != null && $('#document-preview').attr('src').indexOf('i.civicweb.net/Images/') < 0)
		{
			try
			{
				if ($('#document-preview').contents().find('audio').length > 0)
				{
					var audio = $('#document-preview').contents().find('audio');
					audio[0].pause();
					audio.remove();
				}
				else if ($('#document-preview').contents().find('video').length > 0)
				{
					var video = $('#document-preview').contents().find('video');
					video[0].pause();
					video.remove();
				}
			}
			catch (err)
			{

			}
		}
	};

	var generateRecycleBinPager = function ()
	{
		var recycleBinPager = $(document.getElementById('recycle-bin-pager')).empty();

		totalRecycleBinDocuments = totalRecycleBinDocuments || 0;
		if (totalRecycleBinDocuments > 0)
		{
			var maxPages = Math.ceil(totalRecycleBinDocuments / 200);

			recycleBinPager.append(CivicWeb.Common.Pager.create(recycleBinPage, maxPages, recycleBinPageClick, false, localization.pagerLocalization));
		}
	};
	//#endregion

	var displayUploadPermissionRequiredWindow = function (warningMessage)
	{
		var uploadPermissionRequiredWindow = $(document.getElementById(uploadPermissionRequiredWindowClientId)).removeClass('hidden').data('kendoWindow');
		if (typeof uploadPermissionRequiredWindow === 'undefined')
		{
			$(document.getElementById(uploadPermissionRequiredWindowClientId)).kendoWindow({
				width: '500px',
				height: '200px',
				modal: true,
				visible: false,
				title: localization.titlePermissionRequired
			});

			uploadPermissionRequiredWindow = $(document.getElementById(uploadPermissionRequiredWindowClientId)).data('kendoWindow');
		}

		CivicWeb.Common.Notification.show(uploadPermissionRequiredNotificationClientId, CivicWeb.Common.Notification.types.warning, warningMessage);

		if (uploadPermissionRequiredWindow)
		{
			uploadPermissionRequiredWindow.center().open();
		}
	};

	var closeUploadPermissionRequiredWindow = function ()
	{
		var uploadPermissionRequiredWindow = $(document.getElementById(uploadPermissionRequiredWindowClientId));
		if (uploadPermissionRequiredWindow)
		{
			uploadPermissionRequiredWindow.addClass('hidden').data('kendoWindow').close();
		}
	};

	(function ()
	{
		$(document.getElementById('sort-processing')).removeClass('hidden');

		var parentFolderName = $(document.getElementById('parent-folder')).find('div.parent-folder-label span');
		parentFolderName.text($('<div/>').html(parentFolderName.text()).text());

		if (localStorageAvailable() && localStorage.getItem('documentViewType'))
		{
			documentView = localStorage.getItem('documentViewType');
		}

		CivicWeb.Common.QuickViews.createInstance(args);
		CivicWeb.Common.SocialMediaShares.createInstance({ clientId: 'document-parent-share', url: (window.location.protocol + '//' + window.location.hostname + '/filepro/documents/' + documentId), title: document.title, itemId: documentId, localization: socialMediaLocalization });

		$(document.getElementById(createFolderWindowClientId)).kendoWindow({
			modal: true,
			visible: false,
			title: localization.createFolderHeaderText,
			open: CivicWeb.Documents.DocumentOperations.Events.kendoWindowOpen,
			close: CivicWeb.Documents.DocumentOperations.Events.kendoWindowClose,
			activate: function ()
			{
				$(document.getElementById(createFolderTextboxClientId)).select();
			}
		});

		$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).kendoWindow({
			modal: true,
			visible: false,
			title: localization.systemGlobalUpload,
			open: CivicWeb.Documents.DocumentOperations.Events.kendoWindowOpen,
			close: function ()
			{
				CivicWeb.Documents.DocumentOperations.Events.kendoWindowClose();
				closePermissionsWindowAndReload(true);
			},
			activate: function ()
			{
				$(document.getElementById(uploadedDocumentsConfirmSecurityWindowClientId)).find('.uploaded-document-rename').first().select();
			}
		});

		if ($('#' + thirdPartyUploadDropDownButtonClientId).length > 0)
		{
			loadThirdpartySources();
		}

		if (documentRecycleBinView)
		{
			totalRecycleBinDocuments = initialDocumentList && initialDocumentList.length > 0 ? initialDocumentList[0].TotalDocuments : 0;
			generateRecycleBinPager();
		}

		setBreadCrumbs();
		resizePopup();

		$(document).ready(function ()
		{
			var checkboxTemplate = '# if(item.id > 0) { #'
				+ '<input ' + (canDelete && !isiPad ? '' : 'class=\'hidden\'') + ' type=\'checkbox\'  aria-labelledby=\'#= item.id #\' id=\'' + documentCheckboxClientId + '#= item.id #\'  data-id=\'#= item.id #\' data-parentId=\'#= item.ParentId #\' data-type=\'#= (item.Folder ? \'folder\' : \'document\') #\' title=\'' + localization.selectToolTip + ' #= $(\'<div/>\').html(item.Title).text() #\' style=\'vertical-align: middle;\' />'
				+ '# } #';
			//Load favorite folder
			favoriteTreeView = favoriteListViewClientElem.kendoTreeView({
				dataSource: getFavoriteTreeViewDataSource(),
				dataBound: documentsFavoriteDataBound,
				select: nodeSelected,
				change: nodeChanged,
				loadOnDemand: true,
				navigate: function (e) { $('.k-in').removeClass('k-state-selected'); $(e.node).find('.k-in').first().addClass('k-state-selected'); },
				expand: nodeExpanded,
				collapse: nodeCollapsed,
				template: function (dataItem) { return getTreeItemTemplate(dataItem.item); },
				checkboxes: { checkChildren: true, template: checkboxTemplate }
			}).data('kendoTreeView');

			//Load list view
			var docTreeViewDataSource = getTreeViewDataSource(documentId, false, 1);

			documentTreeView = documentsListViewClientElem.kendoTreeView({
				autoBind: false,
				dataSource: docTreeViewDataSource,
				dataBound: documentsDataBound,
				select: nodeSelected,
				change: nodeChanged,
				loadOnDemand: true,
				navigate: function (e) { $('.k-in').removeClass('k-state-selected'); $(e.node).find('.k-in').first().addClass('k-state-selected'); },
				expand: nodeExpanded,
				collapse: nodeCollapsed,
				template: function (dataItem) { return getTreeItemTemplate(dataItem.item); },
				checkboxes: { template: checkboxTemplate }
			}).data('kendoTreeView');

			documentTreeView.dataSource.read();
			loadView(true);

			//Workaround for IE to stop jumping when clicking a document while scrolled down
			if (isInternetExplorer)
			{
				documentTreeView.wrapper.off('focus keydown');
				documentTreeView.focus = $.noop;

				favoriteTreeView.wrapper.off('focus keydown');
				favoriteTreeView.focus = $.noop;
			}

			if (documentRecycleBinView)
			{
				setTimeout(function ()
				{
					var listheight = documentsListViewClientElem.height() - $('#recycle-bin-pager').outerHeight() - 10;
					documentsListViewClientElem.height(listheight);
				}, 0);
			}
		});

		if (previewId && previewId > 0)
		{
			if (isiPad)
			{
				window.location.href = '/document/' + previewId;
			}
			else
			{
				loadPreviewDocument(previewId, fromWidget);
			}
		}

		bindEvents();

		//Prevents dropdown not to close when clicked inside it
		$('.dropdown-menu').click(function (e)
		{
			e.stopPropagation();
		});

		CivicWeb.Common.Classifies.createInstance(classifyArguements);

		window.onpopstate = navigateHistory;

		if (displaySetup)
		{
			CivicWeb.Common.RoleSetup.load(roleSetupOptions);
		}

		$(window).off('resize', windowResize).on('resize', windowResize);
	})();
};

//Objects
CivicWeb.Documents.DocumentListPage = {
	//Properties
	instance: null,

	createInstance: function (args)
	{
		if (this.instance)
		{
			delete this.instance;
		}
		this.instance = new CivicWeb.Documents.DocumentList(args);
	},

	Events: {
		ClosePreview: function ()
		{
			CivicWeb.Documents.DocumentListPage.instance.ClosePreview();
		},

		windowKeyDown: function (e)
		{
			CivicWeb.Documents.DocumentListPage.instance.windowKeyDown(e);
		}
	}
};
;
// Declare namespaces
var CivicWeb = CivicWeb || {};
CivicWeb.Integration = CivicWeb.Integration || {};

//Create classes
CivicWeb.Integration.VideoClass = function (args)
{
	var localization = args.localization;
	var referenceFieldLocalization = args.referenceFieldLocalization;

	var minutesBuild = args != null && args.minutesBuild != null ? args.minutesBuild : false;
	var agendaDocument = args != null && args.agendaDocument != null ? args.agendaDocument : false;
	var meetingId = args != null && args.meetingId != null ? args.meetingId : 0;
	var createEvent = args != null && localization.createEvent != null ? localization.createEvent : '';
	var viewEvent = args != null && localization.viewEvent != null ? localization.viewEvent : '';
	var audioOnly = args != null && args.audioOnly != null ? args.audioOnly : false;
	var earthChannel = args != null && args.earthChannel != null ? args.earthChannel : false;
	var youTubeLite = args != null && args.youTubeLite != null ? args.youTubeLite : false;
	var youTube = args != null && args.youTube != null ? args.youTube : false;
	var youTubeEventId = args != null && args.youTubeEventId != null ? args.youTubeEventId : '';
	var manageVideo = args != null && args.manageVideo != null ? args.manageVideo : false;
	var purchasedBoxcast = args != null && args.purchasedBoxcast != null ? args.purchasedBoxcast : false;
	var timestampEnabled = args != null && args.timestampEnabled != null ? args.timestampEnabled : false;
	var documentBody = null;
	var myVideoWindow = null;
	var setVideoTimeStampDataCallback = function (seconds) { };
	var itemId = 0;

	var isPhone = false;
	var isIOS = false;
	var liveTimestamping = false;
	var liveTimestampingFirstTimestamp = null;
	var syncModeEnabled = false;
	var historic = false;
	var firstTimeStamp = Number.MAX_SAFE_INTEGER;
	var startAtFirstTimestamp = false;

	var attachmentPane = null;
	var videoHeight = 300;
	var videoWidth = 400;
	var videoScale = 0.618;
	var maxVideoWidth = 505;
	var ratio4x3 = 0.75;
	var ratio16x9 = 0.5625;
	var minWidthChromeLoad4x3 = 400;
	var minWidthChromeLoad16x9 = 464;
	var earthChannelForcedMinHeight = 200;//we are waiting for them to remove this limit

	//these variables are for multi event meetings
	var currentVideo = 0;
	var videoRatio = [];
	var urlBase = [];
	var videoObjects = [];
	var videoElement = [];
	var youTubeEvents = [];
	var liveEventExists = false;
	var searchingForAdditionalEvents = null;
	var queryValues;
	var eventIds = [];
	var broadcastsChannels = {};
	var nextPageToken = "";

	const youtubeText = "YouTube - ";
	const boxcastText = "Boxcast - "

	this.addVideoButtonToPortal = function (meetingId, documentId, buttonClient)
	{
		$.ajax({
			url: '/api/videolink/' + meetingId.toString(),
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'GET',
			success: function (data)
			{
				var linkFound = false;
				if (data && data.length > 0)
				{
					if (!youTube && data.indexOf('IsMediaEnabled') < 0)
					{
						//Granicus
						if (buttonClient.is('a'))
						{
							buttonClient.show().removeClass('hidden').text(localization.audioVideoLabel).attr('title', localization.showAudioVideoLabel);;
						}
						else
						{
							buttonClient.show().removeClass('hidden').find('span').text(localization.audioVideoLabel).attr('title', localization.showAudioVideoLabel);;
						}
						buttonClient.attr({ 'href': data });
						linkFound = true;
					}
					else
					{
						var result = JSON.parse(data);
						currentVideo = 0;
						urlBase = [];
						for (var i = 0; i < result.length; i++)
						{
							var d = result[i];

							var isMediaEnabled = d.IsMediaEnabled ? d.IsMediaEnabled : false;
							var publisherEventId = d.PublisherEventID ? d.PublisherEventID : 0;
							var eventStatus = d.EventStatus ? d.EventStatus : '';
							var youTubeEventId = d.YouTubeEventId ? d.YouTubeEventId : '';
							var showVideoLink = d.ShowVideoLink ? d.ShowVideoLink : false;
							historic = d.Historic ? d.Historic || historic : false;

							if ((youTube && showVideoLink && youTubeEventId.length > 0 && youTubeEventId != '0') || eventStatus.toLowerCase() == 'published' && isMediaEnabled && publisherEventId > 0)
							{
								if (buttonClient.is('a'))
								{
									buttonClient.show().removeClass('hidden').text(localization.audioVideoLabel).attr('title', localization.showAudioVideoLabel);;
								}
								else
								{
									buttonClient.show().removeClass('hidden').find('span').text(localization.audioVideoLabel).attr('title', localization.showAudioVideoLabel);;
								}

								if (historic)
								{
									var currentUrlBase = d.URLBase.replace('view.', 'viewer.') + '&eID=' + publisherEventId;
									urlBase.push(currentUrlBase);
									buttonClient.off('click', showVideo).on('click', showVideo);
								}
								else
								{
									buttonClient.off('click', showVideo);
									buttonClient.attr({ 'href': '/document/' + documentId + '?splitscreen=true&media=true' });
								}
								linkFound = true;
								break;
							}
						}
					}
				}

				if (!linkFound)
				{
					buttonClient.hide().addClass('hidden');
				}
			},
			error: function ()
			{
				buttonClient.hide().addClass('hidden');
			}
		});

	};

	this.showPdfQuickViewVideoLink = function (meetingId, documentId)
	{
		$.ajax({
			url: '/api/videolink/' + meetingId.toString(),
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'GET',
			success: function (data)
			{
				var linkFound = false;
				if (data && data.length > 0)
				{
					if (!youTube && data.indexOf('IsMediaEnabled') < 0)
					{
						//Granicus
						$('#VideoLink > a > span').text(localization.audioVideoLabel).attr('title', localization.showAudioVideoLabel);
						$('#VideoLink > a').attr({ 'href': data });
						linkFound = true;
					}
					else
					{
						var result = JSON.parse(data);
						currentVideo = 0;
						urlBase = [];
						for (var i = 0; i < result.length; i++)
						{
							var d = result[i];

							var isMediaEnabled = d.IsMediaEnabled ? d.IsMediaEnabled : false;
							var publisherEventId = d.PublisherEventID ? d.PublisherEventID : 0;
							var eventStatus = d.EventStatus ? d.EventStatus : '';
							var youTubeEventId = d.YouTubeEventId ? d.YouTubeEventId : '';
							var showVideoLink = d.ShowVideoLink ? d.ShowVideoLink : false;
							historic = d.Historic ? d.Historic || historic : false;

							if ((youTube && showVideoLink && youTubeEventId.length > 0 && youTubeEventId != '0') || eventStatus.toLowerCase() == 'published' && isMediaEnabled && publisherEventId > 0)
							{
								$('#VideoLink > a').attr({ 'href': '/document/' + documentId + '?splitscreen=true&media=true' });
								linkFound = true;
								break;
							}
						}
					}

					if (linkFound)
					{
						$('#VideoLink').removeClass('hidden');
					}
				}
			},
			error: function ()
			{
				buttonClient.hide();
			}
		});
	};

	this.addTimestampsAndVideoToMeetingDocument = function (id, body, splitscreen)
	{

		$.ajax({
			url: '/api/geteventwithindexpoints/' + id.toString(),
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'GET',
			success: function (response)
			{
				if (response)
				{
					var result = JSON.parse(response);
					if (result.length > 0)
					{
						youTube = result[0].YouTube != null ? result[0].YouTube : false;
					}

					if (result && result.length > 0)
					{
						//Do these once on load, not per event
						body.find('a[id^=video-timestamp-]').remove();

						currentVideo = 0;
						videoRatio = [];
						urlBase = [];
						videoElement = [];
						youTubeEvents = [];
						var videoExists = false;
						var showVideoLink = true;
						var showTimeStamps = false;
						var liveTimestamping = false;

						var agendaIds = [];
						var minutesIds = [];
						var iconLight = audioOnly ? '/Global/Images/icon-audio-light-16x16.png' : '/Global/Images/icon-video-light-16x16.png';
						var iconDark = audioOnly ? '/Global/Images/icon-audio-dark-16x16.png' : '/Global/Images/icon-video-dark-16x16.png';

						documentBody = body;

						eventIds = [];
						for (var k = 0; k < result.length; k++)
						{
							var dat = result[k];
							var event = dat.Event != null ? dat.Event : null;
							var eventId = event != null && event.eventId != null ? event.eventId : '';
							if (eventIds.indexOf(eventId) == -1)
							{
								eventIds.push(eventId);
							}
						}

						for (var i = 0; i < result.length; i++)
						{
							var d = result[i];
							var isMediaEnabled = d.PublisherEvent ? d.PublisherEvent.IsMediaEnabled : false;
							var publisherEventId = d.PublisherEvent ? d.PublisherEvent.PublisherEventID : 0;
							var eventStatus = d.PublisherEvent ? d.PublisherEvent.EventStatus : '';

							var event = d.Event != null ? d.Event : null;
							var eventId = event != null && event.eventId != null ? event.eventId : '';
							//var eventTitle = event != null && event.eventTitle != null ? event.eventTitle : '';

							if (event && event.broadcastChannel && event.channelId)
							{
								event.eventId = event.channelId;
								eventId = event.channelId;
							}
							if (i == 0)
							{
								historic = d.Historic != null ? d.Historic : false;

								showVideoLink = d.ShowVideoLink != null ? d.ShowVideoLink : true;
								showTimeStamps = d.ShowTimeStamps != null ? d.ShowTimeStamps : false;
								startAtFirstTimestamp = d.StartAtFirstTimestamp != null ? d.StartAtFirstTimestamp : false;
								liveTimestamping = d.PublisherEvent != null ? d.PublisherEvent.MediaType.toLowerCase() == 'live' : false;
							}

							if ((youTube && showVideoLink && eventId.length > 0 && eventId != '0') || (eventStatus.toLowerCase() == 'published' && isMediaEnabled && publisherEventId > 0))
							{
								if (showTimeStamps)
								{
									var localIndexPoints = result[i].LocalIndexPoints ? result[i].LocalIndexPoints : null;
									if (localIndexPoints)
									{
										for (var j = 0; j < localIndexPoints.length; j++)
										{
											var minutesItemId = localIndexPoints[j].ItemId;
											var secondsStart = localIndexPoints[j].Value;
											var timeStampEvent = localIndexPoints[j].Event != null ? localIndexPoints[j].Event : '';
											var relationshipTypeId = localIndexPoints[j].RelationshipTypeId;
											var agendaItemId = localIndexPoints[j].RelatedItem;
											
											if (!isNaN(secondsStart) && (timeStampEvent == eventId || timeStampEvent == ''))
											{
												var timeString = convertSecondsToTimeString(secondsStart, false, minutesItemId, timeStampEvent);
												var timestampLink = $('<a />').attr({ 'title': timeString, 'time-stamp-event': eventId, 'time-stamp-video': i, 'time-stamp': secondsStart }).css({ 'position': 'absolute', 'right': '0', 'cursor': 'pointer', 'text-decoration': 'underline', 'z-index': '500' }).on('click', function () { gotoVideoTimeStamp(this); }).append($('<img />').css({ 'width': '20px', 'height': '20px' }).attr({ 'src': iconLight }).hover(function () { $(this).attr('src', iconDark); }, function () { $(this).attr('src', iconLight); }));

												if (minutesIds.indexOf(parseInt(minutesItemId)) < 0)
												{
													var minutesHeading = body.find('a[name=MinutesHeading' + minutesItemId + ']');
													if (minutesHeading.length > 0)
													{
														timestampLink.attr({ 'id': 'video-timestamp-' + minutesItemId, 'top': minutesHeading.top });
														minutesHeading.parent().after(timestampLink);
													}
													var minutesItem = body.find('a[name=MinutesItem' + minutesItemId + ']');
													if (minutesItem.length > 0)
													{
														timestampLink.attr({ 'id': 'video-timestamp-' + minutesItemId, 'top': minutesItem.top });
														minutesItem.parent().after(timestampLink);
													}
													var resolutionItem = body.find('a[name=Resolution' + minutesItemId + ']');
													if (resolutionItem.length > 0)
													{
														timestampLink.attr({ 'id': 'video-timestamp-' + minutesItemId, 'top': resolutionItem.top });
														resolutionItem.parent().after(timestampLink);
													}

													minutesIds.push(minutesItemId)
												}

												if (relationshipTypeId == 6 && agendaIds.indexOf(parseInt(agendaItemId)) < 0)
												{
													var agendaHeading = body.find('a[name=AgendaHeading' + agendaItemId + ']');
													if (agendaHeading.length > 0)
													{
														timestampLink.attr({ 'id': 'video-timestamp-' + agendaItemId, 'top': agendaHeading.top });
														agendaHeading.parent().after(timestampLink);
													}
													var agendaItem = body.find('a[name=AgendaItem' + agendaItemId + ']');
													if (agendaItem.length > 0)
													{
														timestampLink.attr({ 'id': 'video-timestamp-' + agendaItemId, 'top': agendaItem.top });
														agendaItem.parent().after(timestampLink);
													}

													agendaIds.push(agendaItemId);
												}

												if (firstTimeStamp > secondsStart)
												{
													firstTimeStamp = secondsStart;
												}
											}
										}
									}

									if (!liveTimestamping && d.IndexPoints != null)
									{
										for (var k = 0; k < d.IndexPoints.length; k++)
										{
											var externalId = d.IndexPoints[k].ExternalID;
											var secondsStart = d.IndexPoints[k].SecondsStart;
											var validTimestamp = !isNaN(secondsStart) && parseInt(secondsStart) > 0 || !isNaN(d.IndexPoints[k].SecondsEnd) && parseInt(d.IndexPoints[k].SecondsEnd) > 0;
											var title = d.IndexPoints[k].Title;
											if (validTimestamp && agendaIds.indexOf(parseInt(externalId)) < 0)
											{
												var timeString =  convertSecondsToTimeString(secondsStart);
												var timestampLink = $('<a />').attr({ 'title': timeString, 'time-stamp-video': i, 'time-stamp': secondsStart }).css({ 'position': 'absolute', 'right': '0', 'cursor': 'pointer', 'text-decoration': 'underline', 'z-index': '500' }).on('click', function () { gotoVideoTimeStamp(this); }).append($('<img />').css({ 'width': '20px', 'height': '20px' }).attr({ 'src': iconLight }).hover(function () { $(this).attr('src', iconDark); }, function () { $(this).attr('src', iconLight); }));

												var agendaHeading = body.find('a[name=AgendaHeading' + externalId + ']');
												if (agendaHeading.length > 0)
												{
													timestampLink.attr({ 'id': 'video-timestamp-' + externalId, 'top': agendaHeading.top });
													agendaHeading.parent().after(timestampLink);
												}
												var agendaItem = body.find('a[name=AgendaItem' + externalId + ']');
												if (agendaItem.length > 0)
												{
													timestampLink.attr({ 'id': 'video-timestamp-' + externalId, 'top': agendaItem.top });
													agendaItem.parent().after(timestampLink);
												}

												agendaIds.push(externalId);
											}

											if (firstTimeStamp > secondsStart)
											{
												firstTimeStamp = secondsStart;
											}
										}
									}

								}

								var currentVideoRatio = (d.PublisherEvent && (parseInt(d.PublisherEvent.EnabledItemMask) & 4096) > 0) ? ratio16x9 : ratio4x3;
								videoRatio.push(currentVideoRatio);
								youTubeEvents.push(event);

								setVideoWidthHeight(currentVideoRatio);

								if (youTube && eventId.length > 0)
								{
									videoElement.push('<div id="videoDiv" height="' + videoHeight + 'px" width="' + videoWidth + 'px" style=" margin-top:' + (splitscreen ? '0em;' : '2.5em;') + ' text-align: center; top: 0; width:100%; background-color: white; z-index: 600; "><div id="timeStampVideoDiv"></div><hr style="margin:0"/></div>');
								}
								else if (historic)
								{
									var currentUrlBase = d.PublisherEvent.URLBase.replace('view.', 'viewer.') + '&eID=' + publisherEventId;
									urlBase.push(currentUrlBase);
								}
								else
								{
									var currentUrlBase = (d.PublisherEvent ? d.PublisherEvent.URLBase.replace('http://view.earthchannel.com/PlayerController.aspx', '//viewer.earthchannel.com/PlayerMedia.aspx') : '') + '&amp;eID=' + publisherEventId + '&amp;mode=embed';
									urlBase.push(currentUrlBase);
									videoElement.push('<div id="videoDiv" style=" margin-top:' + (splitscreen ? '0em;' : '2.5em;') + ' text-align: center;"><iframe id="iframeONE" height="' + videoHeight + 'px" width="' + videoWidth + 'px" src="' + currentUrlBase + '" scrolling="no" frameborder="0" marginheight="0" marginwidth="0"></iframe><hr style="margin:0"/></div>');
								}
								videoExists = true;
							}
						}

						youTubeEventId = youTubeEvents.length > 0 && youTubeEvents[0] != null && youTubeEvents[0].eventId != null ? youTubeEvents[0].eventId : '';

						if (youTube && youTubeEventId != '')
						{
							attachmentPane = $('#attachment-pane');
							if (attachmentPane.length == 0)
							{
								attachmentPane = window.parent.$('#attachment-pane');
							}

							if (attachmentPane.length > 0)
							{
								videoScale = 1;
								maxVideoWidth = 800;

								body.find('a[target="AgendaAttachment"]').on('click', function () { if (attachmentPane && (attachmentPane).find('#videoDiv').length > 0) { setTimeout(function () { moveVideoToAgendaFrame(true); }, 0); } });
							}
							else
							{
								attachmentPane = null;
							}
						}

						if (videoExists && showVideoLink)
						{
							//----------------------------------------------------
							//common to multi events
							(attachmentPane ? attachmentPane : documentBody).css({ 'margin': '0' });
							(attachmentPane ? attachmentPane : documentBody).css({ 'padding': '0' });

							$(window).on('resize', setVideoSize);

							$('#video-button').removeClass("hidden").find('span[class="toolbar-text"]').text(localization.audioVideoLabel).attr('title', localization.showAudioVideoLabel);
							var closeSpltiscreenButton = $('ul.split-screen-toolbar').find('li#close-split-screen');
							if (closeSpltiscreenButton && closeSpltiscreenButton.length > 0 && typeof window.CivicWeb != 'undefined' && typeof window.CivicWeb.Documents != 'undefined' && typeof window.CivicWeb.Documents.SplitscreenPage != 'undefined')
							{
								window.CivicWeb.Documents.SplitscreenPage.setToolbarCollapsedState();
							}

							$('#video-button').off('click').on('click', showVideo);

							//auto play from meeeting list widget and portal video button
							if (window.location.href.indexOf('media=true') > 0 || window.location.href.indexOf('timestamp') > 0)
							{
								if (isPhone && splitscreen && ($(window).height() > $(window).width()))
								{
									//moveVideoToAgendaFrame(false);
								}
								else
								{
									if (window.location.href.indexOf('timestamp') > 0)
									{
										startAt = queryValues.timestamp;
									}
									showVideo();
								}
							}
						}
					}
					else
					{

					}
				}
			},
			error: function ()
			{
				//return '';
			}
		});
	};

	var setVideoWidthHeight = function (currentVideoRatio)
	{
		var bodyWidth = (attachmentPane ? attachmentPane : documentBody).width();
		videoWidth = (!isNaN(bodyWidth) ? parseFloat(bodyWidth) : minWidthChromeLoad4x3) * videoScale;

		if (videoWidth > maxVideoWidth)
		{
			videoWidth = maxVideoWidth;
		}

		if (videoWidth < minWidthChromeLoad4x3 && navigator.userAgent.indexOf('Chrome') != -1 && currentVideoRatio == ratio4x3 && !youTube)
		{
			//4:3
			videoWidth = minWidthChromeLoad4x3;
			(attachmentPane ? attachmentPane : documentBody).attr('width', minWidthChromeLoad4x3);
		}
		else if (videoWidth < minWidthChromeLoad16x9 && navigator.userAgent.indexOf('Chrome') != -1 && currentVideoRatio == ratio16x9 && !youTube)
		{
			//16:9
			videoWidth = minWidthChromeLoad16x9;
			(attachmentPane ? attachmentPane : documentBody).attr('width', minWidthChromeLoad16x9);
		}

		videoHeight = videoWidth * currentVideoRatio;
	};

	var switchEvents = function (currentEventId)
	{
		if (youTubeEvents != null)
		{
			for (var i = 0; i < youTubeEvents.length; i++)
			{
				if (youTubeEvents[i].eventId != null && youTubeEvents[i].eventId == currentEventId)
				{
					currentVideo = i;
					youTubeEventId = youTubeEvents.length >= currentVideo && youTubeEvents[currentVideo].eventId != null ? youTubeEvents[currentVideo].eventId : '';
					window.myPlayer.loadVideoById(youTubeEventId, 0, "large");

					break;
				}
			}
		}
	};

	this.getEvents = function ()
	{
		return youTubeEvents;
	};

	this.getCurrentEvent = function ()
	{
		return youTubeEvents.length >= currentVideo && youTubeEvents[currentVideo] != null ? youTubeEvents[currentVideo] : null;
	};

	this.getVideoTime = function (iframe, id, callback)
	{
		if (liveTimestamping)
		{
			if (liveTimestampingFirstTimestamp == null)
			{
				liveTimestampingFirstTimestamp = new Date();
				callback(id, 0, true, youTubeEventId);
			}
			else
			{
				var liveTimestampingTimestamp = new Date();
				var difference = Math.round((liveTimestampingTimestamp - liveTimestampingFirstTimestamp) / 1000);
				callback(id, difference, true, youTubeEventId);
			}
		}
		else
		{
			if (youTube && window.myPlayer != null)
			{
				callback(id, Math.round(window.myPlayer.getCurrentTime()), true, youTubeEventId);
			}
			else
			{
				itemId = id;
				setVideoTimeStampDataCallback = callback;
				if (iframe)
				{
					var a = $('<a>', { href: iframe.src })[0];
					var url = a.origin ? a.origin : (a.protocol + "//" + a.host.replace(":80", "").replace(":443", ""));
					var ifr = iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView;
					ifr.postMessage("GETTIME", url);
				}
			}
		}

	};

	var gotoVideoTimeStamp = function (e)
	{
		var timeStampVideo = !isNaN($(e).attr('time-stamp-video')) ? parseInt($(e).attr('time-stamp-video')) : 0;
		var secs = !isNaN($(e).attr('time-stamp')) ? parseInt($(e).attr('time-stamp')) : 0;
		
		secs = secs < 0 ? '0' : secs.toString();

		if (isIOS)
		{
			showVideo();
			var iframe = (attachmentPane ? attachmentPane : documentBody).find('#timeStampVideoDiv')[0];
			if (iframe)
			{
				var uri = iframe.src;
				var re = new RegExp('([?|&])start=.*?(&|$)', 'i');
				var newUri;
				var separator = uri.indexOf('?') !== -1 ? '&' : '?';
				if (uri.match(re))
				{
					newUri = uri.replace(re, separator + 'start=' + secs + '$2');
				}
				else
				{
					newUri = uri + separator + 'start=' + secs;
				}
				iframe.src = newUri;
			}
		}
		else
		{
			if (youTube && youTubeEvents[currentVideo] != null && youTubeEvents[timeStampVideo] != null)
			{
				if (window.myPlayer != null)
				{
					if (timeStampVideo != currentVideo)
					{
						currentVideo = timeStampVideo;
						youTubeEventId = youTubeEvents.length >= currentVideo && youTubeEvents[currentVideo].eventId != null ? youTubeEvents[currentVideo].eventId : '';

						window.myPlayer.loadVideoById(youTubeEventId, secs, "large");
					}
					else
					{
						window.myPlayer.seekTo(secs);
					}
				}
				else
				{
					hideVideo();
					currentVideo = timeStampVideo;
					youTubeEventId = youTubeEvents.length >= currentVideo && youTubeEvents[currentVideo].eventId != null ? youTubeEvents[currentVideo].eventId : '';
					startAtFirstTimestamp = true;
					firstTimeStamp = secs;
					showVideo();
				}
			}
			else if (timeStampVideo != currentVideo)
			{
				hideVideo();
				currentVideo = timeStampVideo;
				showVideo();
				var iframe = (attachmentPane ? attachmentPane : documentBody).find('#iframeONE')[0];
				$(iframe).on('load', function ()
				{
					setTimeout(function ()
					{
						var a = $('<a>', { href: iframe.src })[0];
						var url = a.origin ? a.origin : (a.protocol + "//" + a.host.replace(":80", "").replace(":443", ""));
						var ifr = iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView;
						ifr.postMessage("SETTIME:" + secs, url);
					}, 100);
				});
			}
			else
			{
				var iframe = (attachmentPane ? attachmentPane : documentBody).find('#iframeONE')[0];
				if (iframe) {
					var a = $('<a>', { href: iframe.src })[0];
					var url = a.origin ? a.origin : (a.protocol + "//" + a.host.replace(":80", "").replace(":443", ""));
					var ifr = iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView;
					ifr.postMessage("SETTIME:" + secs, url);
				}
				else
				{
					hideVideo();
					showVideo();
					var iframe = (attachmentPane ? attachmentPane : documentBody).find('#iframeONE')[0];
					$(iframe).on('load', function ()
					{
						setTimeout(function ()
						{
							var a = $('<a>', { href: iframe.src })[0];
							var url = a.origin ? a.origin : (a.protocol + "//" + a.host.replace(":80", "").replace(":443", ""));
							var ifr = iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView;
							ifr.postMessage("SETTIME:" + secs, url);
						}, 100);
					});
				}
			}
		}

		return false;
	};

	this.resizeVideo = function ()
	{
		setVideoSize();
	};

	var setVideoSize = function ()
	{
		if (documentBody)
		{
			var bodyWidth = (attachmentPane ? attachmentPane : documentBody).width();
			var videoWidth = (!isNaN(bodyWidth) ? parseFloat(bodyWidth) : minWidthChromeLoad4x3) * videoScale;
			if (videoWidth > maxVideoWidth)
			{
				videoWidth = maxVideoWidth;
			}
			var videoHeight = videoWidth * videoRatio[currentVideo];

			if (youTube && youTubeEventId.length > 0)
			{

				if (attachmentPane == null)
				{
					documentBody.css({ 'padding-top': videoHeight + 10 + 'px' });
				}

				(attachmentPane ? attachmentPane : documentBody).find('#timeStampVideoDiv').attr('width', videoWidth + 'px').attr('height', videoHeight + 'px');//.css({ 'width': '94%' });
				(attachmentPane ? attachmentPane : documentBody).find('#videoDiv').attr('width', videoWidth + 'px').attr('height', videoHeight + 'px');//.css({ 'width': '94%' });
			}
			else
			{
				(attachmentPane ? attachmentPane : documentBody).find('#iframeONE').attr('width', videoWidth).attr('height', videoHeight);
			}
		}
	};

	var setVideoWidthHeight = function (currentVideoRatio)
	{
		var bodyWidth = (attachmentPane ? attachmentPane : documentBody).width();
		videoWidth = (!isNaN(bodyWidth) ? parseFloat(bodyWidth) : minWidthChromeLoad4x3) * videoScale;

		if (videoWidth > maxVideoWidth)
		{
			videoWidth = maxVideoWidth;
		}

		if (videoWidth < minWidthChromeLoad4x3 && navigator.userAgent.indexOf('Chrome') != -1 && currentVideoRatio == ratio4x3 && !youTube)
		{
			//4:3
			videoWidth = minWidthChromeLoad4x3;
			(attachmentPane ? attachmentPane : documentBody).attr('width', minWidthChromeLoad4x3);
		}
		else if (videoWidth < minWidthChromeLoad16x9 && navigator.userAgent.indexOf('Chrome') != -1 && currentVideoRatio == ratio16x9 && !youTube)
		{
			//16:9
			videoWidth = minWidthChromeLoad16x9;
			(attachmentPane ? attachmentPane : documentBody).attr('width', minWidthChromeLoad16x9);
		}

		videoHeight = videoWidth * currentVideoRatio;
	};

	function sleep(ms)
	{
		return new Promise(function (resolve) { setTimeout(resolve, ms) });
	};

	var getTime = function (callback)
	{
		if (youTube && window.myPlayer != null)
		{
			callback(0, Math.round(window.myPlayer.getCurrentTime()), true);
		}
		else
		{
			callback(0, 0, true);
		}
	};

	var setTime = function (secs, i)
	{
		if (youTube && window.myPlayer != null)
		{
			if (window.myPlayer.seekTo)
			{
				window.myPlayer.seekTo(secs);
			}
			else
			{
				if (i < 20)
				{
					i++;
					sleep(100).then(function () { return setTime(secs, i); });
				}
			}
		}
	};

	this.moveVideoToAgendaFrame = function (moveBackToAttachmentFrame, i)
	{
		if (documentBody == null && i < 20)
		{
			i++;
			setTimeout(function () { CivicWeb.Integration.Video.moveVideoToAgendaFrame(moveBackToAttachmentFrame, i); }, 100);
		}
		else
		{
			moveVideoToAgendaFrame(moveBackToAttachmentFrame);
		}

	};

	var moveVideoToAgendaFrame = function (moveBackToAttachmentFrame)
	{
		//only if it's in the Attachment frame
		if (documentBody && documentBody.find('#videoDiv').length == 0)// && $('#video-button').find('span[class="toolbar-text"]').text() == localization.hideLabel)
		{
			getTime(
				function (id, secs, hyphen)
				{
					hideVideo();

					//if (moveBackToAttachmentFrame)
					//{
					videoScale = 0.618;
					maxVideoWidth = 505;
					//}

					if (attachmentPane != null)
					{
						attachmentPane.find('#attachment-container').removeClass('hidden');
						attachmentPane = null;
					}

					setVideoWidthHeight(videoRatio[currentVideo]);

					showVideo();
					setTimeout(function () { setTime(secs, 1); }, 100);

					if (moveBackToAttachmentFrame)
					{
						$('#video-button').off('click').on('click', moveVideoToAttachmentFrame).removeClass("hidden").find('span[class="toolbar-text"]').text(localization.audioVideoLabel).attr('title', localization.showAudioVideoLabel + ' in the attachment pane');;
					}
					else
					{
						$('#video-button').off('click').on('click', hideVideo).find('span[class="toolbar-text"]').text(localization.hideLabel).attr('title', localization.hideAudioVideoLabel);
					}

				}
			);
		} else
		{
			attachmentPane = null;
			$('#video-button').off('click').on('click', showVideo).find('span[class="toolbar-text"]').text(localization.audioVideoLabel).attr('title', localization.showAudioVideoLabel);
		}
	};

	this.moveVideoToAttachmentFrame = function ()
	{
		moveVideoToAttachmentFrame();
	};

	var moveVideoToAttachmentFrame = function ()
	{
		if (documentBody && documentBody.find('#videoDiv').length > 0)
		{
			//only if it's in the Agenda frame
			getTime(
				function (id, secs, hyphen)
				{
					hideVideo();

					attachmentPane = $('#attachment-pane');
					if (attachmentPane.length == 0)
					{
						attachmentPane = window.parent.$('#attachment-pane');
					}

					if (attachmentPane.length > 0)
					{
						videoScale = 1;
						maxVideoWidth = 800;

						setTimeout(function ()
						{
							setVideoWidthHeight(videoRatio[currentVideo]);
							showVideo();
							setTimeout(function () { setTime(secs, 1); }, 100);
						}, 0);
					}
					else
					{
						attachmentPane = null;
					}
				}
			);

		}
	};

	var showVideo = function (e)
	{
		(attachmentPane ? attachmentPane : documentBody).find('#videoDiv').remove();
		if (videoElement.length > 0 && documentBody != null)
		{
			if (navigator.userAgent.indexOf('Chrome') != -1)
			{
				var iframeBodyInitialWidth = (attachmentPane ? attachmentPane : documentBody).width();
				var minWidthToLoadChrome = minWidthChromeLoad16x9;
				if (iframeBodyInitialWidth < (minWidthChromeLoad4x3) && videoRatio[currentVideo] == ratio4x3)
				{
					minWidthToLoadChrome = minWidthChromeLoad4x3;
				}
				else if (iframeBodyInitialWidth < (minWidthChromeLoad16x9) && videoRatio[currentVideo] == ratio16x9)
				{
					minWidthToLoadChrome = minWidthChromeLoad16x9;
				}
				if (iframeBodyInitialWidth < minWidthToLoadChrome)
				{
					$(document.getElementById('AgendaPane')).width(minWidthToLoadChrome + 25);
					if (!eventIsYouTubeVideo(youTubeEventId))
					{
						$('body').prepend(videoElement[currentVideo]);
						loadBoxCastVideo('videoDiv', youTubeEventId);
					}
					else if (youTube && youTubeEventId.length > 0)
					{
						$('body').prepend(videoElement[currentVideo]);
						loadYouTubeVideo('videoDiv');
					}
					else
					{
						(attachmentPane ? attachmentPane : documentBody).prepend(videoElement[currentVideo]);
					}

					iframeBodyInitialWidth = iframeBodyInitialWidth < (earthChannelForcedMinHeight / videoRatio[currentVideo]) ? (earthChannelForcedMinHeight / videoRatio[currentVideo]) : iframeBodyInitialWidth;
					//wait till loaded
					setTimeout(function () { $(document.getElementById('AgendaPane')).width(iframeBodyInitialWidth + 25); setVideoSize() }, 1000);

				}
				else
				{
					if (!eventIsYouTubeVideo(youTubeEventId))
					{
						$('body').prepend(videoElement[currentVideo]);
						loadBoxCastVideo('videoDiv', youTubeEventId);
					}
					else if (youTube && youTubeEventId.length > 0)
					{
						$('body').prepend(videoElement[currentVideo]);
						loadYouTubeVideo('videoDiv');
					}
					else
					{
						(attachmentPane ? attachmentPane : documentBody).prepend(videoElement[currentVideo]);
					}
				}
			}
			else
			{
				if (!eventIsYouTubeVideo(youTubeEventId))
				{
					$('body').prepend(videoElement[currentVideo]);
					loadBoxCastVideo('videoDiv', youTubeEventId);
				}
				else if (youTube && youTubeEventId.length > 0)
				{
					$('body').prepend(videoElement[currentVideo]);
					loadYouTubeVideo('videoDiv');
				}
				else
				{
					(attachmentPane ? attachmentPane : documentBody).prepend(videoElement[currentVideo]);
				}
			}

			$(documentBody.find('body')).css({ 'margin-right': '15px' });

			$('#video-button').off('click').on('click', hideVideo).find('span[class="toolbar-text"]').text(localization.hideLabel).attr('title', localization.hideAudioVideoLabel);

			if (!youTube)
			{
				resizeVideoDiv(e);
			}
		}
		else if (historic)
		{
			window.open(urlBase[currentVideo], '_blank', "toolbar=no,scrollbars=no,resizable=no,top=50,left=50,width=1000,height=770");
		}
		if (attachmentPane)
		{
			attachmentPane.find('#attachment-container').addClass('hidden');
		}
		if (window.parent && window.parent.$)
		{
			window.parent.$('#walkme-player').hide();
		}
		//when auto playing this isn't a button click and e is null!!!!!
		if (e != null)
		{
			e.preventDefault();
		}
		return false;
	};

	this.hideVideo = function (e)
	{
		hideVideo(e);
	}

	var hideVideo = function (e)
	{
		if (documentBody != null)
		{
			currentVideo = 0;
			youTubeEventId = youTubeEvents.length >= currentVideo && youTubeEvents[currentVideo].eventId != null ? youTubeEvents[currentVideo].eventId : '';

			if (youTube)
			{
				myVideoWindow = null;
				$(document.getElementById('timeStampVideoDiv')).closest('.k-window').remove();
			}

			(attachmentPane ? attachmentPane : documentBody).find('#videoDiv').remove();
			documentBody.css({ 'margin-right': '0' });

			$('#video-button').off('click').on('click', showVideo).find('span[class="toolbar-text"]').text(localization.audioVideoLabel).attr('title', localization.showAudioVideoLabel);

			//this should return the scrollable agenda content area to be non-scrollable
			(attachmentPane ? attachmentPane : documentBody).css({ 'padding-top': '' });
			if (typeof CivicWeb != 'undefined' && typeof CivicWeb.Document != 'undefined' && typeof CivicWeb.Document.AgendaNotesPage != 'undefined' && CivicWeb.Document.AgendaNotesPage.getInstance() != null)
			{
				CivicWeb.Document.AgendaNotesPage.events.resizeAgendaDocument(e);
			}
		}

		if (attachmentPane)
		{
			attachmentPane.find('#attachment-container').removeClass('hidden');
		}

		if (e != null)
		{
			e.preventDefault();
		}
		return false;
	};

	var resizeVideoDiv = function (e)
	{
		//this is the sizing of the scrollable agenda area
		//HTML quick-view
		if (documentBody.length > 0)
		{
			if (attachmentPane)
			{
				attachmentPane.find('#videoDiv').css({ 'top': '0', 'background-color': 'white', 'z-index': '600', 'position': '', 'height': '99.83%' });
			}
			else
			{
				documentBody.css({ 'padding-top': videoHeight + 10 + 'px' });
				documentBody.find('#videoDiv').css({ 'position': 'fixed', 'top': '0', 'width': '100%', 'background-color': 'white', 'z-index': '600' });
			}
			if (agendaDocument && typeof CivicWeb != 'undefined' && typeof CivicWeb.Document != 'undefined' && typeof CivicWeb.Document.AgendaNotesPage != 'undefined' && CivicWeb.Document.AgendaNotesPage.getInstance() != null)
			{
				CivicWeb.Document.AgendaNotesPage.events.resizeAgendaDocument(e);
			}
		}
	}

	this.convertSecondsToTimeString = function (secs, hyphens, itemId)
	{
		return convertSecondsToTimeString(secs, hyphens, itemId);
	};

	var convertSecondsToTimeString = function (secs, hyphens, itemId, timeStampEvent)
	{
		var timestamp = '';
		var leading = hyphens ? '-' : '0';
		if (secs >= 3600)
		{
			var h = Math.floor(secs / 3600);
			var m = Math.floor(secs % 3600 / 60);
			var s = Math.floor(secs % 3600 % 60);
			timestamp = h < 10 ? (hyphens ? leading : '') + h + 'h' : h + 'h';
			timestamp += m < 10 ? '0' + m + 'm' : m + 'm';
			timestamp += s < 10 ? '0' + s + 's' : s + 's';

		}
		else if (secs >= 60)
		{
			var m = Math.floor(secs / 60);
			var s = (secs % 60);
			timestamp = (hyphens ? leading + leading : leading) + 'h';
			timestamp += m < 10 ? leading + m + 'm' : m + 'm';
			timestamp += s < 10 ? '0' + s + 's' : s + 's';

		}
		else
		{
			var s = (secs % 60);
			timestamp = (hyphens ? leading + leading : leading) + 'h' + leading + leading + 'm';
			timestamp += s < 10 ? leading + s + 's' : s + 's';

		}

		if (itemId != null && eventIds.length > 1)
		{
			var timeStampEventId = timeStampEvent != null ? timeStampEvent : (BuildForms !=  null ? BuildForms.GetItemValue(itemId, referenceFieldLocalization.videoTimeStampEventFieldReferenceName) : '');
			var index = eventIds.indexOf(timeStampEventId) + 1;
			if (index > 0)
			{
				timestamp = 'Part ' + index + ': ' + timestamp;
			}
		}

		return timestamp;
	};

	/////////////////////////////////////////////////////////////////////////////////////
	//Minutes --------------------------------------------------------------------------
	var setUpMinutesToTimeStamp = function (meetingId)
	{
		$.ajax({
			url: '/api/geteventwithindexpoints/' + meetingId.toString(),
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'GET',
			success: function (data)
			{
				if (data && data.length > 0)
				{
					urlBase = [];
					var result = JSON.parse(data);
					eventIds = [];

					for (var k = 0; k < result.length; k++)
					{
						var dat = result[k];
						var event = dat.Event != null ? dat.Event : null;
						var eventId = event != null && event.eventId != null ? event.eventId : '';
						if (eventIds.indexOf(eventId) == -1)
						{
							eventIds.push(eventId);
						}
					}

					for (var i = 0; i < result.length; i++)
					{
						var d = result[i];
						liveTimestamping = d.PublisherEvent ? d.PublisherEvent.MediaType.toLowerCase() == 'live' : false;
						var isMediaEnabled = d.PublisherEvent ? d.PublisherEvent.IsMediaEnabled : false;
						var publisherEventId = d.PublisherEvent ? d.PublisherEvent.PublisherEventID : 0;
						var event = d.Event != null ? d.Event : null;
						var eventId = event != null && event.eventId != null ? event.eventId : '';
						//var eventTitle = events != null && events.eventTitle != null ? events.eventTitle : '';

						if ((isMediaEnabled && publisherEventId > 0) || (eventId.length > 0 && eventId != '0'))
						{
							videoRatio.push((d.PublisherEvent && (parseInt(d.PublisherEvent.EnabledItemMask) & 4096) > 0) ? ratio16x9 : ratio4x3);

							if (event != null)
							{
								youTubeEvents.push(event);
							}

							var localIndexPoints = d.LocalIndexPoints ? d.LocalIndexPoints : null;
							if (localIndexPoints)
							{
								for (var j = 0; j < localIndexPoints.length; j++)
								{
									var itemId = localIndexPoints[j].ItemId;
									var secondsStart = localIndexPoints[j].Value;
									var timestampEvent = localIndexPoints[j].Event;

									if (secondsStart != null && !isNaN(secondsStart))
									{
										if (secondsStart < 0)
										{
											timeString = '<a href"#" style="color:red;" class="time-stamp-event-link" time-stamp-event="' + timestampEvent + '" time-stamp="' + secondsStart + '" onclick="CivicWeb.Integration.Video.gotoMinutesVideoTimeStamp(this)">' + '-' + CivicWeb.Integration.Video.convertSecondsToTimeString(Math.abs(secondsStart), false, itemId) + '</a>';
										}
										else
										{
											timeString = '<a href"#" class="time-stamp-event-link" time-stamp-event="' + timestampEvent + '" time-stamp="' + secondsStart + '" onclick="CivicWeb.Integration.Video.gotoMinutesVideoTimeStamp(this)">' + CivicWeb.Integration.Video.convertSecondsToTimeString(secondsStart, false, itemId) + '</a>';
										}

										var timestampField = $(document.getElementById(referenceFieldLocalization.videoTimeStampFieldReferenceName + '_' + itemId));
										if (timestampField.length > 0)
										{
											timestampField.html(timeString);
										}
									}
								}
							}
						
							//Set Min size so video auto plays
							if (!youTube && navigator.userAgent.indexOf('Chrome') != -1)
							{
								if (videoRatio[0] == ratio4x3)
								{
									//4:3
									videoWidth = minWidthChromeLoad4x3;
									videoHeight = videoWidth * videoRatio[currentVideo];
								}
								else if (videoRatio[0] == ratio16x9)
								{
									//16:9
									videoWidth = minWidthChromeLoad16x9;
									videoHeight = videoWidth * videoRatio[currentVideo];
								}
							} else
							{
								videoHeight = earthChannelForcedMinHeight;
								videoWidth = videoHeight / videoRatio[currentVideo];
							}

							urlBase.push((d.PublisherEvent ? d.PublisherEvent.URLBase.replace('http://view.earthchannel.com/PlayerController.aspx', '//viewer.earthchannel.com/PlayerMedia.aspx') : '') + '&amp;eID=' + publisherEventId + '&amp;mode=embed');

							if (liveTimestamping)
							{
								$('#timeStampVideoButton').removeClass('hidden').attr({ 'title': (audioOnly ? 'Play the live stream' : 'View the live stream') }).off('click').on('click', toggleTimeStampVideo).find('span').text((audioOnly ? 'Play Stream' : 'View Stream'));
							}
							else
							{
								$('#timeStampVideoButton').removeClass('hidden').off('click').on('click', toggleTimeStampVideo);

								if (manageVideo && timestampEnabled)
								{
									$('#timeStampSyncVideo').removeClass('hidden').off('click').on('click', toggleTimeStampSyncMode);
								}
							}
						}
					}
					youTubeEventId = youTubeEvents.length > 0 && youTubeEvents[0] != null && youTubeEvents[0].eventId != null ? youTubeEvents[0].eventId : '';
				}
				else
				{

				}
			},
			error: function ()
			{
				//return '';
			}
		});

	};

	this.gotoMinutesVideoTimeStamp = function (e)
	{
		gotoMinutesVideoTimeStamp(e);
	};

	var gotoMinutesVideoTimeStamp = function (e)
	{
		var secs = $(e).attr('time-stamp');
		secs = !isNaN(secs) ? parseInt(secs) : 0;
		secs = secs < 0 ? '0' : secs.toString();

		if (youTube && window.myPlayer != null)
		{
			var timeStampEvent = $(e).attr('time-stamp-event');
			if (timeStampEvent != null && timeStampEvent != youTubeEventId)
			{
				youTubeEventId = timeStampEvent;
				window.myPlayer.loadVideoById(timeStampEvent, secs, "large");
				updateEventDropDown();
			}
			else
			{
				window.myPlayer.seekTo(secs);
			}
		}
		else
		{
			var iframe = $('#timeStampVideoDiv').find('iframe')[0];
			if (iframe)
			{
				var a = $('<a>', { href: iframe.src })[0];
				var url = a.origin ? a.origin : (a.protocol + "//" + a.host.replace(":80", "").replace(":443", ""));
				var ifr = iframe.contentWindow ? iframe.contentWindow : iframe.contentDocument.defaultView;
				ifr.postMessage("SETTIME:" + secs, url);
			}
		}
		return false;
	};

	this.toggleTimeStampSyncMode = function ()
	{
		toggleTimeStampSyncMode();
	};

	var toggleTimeStampSyncMode = function ()
	{
		var timeStampSyncVideo = $('#timeStampSyncVideo');
		if (!syncModeEnabled && confirm('Sync mode allows timestamps to be synced with the recorded ' + (audioOnly ? 'audio' : 'video') + '. Sync mode affects all timestamps related to the video.\nDo you want to continue?'))
		{
			timeStampSyncVideo.attr({ 'title': 'Disable Sync Mode' }).find('span').text('Disable Sync Mode');
			$('#subMenu').append('<b id="syncModeEnabledLabel" style="float: right; margin-right: 2em; padding-right: 3px; background-color: #296498; color: #fff;" >Sync Mode Enabled</b>');
			syncModeEnabled = true;

			if ($(document.getElementById('timeStampVideoDiv')).length == 0)
			{
				toggleTimeStampVideo();
			}
		}
		else
		{
			timeStampSyncVideo.attr({ 'title': 'Sync timestamps with recorded ' + (audioOnly ? 'audio' : 'video') }).find('span').text('Enable Sync Mode');
			$('#syncModeEnabledLabel').remove();
			syncModeEnabled = false;
		}

		if (ATMBuild.SelectedItem != null)
		{
			Build.AddVideoTimeStampButton(ATMBuild.SelectedItem);
		}
	};

	var toggleTimeStampVideo = function ()
	{
		if (CivicWeb.Common.loadKendoUi(toggleTimeStampVideo))
		{
			if (!myVideoWindow)
			{
				$('body').prepend('<div id="timeStampVideoDiv"/>');

				var kendoVideoWindow = $(document.getElementById('timeStampVideoDiv'))
				kendoVideoWindow.css({ 'margin': '0', 'padding': '0' }).kendoWindow({
					width: videoWidth + 'px',
					height: videoHeight + 'px',
					title: 'Timestamp ' + (audioOnly ? 'Audio' : 'Video'),
					modal: false,
					visible: true,
					resizable: false,
					actions: ['Close'],
					content: urlBase[currentVideo],
					close: closeKendoVideoWindow,
					position: { top: 0, left: 0 },
					id: "kendoVideoWindow"
				})

				setTimeout(function ()
				{
					var timeStampVideoDiv = $(document.getElementById('timeStampVideoDiv'));

					if (youTube)
					{
						timeStampVideoDiv.height(earthChannelForcedMinHeight);
						timeStampVideoDiv.width(earthChannelForcedMinHeight / videoRatio[currentVideo]);
					}
					else
					{
						timeStampVideoDiv.parent().height(earthChannelForcedMinHeight);
						timeStampVideoDiv.parent().width(earthChannelForcedMinHeight / videoRatio[currentVideo]);
					}
				}, 1000);


				myVideoWindow = $(document.getElementById('timeStampVideoDiv')).data("kendoWindow");
				$(document.getElementById('timeStampVideoDiv')).closest('.k-window').css({ 'position': 'fixed', 'top': '0', 'left': '0' });
				myVideoWindow.open();
				$('#timeStampVideoButton').attr({ 'title': (liveTimestamping ? (audioOnly ? 'Stop playing the stream' : 'Stop viewing the stream') : (audioOnly ? 'Stop playing the audio' : 'Stop viewing the video')) }).find('span').text((liveTimestamping ? 'Stop Stream' : (audioOnly ? 'Stop Audio' : 'Close video popup')));

				if (youTube && CivicWeb.Integration.Video.getCurrentEvent() != null)
				{
					loadYouTubeVideo('timeStampVideoDiv');

					updateEventDropDown();
				}
			}
			else
			{
				closeKendoVideoWindow();
				$('#timeStampVideoButton').attr({ 'title': (liveTimestamping ? (audioOnly ? 'Play the live stream' : 'View the live stream') : (audioOnly ? 'Play the recorded audio' : 'View the recorded video')) }).find('span').text(liveTimestamping ? (audioOnly ? 'Play Stream' : 'View Stream') : (audioOnly ? 'Play Audio' : 'View Video'));
			}
		}
	};

	var closeKendoVideoWindow = function ()
	{
		myVideoWindow = null;
		$(document.getElementById('timeStampVideoDiv')).closest('.k-window').remove();
		$('#timeStampVideoButton').attr({ 'title': (liveTimestamping ? (audioOnly ? 'Play the live stream' : 'View the live stream') : (audioOnly ? 'Play the recorded audio' : 'View the recorded video')) }).find('span').text(liveTimestamping ? (audioOnly ? 'Play Stream' : 'View Stream') : (audioOnly ? 'Play Audio' : 'View Video'));

		if (syncModeEnabled)
		{
			$('#timeStampSyncVideo').attr({ 'title': 'Sync timestamps with recorded ' + (audioOnly ? 'audio' : 'video') }).find('span').text('Enable Sync Mode');
			$('#syncModeEnabledLabel').remove();
			syncModeEnabled = false;
		}
	};

	var saveVideoEventSettings = function (events, startAtFirstTimestamp)
	{
		var obj = {};
		obj.MeetingId = meetingId;
		obj.Events = events;
		obj.StartAtFirstTimestamp = startAtFirstTimestamp;

		$.ajax({
			url: '/api/savevideoeventsettings',
			contentType: 'application/json',
			dataType: 'json',
			async: true,
			cache: false,
			type: 'POST',
			data: JSON.stringify(obj),
			success: function (response)
			{
				setTimeout(function ()
				{
					$('#videoevent-selector-container').slideUp();
	
					$('#earthChannelEventLink').remove();
					$('#showVideoLinkSpan').remove();
					$('#showTimeStampsSpan').remove();

					$('#timeStampVideoButton').addClass('hidden');
					$('#timeStampSyncVideo').addClass('hidden');

					$('.time-stamp-event-link').remove();

					if (manageVideo && meetingId != null && meetingId > 0)
					{
						setUpViewCreateEventLink(meetingId);
					}

					if (minutesBuild)
					{
						setUpMinutesToTimeStamp(meetingId);
					}
				}, 750);
			},
			error: function ()
			{
				//return '';
			}
		});
	};

	var toggleshowVideoLink = function (e)
	{
		var obj = {};
		obj.MeetingId = meetingId;

		var id = $(e).attr('id');
		var confirmMsg = '';
		var checkedShowVideo = false;
		var showTimestampsFlipped = false;
		if (id == 'showVideoLink')
		{
			obj.ShowVideoLink = e.checked;
			if (!e.checked)
			{
				$('#showTimeStamps').prop('checked', false);
				obj.ShowTimeStamps = false;
				showTimestampsFlipped = true;
			}
			else
			{
				obj.ShowTimeStamps = $('#showTimeStamps').prop('checked');
			}

			confirmMsg = (e.checked ? 'Show' : 'Hide') + ' the ' + (audioOnly ? 'audio' : 'video') + ' button on the published agenda and minutes?\nDo you want to continue?';
		}
		else if (id == 'showTimeStamps')
		{
			obj.ShowTimeStamps = e.checked;
			if (!$('#showVideoLink').prop('checked'))
			{
				checkedShowVideo = true;
			}
			$('#showVideoLink').prop('checked', true);
			obj.ShowVideoLink = true;
			confirmMsg = (e.checked ? 'Show' : 'Hide') + ' the timestamps on the published agenda and minutes?\nDo you want to continue?';
		}

		if (confirm(confirmMsg))
		{
			$.ajax({
				url: '/api/savevideoeventsettings',
				contentType: 'application/json',
				dataType: 'json',
				async: true,
				cache: false,
				type: 'POST',
				data: JSON.stringify(obj),
				success: function (response)
				{

				},
				error: function ()
				{
					//return '';
				}
			});
		}
		else
		{
			e.checked = !e.checked;
			if (id == 'showVideoLink' && showTimestampsFlipped)
			{
				$('#showTimeStamps').prop('checked', e.checked);
			}

			if (checkedShowVideo)
			{
				$('#showVideoLink').prop('checked', false);
			}
		}

	};

	this.getSyncMode = function ()
	{
		return syncModeEnabled;
	};

	this.isAudioOnly = function ()
	{
		return audioOnly;
	};

	this.isLive = function ()
	{
		return liveTimestamping;
	};

	var setUpViewCreateEventLink = function (id)
	{
		$.ajax({
			url: '/api/getevent/' + id.toString(),
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'GET',
			success: function (result)
			{
				var data = JSON.parse(result);
				var displayShowVideoLinkCheckbox = data.DisplayShowVideoLinkCheckbox != null ? data.DisplayShowVideoLinkCheckbox : false;
				var showVideoLink = data.ShowVideoLink != null ? data.ShowVideoLink : false;
				var showTimeStamps = data.ShowTimeStamps != null ? data.ShowTimeStamps : false;
				var historic = data.Historic != null ? data.Historic : false;
				var validYouTubeCredentialExists = data.validYouTubeCredentialExists != null ? data.validYouTubeCredentialExists : false;
				var publicDocumentExists = data.publicDocumentExists != null ? data.publicDocumentExists : false;
				var meetingId = data.MeetingId != null ? data.MeetingId : 0;
				var meetingName = data.MeetingName != null ? data.MeetingName : '';
				var meetingDateInThePast = data.MeetingDateInThePast != null ? data.MeetingDateInThePast : false;
				var meetingStartTimeExists = data.MeetingStartTimeExists != null ? data.MeetingStartTimeExists : false;

				var eventId = data.eventId != null ? data.eventId : '';
				var events = data.Events != null ? data.Events : [];
				var startAtFirstTimestamp = data.StartAtFirstTimestamp != null ? data.StartAtFirstTimestamp : false;
				var boxcast = data.boxcast != null ? data.boxcast : false;
				var broadcasts = data.broadcasts != null ? data.broadcasts : [];
				var boxcasters = data.boxcasters != null ? data.boxcasters : [];
				var rtmpSources = data.rtmpSources != null ? data.rtmpSources : [];
				var youtubeAccounts = data.youtubeAccounts != null ? data.youtubeAccounts : [];

				var eventLink = $('<a/>');
				if (youTube && eventId != '-1')
				{
					eventLink.attr({ 'id': 'earthChannelEventLink', 'class': 'subMenuText', 'href': '' }).text('Video').off('click').on('click', function (e) { closeYouTubeVideoEventSelector(); openYouTubeVideoEventSelector(e, meetingName, events, meetingDateInThePast, meetingStartTimeExists, startAtFirstTimestamp, boxcast, broadcasts, boxcasters, youtubeAccounts, rtmpSources); e.preventDefault(); });
					eventLink.attr({ 'title': (youTubeLite ? 'Paste in the YouTube link to connect to this meeting instance' : (boxcast ? 'Select a broadcast or create a new broadcast to connect to this meeting' : 'Select the YouTube live stream or a recorded video to connect to this meeting instance.')) });
				}
				else
				{
					eventLink.attr({ 'id': 'earthChannelEventLink', 'class': 'subMenuText', 'href': ('/videologin/' + meetingId + '/' + (eventId == '-1' ? '0' : eventId)), 'target': '_blank' });
					if (eventId != '0' && eventId != '-1')
					{
						eventLink.text(viewEvent);
					}
					else
					{
						eventLink.text(createEvent);
					}
				}

				if (eventId == '-1')
				{
					if (!publicDocumentExists)
					{
						eventLink.text((youTube ? 'Video' : createEvent)).addClass('disableCreateEventLink').attr({ 'disabled': 'disabled', 'title': 'A public Agenda needs to be published before ' + (boxcast ? 'a broadcast can be connected' : (youTube ? 'a video can be connected' : 'an event can be created')) }).removeAttr('href target');
						if (youTube)
						{
							eventLink.off('click').on('click', function (e) { if ($(this).attr('disabled')) { return false; }; closeYouTubeVideoEventSelector(); openYouTubeVideoEventSelector(e, meetingName, [], meetingDateInThePast, meetingStartTimeExists, startAtFirstTimestamp, boxcast, broadcasts, boxcasters, youtubeAccounts); e.preventDefault(); });
						}
					}
					else if (youTube && !validYouTubeCredentialExists)
					{
						eventLink.text('Video').addClass('disableCreateEventLink').attr({ 'title': 'Valid YouTube credentials are needed before an event can be created. Add credentials under the admin area on the General Settings page.' }).removeAttr('href target');
					}
				}

				$('#subMenu').append(eventLink);

				if (eventId != '0' && eventId != '-1' && displayShowVideoLinkCheckbox)
				{
					var showVideoContainer = $('<span/>').attr({ 'id': 'showVideoLinkSpan', 'title': 'Show the ' + (audioOnly ? 'audio' : 'video') + ' button on the published agenda and minutes documents' });
					showVideoContainer.append($('<input/>').attr({ 'id': 'showVideoLink', 'type': 'checkbox', 'checked': showVideoLink }).css({ 'margin-left': '2em', 'vertical-align': 'middle' }).off('click').on('click', function () { toggleshowVideoLink(this); }));
					showVideoContainer.append($('<label/>').attr({ 'for': 'showVideoLink' }).css({ 'text-indent': '0px' }).text('Show ' + (audioOnly ? 'Audio' : 'Video') + ' Button'));
					$('#subMenu').append(showVideoContainer);

					if (!historic)
					{
						var showTimeStampsContainer = $('<span/>').attr({ 'id': 'showTimeStampsSpan', 'title': 'Show timestamps on the published agenda and minutes documents' });
						showTimeStampsContainer.append($('<input/>').attr({ 'id': 'showTimeStamps', 'type': 'checkbox', 'checked': showTimeStamps }).css({ 'margin-left': '2em', 'vertical-align': 'middle' }).off('click').on('click', function () { toggleshowVideoLink(this); }));
						showTimeStampsContainer.append($('<label/>').attr({ 'for': 'showTimeStamps' }).css({ 'text-indent': '0px' }).text('Show Timestamps'));
						$('#subMenu').append(showTimeStampsContainer);
					}
				}

				if (minutesBuild && meetingId > 0 && broadcasts.length > 0)
				{
					addBoxCastInCameraButton(broadcasts, meetingId);
				}
				else
				{
					$('#boxcaster-incamera-control').addClass('hidden');
				}
			},
			error: function ()
			{
				//return '';
			}
		});
	};

	/////////////////////////////////////////////////////////////////////////////////////
	//YouTube --------------------------------------------------------------------------

	var closeYouTubeVideoEventSelector = function ()
	{
		nextPageToken = "";
		$('#videoevent-selector-container').remove();
	};

	var showInCameraButton = function (meetingId, currentlyInCamera)
	{
		$('#boxcaster-incamera-control').removeClass('hidden');
		if (currentlyInCamera)
		{
			$('#OpenSession').removeClass('hidden').off('click').on('click', function (e) { setInCameraSession(e, meetingId, false); });
		}
		else
		{
			$('#ClosedSession').removeClass('hidden').off('click').on('click', function (e) { setInCameraSession(e, meetingId, true); });
		}
	}

	var addInCameraButton = function (broadcastDetails, meetingId)
	{
		if (broadcastDetails && broadcastDetails.length > 0)
		{
			var currentlyInCamera = false;
			var minimuMillisecondsToStart = Number.MAX_SAFE_INTEGER;
			var allBroadcastsEnded = true;

			for (var i = 0; i < broadcastDetails.length; i++)
			{
				var broadcastDetail = broadcastDetails[i];

				if ((broadcastDetail.metadata.mixer != null && broadcastDetail.metadata.mixer.muted) || (broadcastDetail.metadata.overlays != null && broadcastDetail.metadata.overlays.length > 0))
				{
					currentlyInCamera = true;
				}

				minimuMillisecondsToStart = broadcastDetail.millisecondsToStart < minimuMillisecondsToStart ? broadcastDetail.millisecondsToStart : minimuMillisecondsToStart;
				allBroadcastsEnded = allBroadcastsEnded && broadcastDetail.streamEnded;
			}

			if (!allBroadcastsEnded)
			{
				if (minimuMillisecondsToStart > 0)
				{
					setTimeout(function () { showInCameraButton(meetingId, currentlyInCamera); }, minimuMillisecondsToStart);
				}
				else
				{
					showInCameraButton(meetingId, currentlyInCamera);
				}
			}
		}
	}

	var addBoxCastInCameraButton = function (broadcasts, meetingId)
	{
		var obj = {};
		obj.Broadcasts = broadcasts;
		obj.meetingId = meetingId;

		$.ajax({
			url: '/api/broadcastdetails',
			contentType: 'application/json',
			dataType: 'json',
			async: true,
			cache: false,
			type: 'POST',
			data: JSON.stringify(obj),
			success: function (response)
			{
				addInCameraButton(response, meetingId);
			},
			error: function ()
			{
				addInCameraButton(false, meetingId);
			}
		});
	}

	var setInCameraSession = function (e, meetingId, incamera)
	{
		if (incamera)
		{
			$('#ClosedSession').attr('disabled', true);
			$('#loadingSpinnerClosed').removeClass('hidden');
		}
		else
		{	
			$('#OpenSession').attr('disabled', true);
			$('#loadingSpinnerOpen').removeClass('hidden');
		}

		var obj = {};
		obj.MeetingId = meetingId;
		obj.InCamera = incamera;

			$.ajax({
				url: '/api/toggleboxcastintermission',
				contentType: 'application/json',
				dataType: 'json',
				async: true,
				cache: false,
				type: 'POST',
				data: JSON.stringify(obj),
				success: function (response)
				{
					$('#loadingSpinnerOpen').addClass('hidden');
					$('#loadingSpinnerClosed').addClass('hidden');
					if (response.success && incamera)
					{
						$('#OpenSession').removeClass('hidden').off('click').on('click', function (e) { setInCameraSession(e, meetingId, false); });
						$('#ClosedSession').addClass('hidden').attr('disabled', false).off('click').on('click', function (e) { setInCameraSession(e, meetingId, true); });
					}
					else if (response.success && !incamera)
					{
						$('#ClosedSession').removeClass('hidden').off('click').on('click', function (e) { setInCameraSession(e, meetingId, true); });
						$('#OpenSession').addClass('hidden').attr('disabled', false).off('click').on('click', function (e) { setInCameraSession(e, meetingId, false); });
					}
					else
					{
						$('#ClosedSession').attr('disabled', false).off('click').on('click', function (e) { setInCameraSession(e, meetingId, true); });
						$('#OpenSession').attr('disabled', false).off('click').on('click', function (e) { setInCameraSession(e, meetingId, false); });
						alert("There was an error setting the broadcast to " + (incamera ? "intermission" : "public"));
					}
				},
				error: function ()
				{
					$('#loadingSpinnerOpen').addClass('hidden');
					$('#loadingSpinnerClosed').addClass('hidden');
					$('#ClosedSession').attr('disabled', false).off('click').on('click', function (e) { setInCameraSession(e, meetingId, true); });;
					$('#OpenSession').attr('disabled', false).off('click').on('click', function (e) { setInCameraSession(e, meetingId, false); });;
					alert("There was an error setting the broadcast to " + (incamera ? "intermission" : "public"));
				}
			});


		e.preventDefault();
	}

	var openYouTubeVideoEventSelector = function (e, meetingName, events, meetingDateInThePast, meetingStartTimeExists, startAtFirstTimestamp, boxcast, broadcasts, boxcasters, youtubeAccounts, rtmpSources)
	{
		//window
		var videoSelectorWindow = $('<div/>').attr({ 'id': 'videoevent-selector-container' }).css({ 'z-index': '1000', 'top': '150px', 'width': '500px', 'position': 'absolute', 'left': '29%', 'background-color': '#E8E8E8' });
		//header
		//close window button
		var videoSelectorHeader = ($('<div/>').css({ 'margin': '0' }).addClass('visBorder'))
			.append(($('<div/>').css({ 'clear': 'both' }).addClass('visHeader visHeaderHover').text(boxcast ? 'BoxCast Broadcast Selector' : 'YouTube Video Selector'))
				.append($('<span/>').attr({ 'id': 'closeVideoSelector', 'title': 'Close' }).css({ 'border-width': '0', 'float': 'right' }).addClass('cw-icon-delete glyphbutton cursor-pointer').off('click').on('click', closeYouTubeVideoEventSelector)));

		videoSelectorWindow.append(videoSelectorHeader);

		//create event button
		videoSelector = $('<div/>').attr({ 'id': 'videoevent-selector' }).css({ 'margin': '0.8em' });
		videoSelector.append($('<hr/>').attr({ 'id': 'hr1' }).css({ 'margin': '1em' }));
		if (youTubeLite)
		{

			//select video
			var videoList = $('<div/>').text('Paste in YouTube link');
			videoList.append($('<br />'));
			//inpu
			videoList.append($('<input/>').attr({ 'id': 'videoEventId', 'type': 'text', 'placeholder': 'https://youtube.com/watch?v=xxxxxxxxxxx', 'title': 'Paste in YouTube link', 'data-meetingname': meetingName }).css({ 'margin-right': '5px', 'margin-bottom': '3px', 'width': '300px' }));
			videoList.append($('<button/>').attr({ 'id': 'loadMore', 'type': 'button', 'title': 'Load more' }).addClass('button background-color-hover').text('Load More').off('click').on('click', loadMoreVideos));
			videoList.append($('<button/>').attr({ 'id': 'addEventRow', 'type': 'button', 'title': 'Add' }).addClass('button background-color-hover').text('Add').off('click').on('click', addEventRowFromInput));
			videoSelector.append(videoList);
		}
		else 
		{
			var createVideoButton = $('<button/>').attr({ 'id': 'createYouTubeEvent', 'type': 'button', 'title': boxcast ? 'Create a broadcast for this meeting' : 'Create a live event for this meeting' }).addClass('button background-color-hover').text(boxcast ? 'Create New Broadcast' : 'Create New Event').off('click').on('click', function (e) { createYouTubeEvent(e, meetingName); });

			if (boxcast && ((boxcasters && boxcasters.length > 1) || rtmpSources.length > 0))
			{
				videoSelector.append($('<div/>').css('padding-bottom', '5px').append(createVideoButton));
			}
			else
			{
				videoSelector.append($('<div/>').css('text-align', 'center').append(createVideoButton));
			}


			//select video
			var videoList = $('<div/>').text(boxcast ? 'Select Broadcast' : 'Select Video / Current Live Stream');
			videoList.append($('<br />'));
			//combobox
			videoList.append($('<select/>').attr({ 'id': 'videoEventId', 'title': 'Start typing the date of the ' + (boxcast ? 'broadcast' : 'video') + ' then select from the drop down the ' + (boxcast ? 'broadcast' : 'video') + ' you would like associated with this meeting' }).css({ 'margin-right': '5px', 'margin-bottom': '3px', 'height': '25px', 'width': '325px' }).addClass("hidden"));
			videoList.append($('<button/>').attr({ 'id': 'loadMore', 'type': 'button', 'title': 'Load more', 'disabled': 'disabled' }).addClass('button background-color-hover').text('Load More').off('click').on('click', loadMoreVideos));
			videoList.append($('<button/>').attr({ 'id': 'addEventRow', 'type': 'button', 'title': 'Add', 'disabled': 'disabled' }).addClass('button background-color-hover').text('Add').off('click').on('click', (addEventRow)));
			videoList.append(($('<span/>').attr({ 'id': 'videoLoading' })).append($('<span/>').addClass('fa fa-spinner fa-spin')));
			videoSelector.append(videoList);
		}

		videoSelector.append($('<hr/>').attr({ 'id': 'hr2' }).css({ 'margin': '1em' }).addClass('hidden currentlySelectedVideos'));

		videoSelector.append($('<div/>').addClass('hidden currentlySelectedVideos').text('Currently Selected Video(s)'));
		var videoTable = $('<table/>').attr({ 'id': 'currentlySelectedVideosTable' }).addClass('hidden currentlySelectedVideos').css({ 'background-color': 'white', 'width': (boxcast ? '100%': '300px') });
		videoSelector.append(videoTable);

		if (boxcast)
		{
			var boxcasterId = ''
			var youtubeAccountId = '';
			var youtubeeventIds = [];
			if (broadcasts.length > 0)
			{
				for (var i = 0; i < broadcasts.length > 0; i++)
				{
					var broadcastId = broadcasts[i].broadcastId;
					var channelId = broadcasts[i].channelId;
					var youtubeId = broadcasts[i].youtubeId;
					var title = broadcasts[i].title;
					boxcasterId = broadcasts[i].boxcasterId;
					youtubeAccountId = broadcasts[i].youtubeAccountId;
					youtubeeventIds.push(youtubeId);

					videoTable = addBroadcastRowToTable(videoTable, broadcastId, channelId, youtubeId, title);
				}
			}

			//show youtube events not created using boxcaster
			if (events.length > 0)
			{
				for (var i = 0; i < events.length > 0; i++)
				{
					var youtubeId = events[i].eventId;
					var title = events[i].eventTitle;
					if (!youtubeeventIds.includes(youtubeId))
					{
						videoTable = addBroadcastRowToTable(videoTable, '', '', youtubeId, title);
					}	
				}
			}

			if ((boxcasters && boxcasters.length > 0) || (rtmpSources.length > 0))
			{
				var bx = $('<select/>').attr({ 'id': 'boxcastersId' }).css({ 'width': '325px', 'margin-right': '5px', 'height': '25px' });
				for (var i = 0; i < boxcasters.length > 0; i++)
				{
					var id = boxcasters[i].id;
					var name = boxcasters[i].name;	
					bx.append('<option value=' + id + (boxcasterId != '' && id == boxcasterId ? ' selected' : '') + '>' + name + '</option>');
				}
				for (var i = 0; i < rtmpSources.length > 0; i++) {
					var id = rtmpSources[i].id;
					var name = rtmpSources[i].name;
					bx.append('<option value=' + id + (boxcasterId != '' && id == boxcasterId ? ' selected' : '') + '>' + name + '</option>');
				}

				if ((boxcasters.length + rtmpSources.length) == 1)
				{
					bx.addClass('hidden');
					createVideoButton.before(bx);
				}
				else
				{
					createVideoButton.before($('<span/>').text('Source'));
					createVideoButton.before($('<br/>'));
					createVideoButton.before(bx);
				}
			}

			if (youtubeAccounts && youtubeAccounts.length > 0)
			{
				var ac = $('<select/>').attr({ 'id': 'youtubeAccounts' }).css({ 'width': '300px' }).addClass('hidden');
				for (var i = 0; i < youtubeAccounts.length > 0; i++)
				{
					var id = youtubeAccounts[i].id;
					var name = youtubeAccounts[i].name;	
					ac.append('<option value=' + id + (youtubeAccountId != '' && id == youtubeAccountId ? ' selected' : '') + '>' + name + '</option>');
				}
				videoSelectorWindow.append(ac);
			}
		}
		else
		{
			//videos list
			if (events.length > 0)
			{
				for (var i = 0; i < events.length > 0; i++)
				{
					var eventId = events[i].eventId;
					var eventTitle = events[i].eventTitle;

					videoTable = addEventRowToTable(videoTable, eventId, eventTitle);
				}
			}
		}

		//start at first time stamp
		//save button
		//remove button
		videoSelector.append($('<hr/>').attr({ 'id': 'hr3' }).css({ 'margin': '1em' }));

		var saveButton = $('<span/>').css({ 'padding-left': '15px' });
		saveButton.append($('<input/>').attr({ 'id': 'startAtFirstTimestamp', 'type': 'checkbox' }).prop('checked', startAtFirstTimestamp).off('click').on('click', function () { enableSaveButton(); }));
		saveButton.append($('<label/>').attr({ 'for': 'startAtFirstTimestamp' }).text('Start At First Timestamp?'));

		saveButton.append(($('<span/>').css({ 'padding-left': '20px' })).append($('<button/>').attr({ 'id': 'saveYouTubeEvents', 'type': 'button', 'disabled': 'disabled', 'title': 'Connect the selected ' + (boxcast ? 'broadcast(s)' : 'video(s)') + ' with this meeting' }).addClass('button button-wide background-color-hover').text('Save').off('click').on('click', saveYouTubeEvents)));
		//saveButton.append($('<input/>').attr({ 'id': 'removeYouTubeVideoEventId', 'type': 'button', 'value': 'Remove', 'title': 'Remove the connected video from this meeting' }).css({ 'margin-left': '2px' }).addClass('button background-color-hover').off('click').on('click', removeYouTubeVideoEventId));

		videoSelector.append($('<div/>').append(saveButton));


		videoSelectorWindow.append(videoSelector);
		$('body').prepend(videoSelectorWindow);

		$('#videoevent-selector-container').draggable({
			handle: 'div.visHeader',
			containment: 'body',
			scroll: false
		});
		if (boxcast)
		{
			localization.meetingDateInThePast = localization.meetingDateInThePast.replace("video", "broadcast").replace("live event", "broadcast");
			localization.meetingStartTimeDoesNotExists = localization.meetingStartTimeDoesNotExists.replace("live event", "broadcast");
			localization.meetingNameToLong = localization.meetingNameToLong.replace("live event", "broadcast");
		}
		if (!youTubeLite)
		{	
			var searchVideoMsg = $('<div id="searchLiveMsg" class="hidden">');
			searchVideoMsg.append(CivicWeb.Common.Notification.create('search-live-msg', CivicWeb.Common.Notification.types.warning, 'Searching for the YouTube live stream may take a few minutes.', false, false));
			$('#hr3').after(searchVideoMsg);

			if (boxcast && boxcasters.length == 0 && rtmpSources.length == 0)
			{
				$('#hr1').after(CivicWeb.Common.Notification.create('create-event-msg', CivicWeb.Common.Notification.types.warning, "Please validate the BoxCast credentials before creating a broadcast", false, false));
				$('#createYouTubeEvent').attr({ 'disabled': 'disabled' });
			}
			else if (meetingDateInThePast)
			{
				$('#hr1').after(CivicWeb.Common.Notification.create('create-event-msg', CivicWeb.Common.Notification.types.warning, localization.meetingDateInThePast, false, false));
				$('#createYouTubeEvent').attr({ 'disabled': 'disabled' });
			}
			else if (!meetingStartTimeExists)
			{
				var meetingStartTimeDoesNotExist = window.location.href.indexOf('MeetingDetail.aspx') > -1 ? localization.meetingStartTimeDoesNotExists + '.' : localization.meetingStartTimeDoesNotExists + ' from the <a href="/eaengine/MeetingDetail.aspx?id=' + meetingId + '">Overview Page.</a>';


				$('#hr1').after(CivicWeb.Common.Notification.create('create-event-msg', CivicWeb.Common.Notification.types.warning, meetingStartTimeDoesNotExist, false, false));
				$('#createYouTubeEvent').attr({ 'disabled': 'disabled', 'title': localization.meetingStartTimeDoesNotExists });
			}
			else if (meetingName.length > 100)
			{
				$('#hr1').after(CivicWeb.Common.Notification.create('create-event-msg', CivicWeb.Common.Notification.types.warning, localization.meetingNameToLong.replace("{0}", meetingName.length), false, false));
				$('#createYouTubeEvent').attr({ 'disabled': 'disabled' });
			}

			populateYouTubeVideoDropDown(true, boxcast);
		}

		if (events.length > 0 || broadcasts && broadcasts.length > 0)
		{
			$('.currentlySelectedVideos').removeClass('hidden');
		}

		e.preventDefault();
	};

	var addEventRowFromInput = function (e)
	{
		var youTubeLink = validateYouTubeUrl($('#videoEventId').val());
		if (youTubeLink.length > 0)
		{
			var eventId = youTubeLink;
			var eventTitle = $('#videoEventId').attr('data-meetingname');

			var videoTable = $('#currentlySelectedVideosTable');

			if (eventId != '0' && eventId.length > 0 && videoTable.find('a[eventId="' + eventId + '"]').length == 0 && videoTable.children().length < 9)
			{
				videoTable = addEventRowToTable(videoTable, eventId, eventTitle);
				nameVideoParts(videoTable);
				$('.currentlySelectedVideos').removeClass('hidden');
				$('#videoEventId').val('');
				enableSaveButton();
			}
			$('#invalid-youtube-msg').remove();
		}
		else
		{
			$('#hr1').after(CivicWeb.Common.Notification.create('invalid-youtube-msg', CivicWeb.Common.Notification.types.warning, "Please enter a valid YouTube broadcast link", false, false));
		}

		e.preventDefault();
	}

	function validateYouTubeUrl(url)
	{
		if (url != undefined || url != '')
		{
			var regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/;
			var match = url.match(regExp);
			if (match && match[2].length == 11)
			{
				return match[2];
			}
			else
			{
				return '';
			}
		}
	}

	var removeEventRow = function (e)
	{
		$(this).closest('tr').remove();

		if ($('.selectedEvent').length > 0)
		{
			nameVideoParts($('#currentlySelectedVideosTable'));
			$('.currentlySelectedVideos').removeClass('hidden');
		}
		else
		{
			$('.currentlySelectedVideos').addClass('hidden');
		}

		enableSaveButton();

		e.preventDefault();
	};

	var addEventRow = function (e)
	{
		var eventId = $('#videoEventId option:selected').val();
		var eventTitle = $("#videoEventId option:selected").text();//.replace('**Live** ', '').replace(' (Video)', '').replace(' (Event)', '');

		var videoTable = $('#currentlySelectedVideosTable');

		if (eventId != '0' && eventId.length > 0 && videoTable.find('a[eventId="' + eventId + '"]').length == 0 && videoTable.children().length < 9)
		{
			const video = videoObjects.find((obj) => obj.value === eventId);

			if (purchasedBoxcast)
			{
				if (video.type === "boxcast")
				{
					eventTitle = video.label.replace(boxcastText);
					videoTable = addBroadcastRowToTable(videoTable, eventId, '', '', eventTitle);
				}
				else
				{
					eventTitle = video.label.replace(youtubeText);
					videoTable = addBroadcastRowToTable(videoTable, '', '', eventId, eventTitle);
				}
			}
			else
			{
				videoTable = addEventRowToTable(videoTable, eventId, eventTitle);
			}

			nameVideoParts(videoTable);
			$('.currentlySelectedVideos').removeClass('hidden');
			enableSaveButton();
		}

		e.preventDefault();
	};

	var addEventRowToTable = function (videoTable, eventId, eventTitle)
	{
		var videoRow = $('<tr/>');
		var videoCell = ($('<td/>')).append($('<a/>').attr({ 'href': 'https://www.youtube.com/watch?v=' + (eventId.length > 0 ? eventId : '#'), 'target': '_blank', 'eventId': eventId, 'eventTitle': eventTitle }).addClass('selectedEvent subMenuText').text(eventTitle));
		var buttonCell = ($('<td/>').css({ 'text-align': 'right' })).append(($('<span/>').attr({ 'role': 'button', 'title': 'Remove' }).css({ 'color': '#d20000', 'padding-left': '2em' }).addClass('glyphbutton text-negative button-spacing').off('click').on('click', removeEventRow)).append($('<span/>').addClass('fas fa-times')));

		videoRow.append(videoCell);
		videoRow.append(buttonCell);

		videoTable.append(videoRow);

		return videoTable;
	};

	var addBroadcastRowToTable = function(videoTable, broadcastId, channelId, youtubeId, title)
	{
		var videoRow = $('<tr/>');
		var textCell = ($('<td/>')).attr({ 'eventId': youtubeId, 'broadcastId': broadcastId, 'channelId': channelId, 'eventTitle': title }).addClass('selectedEvent subMenuText').text(title);
		var broadcastCell = ($('<td/>')).append($('<a/>').attr({ 'href': 'https://dashboard.boxcast.com/#/events/' + (broadcastId.length > 0 ? broadcastId : '#'), 'target': '_blank', 'eventId': broadcastId, 'eventTitle': title }).text(broadcastId.length > 0 ? "Broadcast" : ""));
		var youtubeCell = ($('<td/>')).append($('<a/>').attr({ 'href': 'https://www.youtube.com/watch?v=' + (youtubeId.length > 0 ? youtubeId : '#'), 'target': '_blank', 'eventId': youtubeId, 'eventTitle': title }).text(youtubeId.length > 0 ? "YouTube" : ""));
		var buttonCell = ($('<td/>').css({ 'text-align': 'right' })).append(($('<span/>').attr({ 'role': 'button', 'title': 'Remove' }).css({ 'color': '#d20000', 'padding-left': '2em' }).addClass('glyphbutton text-negative button-spacing').off('click').on('click', removeEventRow)).append($('<span/>').addClass('fas fa-times')));

		videoRow.append(textCell);
		videoRow.append(broadcastCell);
		videoRow.append(youtubeCell);
		videoRow.append(buttonCell);

		videoTable.append(videoRow);

		return videoTable;
	};

	var nameVideoParts = function (videoTable)
	{
		var partsText = [' (Part 1)', ' (Part 2)', ' (Part 3)', ' (Part 4)', ' (Part 5)', ' (Part 6)', ' (Part 7)', ' (Part 8)', ' (Part 9)']

		if (videoTable.children().length < 10)
		{
			var selectedVideoLinks = videoTable.find('.subMenuText');
			for (var i = 0; i < selectedVideoLinks.length; i++)
			{
				var videoName = $(selectedVideoLinks[i]).text();
				var partName = videoName.substring(videoName.length - partsText[0].length, videoName.length);
				if (partsText.indexOf(partName) > -1)
				{
					videoName = videoName.substring(0, videoName.length - partsText[0].length);
				}

				$(selectedVideoLinks[i]).text(videoName + (selectedVideoLinks.length > 1 ? partsText[i] : ''));
			}
		}

	};

	var enableSaveButton = function ()
	{
		var saveButton = $('#saveYouTubeEvents');
		saveButton.parent().addClass('wizard');
		saveButton.attr('disabled', false).css({ 'font-weight': 'bold' }).addClass('current');
	};

	var loadMoreVideos = function () {
		$('#addEventRow').attr({ 'disabled': 'disabled' });
		$('#loadMore').attr({ 'disabled': 'disabled' });
		$('#videoLoading').removeClass('hidden');

		populateYouTubeVideoDropDown(false);
	};

		this.populateYouTubeVideoDropDown = function ()
		{
				populateYouTubeVideoDropDown(false);
		};

	var populateYouTubeVideoDropDown = function (includeEvents, boxcast = false)
	{
		$.ajax({
			url: '/api/getvideos?nextPageToken=' + nextPageToken,
			contentType: 'application/json', dataType: 'json', async: true, cache: false, type: 'GET',
			success: function (response)
			{
				videoObjects = response.videos;
				nextPageToken = response.nextPageToken;
				var liveEventId = '';
				var liveEventName = '';
				liveEventExists = false;
				broadcastsChannels = {};

				var s = $('#videoEventId');
				// s.find('option').remove();
				if ($('#videoEventId option[value="0"]')?.length === 0) {
					s.prepend('<option value="0"></option>');
                }

				if (boxcast)
				{
					const boxcastVideos = videoObjects.filter((b) => b.type === "boxcast").sort((a, b) => (a.start < b.start ? 1 : a.start > b.start ? -1 : 0));

					$.each(boxcastVideos, function (key, value)
					{
						if (value.channelId)
						{
							broadcastsChannels[value.value] = value.channelId;
						}

						if ($('#videoEventId option[value="' + value.value + '"]')?.length === 0) {
							s.append('<option value=' + value.value + '>' + boxcastText + value.label + '</option>');
						}
					});

				}
				const youtubeVideos = (boxcast ? videoObjects.filter((b) => b.type === "youtube") : videoObjects).sort((a, b) => (a.start < b.start ? 1 : a.start > b.start ? -1 : 0));

				if (youtubeVideos != null && youtubeVideos.length > 0 && nextPageToken != null && nextPageToken.length > 0) {
					$('#loadMore').removeClass('hidden');
					$('#loadMore').removeAttr('disabled');
				} else {
					$('#loadMore').addClass('hidden');
				}

				$.each(youtubeVideos, function (key, value)
				{
					if (value.channelId)
					{
						broadcastsChannels[value.value] = value.channelId;
					}

					if (value.liveBroadcast == 'live')
					{
						liveEventId = value.value;
						liveEventName = value.label;
						liveEventExists = true;
					}
					else if (value.liveBroadcast == 'upcoming')
					{ 
						if (includeEvents)
						{
							if ($('#videoEventId option[value=' + value.value + ']')?.length === 0) {
								s.append('<option value="' + value.value + '">' + (boxcast ? youtubeText : "") + value.label + ' (Event)</option>');    
							}
						}
					}
					else
					{
						if ($('#videoEventId option[value="' + value.value + '"]')?.length === 0) {
							s.append('<option value=' + value.value + '>' + (boxcast ? youtubeText : "") + value.label + '</option>');
						}
					}
				});

				if (liveEventId.length > 0)
				{
					if ($('#videoEventId option[value="' + liveEventId + '"]')?.length === 0) {
						s.prepend('<option value=' + liveEventId + ' selected>**Live** ' + liveEventName + '</option>');
					}
					
					videoSelected = true;	
				}

				$('#addEventRow').removeAttr('disabled');
				$('#videoLoading').addClass('hidden');

				if (response.length < 800)
				{
					createYouTubeVideoCombobox();
				}
				else
				{
					$('#videoEventId').attr({'title': 'Select from the drop down the ' + (boxcast ? 'broadcast' : 'video') + ' you would like associated with this meeting' }).removeClass("hidden");
				}

				if (liveEventExists)
				{
					$('#videoSelectorInput').val('**Live** ' + liveEventName);
				}

			},
			error: function ()
			{
				//return '';
			}
		});
	};

	var createYouTubeVideoCombobox = function ()
	{
		$.widget("custom.combobox", {
			_create: function ()
			{
				this.wrapper = $("<span>")
					.addClass("custom-combobox")
					.insertAfter(this.element);

				this.element.hide();
				this._createAutocomplete();
				this._createShowAllButton();
			},

			_createAutocomplete: function ()
			{
				var selected = this.element.children(":selected"),
					value = selected.val() ? selected.text() : "";

				this.input = $("<input id='videoSelectorInput'>")
					.appendTo(this.wrapper)
					.val(value)
					.attr("title", "")
					.css({ 'width': '300px', 'max-width': '300px', 'background': 'white', 'height': '24px' })
					.addClass("custom-combobox-input ui-widget ui-widget-content ui-state-default ui-corner-left")
					.autocomplete({
						delay: 0,
						minLength: 0,
						source: $.proxy(this, "_source")
					})
					.tooltip({
						classes: {
							"ui-tooltip": "ui-state-highlight"
						}
					});

				this._on(this.input, {
					autocompleteselect: function (event, ui)
					{
						ui.item.option.selected = true;
						this._trigger("select", event, {
							item: ui.item.option
						});
					},

					autocompletechange: "_removeIfInvalid"
				});
			},

			_createShowAllButton: function ()
			{
				var input = this.input,
					wasOpen = false;

				$("<a>")
					.attr("tabIndex", -1)
					.attr("title", "Show All Items")
					.css({ 'height': '25px', 'vertical-align': 'top', 'margin-top': '2px', 'margin-right': '5px' })
					.tooltip()
					.appendTo(this.wrapper)
					.button({
						icons: {
							primary: "ui-icon-triangle-1-s"
						},
						text: false
					})
					.removeClass("ui-corner-all")
					.addClass("custom-combobox-toggle ui-corner-right")
					.on("mousedown", function ()
					{
						wasOpen = input.autocomplete("widget").is(":visible");
					})
					.on("click", function ()
					{
						input.trigger("focus");

						// Close if already visible
						if (wasOpen)
						{
							return;
						}

						// Pass empty string as value to search for, displaying all results
						input.autocomplete("search", "");
					});
			},

			_source: function (request, response)
			{
				var matcher = new RegExp($.ui.autocomplete.escapeRegex(request.term), "i");
				response(this.element.children("option").map(function ()
				{
					var text = $(this).text();
					if (this.value && (!request.term || matcher.test(text)))
						return {
							label: text,
							value: text,
							option: this
						};
				}));
			},

			_removeIfInvalid: function (event, ui)
			{

				// Selected an item, nothing to do
				if (ui.item)
				{
					return;
				}

				// Search for a match (case-insensitive)
				var value = this.input.val(),
					valueLowerCase = value.toLowerCase(),
					valid = false;
				this.element.children("option").each(function ()
				{
					if ($(this).text().toLowerCase() === valueLowerCase)
					{
						this.selected = valid = true;
						return false;
					}
				});

				// Found a match, nothing to do
				if (valid)
				{
					return;
				}

				// Remove invalid value
				this.input
					.val("")
					.attr("title", value + " didn't match any item")
					.tooltip("open");
				this.element.val("");
				this._delay(function ()
				{
					this.input.tooltip("close").attr("title", "");
				}, 2500);
				this.input.autocomplete("instance").term = "";
			},

			_destroy: function ()
			{
				this.wrapper.remove();
				this.element.show();
			}
		});

		$("#videoEventId").combobox();

		$('.ui-autocomplete').css({ 'z-index': 14000, 'max-height': '165px', 'overflow': 'auto', 'border': '1px solid transparent' });
	};

	var createYouTubeEvent = function (e, meetingName)
	{
		var videoTable = $('#currentlySelectedVideosTable');

		if (videoTable.children().length < 9)
		{
			videoTable = addEventRowToTable(videoTable, '', meetingName);
			nameVideoParts(videoTable);
			$('.currentlySelectedVideos').removeClass('hidden');
			//problem with all events getting the title updated correctly in YouTube
			//var events = $('.selectedEvent');
			//if (events.length == 1)
			//{
			//	$('#createYouTubeEvent').attr('disabled', 'disabled').removeClass('background-color-hover').text('Creating...  ').append($('<span></span>').append($('<span></span>').addClass('fa fa-spinner fa-spin')));
			//	saveYouTubeEvents(e);
			//}
			//else
			//{
				enableSaveButton();
			//}
		}

		e.preventDefault();
	};

	var saveYouTubeEvents = function (e)
	{
		$('#saveYouTubeEvents').attr('disabled', 'disabled').text('Saving').css({ 'font-weight': 'normal' }).removeClass('current').append($('<span/>').addClass('fa fa-spinner fa-spin').css({ 'float': 'right', 'margin-left': '5px', 'margin-top': '4px' }));
		var eventsObject = [];
		var events = $('.selectedEvent');
		for (var i = 0; i < events.length; i++)
		{
			var eventId = $(events[i]).attr('eventId') != null ? $(events[i]).attr('eventId') : '';
			var broadcastId = $(events[i]).attr('broadcastId') != null ? $(events[i]).attr('broadcastId') : '';
			var channelId = $(events[i]).attr('channelId') ? $(events[i]).attr('channelId') : broadcastsChannels[broadcastId];
			var boxcasterId = $('#boxcastersId option:selected').val();
			var youtubeAccountId = $('#youtubeAccounts option:selected').val();
			var eventTitle = $(events[i]).text();
			var source = '';
			$.ajax({
				url: '/api/getevent/' + meetingId.toString(),
				contentType: 'application/json', dataType: 'json', async: false, cache: false, type: 'GET',
				success: function (result) {
					var data = JSON.parse(result);
					var rtmpSources = data.rtmpSources != null ? data.rtmpSources : [];
					if (rtmpSources.length > 0) {
						for (var i = 0; i < rtmpSources.length > 0; i++) {
							if (rtmpSources[i].id.toString() == boxcasterId.toString()) {
								source = 'rtmp';
							}
						}
					}
				},
				error: function () {
					//return '';
				}
			});

			eventsObject.push({ 'eventId': eventId, 'broadcastId': broadcastId, 'channelId': channelId, 'boxcasterId': boxcasterId, 'eventTitle': eventTitle, 'youtubeAccountId': youtubeAccountId, 'source': source });
		}

		saveVideoEventSettings(eventsObject, $('#startAtFirstTimestamp').prop('checked'));

		if (eventsObject.length > 1)
		{
			CivicWeb.Common.Instrumentation.recordAction('VMHD: Added multiple events - saveYouTubeEvents', meetingId);
		}

		e.preventDefault();
	};

	var getAdditionalEvents = function ()
	{
		var obj = {};
		obj.MeetingId = meetingId;
		obj.CurrentEvents = youTubeEvents;

		console.log('getAdditionalEvents');

		$.ajax({
			url: '/api/getadditionalevents/' + meetingId.toString(),
			contentType: 'application/json',
			dataType: 'json',
			async: true,
			cache: false,
			type: 'GET',
			success: function (response)
			{
				var nextNewEvent = addNewEventsAndGetNext(response);
				var nextNewEventId = nextNewEvent !=  null && nextNewEvent.eventId != null ? nextNewEvent.eventId : '';

				if (window.myPlayer != null && nextNewEventId.length > 0)
				{
					updateEventDropDown();
					window.myPlayer.loadVideoById(nextNewEventId, 0, "large");
				}
				else if (window.myPlayer != null && window.myPlayer.getPlayerState() == YT.PlayerState.BUFFERING)
				{
					//if still buffering
					//keep checking every 10 seconds
					setTimeout(function () { getAdditionalEvents(); }, 10000);
				}
			},
			error: function ()
			{
				//return '';
			}
		});
	};

	var eventIsYouTubeVideo = function (videoId)
	{
		const regex = /[a-zA-Z0-9_-]{11}/g;
		return videoId && videoId.length == 11 && videoId.search(regex) > -1;
	};

	var loadBoxCastVideo = function (containerId, broadcastChannelId)
	{
		var p = $('#videoDiv').detach();
		var timeStampVideoDiv = p.find("#timeStampVideoDiv");
		timeStampVideoDiv.css('height', '100%');
		timeStampVideoDiv.append($("<div id =\"boxcast-widget-" + broadcastChannelId + "\"></div><script type=\"text/javascript\" charset=\"utf-8\">(function(d, s, c, o) {var js = d.createElement(s), fjs = d.getElementsByTagName(s)[0];var h = (('https:' == document.location.protocol) ? 'https:' : 'http:');js.src = h + '//js.boxcast.com/v3.min.js';js.onload = function() { boxcast.noConflict()('#boxcast-widget-'+c).loadChannel(c, o); };js.charset = 'utf-8';fjs.parentNode.insertBefore(js, fjs);}(document, 'script', '" + broadcastChannelId + "', {\"showTitle\":0,\"showDescription\":0,\"showHighlights\":0,\"showRelated\":false,\"defaultVideo\":\"next\",\"market\":\"partner\",\"showCountdown\":false,\"alwaysShowMediaControl\":1,\"showDocuments\":false,\"showIndex\":false,\"showDonations\":false}));</script>"));

		if (attachmentPane)
		{
			p.css('height', '100%');
			attachmentPane.prepend(p);
			setTimeout(function () { resizeVideoDiv(null); setVideoSize(); }, 100);
		}
		else if (documentBody)
		{
			documentBody.prepend(p);
			setTimeout(function () { resizeVideoDiv(null); setVideoSize(); }, 100);
		}
	};

	var loadYouTubeVideo = function (containerId)
	{
		var startAt = 0;

		if (startAtFirstTimestamp && firstTimeStamp < Number.MAX_SAFE_INTEGER)
		{
			startAt = firstTimeStamp;
		}
		if (window.location.href.indexOf('timestamp') > 0)
		{
			startAt = queryValues.timestamp;
		}

		var player = {
			playVideo: function (container, videoId)
			{
				if (typeof (YT) == 'undefined' || typeof (YT.Player) == 'undefined')
				{
					window.onYouTubePlayerAPIReady = function ()
					{
						player.loadPlayer(container, videoId);
					};

					var script = document.createElement('script');
					script.type = "text/javascript";
					script.src = "//www.youtube.com/player_api";
					$('body').append(script);

				} else
				{
					player.loadPlayer(container, videoId);
				}
			},
			loadPlayer: function (container, videoId)
			{
				window.myPlayer = new YT.Player(container, {
					playerVars: {
						modestbranding: 1,
						rel: 0,
						showinfo: 0,
						autoplay: (window.location.href.indexOf('timestamp') > 0 && queryValues.timestamp == startAt ? 0 : 1),
						start: startAt
					},
					height: videoHeight,
					width: videoWidth,
					videoId: videoId,
					events: {
						'onReady': onPlayerReady,
						'onStateChange': onPlayerStateChange
					}
				});

				p = $('#videoDiv').detach();

				if (attachmentPane)
				{
					p.css('height', '100%');
					attachmentPane.prepend(p);
					resizeVideoDiv(null);
				}
				else if (documentBody)
				{
					documentBody.prepend(p);
					resizeVideoDiv(null);
				}
			}
		};
		player.playVideo('timeStampVideoDiv', youTubeEventId);
	};

	var getCurrentUrlQueryValues = function ()
	{
		var vars = [], hash;
		var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
		for (var i = 0; i < hashes.length; i++)
		{
			hash = hashes[i].split('=');
			vars.push(hash[0]);
			vars[hash[0]] = hash[1];
		}
		return vars;
	};

	var updateEventDropDown = function ()
	{
		if (minutesBuild)
		{
			$('#multiVideoDropDown').remove();

			var events = CivicWeb.Integration.Video.getEvents();
			var eventDropDown = $('<select/>').attr({ 'id': 'multiVideoDropDown', 'width': (videoWidth - 2) + 'px' }).css({ 'width': (videoWidth - 2) + 'px', 'max-width': (videoWidth - 2) + 'px', 'margin': '0', 'padding': '0' }).change(function () { var currentEventId = $(this).val(); switchEvents(currentEventId); });
			if (events != null && events.length > 1)
			{
				for (var i = 0; i < events.length; i++)
				{
					eventDropDown.append($('<option/>').attr({ 'value': events[i].eventId }).css({ 'width': (videoWidth - 2) + 'px', 'max-width': (videoWidth - 2) + 'px' }).text(events[i].eventTitle));
				}
				eventDropDown.val(youTubeEventId);
				$('#timeStampVideoDiv').before(eventDropDown);
			}
		}
	};

	var addNewEventsAndGetNext = function(events)
	{
		var newEvent = '';
		var existingEventIds = []
		for (var i = 0; i < youTubeEvents.length; i++)
		{
			existingEventIds.push(youTubeEvents[i].eventId);
		}

		for (var j = 0; j < events.length; j++)
		{
			if (existingEventIds.indexOf(events[j].eventId) == -1)
			{
				currentVideo = j;
				youTubeEventId = events[j].eventId
				youTubeEvents = events;

				return events[j];
			}
		}

		return newEvent;
	};

	function onPlayerReady(event)
	{
		if (!isIOS)
		{
			event.target.playVideo();
		}
	};

	function onPlayerStateChange(event)
	{
		//if we hit any state change clear any search for additional events.
		clearTimeout(searchingForAdditionalEvents);

		//if the video has ended and there is another event then play the next one
		if (event.data == YT.PlayerState.ENDED)
		{
			if (currentVideo + 1 < youTubeEvents.length)
			{
				currentVideo = currentVideo + 1;
				youTubeEventId = youTubeEvents.length >= currentVideo && youTubeEvents[currentVideo].eventId != null ? youTubeEvents[currentVideo].eventId : '';

				if (youTubeEventId.length > 0)
				{
					updateEventDropDown();
					window.myPlayer.loadVideoById(youTubeEventId, 0, "large");
				}
			}
			else
			{
				getAdditionalEvents();
			}
		}
		else if (event.data == YT.PlayerState.BUFFERING)
		{
			//BUFFERING may happend anytime during the stream
			//BUFFERING happens when the stream is paused i.e. hour lunch
			//BUFFERING happens when the stream is complete
			searchingForAdditionalEvents = setTimeout(
				function ()
				{
					if (currentVideo + 1 < youTubeEvents.length)
					{
						currentVideo = currentVideo + 1;
						youTubeEventId = youTubeEvents.length >= currentVideo && youTubeEvents[currentVideo].eventId != null ? youTubeEvents[currentVideo].eventId : '';

						if (youTubeEventId.length > 0)
						{
							updateEventDropDown();
							window.myPlayer.loadVideoById(youTubeEventId, 0, "large");
						}
					}
					else
					{
						getAdditionalEvents();
					}

				}, 10000);
		}
	};

	(function ()
	{
		if (manageVideo && meetingId != null && meetingId > 0)
		{
			setUpViewCreateEventLink(meetingId);
		}

		if (manageVideo && earthChannel)
		{
			var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
			var eventer = window[eventMethod];
			var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";

			eventer(messageEvent, function (e)
			{
				var key = e.message ? "message" : "data";
				var data = e[key];
				if (data.indexOf("ECPlayerTime:") === 0)
				{
					var secs = data.split(":")[1];
					setVideoTimeStampDataCallback(itemId, secs, true);

				}
			}, false);
		}

		if (audioOnly)
		{
			$('#timeStampSyncVideo').attr({ 'title': 'Sync timestamps with recorded audio' });
			$('#timeStampVideoButton').attr({ 'title': 'Play the recorded audio' }).find('span').text('Play Audio');
		}

		if (minutesBuild)
		{
			setUpMinutesToTimeStamp(meetingId);
		}

		queryValues = getCurrentUrlQueryValues();

		isPhone = /android|webos|iphone|ipod|blackberry|iemobile|opera mini/i.test(navigator.userAgent.toLowerCase());
		isIOS = /ipad|iphone|ipod/i.test(navigator.userAgent.toLowerCase());

	})();
}

//Objects
CivicWeb.Integration.Video = {
	//Properties
	instance: null,


	createInstance: function (args)
	{
		if (this.instance)
		{
			delete this.instance;
		}
		this.instance = new CivicWeb.Integration.VideoClass(args);
	},

	getPublishedVideoUrl: function (id, f)
	{
		return this.instance.getPublishedVideoUrl(id, f);
	},

	addTimestampsAndVideoToMeetingDocument: function (meetingId, body, splitscreen)
	{
		return this.instance.addTimestampsAndVideoToMeetingDocument(meetingId, body, splitscreen);
	},

	moveVideoToAgendaFrame: function (moveBackToAttachmentFrame, i)
	{
		return this.instance.moveVideoToAgendaFrame(moveBackToAttachmentFrame, (i ? i : 1));
	},

	moveVideoToAttachmentFrame: function ()
	{
		return this.instance.moveVideoToAttachmentFrame();
	},

	addVideoButtonToPortal: function (meetingId, documentId, buttonClient)
	{
		return this.instance.addVideoButtonToPortal(meetingId, documentId, buttonClient);
	},

	getEvents: function ()
	{
		return this.instance.getEvents();
	},

	getCurrentEvent: function ()
	{
		return this.instance.getCurrentEvent();
	},

	getVideoTime: function (iframe, itemId, callback)
	{
		return this.instance.getVideoTime(iframe, itemId, callback);
	},

	getSyncMode: function ()
	{
		return this.instance.getSyncMode();
	},

	isAudioOnly: function ()
	{
		return this.instance.isAudioOnly();
	},

	isLive: function ()
	{
		return this.instance.isLive();
	},

	toggleTimeStampSyncMode: function ()
	{
		return this.instance.toggleTimeStampSyncMode();
	},

	hideVideo: function (e)
	{
		return this.instance.hideVideo(e);
	},

	convertSecondsToTimeString: function (secs, hyphens, itemId)
	{
		return this.instance.convertSecondsToTimeString(secs, hyphens, itemId);
	},

	resizeVideo: function ()
	{
		return this.instance.resizeVideo();
	},

	gotoMinutesVideoTimeStamp: function (e)
	{
		return this.instance.gotoMinutesVideoTimeStamp(e);
	},

	showPdfQuickViewVideoLink: function(meetingId, documentId)
	{
		return this.instance.showPdfQuickViewVideoLink(meetingId, documentId);
	},

		populateYouTubeVideoDropDown: function ()
		{
				return this.instance.populateYouTubeVideoDropDown();
		},

	events: {
	}
};
;
