var g_aDragables = new Array();
var g_CurrentState = new Object();
var g_iSlideSteps = 10;
var g_iSlideInterval = 5;
DraggablesPreInitialize();
function DraggablesPreInitialize()
{
g_CurrentState.m_bAllowDrag = false;
g_CurrentState.m_objDragging = null;
if(!g_iSlideSteps)
g_iSlideSteps = 20;
g_CurrentState.m_zIndex = 600;
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function Position(objValue)
{
if(objValue)
{
this.Copy(objValue);
}
else
{
this.m_iLeft = 0;
this.m_iTop = 0;
}
return this;
}
Position.prototype.Copy = function(objValue)
{
this.m_iLeft = objValue.m_iLeft;
this.m_iTop = objValue.m_iTop;
}
Position.prototype.AddScroll = function()
{
if(window.opera)
{
this.m_iLeft += document.documentElement.scrollLeft;
this.m_iTop += document.documentElement.scrollTop;
}
else if (window.event)
{
this.m_iLeft += document.documentElement.scrollLeft + document.body.scrollLeft;
this.m_iTop += document.documentElement.scrollTop + document.body.scrollTop;
}
else
{
this.m_iLeft += window.scrollX;
this.m_iTop += window.scrollY;
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function CRect()
{
this.m_iLeft = 0;
this.m_iTop = 0;
this.m_iWidth = 0;
this.m_iHeight = 0;
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function Size()
{
this.m_iWidth = 0;
this.m_iHeight = 0;
return this;
}
function CurrentPosition(objElement)
{
var objPosition = new Position();
var objCurrent = objElement;
while(objCurrent)
{
// alert(objCurrent.offsetLeft);
objPosition.m_iLeft += objCurrent.offsetLeft;
objPosition.m_iTop += objCurrent.offsetTop;
objCurrent = objCurrent.offsetParent || null;
}
return objPosition;
}
function CurrentSize(objElement)
{
var objSize = new Size();
objSize.m_iWidth = objElement.offsetWidth;
objSize.m_iHeight = objElement.offsetHeight;
return objSize;
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function CDraggable(elementID,sIDDragFor)
{
this.m_objDrag = document.getElementById(elementID);
if(!this.m_objDrag)
return null;
if(!sIDDragFor)
sIDDragFor = '';
this.m_sDragID = elementID;
this.m_elementID = elementID + '_Absolute';
this.m_sIDDragFor = sIDDragFor;
this.m_objFrame = null;
this.Initialize();
g_aDragables[g_aDragables.length] = this;
RegisterDraggableEvents();
mainDiv = document.getElementById('mainContainer');
if(mainDiv!=null)
{
this.m_rcBound = new CRect();
this.m_rcBound.m_iLeft = mainDiv.offsetLeft;
this.m_rcBound.m_iTop = mainDiv.offsetTop;
this.m_rcBound.m_iWidth = mainDiv.offsetWidth+mainDiv.offsetLeft;
this.m_rcBound.m_iHeight = 10000;
}
else
{
this.m_rcBound = new CRect();
this.m_rcBound.m_iLeft = 0;
this.m_rcBound.m_iTop = 0;
this.m_rcBound.m_iWidth = 900;
this.m_rcBound.m_iHeight = 10000;
}
return this;
}
CDraggable.prototype.SetRectBound = function(iLeft,iTop,iWidth,iHeight)
{
this.m_rcBound.m_iTop = iTop;
this.m_rcBound.m_iLeft = iLeft;
this.m_rcBound.m_iWidth = iWidth;
this.m_rcBound.m_iHeight = iHeight;
}
CDraggable.prototype.Initialize = function()
{
this.UpdatePosSize();
this.m_slideBack = false;
this.m_moveBack = false;
this.m_macMode = false;
this.m_fnAfterDrop = null;
this.m_InterProcess = false;
this.m_PostProcess = null;
this.m_bDragging = false;
this.m_sInnerHTML = this.m_objDrag.innerHTML;
this.RewriteAbsolute();
}
CDraggable.prototype.UpdatePosSize = function()
{
this.m_objDrag.startPositon = CurrentPosition(this.m_objDrag);
this.m_objDrag.currentPosition = new Position();
this.m_objDrag.currentPosition.Copy(this.m_objDrag.startPositon);
this.m_objDrag.size = CurrentSize(this.m_objDrag);
}
CDraggable.prototype.RewriteAbsolute = function()
{
/* if(!this.m_macMode)
this.m_objDrag.style.visibility = 'hidden';
document.write (
'
' +
this.m_sInnerHTML +
'
'
);*/
// this.m_Element = document.getElementById(this.m_elementID);
this.m_Element = document.getElementById(this.m_sDragID);
this.m_Element.currentPosition = new Position(this.m_objDrag.startPositon);
this.m_Element.startPosition = new Position(this.m_objDrag.currentPosition);
// this.m_Element.size = new Size();
// this.m_Element.size.m_iWidth = this.m_objDrag.size.m_iWidth;
// this.m_Element.size.m_iHeight = this.m_objDrag.size.m_iHeight;
}
CDraggable.prototype.MacMode = function(Value)
{
this.m_macMode = Value;
this.m_objDrag.style.visibility = !this.m_macMode ? 'hidden' : 'visible';
}
CDraggable.prototype.MoveTo = function(objPosition)
{
if(g_CurrentState.m_objDragging==null)
return;
rcBound = g_CurrentState.m_objDragging.m_rcBound;
szSize = this.m_Element.size;
if(objPosition.m_iTop < rcBound.m_iTop)
objPosition.m_iTop = rcBound.m_iTop;
if(objPosition.m_iLeft < rcBound.m_iLeft)
objPosition.m_iLeft = rcBound.m_iLeft;
if(objPosition.m_iTop+szSize.m_iHeight > rcBound.m_iHeight)
objPosition.m_iTop = rcBound.m_iHeight-szSize.m_iHeight;
if(objPosition.m_iLeft+szSize.m_iWidth > rcBound.m_iWidth)
objPosition.m_iLeft = rcBound.m_iWidth-szSize.m_iWidth;
this.m_Element.style.top = objPosition.m_iTop + 'px';
this.m_Element.style.left = objPosition.m_iLeft + 'px';
this.m_Element.currentPosition.m_iTop = objPosition.m_iTop;
this.m_Element.currentPosition.m_iLeft = objPosition.m_iLeft;
if(g_CurrentState.m_objDragging && g_CurrentState.m_objDragging.InterProcess)
g_CurrentState.m_objDragging.InterProcess(g_CurrentState.m_objDragging);
}
CDraggable.prototype.SlideBack = function()
{
this.MoveBack();
}
CDraggable.prototype.MoveBack = function()
{
this.MoveTo(this.m_Element.startPosition);
g_CurrentState.m_objDragging.m_Element.style.zIndex = g_CurrentState.m_originalZIndex;
if(g_CurrentState.m_objDragging.PostProcess)
g_CurrentState.m_objDragging.PostProcess(g_CurrentState.m_objDragging);
g_CurrentState.m_objDragging = null;
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
function RegisterDraggableEvents()
{
if(g_aDragables.length != 1)
return;
RegisterEventHandler(document, 'mousedown', DraggableEventMousedown);
RegisterEventHandler(document, 'mousemove', DraggableEventMousemove);
RegisterEventHandler(document, 'mouseup', DraggableEventMouseup);
RegisterEventHandler(window, 'resize', DraggableEventResize);
}
function DraggableEventMousedown(objEvent)
{
if(window.event)
objEvent = window.event;
CaptureDraggables(objEvent);
}
function ShowFrame(bShow,objDrag)
{
if(!window.opera && document.addEventListener)
return;
objFrame = document.getElementById("screen_frame");
if(objFrame)
{
if(objDrag && objDrag.m_Element)
{
objFrame.style.width = objDrag.m_Element.size.m_iWidth-10;
objFrame.style.height = objDrag.m_Element.size.m_iHeight;
objFrame.style.left = objDrag.m_Element.style.left;
objFrame.style.top = objDrag.m_Element.style.top;
objFrame.style.zIndex = 0;
}
if(bShow)
{
objFrame.style.display = 'block';
objFrame.style.zIndex = 5;
}
else
objFrame.style.display = 'none';
}
}
function CaptureDraggables(objEvent)
{
var p = new Position();
p.m_iLeft = objEvent.clientX;
p.m_iTop = objEvent.clientY;
p.AddScroll();
if(objEvent.srcElement!=undefined)
domSrc = objEvent.srcElement;
else
domSrc = objEvent.target;
g_CurrentState.m_objDragging = null;
for(var c = 0; c != g_aDragables.length; c++)
{
var current = g_aDragables[c].m_Element;
if(p.m_iLeft >= current.currentPosition.m_iLeft && p.m_iLeft < current.currentPosition.m_iLeft + current.size.m_iWidth && p.m_iTop >= current.currentPosition.m_iTop && p.m_iTop < current.currentPosition.m_iTop + current.size.m_iHeight)
{
if(domSrc.tagName=="INPUT")
return;
if(g_aDragables[c].m_Element.style.visibility=="hidden")
continue;
if(g_aDragables[c].m_sIDDragFor!='' && domSrc.parentNode.id!=g_aDragables[c].m_sIDDragFor)
continue;
g_CurrentState.m_originalZIndex = current.style.zIndex ? current.style.zIndex + 1 : 600;
current.style.zIndex = ++g_CurrentState.m_originalZIndex;
// current.style.zIndex = 10;
current.startPosition.Copy(current.currentPosition);
current.m_bDragging = true;
g_CurrentState.m_objDragging = g_aDragables[c];
g_CurrentState.startPosition = new Position;
g_CurrentState.startPosition.m_iTop = p.m_iTop;
g_CurrentState.startPosition.m_iLeft = p.m_iLeft;
g_CurrentState.m_objDragging.m_objDrag.style.zIndex = 610;
g_CurrentState.m_bAllowDrag = true;
if(document.attachEvent)
{
window.event.cancelBubble = true;
window.event.returnValue = false;
}
else if(objEvent.preventDefault)
objEvent.preventDefault();
objFrame = document.getElementById("screen_frame");
if(objFrame)
{
ShowFrame(true,g_CurrentState.m_objDragging.m_objDrag);
}
break;
}
}
}
function DraggableEventMousemove(objEvent)
{
if(window.event)
objEvent = window.event;
if(g_CurrentState.m_bAllowDrag)
{
if(document.attachEvent)
{
window.event.cancelBubble = true;
window.event.returnValue = false;
}
else if(objEvent.preventDefault)
objEvent.preventDefault();
MoveDraggables(objEvent);
}
}
function MoveDraggables(objEvent)
{
if(!g_CurrentState.m_objDragging)
return;
var p = new Position();
p.m_iLeft = objEvent.clientX;
p.m_iTop = objEvent.clientY;
p.AddScroll();
var newPosition = new Position();
newPosition.m_iTop = p.m_iTop - g_CurrentState.startPosition.m_iTop + g_CurrentState.m_objDragging.m_Element.startPosition.m_iTop;
newPosition.m_iLeft = p.m_iLeft - g_CurrentState.startPosition.m_iLeft + g_CurrentState.m_objDragging.m_Element.startPosition.m_iLeft;
g_CurrentState.m_objDragging.MoveTo(newPosition);
objFrame = document.getElementById("screen_frame");
if(objFrame)
{
objFrame.style.left = newPosition.m_iLeft;
objFrame.style.top = newPosition.m_iTop;
objFrame.style.width = g_CurrentState.m_objDragging.m_Element.size.m_iWidth-10;
objFrame.style.height = g_CurrentState.m_objDragging.m_Element.size.m_iHeight;
}
}
function DraggableEventMouseup (objEvent)
{
if(window.event)
objEvent = window.event;
if(g_CurrentState.m_bAllowDrag)
ReleaseDraggables(objEvent);
g_CurrentState.m_bAllowDrag = false;
}
function ReleaseDraggables (objEvent)
{
if (g_CurrentState.m_objDragging)
{
if(g_CurrentState.m_objDragging.PostProcess)
g_CurrentState.m_objDragging.PostProcess(g_CurrentState.m_objDragging);
if (g_CurrentState.m_objDragging.slideBack)
g_CurrentState.m_objDragging.slideBack();
g_CurrentState.m_objDragging = null;
}
}
function DraggableEventResize()
{
for(var c = 0; c != g_aDragables.length; c++)
{
var current = g_aDragables[c];
current.m_objDrag.currentPositon = CurrentPosition(current.m_objDrag);
current.MoveTo(current.m_objDrag.currentPositon);
}
}
function RegisterEventHandler(object, eventName, handler)
{
if(object.attachEvent)
object.attachEvent ('on' + eventName, handler);
else if(object.addEventListener)
object.addEventListener(eventName, handler, true);
}
function UnregisterEventHandler (object, eventName)
{
if (object.detachEvent)
object.detachEvent ("onmousemove", ProceedDrag);
else if(object.removeEventListener)
object.removeEventListener ("mousemove", ProceedDrag, true);
}
function show(obj, objName)
{
var result = "";
var lWin = window.open('','');
lWin.document.open();
for(var i in obj)
{
result = i + " = " + obj[i] + "
";
lWin.document.write(result);
}
lWin.document.close();
}
document.write('');