--- /dev/null
+/**
+ * Because scriptaculous DnD sucks..
+ * Written by Mathew McBride <matt@mcbridematt.dhs.org> / <matt@comalies>
+ *
+ * Copyright 2009 The Citadel Team
+ * Licensed under the GPL V3
+ */
+var draggedElement = null;
+var currentDropTargets = null;
+var dropTarget = null;
+var dragAndDropElement = null;
+var oldSelectHandler = null;
+function mouseDownHandler(event) {
+ var target = event.target;
+ var actualTarget = target;
+ if (target.nodeName.toLowerCase() == "td") {
+ actualTarget = target.parentNode;
+ }
+ if (!actualTarget.dropEnabled && actualTarget.getAttribute("citadel:dropenabled") == null) {
+ return;
+ }
+ turnOffTextSelect();
+ draggedElement = actualTarget;
+ return false;
+}
+function mouseUpHandler(event) {
+ var target = event.target;
+ var dropped = dropTarget;
+ if (dragAndDropElement != null) {
+ if (dropped != null && dropped.dropHandler) {
+ dropped.dropHandler(dropped,draggedElement);
+ }
+ document.body.removeChild(dragAndDropElement);
+ }
+ dragAndDropElement = null;
+ draggedElement = null;
+ dropTarget = null;
+ turnOnTextSelect();
+ return true;
+}
+function mouseMoveHandler(event) {
+ if (draggedElement != null) {
+ if (dragAndDropElement == null) {
+ var dragAndDropElementFunction = (draggedElement.ctdlDnDElement) ? draggedElement.ctdlDndElement : eval(draggedElement.getAttribute("citadel:dndelement"));
+ dragAndDropElement = dragAndDropElementFunction.call();
+ dragAndDropElement.className = "draganddrop";
+ document.body.appendChild(dragAndDropElement);
+ }
+ var clientX = event.clientX+5;
+ var clientY = event.clientY+5;
+ dragAndDropElement.style.top = clientY + "px";
+ dragAndDropElement.style.left = clientX + "px";
+ }
+ return false;
+}
+function mouseMoveOver(event) {
+ if (event.target.dropTarget) {
+ dropTarget = event.target;
+ }
+}
+function mouseMoveOut(event) {
+ if (dropTarget) {
+ dropTarget = null;
+ }
+}
+function setupDragDrop() {
+ $(document.body).observe('mousedown', mouseDownHandler);
+ $(document.body).observe('mouseup',mouseUpHandler);
+ $(document.body).observe('mousemove',mouseMoveHandler);
+ $(document.body).observe('mouseover', mouseMoveOver);
+ $(document.body).observe('mouseout', mouseMoveOut);
+}
+function turnOffTextSelect() {
+ document.onmousedown = new Function("return false");
+ document.onmouseup = new Function("return true");
+ oldSelectHandler = document.onselectstart;
+ document.onselectstart = function() { return false; };
+}
+function turnOnTextSelect() {
+ document.onmousedown = null;
+ document.onmouseup = null;
+ document.onselectstart = oldSelectHandler;
+}