var systemPath = "system/";
function getData(file, params, isArray) {
	var returnData;
	$.ajax({
		type: "GET",
		async: false,
		cache: false,
		url: systemPath+file,
		data: (params != null) ? params : "",
		dataType: (isArray == true) ? "json" : "",
		success: function(data){ returnData = data; },
		error: function(data){ returnData = "REQUEST_ERROR_"+data.status; }
	}); return returnData;
}

// UTILS
var XUtils = {
	getCenter: function(fromSize, size) { return (fromSize-size)/2; },
	getDocSize: function() { return { width: $(document).width(), height: $(document).height() } },
	getDocCenter: function(size) { var docSize = XUtils.getDocSize(); return { x: XUtils.getCenter(docSize.width, size.width), y: XUtils.getCenter(docSize.height, size.height) } },
	setBGPos: function() { var position = XUtils.getDocCenter({ width: screen.width, height: screen.height }); $("body").css({ "background-position": position.x+"px "+position.y+"px"}); },
	setTask: function setTask() { var task = $("#Bottom").find("#TaskBar"); var inner = task.find(".tInner"); var icons = task.find(".icons"); inner.width(task.width()-icons.outerWidth(true)-8); },
	setCursor: function(c, obj) { if(obj != undefined) { obj.css("cursor", c); } else { $("body").css("cursor", c); } },
	inputReplace: function(inputObj, replacement, whenNotEmpty) {
		if(whenNotEmpty == true) {
			if($(inputObj).val() == "") {
				$(inputObj).val(replacement);
			}
		} else {
			$(inputObj).val(replacement);
		}
	},
	
	getCursorPos: function(pos, size, thickness) {
		var cursor = "none";
		
		// NORTH-WEST
		if(pos.x <= thickness.corner && pos.y < thickness.corner) cursor = "NW";
		// NORTH
		if(pos.x > thickness.corner && pos.x <= (size.width-thickness.corner) && pos.y < thickness.border) cursor = "N";
		// NORTH-EAST
		if(pos.x >= (size.width-thickness.corner) && pos.y <= thickness.corner) cursor = "NE";
		// WEST
		if(pos.x < thickness.border && pos.y >= thickness.corner && pos.y <= (size.height-thickness.corner)) cursor = "W";
		// EAST
		if(pos.x >= (size.width-thickness.border) && pos.y >= thickness.corner && pos.y <= (size.height-thickness.corner)) cursor = "E";
		// SOUTH-WEST
		if(pos.x <= thickness.corner && pos.y >= (size.height-thickness.corner)) cursor = "SW";
		// SOUTH
		if(pos.x > thickness.corner && pos.x <= (size.width-thickness.corner) && pos.y >= (size.height-thickness.border)) cursor = "S";
		// SOUTH-EAST
		if(pos.x >= (size.width-thickness.corner) && pos.y >= (size.height-thickness.corner)) cursor = "SE";
		
		return cursor;
	},
	
	adjustOffset: function(obj, options) {
		if(options.x != undefined) obj.offset({ left: options.x });
		if(options.y != undefined) obj.offset({ top: options.y });
		
		if(options.minWidth != undefined) if(obj.offset().left >= options.minWidth) obj.offset({ left: options.minWidth });
		if(options.minHeight != undefined) if(obj.offset().top >= options.minHeight) obj.offset({ top: options.minHeight });
		
		if(obj.offset().top <= 0) obj.offset({ top: 0 });
		if(options.maxHeightOffset != undefined) if(obj.offset().top >= options.maxHeightOffset) obj.offset({ top: options.maxHeightOffset });
	},
	adjustSize: function(obj, options) {
		if(options.width != undefined) obj.width(options.width);
		if(options.height != undefined) obj.height(options.height);
		
		if(options.minWidth != undefined) if(obj.width() <= options.minWidth) obj.width(options.minWidth);
		if(options.minHeight != undefined) if(obj.height() <= options.minHeight) obj.height(options.minHeight);
	}
};

// JQUERY FUNCTIONS
var XEvent = {
	Fade: function(obj, duration, opacity, callback) {
		obj.stop();
		if(callback != undefined) {
			obj.fadeTo(duration, opacity, callback);
		} else {
			obj.fadeTo(duration, opacity);
		}
	}
};

(function($) {
	$.fn.XEvent = function(options) {
		if(options.init != undefined) options.init();
		if(options.mouseenter != undefined) this.mouseenter(options.mouseenter);
		if(options.mouseleave != undefined) this.mouseleave(options.mouseleave);
		if(options.mouseclick != undefined) this.click(options.mouseclick);
		if(options.dblclick != undefined) this.dblclick(options.dblclick);
	};
})(jQuery);

