var DragSize = {
"element":null, "Enable":function(element, dragger) { dragger.element = element; dragger.onmousedown = DragSize.Begin; dragger.onclick = function(event) { _cancelBubble(true, event); return false; }; }, "fixE":function(e) { if(typeof e=="undefined") e = window.event; if(typeof e.layerX=="undefined") e.layerX = e.offsetX; if(typeof e.layerY=="undefined") e.layerY = e.offsetY; return e; }, "Begin":function(e) { DragSize.element = this.element; document.onmousemove=DragSize.Drag; document.onmouseup=DragSize.End; return false; }, "Drag":function(e) { e = DragSize.fixE(e); var element = DragSize.element; var elementX = getX(element); var elementY = getY(element); var scrollX = document.documentElement.scrollLeft; var scrollY = document.documentElement.scrollTop; var pointX = scrollX + e.clientX; var pointY = scrollY + e.clientY; if(pointX > elementX) element.style.width = (pointX-elementX)+"px"; if(pointY > elementY) element.style.height = (pointY-elementY)+"px"; if(element.onSizeChanged) { element.onSizeChanged(); } return false; }, "End":function(e) { document.onmousemove=null; document.onmouseup=null; var element = DragSize.element; if(element.onSizeChanged) { element.onSizeChanged(); } DragSize.element = null; return false; } }; var DragDrop = { "element":null, "Enable":function(element, ghost, dragger) { if(dragger == null) { dragger = element; dragger.onclick = function(event) { _cancelBubble(true, event); return false; } } dragger.element = element; dragger.onmousedown = DragDrop.Begin; element.ghost = ghost; if(element.cntr) { element.onDragging2 = element.onDragging; element.onDragging = function(x, y) { var i = element.cntr.length; while(i > 0) { i--; if(element.cntr[i].onDraggingOver(element, x, y)) { while(i > 0) { i--; element.cntr[i].onDraggingOut(element, x, y) } break; } } if(element.onDragging2) { element.onDragging2(x, y); } }; element.onDragEnd2 = element.onDragEnd; element.onDragEnd = function(x, y) { for(var i=0; i<element.cntr.length; i++) { if(element.cntr[i].onDragDropDown(element, x, y)) { element.isChanged = true; } } if(element.onDragEnd2) { element.onDragEnd2(x, y); } }; } }, "fixE":function(e) { if(typeof e=="undefined") e = window.event; if(typeof e.layerX=="undefined") e.layerX = e.offsetX; if(typeof e.layerY=="undefined") e.layerY = e.offsetY; return e; }, "Begin":function(e) {	e = DragDrop.fixE(e); var element = DragDrop.element = this.element; element.isDragging = true; element.isChanged = false; var ghost = element.ghost; if(ghost == null) { if(element.getGhost) { ghost = element.ghost = element.getGhost(); } else { ghost = element.ghost = element.cloneNode(true); ghost.style.display = "none"; var rect = getRect(element); ghost.style.width = (rect.right-rect.left)+"px"; ghost.style.height = (rect.bottom-rect.top)+"px"; document.body.appendChild(ghost); } DragDrop.Opacity(ghost); if(ghost.oStyle) { ghost.oStyle.position = ghost.style.position; ghost.style.position = "absolute"; } } var elementX = getX(element); var elementY = getY(element); var scrollX = document.documentElement.scrollLeft; var scrollY = document.documentElement.scrollTop; ghost.offsetX = scrollX + e.clientX - elementX; ghost.offsetY = scrollY + e.clientY - elementY; var pointX = scrollX + e.clientX - ghost.offsetX; var pointY = scrollY + e.clientY - ghost.offsetY; ghost.style.left = pointX+"px"; ghost.style.top = pointY+"px"; ghost.style.display = "block"; document.onmousemove=DragDrop.Drag; document.onmouseup=DragDrop.End; if(element.onDragBegin) { element.onDragBegin(pointX, pointY); } return false; },	"Drag":function(e) { e = DragDrop.fixE(e); var element = DragDrop.element; var ghost = element.ghost; var scrollX = document.documentElement.scrollLeft; var scrollY = document.documentElement.scrollTop; var clientH = document.documentElement.offsetHeight; var pointX = scrollX + e.clientX; var pointY = scrollY + e.clientY; var nx = pointX - ghost.offsetX; var ny = pointY - ghost.offsetY; ghost.style.left = nx+"px"; ghost.style.top = ny+"px"; var testH = 60; var scrollH = testH+50; if(	scrollY > 0 && e.clientY < testH) {	if(scrollY > scrollH) window.scroll(scrollX, pointY - scrollH); else window.scroll(scrollX, 0); } else if(e.clientY + testH > clientH) { if(pointY < document.body.clientHeight) window.scroll(scrollX, scrollY + scrollH); } if(element.onDragging) { element.onDragging(pointX, pointY); } return false; }, "End":function() {	document.onmousemove=null; document.onmouseup=null; var element = DragDrop.element; element.isDragging = false; var ghost = element.ghost; var x = parseInt(ghost.style.left); var y = parseInt(ghost.style.top); DragDrop.element = null; if(ghost != element) { element.ghost = null; _removeNode(ghost); } else if(ghost.oStyle) { ghost.style.position = ghost.oStyle.position; DragDrop.Opacity(ghost); } if(element.onDragEnd) { element.onDragEnd(x, y); } }, "Opacity":function(o) { var style = o.style; if(o.oStyle) { style.zIndex = o.oStyle.zIndex; style.filter = o.oStyle.filter; style.opacity = o.oStyle.opacity; style.MozOpacity = o.oStyle.MozOpacity; o.oStyle = null; } else { o.oStyle = { position:style.position, zIndex:style.zIndex, filter:style.filter, opacity:style.opacity, MozOpacity:style.MozOpacity}; style.zIndex = 3; style.filter = "alpha(opacity=40)"; style.opacity = 40/100; style.MozOpacity = 40/100; } }	}; var Container = function(element) { var refThis = element; var refOver = null; refThis.onDraggingOver = function(item, x, y) { var rect = getRect(refThis); if(!PtInRect(x,y, rect)) { if(refOver) refThis.onDraggingOut(item); return false; } var rcX = {left:rect.left, right:rect.left, top:rect.top, bottom:rect.bottom}; var rcY = {left:rect.left, right:rect.right, top:rect.top, bottom:rect.top}; var children = refThis.childNodes; for(var i=0; i<children.length; i++) { if(children[i] == refOver) continue; var rc = getRect(children[i]); var cy = rc.top+(rc.bottom-rc.top)/2; rcY.top = rc.top; rcY.bottom = cy; if(PtInRect(x, y, rcY)) { var array = []; array.push({rect:rc, index:i}); for(var j=i+1; j<children.length; j++) { if(children[j] == refOver) continue; var r = getRect(children[j]); if(PtInRect(r.left, r.top, rcY)) { array.push({rect:r, index:j}); } else break; } i = array[array.length-1].index; if(array.length == 1) { i = array[0].index; refThis.appendOver(item, "prev", children[i]); return true; } else { var rcYX = {left:rcY.left, right:rcY.left, top:rcY.top, bottom:rcY.bottom}; for(var k=0; k<array.length; k++) { rc = array[k].rect; var cx = rc.left+(rc.right-rc.left)/2; rcYX.left = rcYX.right; rcYX.right = cx; if(PtInRect(x, y, rcYX)) { i = array[k].index; refThis.appendOver(item, "prev", children[i]); return true; } } rcYX.left = rcYX.right; rcYX.right = rcY.right; if(PtInRect(x, y, rcYX)) { i = array[array.length-1].index; refThis.appendOver(item, "next", children[i]); return true; } } } } rcY.top = rcY.bottom; rcY.bottom = rect.bottom; if(PtInRect(x, y, rcY)) { var array2 = []; for(i=children.length-1; i>=0; i--) { if(children[i] == refOver) continue; var r = getRect(children[i]); if(PtInRect(r.right, r.bottom, rcY)) { array2.push({rect:r, index:i}); } } if(array2.length == 1) { i = array2[0].index; refThis.appendOver(item, "next", children[i]); return true; } else { rcX.top = rcY.top; rcX.bottom = rcY.bottom; rcX.left = rcY.right; rcX.right = rcY.right; for(var l=0; l<array2.length; l++) { var rct = array2[l].rect; var cxx = rct.left+(rct.right-rct.left)/2; rcX.right = rcX.left; rcX.left = cxx; if(PtInRect(x, y, rcX)) { i = array2[l].index; refThis.appendOver(item, "next", children[i]); return true; } } rcX.right = rcX.left; rcX.left = rcY.left; if(PtInRect(x, y, rcX)) { refThis.appendOver(item, "prev", children[0]); return true; } } } }; refThis.onDraggingOut = function(item) { if(refOver) { if(refOver != item) _removeNode(refOver); else if(refOver.oStyle) DragDrop.Opacity(refOver); } refOver = null; }; refThis.onDragDropDown = function(item, x, y) { var bChanged = false; if(refOver) { if(refOver.oStyle) DragDrop.Opacity(refOver); if(refOver != item) { _replaceNode(refOver, item); bChanged = true; } } refOver = null; return bChanged; }; refThis.appendOver = function(item, to, children) { if(refOver == null) { if(item.parentNode == refThis) { refOver = item; DragDrop.Opacity(refOver); return; } if(children != item) { refOver = item.cloneNode(true); DragDrop.Opacity(refOver); if(children) { if(to == "next") { _insertAfter(children, refOver); } else { _insertBefore(children, refOver); } } else { refThis.appendChild(refOver); } } } else if(children != item && children != refOver) { if(children) { if(to == "next") { if(children.nextSibling != refOver) { _removeNode(refOver); _insertAfter(children, refOver); refOver.isChanged = true; } } else { if(children.previousSibling != refOver) { _removeNode(refOver); _insertBefore(children, refOver); refOver.isChanged = true; } } } else if(refThis.lastChild != refOver) { _removeNode(refOver); refThis.appendChild(refOver); refOver.isChanged = true; } } }; }; 
