var UI_FILEMANAGER_URL = null;
var UI_FILEMANAGER_ROOTPATH = '.';
var UI_FILEMANAGER_FILETYPE_DIRECTORY = 'directory';
var UI_FILEMANAGER_FILETYPE_FILE = 'file';
var UI_FILEMANAGER_SELECTED_ITEM = null;
var UI_FILEMANAGER_SELECTED_FILE = null;

function UI_FILEMANAGER_EDIT_ITEM(item, data) {

	data = $.extend(true, {
		name : null,
		type : UI_FILEMANAGER_FILETYPE_FILE,
		path : null
	}, data);

	if (data.name != null && data.path != null) {

		item.attr(data);
		item.html($('<div/>', {
			class : 'ui-fileManager-item-typeIcon'
		}).append($('<a/>', {
			title : data.name,
			text : data.name
		}).click(UI_FILEMANAGER_CLICK_ITEM)));
		var list = $('<ul/>', {
			class : 'ui-fileManager-list ui-fileManager-list-sub'
		});
		UI_FILEMANAGER_PREAPARE_SORTABLE(list);
		item.append(list);

		UI_FILEMANAGER_SELECT_ITEM($('.ui-fileManager-list-item[path="'
				+ data.path + '"] a'));
	}
}

function UI_FILEMANAGER_CREATE_ITEM(parent, data) {

	data = $.extend(true, {
		name : null,
		type : UI_FILEMANAGER_FILETYPE_FILE,
		static : false,
		path : null,
		toggle : false
	}, data);

	var item = null;

	if (data.name != null && data.path != null
			&& $('[path="' + data.path + '"]').length < 1) {

		item = $('<li/>', $.extend(true, {
			class : 'ui-fileManager-list-item'
		}, data));
		item.append($('<div/>', {
			class : 'ui-fileManager-item-typeIcon'
		}).append($('<a/>', {
			title : data.name,
			text : data.name
		}).click(UI_FILEMANAGER_CLICK_ITEM)));
		var file = $($(item).parents('.ui-fileManager-list-item')[0]);
		parent.children('ul').prepend(item);

		switch (data.type) {

		case UI_FILEMANAGER_FILETYPE_DIRECTORY:

			var list = $('<ul/>', {
				class : 'ui-fileManager-list ui-fileManager-list-sub'
			});
			UI_FILEMANAGER_PREAPARE_SORTABLE(list);
			item.append(list);

			UI_FILEMANAGER_REFRESH_ITEM(file);

			break;

		}

	}

	return item;

}

function UI_FILEMANAGER_DELETE_ITEM() {
	UI_FILEMANAGER_SELECTED_FILE.remove();
	UI_FILEMANAGER_DESELECT_ITEM();

}

function UI_FILEMANAGER_PREAPARE_SORTABLE(item) {

	$(item).sortable(
			{
				opacity : 0.6,
				disabled : false,
				cursor : 'move',
				placeholder : 'ui-fileManager-list-placeholder',
				connectWith : '.ui-fileManager-list-sub',
				cancel : ".ui-fileManager-list-disabled",
				dropOnEmpty : false,
				start : function(event, ui) {

				},
				over : function(event, ui) {
				},
				stop : function(event, ui) {

				},
				update : function(event, ui) {

					var from = $(ui.item).attr('path');
					var to = $(ui.item).parent().parent(
							'.ui-fileManager-list-item').attr('path');

					if (from != to && from != null && to != null) {


						$.post(UI_FILEMANAGER_URL, {
							'move' : true,
							'path' : {
								'from' : from,
								'to' : to
							}
						}, function(data) {
							alert(data);
							if (data.error != null) {
								alert('Cannot move...');
								return;
							} else {

								$(ui.item).attr('path', data.path);

							}

						}, 'JSON');

					}

				}
			});

}

