function dhtmlDrag()
{
this.init = function(item)
{
this.object = item;
this.obj = item.obj;
this.parent = item.obj.parentNode;
// Клонируем объект
this.clone();
var self = this;
this.item.onmousedown = function(e)
{
if(typeof e == "undefined")
{
e = event;
}
self.setup(e);
}
}
this.distance = function(e)
{
this.distancex = e.clientX - this.initmousex;
this.distancey = e.clientY - this.initmousey;
this.move(e);
}
this.move = function(e)
{
var left = this.distancex + this.initx;
var top = this.distancey + this.inity;
this.item.style.left = left + "px";
this.item.style.top = top + "px";
}
this.setup = function(e)
{
// Задаем класс
this.item.className = 'file_item_clone file_item_show';
this.initmousex = e.clientX;
this.initmousey = e.clientY;
this.initx = this.item.offsetLeft;
this.inity = this.item.offsetTop;
var self = this;
this.item.onmousemove = function(e)
{
if(typeof e == "undefined")
{
e = event;
}
self.distance(e);
}
this.item.onmouseup = function(e)
{
if(typeof e == "undefined")
{
e = event;
}
self.stop(e);
}
}
this.stop = function(e)
{
e.onmousemove = null;
e.onmouseup = null;
// Задаем класс
this.item.className = 'file_item_clone file_item_hidden';
// Указываем позицию объекту
this.item.style.top = this.pos.top - 5 + 'px';
this.item.style.left = this.pos.left - 4 + 'px';
}
this.clone = function()
{
// Получаем позицию оригинала
this.pos = this.getObjectPosition(this.obj);
// Клонируем объект
this.item = this.obj.cloneNode(true);
// Задаем класс
this.item.className = 'file_item_clone file_item_hidden';
// Указываем позицию объекту
this.item.style.top = this.pos.top - 5 + 'px';
this.item.style.left = this.pos.left - 4 + 'px';
this.obj.parentNode.parentNode.appendChild(this.item);
}
// Получение позиции объекта
this.getObjectPosition = function(obj)
{
var position = { left:0, top:0 };
while (obj)
{
position.left += obj.offsetLeft;
position.top += obj.offsetTop;
obj = obj.offsetParent;
}
return position;
}
}