
function showUploadDocumentOverlay()
{
	$('#CreateDocumentOverlay').find('form')[0].reset();
	$('#CreateDocumentOverlay').show();
	$('#CreateDocumentOverlay input[name=DocumentTitle]').focus();
}
function showCreateTextDocumentOverlay()
{
	$('#CreateTextDocumentOverlay').find('form')[0].reset();
	$('#CreateTextDocumentOverlay').show();
	$('#CreateTextDocumentOverlay input[name=TextDocumentTitle]').focus();
}
function showDataWarehouseOverlay()
{
	$('#CreateDataWarehouseOverlay .page').hide();
	$('#CreateDataWarehouseOverlay .page1').show();
	$('#CreateDataWarehouseOverlay .page2 .preview').html('');
	$('#CreateDataWarehouseOverlay .page2 .rowcount').html('');
	$('#CreateDataWarehouseOverlay').find('form')[0].reset();
	$('#CreateDataWarehouseOverlay').show();
	$('#CreateDataWarehouseOverlay input[name=title]').focus();
	$('#CreateDataWarehouseOverlay .glassPane').remove();
}
function showNewFolderOverlay()
{
	$('#NewFolderOverlay').find('form')[0].reset();
	$('#NewFolderOverlay').show();	
	$('#NewFolderOverlay input[name=FolderName]').focus();
}

function setupFileManagementOverlays() {
	var createDocumentOverlay = $($('#CreateDocumentOverlay')[0]);
	if (createDocumentOverlay == null) throw Error("CreateDocumentOverlay: null element");
	$(createDocumentOverlay).find(".check").bind("click", function () {
		$($('#CreateDocumentOverlay')[0]).trigger("submit");
	});	
	createDocumentOverlay.bind("submit", createDocument);
	
	var createTextDocumentOverlay = $($('#CreateTextDocumentOverlay')[0]);
	if (createTextDocumentOverlay == null) throw Error("CreateTextDocumentOverlay: null element");
	$(createTextDocumentOverlay).find(".check").bind("click", function () {
		$($('#CreateTextDocumentOverlay')[0]).trigger("submit");
	});	
	createTextDocumentOverlay.bind("submit", createTextDocument);
	
	var createDataWarehouseOverlay = $($('#CreateDataWarehouseOverlay')[0]);
	if (createDataWarehouseOverlay == null) throw Error("CreateDataWarehouseOverlay: null element");
	$(createDataWarehouseOverlay).find(".page1 .next").bind("click", createDataWarehousePage1);	
	$(createDataWarehouseOverlay).find(".page2 .next").bind("click", createDataWarehousePage2);	
	
	var newFolderOverlay = $($('#NewFolderOverlay')[0]);
	if (newFolderOverlay == null) throw Error("NewFolderOverlay: null element");
	$(newFolderOverlay).find(".check").bind("click", function () {
		$($('#NewFolderOverlay')[0]).trigger("submit");
	});
	
	newFolderOverlay.bind("submit", newFolder);
	
	var editDocumentOverlay = $($('#EditDocumentOverlay')[0]);
	if (editDocumentOverlay == null) throw Error("EditDocumentOverlay: null element");
	$(editDocumentOverlay).find(".check").bind("click", function () {
		$($('#EditDocumentOverlay')[0]).trigger("submit");
	});
	
	editDocumentOverlay.bind("submit", editDocument);
	

	$('.draggableDocument').draggable({
		helper: function() {return $("<div><img src='"+_PORTAL_BASE_URL+"images2/newspaper_go.png' /></div>");},
		revert: 'invalid',
		cursorAt: {left:8,top:8},
		handle: '.draggableHandle'
	});
	$('.draggableFolder').draggable({
		helper: function() {return $("<div><img src='"+_PORTAL_BASE_URL+"images2/folder_go.png' /></div>");},
		revert: 'invalid',
		cursorAt: {left:8,top:8},
		handle: '.draggableHandle'
	});

	$('.droppableFolder').droppable({
		accept: '.draggableDocument,.draggableFolder',
		activeClass: 'droppableFolder-active',
		hoverClass: 'droppableFolder-hover',
		drop: function(event, ui) {
			if (ui.draggable.hasClass('.draggableDocument')) {
				var sourceId = ui.draggable.find('input.DocumentId').val();
				var destId = $(this).find('input[name=folderId]').val();
				moveDocument(sourceId, destId);
			} else {
				var sourceId = ui.draggable.find('input[name=folderId]').val();
				var destId = $(this).find('input[name=folderId]').val();
				moveFolder(sourceId, destId);
			}
		}
	});
}