function UI_FILEMANAGER_CLICK_ITEM() {

	$('.ui-fileManager-content').html("");

	if (UI_FILEMANAGER_IS_SELECTED(this)) {
		// Tritt wenn das Element makiert ist und angeklickt wird.

		UI_FILEMANAGER_SELECTED_FILE.attr('toggle', false);
		UI_FILEMANAGER_REFRESH_ITEM(UI_FILEMANAGER_SELECTED_FILE);
		UI_FILEMANAGER_DESELECT_ITEM(UI_FILEMANAGER_SELECTED_FILE);

	} else {
		// Tritt wenn das Element makiert wird.

		UI_FILEMANAGER_SELECT_ITEM(this);

		if (UI_FILEMANAGER_SELECTED_FILE.attr('static') == 'false') {

			if (UI_FILEMANAGER_SELECTED_FILE.attr('type') == UI_FILEMANAGER_FILETYPE_DIRECTORY)
				UI_FILEMANAGER_REFRESH_ITEM(UI_FILEMANAGER_SELECTED_FILE, true);
		}

	}

}

function UI_FILEMANAGER_GET_ACTION(attributes) {

	if (UI_FILEMANAGER_URL == null)
		return false;

	var defaultAttributes = {
		data : {
			include : true,
			action : null
		},
		success : null,
		complete : null

	};

	attributes = $.extend(true, defaultAttributes, attributes);

	$.post(UI_FILEMANAGER_URL, attributes.data, function(data) {

		if (attributes.success != null)
			attributes.success(data);

	}, "json").complete(function() {

		if (attributes.complete != null)
			attributes.complete();

	}).error(function(xhr, status, errorThrown) {
		alert(errorThrown + '\n' + status + '\n' + xhr.statusText);
	});
}

function UI_FILEMANAGER_IS_SELECTED(item) {
	return $(item).hasClass('ui-fileManager-item-selected');
}
function UI_FILEMANAGER_DESELECT_ITEM() {

	if (UI_FILEMANAGER_SELECTED_ITEM != null)
		UI_FILEMANAGER_SELECTED_ITEM
				.removeClass('ui-fileManager-item-selected');

	$('.ui-fileManager .ui-menuStrip li[id]').addClass(
			'ui-menuStrip-item-disabled');

	UI_FILEMANAGER_SELECTED_FILE = null;
	UI_FILEMANAGER_SELECTED_ITEM = null;

}

function UI_FILEMANAGER_REFRESH_ITEM(item, toggle) {

	if ((item.attr('static') == 'true') || toggle == true
			|| item.children(".ui-fileManager-list-sub").html() == '') {

		item.attr('toggle', toggle);

		item.children('.ui-fileManager-item-typeIcon').addClass(
				'ui-fileManager-item-loadIcon');

		UI_FILEMANAGER_GET_ACTION({
			data : {
				action : "fileList",
				file : {

					name : item.attr('name'),
					type : item.attr('type'),
					path : item.attr('path')

				}
			},
			success : function(data) {

				item.children(".ui-fileManager-list-sub").html("");

				$.each(data, function(i, v) {

					UI_FILEMANAGER_CREATE_ITEM(item, v);

				});

			},
			complete : function() {

				item.children('.ui-fileManager-item-typeIcon').removeClass(
						'ui-fileManager-item-loadIcon');

			}
		});

	} else {

		if (item.attr('path') != UI_FILEMANAGER_ROOTPATH)
			item.children(".ui-fileManager-list-sub").html('');

	}

	item.children('a').text(item.attr('name'));

}