// TREEVIEW
(function($) {
	
	var buttonOptions = { duration: { init: 1000, on: 100, off: 200 }, opacity: { on: 1.0, off: 0.7 } };
	var lastButton = null;
	var methods = {
		setFolder: function(options) {
			if(options.which == 1) {
				if(options.inner.find(".bTitle").data("active") == false) {
					XEvent.Fade(options.inner.find(".bTitle"), buttonOptions.duration.on, buttonOptions.opacity.on);
					options.inner.find(".bTitle").data("active", true);
					if(lastButton == null) {
						lastButton = options.inner.find(".bTitle");
					} else {
						XEvent.Fade(lastButton, buttonOptions.duration.off, buttonOptions.opacity.off);
						lastButton.data("active", false);
						lastButton = options.inner.find(".bTitle");
					}
				}
			}
		}
	};
	
	$.fn.XTreeView = function(method, options) {
		if(methods[method]) { methods[method].apply(this, [options]); } else {
			
			this.append(
			'<ul id="ROOT">'+
				'<li id="LI_0" style="padding-top: 0px;"><div id="LI_0_inner"><div class="bIcon normalOpen" style="margin-left: 0px;"></div><div class="bTitle"><b>Hauptverzeichnis</b></div><div class="clearLeft"></div></div>'+
					'<ul id="LI_0_subs">'+
					'</ul>'+
				'</li>'+
			'</ul>');
			
			var _this = this, root = this.find("#ROOT");
			function checkButton(options) { return (options.hasSubFolders.length>0) ? "min" : "none"; }
			function checkClass(options) { return (options.hasSubFolders.length>0) ? ((options.index+1) == options.length) ? "backLast" : "back" : ((options.index+1) == options.length) ? "last" : "noneButton"; }
			function hasSubFolders(folders) { $.each(folders, function(index, value) { var values = { folders: folders, index: index, id: value[0], inFolderID: value[1], name: value[2], hasSubFolders: value[3] }; newLI(values); }); }
			function clickHandler(e, options) {
				if(options.subs != undefined && e.which == 1) {
					if(options.subs.data("isOpen") == true) { options.subs.stop(); options.subs.fadeOut(200, function() { options.subs.data("isOpen", false); options.inner.find(".bButton").removeClass("min").addClass("max"); });
					} else { options.subs.stop(); options.subs.fadeIn(200, function() { options.subs.data("isOpen", true); }); options.inner.find(".bButton").removeClass("max").addClass("min"); }
				}
			}
			function setEvents(options) {
				options.inner.find(".bTitle").data("active", false);
				options.inner.find(".bTitle").XEvent({
					init: function() { XEvent.Fade(options.inner.find(".bTitle"), buttonOptions.duration.init, buttonOptions.opacity.off); },
					mouseenter: function() { if(options.inner.find(".bTitle").data("active") == false) XEvent.Fade(options.inner.find(".bTitle"), buttonOptions.duration.on, buttonOptions.opacity.on); },
					mouseleave: function() { if(options.inner.find(".bTitle").data("active") == false) XEvent.Fade(options.inner.find(".bTitle"), buttonOptions.duration.off, buttonOptions.opacity.off); },
					mouseclick: function(e) { explorer.getFunc().setFolder({ which: e.which, id: options.id }); /*options.which = e.which; methods.setFolder(options);*/ },
					//dblclick: function(e) { clickHandler(e, options); }
				}); options.inner.find(".bButton").XEvent({ mouseclick: function(e) { clickHandler(e, options); } });
			}
			function newLI(value) {
				var button = checkButton({ hasSubFolders: value.hasSubFolders });
				var liClass = checkClass({ length: value.folders.length, index: value.index, hasSubFolders: value.hasSubFolders });
				root.find("#LI_"+value.inFolderID+"_subs").append('<li id="LI_'+value.id+'" class="'+liClass+'"><div id="LI_'+value.id+'_inner"><div class="bButton '+button+'"></div><div class="bIcon normalClosed"></div><div class="bTitle">'+value.name+'</div><div class="clearLeft"></div></div></li>');
				if(value.hasSubFolders.length > 0) { root.find("#LI_"+value.id).append('<ul id="LI_'+value.id+'_subs"></ul>'); hasSubFolders(value.hasSubFolders); }
				root.find("#LI_"+value.id+"_subs").data("isOpen", true);
				setEvents({ id: value.id, inner: root.find("#LI_"+value.id+"_inner"), subs: root.find("#LI_"+value.id+"_subs") });
			} var folders = getData("folders.php", { ACTION:"LIST_FOLDERS" }, true); if(folders != "null") hasSubFolders(folders);
			setEvents({ id: 0, inner: root.find("#LI_0_inner") });
			
		}
	}
	
})(jQuery);