function toggleShowDeletedFiles(elm) {
	elm = $(elm);
	var busyIcon = portal.createElementBusyIndicator(elm);
	elm.attr('disabled', true);
	
	var show = elm.is(':checked');
	
    var data = {
            command : "application.dispatcher.person.settings.SetBooleanPreferenceDispatcher",
            mode: "json",
            preference: 'FileViewShowDeleted',
            value: show
        };

    portal.ajax({
        data: data,
        success: function() {
    		elm.attr('checked', show?'checked':'');
    		
    		document.location.reload();
        },
        finallyDo:function() {
        	elm.attr('disabled', false);
        	busyIcon.fadeOut(200, function(){$(this).remove();});
        }
    });
}

function showEditDocument(id) {
	$('#EditDocumentOverlay').show();
	$('#EditDocumentOverlay .DocumentId').val(id);
	$('#EditDocumentOverlay .DocumentVersion').val($("#f" + id + "_version").val());
	$('#EditDocumentOverlay .DocumentTitle').val($("#f" + id + "_title").val()).focus();
	$('#EditDocumentOverlay .DocumentDesc').val($("#f" + id + "_desc").val());

}

function editDocument() {
	var cdo = $($('#EditDocumentOverlay')[0]);
	
	function onSuccess() {
		document.location.reload();
	}
	function executeNoMatterWhat() {
		$('#EditDocumentOverlay').find('.close').click();
	}

	$.ajaxFileUpload(
			{
				url: document.location.href, 
				data: {
					command: "application.dispatcher.document.UpdateDocumentDispatcher",
					setdocfile_docid: cdo.find('.DocumentId').val(),
					setdocfile_docversion: cdo.find('.DocumentVersion').val(),
					setdocfile_title: cdo.find('.DocumentTitle').val(),
					setdocfile_desc: cdo.find('.DocumentDesc').val(),
					mode: "json"
				},
				secureuri:false,
				fileElementId:'EditDocumentFile',
				dataType: "json",
				success: portal.createAjaxResponseHandler(onSuccess, null, executeNoMatterWhat),
				error: portal.createAjaxFinallyWrapper(portal.defaultAjaxErrorHandler, executeNoMatterWhat)
			}
		);
}

function newFolder() {
	var data = {
		command: "application.dispatcher.folder.CreateFolderDispatcher",
		FolderName: $('#NewFolderOverlay .FolderName').val(),
		ParentFolderId: $('#NewFolderOverlay .FolderId').val(),
		mode: "json"
	};
	portal.ajax({
		data: data,
		success: function() {
			document.location.reload();
		}
	});
}

function createTextDocument() {
	
	var reallyCreateTextDocument = function() {
		var cdo = $($('#CreateTextDocumentOverlay')[0]);
		function onSuccess() {
			document.location.reload();
		}
		function executeNoMatterWhat() {
			$('#CreateTextDocumentOverlay').find('.close').click();
		}
		var data = {
			command: "application.dispatcher.document.CreateDocumentDispatcher",
			mode: "json",
			title: cdo.find('.DocumentTitle').val(),
			description: cdo.find('.DocumentDesc').val(),
			folder: cdo.find('.FolderId').val(),
			text: cdo.find('.TextDocumentContent').val()
		};
		portal.ajax({
			data: data,
			success: function() {
				document.location.reload();
			}
		});
	}
	
	var cdo = $('#CreateTextDocumentOverlay')[0];
	
	var commandData = {
			command: "application.dispatcher.document.DuplicateNameCheckDispatcher",
			mode: "json",
			name: $(cdo).find('.DocumentTitle').val(),
			folder: $(cdo).find('.FolderId').val()
	};
	
	portal.ajax({
			data: commandData,
			success: function(response) {
				var proceed = true;
				if(response.duplicate.duplicate == true) {
					proceed = confirm("A document with this title already exists. Do you wish to proceed?");
				}
				if(proceed) {
					reallyCreateTextDocument();
				}
			}
	});
}