function UI_FILEMANAGER_SELECT_ITEM(item) {

	if (UI_FILEMANAGER_SELECTED_ITEM == $(item)) {

		UI_FILEMANAGER_SELECTED_ITEM
				.removeClass('ui-fileManager-item-selected');
		UI_FILEMANAGER_SELECTED_ITEM = null;
		UI_FILEMANAGER_SELECTED_FILE = null;

	} else if (UI_FILEMANAGER_SELECTED_ITEM != null) {
		UI_FILEMANAGER_SELECTED_ITEM
				.removeClass('ui-fileManager-item-selected');
	}
	UI_FILEMANAGER_SELECTED_ITEM = $(item);
	UI_FILEMANAGER_SELECTED_FILE = $($(item).parents(
			'.ui-fileManager-list-item')[0]);
	$(item).addClass('ui-fileManager-item-selected');

	$('#ui-fileManager-item-create').addClass('ui-menuStrip-item-disabled');
	$('#ui-fileManager-item-edit').addClass('ui-menuStrip-item-disabled');
	$('#ui-fileManager-item-open').addClass('ui-menuStrip-item-disabled');
	$('#ui-fileManager-item-rename').addClass('ui-menuStrip-item-disabled');
	$('#ui-fileManager-item-upload').addClass('ui-menuStrip-item-disabled');
	$('#ui-fileManager-item-delete').addClass('ui-menuStrip-item-disabled');
	$('#ui-fileManager-item-info').addClass('ui-menuStrip-item-disabled');

	if (UI_FILEMANAGER_SELECTED_FILE.attr("type") == UI_FILEMANAGER_FILETYPE_DIRECTORY) {

		$('#ui-fileManager-item-create').removeClass(
				'ui-menuStrip-item-disabled');
		$('#ui-fileManager-item-upload').removeClass(
				'ui-menuStrip-item-disabled');
		if (UI_FILEMANAGER_SELECTED_FILE.attr('static') == 'false')
			$('#ui-fileManager-item-rename').removeClass(
					'ui-menuStrip-item-disabled');
		if (UI_FILEMANAGER_SELECTED_FILE.attr('static') == 'false')
			$('#ui-fileManager-item-delete').removeClass(
					'ui-menuStrip-item-disabled');
		$('#ui-fileManager-item-info')
				.removeClass('ui-menuStrip-item-disabled');
	}

	if (UI_FILEMANAGER_SELECTED_FILE.attr("type") == UI_FILEMANAGER_FILETYPE_FILE) {
		$('#ui-fileManager-item-edit')
				.removeClass('ui-menuStrip-item-disabled');
		$('#ui-fileManager-item-open')
				.removeClass('ui-menuStrip-item-disabled');
		$('#ui-fileManager-item-rename').removeClass(
				'ui-menuStrip-item-disabled');
		$('#ui-fileManager-item-delete').removeClass(
				'ui-menuStrip-item-disabled');
		$('#ui-fileManager-item-info')
				.removeClass('ui-menuStrip-item-disabled');
	}

	return item;
}

