function makeMovable(a, b) {
var position = window.getComputedStyle(a).getPropertyValue('position'),
prefix, offsetX, offsetY, movable, onSelectStart, dx, dy;
if (position == 'absolute' || position == 'fixed') {
b = b || a;
prefix = position == 'fixed' ? 'client' : 'page';
offsetX = prefix + 'X';
offsetY = prefix + 'Y';
addEvent(b, 'mousedown', function(evt) {
movable = true;
// Запрещаем Хрому менять курсор при перетаскивании
onSelectStart = document.onselectstart;
document.onselectstart = function() {
return false;
}
dx = a.offsetLeft - evt[offsetX];
dy = a.offsetTop - evt[offsetY];
});
addEvent(document, 'mouseup', function() {
if (movable) {
movable = false;
document.onselectstart = onSelectStart;
}
});
addEvent(document, 'mousemove', function(evt) {
if (movable) {
// убираем выделение текста
window.getSelection().removeAllRanges();
// рассчитываем новую позицию
a.style.left = evt[offsetX] + dx + 'px';
a.style.top = evt[offsetY] + dy + 'px';
}
});
}
}