(function() { var _element = null; var _elementA = null; var _elementB = null; var _parent = null; function _configEvent(pObj, pEvent, pHandler) { if ( typeof pObj == 'object' ) { if ( pEvent.substring(0, 2) == 'on' ) pEvent = pEvent.substring(2, pEvent.length); if ( arguments.length == 3 ) { if ( pObj.addEventListener ) pObj.addEventListener(pEvent, pHandler, false); else if ( pObj.attachEvent ) pObj.attachEvent('on' + pEvent, pHandler); } else if ( arguments.length == 4 ) { if ( pObj.removeEventListener && pObj.removeEventListener != 'undefined') pObj.removeEventListener(pEvent, pHandler, false); else if ( pObj.detachEvent ) pObj.detachEvent('on' + pEvent, pHandler); } } } function _drag(e) { if (typeof e.preventDefault != 'undefined') e.preventDefault(); else e.onselectstart = new Function("return false;"); _element = ( e.target ) ? e.target : e.srcElement; if ( _element ) { _configEvent(_element, 'onmousemove', _mouseMove); _configEvent(top.document, 'onmousemove', _mouseMove); _configEvent(_element, 'onmouseup', _mouseUp); _configEvent(top.document, 'onmouseup', _mouseUp); } } function _elementShadow( pId ) { if( _elementA ) { var _elShadow = document.createElement("div"); _elShadow.id = _elementA.id + "__Shadow"; _elShadow.setAttribute("onselectstart" , "return false"); _elShadow.style.width = _elementA.style.width; _elShadow.style.height = _elementA.style.height; _elShadow.style.top = _elementA.style.top; _elShadow.style.left = _elementA.style.left; _elShadow.style.zIndex = _elementA.style.zIndex; _elShadow.className = "x-shadow_Div"; return _elShadow; } } function _load() { if( arguments.length > 0 ) { var pId = arguments[0]; _configEvent(document.getElementById( pId + "__draggable"), 'onmousedown', _mouseDownShadow); } } function _getMouseOffset(e, el) { var docPos = _getPosition(el); var mousePos = _mouseCoords(e); return { 'x' : mousePos.x - docPos.x, 'y' : mousePos.y - docPos.y }; } function _getPosition(_pObject) { var left = 0; var top = 0; while ( _pObject.offsetParent ) { left += _pObject.offsetLeft; top += _pObject.offsetTop; _pObject = _pObject.offsetParent; } left += _pObject.offsetLeft; top += _pObject.offsetTop; return { 'x' : left, 'y' : top }; } function _mouseCoords(ev) { var CoordX = ""; var CoordY = ""; if ( ev.pageX || ev.pageY ) return { 'x' : ev.pageX, 'y' : ev.pageY }; CoordX = ev.clientX + document.body.scrollLeft - document.body.clientLeft; CoordY = ev.clientY + document.body.scrollTop - document.body.clientTop; return { 'x' : CoordX, 'y' : CoordY }; } function _mouseMove(e) { if ( _element ) { if ( _element.mouseOffset == null ) _element.mouseOffset = _getMouseOffset(e, _element); var mousePos = _mouseCoords(e); var x = mousePos.x - _element.mouseOffset.x; var y = mousePos.y - _element.mouseOffset.y; _element.style.left = (( x < 0 ) ? 0 : x) + 'px'; _element.style.top = (( y < 0 ) ? 0 : y) + 'px'; } } function _mouseUp() { if ( _element ) { _mouseUpShadow(); _configEvent(_element, 'onmousemove', _mouseMove, 'remove'); _configEvent(top.document, 'onmousemove', _mouseMove, 'remove'); _configEvent(_element, 'onmouseup', _mouseUp, 'remove'); _configEvent(top.document, 'onmouseup', _mouseUp, 'remove'); _element.mouseOffset = null; _element = null; } } function _mouseDownShadow(e) { try { if( arguments.length > 0 ) { var _el = ( e.target ) ? e.target : e.srcElement; var _id = (_el.id.substring(0, _el.id.indexOf("__draggable"))); _elementA = document.getElementById( _id + "__parent"); _elementB = _elementShadow( _id + "__parent"); _elementA.style.left = '-1500px'; _parent = _elementA.parentNode; var _B = _parent.appendChild(_elementB); _configEvent( _elementB, 'onmouseup', _mouseUpShadow); _configEvent( _elementB, 'onmousemove', _drag); } }catch(e){} } function _mouseUpShadow() { try { _elementA.style.top = _elementB.style.top; _elementA.style.left = _elementB.style.left; var _B = _parent.removeChild(_elementB); _elementA = null; _elementB = null; _element = null; } catch(e){} } function _drag_drop(){} _drag_drop.prototype.set = _load; window._drag_drop = _drag_drop; })();