function UI_FILEMANAGER_INIT() {

	UI_FILEMANAGER_GET_ACTION({
		data : {
			action : 'fileList',
			file : {

				name : 'root',
				type : UI_FILEMANAGER_FILETYPE_DIRECTORY,
				path : UI_FILEMANAGER_ROOTPATH

			}
		},
		success : function(data) {

			var list = $('.ui-fileManager-list-item[path="'
					+ UI_FILEMANAGER_ROOTPATH + '"]');

			$.each(data, function(i, v) {

				UI_FILEMANAGER_CREATE_ITEM(list, v);
			});

		}
	});

	// ##################################################################################################

	$('#ui-fileManager-item-open').click(
			function() {

				if (UI_FILEMANAGER_SELECTED_FILE != null) {

					window.open(PAGE["rootPath"]
							+ UI_FILEMANAGER_SELECTED_FILE.attr("path"),
							"editWindow", "width=640,height=480,location=yes");

				}

			});

	$('#ui-fileManager-item-create')
			.click(
					function() {

						var item = UI_FILEMANAGER_SELECTED_FILE;

						if (item.attr("type") == UI_FILEMANAGER_FILETYPE_DIRECTORY) {

							var path = UI_FILEMANAGER_ROOTPATH;
							if (item != null)
								path = item.attr('path');
							else
								return false;

							$
									.mbox(
											{

												key : 'ui-fileManager-item-create',
												dialogType : 'saveAbort',
												title : $(
														'#ui-fileManager-item-create a')
														.text(),
												closeAble : false,
												style : {
													width : '400px'
												},
												request : {
													url : UI_FILEMANAGER_URL,
													data : {
														"clearPage" : true,
														"create" : true,
														"path" : path
													}
												},

												events : {

													dialogResult : {

														save : function() {

															if ($(
																	'form[name="createForm"] [name="fileNameTextBox"]')
																	.val() == "")
																$(
																		'form[name="createForm"]')
																		.nfications()
																		.show(
																				"nameEmpty");
															else {

																var data = {

																	clearPage : true,
																	create : true,
																	createButton : true,
																	fileType : $(
																			'form[name="createForm"] [name="fileTypeSelect"]')
																			.val(),
																	fileName : $(
																			'form[name="createForm"] [name="fileNameTextBox"]')
																			.val(),
																	path : $(
																			'form[name="createForm"] [name="filePathTextBox"]')
																			.val()

																}

																$
																		.post(
																				UI_FILEMANAGER_URL,
																				data,
																				function(
																						data) {

																					if (data.error == null) {

																						$(
																								'form[name="createForm"]')
																								.nfications()
																								.show(
																										'true');
																						UI_FILEMANAGER_CREATE_ITEM(
																								item,
																								{
																									name : data.name,
																									type : data.type,
																									path : data.path
																								});
																					} else {
																						$(
																								'form[name="createForm"]')
																								.nfications()
																								.show(
																										'false');
																						alert(data.error);
																					}

																				},
																				'json');

															}

														},
														abort : function() {
														}
													}
												}

											}).show();

						}

					});

	$('#ui-fileManager-item-rename')
			.click(
					function() {

						var item = UI_FILEMANAGER_SELECTED_FILE;
						var path = UI_FILEMANAGER_ROOTPATH;
						if (item != null)
							path = item.attr('path');
						else
							return false;

						$
								.mbox(
										{

											key : 'ui-fileManager-item-rename',
											dialogType : 'saveAbort',
											title : $(
													'#ui-fileManager-item-rename a')
													.text(),
											closeAble : false,
											style : {
												width : '400px'
											},
											request : {
												url : UI_FILEMANAGER_URL,
												data : {
													"rename" : true,
													"path" : path
												}
											},

											events : {

												dialogResult : {

													save : function() {

														if ($(
																'form[name="renameForm"] [name="newFileNameTextBox"]')
																.val() == "")
															$(
																	'form[name="renameForm"]')
																	.nfications()
																	.show(
																			"nameEmpty");
														else {

															var data_ = {

																clearPage : true,
																rename : true,
																renameButton : true,
																newFileName : $(
																		'form[name="renameForm"] [name="newFileNameTextBox"]')
																		.val(),
																currentFileName : $(
																		'form[name="renameForm"] [name="currentFileNameTextBox"]')
																		.val(),
																path : $(
																		'form[name="renameForm"] [name="filePathHidden"]')
																		.val()

															};

															$
																	.post(
																			UI_FILEMANAGER_URL,
																			data_,
																			function(
																					data) {

																				if (data.error == null) {
																					$(
																							'form[name="renameForm"]')
																							.nfications()
																							.show(
																									"true");

																					UI_FILEMANAGER_EDIT_ITEM(
																							item,
																							{
																								name : data['name'],
																								type : data['type'],
																								path : data['path']
																							});

																					$(
																							'form[name="renameForm"] [name="currentFileNameTextBox"]')
																							.val(
																									$(
																											'form[name="renameForm"] [name="newFileNameTextBox"]')
																											.val());
																					$(
																							'form[name="renameForm"] [name="newFileNameTextBox"]')
																							.val(
																									'');

																				} else {
																					$(
																							'form[name="renameForm"]')
																							.nfications()
																							.show(
																									"false");
																					alert(data);
																				}

																			},
																			'JSON');

														}

													},
													abort : function() {
													}
												}
											}

										}).show();

					});

	$('#ui-fileManager-item-upload').click(function() {

		var item = UI_FILEMANAGER_SELECTED_FILE;
		var path = UI_FILEMANAGER_ROOTPATH;
		if (item != null)
			path = item.attr('path');
		else
			return false;

		if (item.attr('type') == 'directory')
			$.mbox({

				key : 'ui-fileManager-item-upload',
				dialogType : 'abort',
				title : $('#ui-fileManager-item-upload a').text(),
				closeAble : false,
				style : {
					width : '400px'
				},
				request : {
					url : UI_FILEMANAGER_URL,
					data : {
						"upload" : true,
						"path" : path
					}
				}

			}).show();

	});

	$('#ui-fileManager-item-delete').click(function() {

		var item = UI_FILEMANAGER_SELECTED_FILE;
		var path = UI_FILEMANAGER_ROOTPATH;
		if (item != null)
			path = item.attr('path');
		else
			return false;

		$.post(UI_FILEMANAGER_URL, {
			"delete" : true,
			"path" : path
		}, function(data) {
			// Datei gelöscht...
		}).complete(function() {

			UI_FILEMANAGER_DELETE_ITEM();

		}).error(function(xhr, status, errorThrown) {
			alert(errorThrown + '\n' + status + '\n' + xhr.statusText);
		});

	});

	$('#ui-fileManager-item-edit')
			.click(
					function() {

						var item = UI_FILEMANAGER_SELECTED_FILE;
						var path = UI_FILEMANAGER_ROOTPATH;
						if (item != null)
							path = item.attr('path');
						else
							return false;

						if (item.attr('type') == 'file')
							$
									.mbox(
											{

												key : 'ui-fileManager-item-edit',
												dialogType : 'saveAbort',
												title : $(
														'#ui-fileManager-item-edit a')
														.text(),
												closeAble : false,
												resizeAble : true,
												style : {
													width : '400px'
												},
												request : {
													url : UI_FILEMANAGER_URL,
													data : {
														"edit" : true,
														"path" : path
													}
												},

												events : {

													dialogResult : {

														save : function() {

															if (tinyMCE
																	.get('editFileContent'))
																content_ = tinyMCE
																		.get(
																				'editFileContent')
																		.getContent();
															else
																content_ = $(
																		'#editFileContent')
																		.val();

															var data = {

																clearPage : true,
																edit : true,
																editButton : true,
																content : content_,
																path : $(
																		'form[name="editFileForm"] [name="filePathTextBox"]')
																		.val()

															};

															$
																	.post(
																			UI_FILEMANAGER_URL,
																			data,
																			function(
																					html) {

																				if (html == "")
																					$(
																							'form[name="editFileForm"]')
																							.nfications()
																							.show(
																									"true");
																				else {
																					$(
																							'form[name="editFileForm"]')
																							.nfications()
																							.show(
																									"false");

																				}

																			});

														},
														abort : function() {
														}
													}
												}

											}).show();

					});

	$('#ui-fileManager-item-info').click(function() {

		var item = UI_FILEMANAGER_SELECTED_FILE;
		var path = UI_FILEMANAGER_ROOTPATH;
		if (item != null)
			path = item.attr('path');
		else
			return false;

		$.mbox({

			key : 'ui-fileManager-item-info',
			dialogType : 'close',
			title : $('#ui-fileManager-item-info a').text(),
			closeAble : false,
			style : {
				width : '460px'
			},
			request : {
				url : UI_FILEMANAGER_URL,
				data : {
					"info" : true,
					"path" : path
				}
			}

		}).show();

	});

	UI_FILEMANAGER_PREAPARE_SORTABLE($('.ui-fileManager-list-sub'));

}