function createDocument() {
	
	var reallyCreateDocument = function() {
		
		var commandData = {
				command: "application.dispatcher.document.CreateDocumentDispatcher",
				mode: "json",
				title: $(cdo).find('.DocumentTitle').val(),
				description: $(cdo).find('.DocumentDesc').val(),
				folder: $(cdo).find('.FolderId').val()
			};
			
			function onUploadSuccess() {
				$('#CreateDocumentOverlay').find('.close').click(); // why bother?
				document.location.reload();
			}
			function executeNoMatterWhat() {
				$('#CreateDocumentOverlay').find('.close').click();
			}
			
			$.ajaxFileUpload(
					{
						url:_PORTAL_HOST_URL, 
						data: commandData,
						secureuri:false,
						fileElementId:'CreateDocumentFile',
						dataType: "json",
						success: portal.createAjaxResponseHandler(onUploadSuccess, null, executeNoMatterWhat),
						error: portal.createAjaxFinallyWrapper(portal.defaultAjaxErrorHandler, executeNoMatterWhat)
					}
				);
	};
	
	var cdo = $('#CreateDocumentOverlay')[0];
	
	var commandData = {
			command: "application.dispatcher.document.DuplicateNameCheckDispatcher",
			mode: "json",
			name: $(cdo).find('.DocumentTitle').val(),
			folder: $(cdo).find('.FolderId').val()
	};
	
	portal.ajax({
			data: commandData,
			success: function(response) {
				var proceed = true;
				if(response.duplicate.duplicate == true) {
					proceed = confirm("A document with this title already exists. Do you wish to proceed?");
				}
				if(proceed) {
					reallyCreateDocument();
				}
			}
	});
}



function createDataWarehousePage1() {
	
	
	function onUploadSuccess(data) {
		var overlay = $('#CreateDataWarehouseOverlay');
		
		overlay.find('.glassPane').remove();
		
		overlay.find('.page1').hide();
		var page = overlay.find('.page2');
		page.fadeIn();
		data = data.datawarehouse;
		
		var head = page.find('.preview').append('<thead />').find('thead');
		head = head.append('<tr />');
		head.append('<th style="font-weight: normal; text-align: left; background-color: #999999; border: none; border-right: solid 1px black">Headers:</th>'); // used to display row description
		for (var i = 0; i < data.headers.length; ++i) {
			head.append('<th>' + data.headers[i] + '</th>');
		}
		
		var firstRow = $('<tbody/>').append('<tr />').find('tr');
		firstRow.append('<td style="font-weight: normal; text-align: left; background-color: #999999; border: none; border-right: solid 1px black">First Row:</td>');
		for (var i = 0; i < data.firstRow.length; ++i) {
			firstRow.append('<td>' + data.firstRow[i] + '</td>');
		}
		page.find('.preview').append(firstRow.closest('tbody'));
		
		var lastRow = $('<tbody/>').append('<tr />').find('tr');
		lastRow.append('<td style="font-weight: normal; text-align: left; background-color: #999999; border: none; border-right: solid 1px black">Last Row:</td>');
		for (var i = 0; i < data.lastRow.length; ++i) {
			lastRow.append('<td>' + data.lastRow[i] + '</td>');
		}
		page.find('.preview').append(lastRow.closest('tbody'));
		
		page.find('.rowcount').text(data.rowCount);
	}
	
	var doAjaxFileUpload = function(callback) {
		
		var cdo = $('#CreateDataWarehouseOverlay');
		
		var commandData = {
			command: "application.dispatcher.datawarehouse.CreateDataWarehouseDispatcher",
			mode: "json",
			page: 1,
			title: cdo.find('input[name=title]').val(),
			description: cdo.find('textarea[name=description]').val(),
			folder: cdo.find('input[name=folder]').val(),
			fileType: "fileUpload"
		};

		portal.maybeShowAjaxInProgress();
		
		$.ajaxFileUpload({
			url:_PORTAL_HOST_URL,
			data: commandData,
			secureuri:false,
			fileElementId: 'CreateDataWarehouseFile',
			dataType: "json",
			success: portal.createAjaxResponseHandler(callback, function(data, status, request) {
				cdo.find('.glassPane').remove();
				portal.defaultAjaxFailureHandler(data, status, request);
			})
		});
	};
	
	var cdo = $('#CreateDataWarehouseOverlay');
	
	var gp = $('<div />').addClass('glassPane').css({
		position: 'absolute',
		display: 'block',
		left: 0,
		top: cdo.find('.close').height(),
		width: cdo.width(),
		height: cdo.height()-cdo.find('.close').height(),
		backgroundColor: 'black',
		opacity: 0.2
	});
	cdo.append(gp);

	portal.ajax({
			data: {
				command: "application.dispatcher.document.DuplicateNameCheckDispatcher",
				mode: "json",
				name: cdo.find('input[name=title]').val(),
				folder: cdo.find('input[name=folder]').val()
			},
			success: function(response) {
				var proceed = true;
				if(response.duplicate.duplicate == true) {
					proceed = confirm("A document with this title already exists. Do you wish to proceed?");
				}
				if(proceed) {
					doAjaxFileUpload(onUploadSuccess);
				} else {
					cdo.find('.glassPane').remove();
				}
			},
			failure: function(data, status, request) {
				cdo.find('.glassPane').remove();
				portal.defaultAjaxFailureHandler(data, status, request);
			}
	});
	
}
function createDataWarehousePage2() {
	
	var commandData = {
		command: "application.dispatcher.datawarehouse.CreateDataWarehouseDispatcher",
		mode: "json",
		page: 2
	};
	
	portal.ajax({
		data: commandData,
		success: function(response) {
			window.open(_PORTAL_HOST_URL + '/teams/' + response.datawarehouse.group + '/datawarehouse/' + response.datawarehouse.datawarehouse + '', 'DataWarehouse' + response.datawarehouse.datawarehouse, '');
			document.location.reload();
		}
	});
}

