// global instance is created here. var dragNDrop=new mmDragHandler(); dragNDrop.extends(new Publisher()); function mmDragHandler(){ var m_dragObject; var m_offsetX; var m_offsetY; var m_isDragging=false; var m_zIndexSave; var m_lastSeenNode=null; var m_origX=null; // Position the mouse was pushed down. var m_origY=null; document.onmousemove = onMouseMoveHandler; document.onmouseup = onMouseUpHandler; this.onMouseDownHandler=onMouseDownHandler; this.onMouseMoveHandler=onMouseMoveHandler; this.onMouseUpHandler=onMouseUpHandler; this.activateForObject=activateForObject; function activateForObject(ele) { ele.ondrag=function(){return false;}; ele.onselectstart=function(){return false;}; ele.onmousedown=onMouseDownHandler; // if nothing else is mentioned in the object position it in the middle of the visible area. if (ele.style.left=="") { ele.style.left=((window.innerWidth/2) + window.scrollX) + "px"; } if (ele.style.top=="") { ele.style.top=((window.innerHeight/2) + window.scrollY) + "px"; } ele.style.display="inline"; this.notifySubscribers(ele,"activateDragNDrop"); } function onMouseDownHandler(e) { if (window.event) e=window.event; m_dragObject = e.target; var dragX = parseInt(m_dragObject.style.left); var dragY = parseInt(m_dragObject.style.top); var mouseX = e.clientX; var mouseY = e.clientY; m_origX=mouseX; m_origY=mouseY; m_offsetX = mouseX - dragX; m_offsetY = mouseY - dragY; m_zIndexSave=m_dragObject.style.zIndex; m_dragObject.style.zIndex=5; m_dragObject.isDragging=true; m_isDragging = true; return(false); } function onMouseMoveHandler(e){ if (!m_isDragging) return; if (window.event) e=window.event; if (e.target.id.substring(0,6)=="mmNode") { m_lastSeenNode=e.target; } if ((m_origX!=e.clientX)||(m_origY!=e.clientY)) { dragNDrop.notifySubscribers(m_dragObject,"moving"); } var newX = e.clientX - m_offsetX; var newY = e.clientY - m_offsetY; m_dragObject.style.left = newX + "px"; m_dragObject.style.top = newY + "px"; var addInfo=new Array(); addInfo[0]=newX; addInfo[1]=newY; return(false); } function onMouseUpHandler(e){ if (!m_isDragging) return; m_dragObject.style.zIndex=m_zIndexSave; m_dragObject.isDragging=false; m_isDragging = false; dragNDrop.notifySubscribers(m_dragObject,"endMoving",m_lastSeenNode); return(false); } }