if (typeof Survey == "undefined") { var Survey = {}; } var Dom = YAHOO.util.Dom; var Event = YAHOO.util.Event; var DDM = YAHOO.util.DragDropMgr; var currentDest; var started = 0; Survey.DDList = function(id, sGroup, config) { Survey.DDList.superclass.constructor.call(this, id, sGroup, config); this.logger = this.logger || YAHOO; var el = this.getDragEl(); Dom.setStyle(el, "opacity", 0.67); // The proxy is slightly transparent this.goingUp = false; this.lastY = 0; }; YAHOO.extend(Survey.DDList, YAHOO.util.DDProxy, { startDrag: function(x, y) { started +=2; this.logger.log(this.id + " startDrag"); // make the proxy look like the source element var dragEl = this.getDragEl(); var clickEl = this.getEl(); Dom.setStyle(clickEl, "visibility", "hidden"); dragEl.innerHTML = clickEl.innerHTML; Dom.setStyle(dragEl, "color", Dom.getStyle(clickEl, "color")); Dom.setStyle(dragEl, "backgroundColor", Dom.getStyle(clickEl, "backgroundColor")); Dom.setStyle(dragEl, "border", "2px solid gray"); }, endDrag: function(e) { var srcEl = this.getEl(); var proxy = this.getDragEl(); // Show the proxy element and animate it to the src element's location Dom.setStyle(proxy, "visibility", ""); var a = new YAHOO.util.Motion( proxy, { points: { to: Dom.getXY(srcEl) } }, 0.2, YAHOO.util.Easing.easeOut ) var proxyid = proxy.id; var thisid = this.id; // Hide the proxy and show the source element when finished with the animation a.onComplete.subscribe(function() { Dom.setStyle(proxyid, "visibility", "hidden"); Dom.setStyle(thisid, "visibility", ""); }); a.animate(); }, onInvalidDrop: function(e, id) { Survey.Data.dragDrop(this.getEl()); started += -2; }, onDragDrop: function(e, id) { started--; if(started != 1){return;} Survey.Data.dragDrop(this.getEl()); }, onDrag: function(e) { // Keep track of the direction of the drag for use during onDragOver var y = Event.getPageY(e); var temp = Survey.Data.ddContainer.body; var dy = YAHOO.util.Dom.getY(temp); var scrollOffset = 30; if((y - scrollOffset) < dy){ Survey.Data.ddContainer.body.scrollTop -= 20; } else if((y + scrollOffset) > (dy + temp.offsetHeight)){ Survey.Data.ddContainer.body.scrollTop += 20; } if (y < this.lastY) { this.goingUp = true; } else if (y > this.lastY) { this.goingUp = false; } this.lastY = y; }, onDragOver: function(e, id) { var srcEl = this.getEl(); var destEl = Dom.get(id); // We are only concerned with list items, we ignore the dragover // notifications for the list. if (destEl.nodeName.toLowerCase() == "li") { currentDest = destEl; YAHOO.log(destEl); var orig_p = srcEl.parentNode; var p = destEl.parentNode; if (this.goingUp) { Survey.Data.ddContainer p.insertBefore(srcEl, destEl); // insert above } else { p.insertBefore(srcEl, destEl.nextSibling); // insert below } DDM.refreshCache(); } } });