function deleteDocument(id)
{
	if (!confirm("Are you sure you want to delete this document?"))
		return;
	
	var data = {
		command: "application.dispatcher.document.DeleteDocumentDispatcher",
		mode: "json",
		document: id
	};
	
	portal.ajax({
		data: data,
		success: function() {
			var d = $('#Document'+id);
			d.closest('TBODY')
				.addClass('deleted')
				.find('.fileMenu').hide();
			
			if (!$('#toggleShowDeletedCheckbox').is(':checked')) {
				d.closest('TBODY').fadeOut();
			}
		}
	});
}

function moveDocument(id, destination)
{
	var data = {
		command: "application.dispatcher.document.MoveDocumentDispatcher",
		mode: "json",
		document: id,
		destination: destination
	};
	
	portal.ajax({
		data: data,
		success: function() {
			$('#Document'+id+'').fadeOut(function() {
				$(this).remove();
			});
		}
	});
}

function renameDocument(id, options)
{
	var name = prompt("Rename to: ");
	if (!name)
		return;
	
	var data = {
		command: "application.dispatcher.document.MoveDocumentDispatcher",
		mode: "json",
		document: id,
		name: name
	};
	
	portal.ajax({
		data: data,
		success: function(data) {
			$("#f" + id + "_version").val(data.document.version);
			$("#f" + id + "_title").val(data.document.title);
			$('#Document'+id+' .documentTitle').fadeOut(function() {
				$(this).text(name).fadeIn();
			});
		}
	});
}

function deleteFolder(id)
{
	if (!confirm("Are you sure you want to delete this folder?"))
		return;
	
	var data = {
		command: "application.dispatcher.folder.DeleteFolderDispatcher",
		mode: "json",
		folder: id
	};
	
	portal.ajax({
		data: data,
		success: function() {
			var d = $('#Folder'+id);
			d.closest('TBODY')
				.addClass('deleted')
				.find('.fileMenu').hide();
			
			if (!$('#toggleShowDeletedCheckbox').is(':checked')) {
				d.closest('TBODY').fadeOut();
			}
		}
	});
}
function moveFolder(id, destination)
{
	var data = {
		command: "application.dispatcher.folder.MoveFolderDispatcher",
		mode: "json",
		folder: id,
		destination: destination
	};
	
	portal.ajax({
		data: data,
		success: function() {
			$('#Folder'+id+'').fadeOut(function() {
				$(this).remove();
			});
		}
	});
}
function renameFolder(id)
{
	var name = prompt("Rename to: ");
	if (!name)
		return;
	
	var data = {
		command: "application.dispatcher.folder.MoveFolderDispatcher",
		mode: "json",
		folder: id,
		name: name
	};
	
	portal.ajax({
		data: data,
		success: function() {
			$('#Folder'+id+' .folderTitle').fadeOut(function() {
				$(this).text(name).fadeIn();
			});
		}
	});
}

function hideDocumentHistory(documentId) {
	$(".DocumentHistory"+documentId).each( function () {
		$(this).hide();	
	});
	$(".DocumentComment"+documentId).each( function () {
		$(this).hide();	
	});
	$('#Document'+documentId+' .showHistory').show();
	$('#Document'+documentId+' .hideHistory').hide();
}

function showDocumentHistory(documentId) {
	$(".DocumentHistory"+documentId).each( function () {
		$(this).show();	
	});
	$(".DocumentComment"+documentId).each( function () {
		$(this).show();	
	});
	$('#Document'+documentId+' .showHistory').hide();
	$('#Document'+documentId+' .hideHistory').show();

}


