﻿
function onNodeDragging(sender, args) {
	var target = args.get_htmlElement();

	if (!target) return;

	if (target.tagName == "INPUT") {
		target.style.cursor = "hand";
	}
}

function dropOnHtmlElement(args) {
	if (droppedOnInput(args))
		return;

	if (droppedOnGrid(args))
		return;
}

function droppedOnGrid(args) {
	var target = args.get_htmlElement();

	while (target) {
		if (target.id == gridId) {
			args.set_htmlElement(target);
			return;
		}

		target = target.parentNode;
	}
	args.set_cancel(true);
}

function droppedOnInput(args) {
	var target = args.get_htmlElement();
	if (target.tagName == "INPUT") {
		target.style.cursor = "default";
		target.value = args.get_sourceNode().get_text();
		args.set_cancel(true);
		return true;
	}
}

function dropOnTree(args) {
	var text = "";

	if (args.get_sourceNodes().length) {
		var i;
		for (i = 0; i < args.get_sourceNodes().length; i++) {
			var node = args.get_sourceNodes()[i];
			text = text + ', ' + node.get_text();
		}
	}
}

function clientSideEdit(sender, args) {
	var destinationNode = args.get_destNode();

	if (destinationNode) {
		var treeView = $find(theTree);
		treeView.trackChanges();
		var sourceNodes = args.get_sourceNodes();
		for (var i = 0; i < sourceNodes.length; i++) {
			var sourceNode = sourceNodes[i];
			sourceNode.get_parent().get_nodes().remove(sourceNode);

			if (args.get_dropPosition() == "over") destinationNode.get_nodes().add(sourceNode);
			if (args.get_dropPosition() == "above") insertBefore(destinationNode, sourceNode);
			if (args.get_dropPosition() == "below") insertAfter(destinationNode, sourceNode);
		}
		destinationNode.set_expanded(true);
		treeView.commitChanges();
	}
}

function insertBefore(destinationNode, sourceNode) {
	var destinationParent = destinationNode.get_parent();
	var index = destinationParent.get_nodes().indexOf(destinationNode);
	destinationParent.get_nodes().insert(index, sourceNode);
}

function insertAfter(destinationNode, sourceNode) {
	var destinationParent = destinationNode.get_parent();
	var index = destinationParent.get_nodes().indexOf(destinationNode);
	destinationParent.get_nodes().insert(index + 1, sourceNode);
}

function onNodeDropping(sender, args) {
	var dest = args.get_destNode();

	var sourceNode = args.get_sourceNode();
	var destNode = args.get_destNode();

	if (dest) {

		// Check on system
		if (destNode.get_value().indexOf('sys') != -1) {
			args.set_cancel(true);
			return false;
		}

		// Check outside of all
		if ((destNode.get_value().indexOf('men') != -1 ||
			 destNode.get_value().indexOf('res') != -1 ||
			 destNode.get_value().indexOf('tra') != -1) &&
			args.get_dropPosition() != "over") {
			args.set_cancel(true);
			return false;
		}

		clientSideEdit(sender, args);
		return;
	}
	else {
		alert('Du måste släppa menyelementet i menyn');
		return false;
	}
}
