(function (f) {
function c(m) {
var i = f.data(m.data.target, "draggable");
var h = i.options;
var g = i.proxy;
var l = m.data;
var k = l.startLeft + m.pageX - l.startX;
var j = l.startTop + m.pageY - l.startY;
if (g) {
if (g.parent()[0] == document.body) {
if (h.deltaX != null && h.deltaX != undefined) {
k = m.pageX + h.deltaX
} else {
k = m.pageX - m.data.offsetWidth
}
if (h.deltaY != null && h.deltaY != undefined) {
j = m.pageY + h.deltaY
} else {
j = m.pageY - m.data.offsetHeight
}
} else {
if (h.deltaX != null && h.deltaX != undefined) {
k += m.data.offsetWidth + h.deltaX
}
if (h.deltaY != null && h.deltaY != undefined) {
j += m.data.offsetHeight + h.deltaY
}
}
}
if (m.data.parent != document.body) {
k += f(m.data.parent).scrollLeft();
j += f(m.data.parent).scrollTop()
}
if (h.axis == "h") {
l.left = k
} else {
if (h.axis == "v") {
l.top = j
} else {
l.left = k;
l.top = j<0?0:j
}
}
}
function e(j) {
var i = f.data(j.data.target, "draggable");
var h = i.options;
var g = i.proxy;
if (!g) {
g = f(j.data.target)
}
g.css({
left : j.data.left,
top : j.data.top
});
f("body").css("cursor", h.cursor)
}
function a(k) {
f.fn.draggable.isDragging = true;
var j = f.data(k.data.target, "draggable");
var i = j.options;
var g = f(".droppable").filter(function () {
return k.data.target != this
}).filter(function () {
var l = f.data(this, "droppable").options.accept;
if (l) {
return f(l).filter(function () {
return this == k.data.target
}).length > 0
} else {
return true
}
});
j.droppables = g;
var h = j.proxy;
if (!h) {
if (i.proxy) {
if (i.proxy == "clone") {
h = f(k.data.target).clone().insertAfter(k.data.target)
} else {
h = i.proxy.call(k.data.target, k.data.target)
}
j.proxy = h
} else {
h = f(k.data.target)
}
}
h.css("position", "absolute");
c(k);
e(k);
i.onStartDrag.call(k.data.target, k);
return false
}
function b(i) {
var h = f.data(i.data.target, "draggable");
c(i);
if (h.options.onDrag.call(i.data.target, i) != false) {
e(i)
}
var g = i.data.target;
h.droppables.each(function () {
var k = f(this);
if (k.droppable("options").disabled) {
return
}
var j = k.offset();
if (i.pageX > j.left && i.pageX < j.left + k.outerWidth() && i.pageY > j.top && i.pageY < j.top + k.outerHeight()) {
if (!this.entered) {
f(this).trigger("_dragenter", [g]);
this.entered = true
}
f(this).trigger("_dragover", [g])
} else {
if (this.entered) {
f(this).trigger("_dragleave", [g]);
this.entered = false
}
}
});
return false
}
function d(n) {
f.fn.draggable.isDragging = false;
b(n);
var j = f.data(n.data.target, "draggable");
var g = j.proxy;
var i = j.options;
if (i.revert) {
if (k() == true) {
f(n.data.target).css({
position : n.data.startPosition,
left : n.data.startLeft,
top : n.data.startTop
})
} else {
if (g) {
var m,
l;
if (g.parent()[0] == document.body) {
m = n.data.startX - n.data.offsetWidth;
l = n.data.startY - n.data.offsetHeight
} else {
m = n.data.startLeft;
l = n.data.startTop
}
g.animate({
left : m,
top : l
}, function () {
h()
})
} else {
f(n.data.target).animate({
left : n.data.startLeft,
top : n.data.startTop
}, function () {
f(n.data.target).css("position", n.data.startPosition)
})
}
}
} else {
f(n.data.target).css({
position : "absolute",
left : n.data.left,
top : n.data.top
});
k()
}
i.onStopDrag.call(n.data.target, n);
f(document).unbind(".draggable");
setTimeout(function () {
f("body").css("cursor", "")
}, 100);
function h() {
if (g) {
g.remove()
}
j.proxy = null
}
function k() {
var o = false;
j.droppables.each(function () {
var q = f(this);
if (q.droppable("options").disabled) {
return
}
var p = q.offset();
if (n.pageX > p.left && n.pageX < p.left + q.outerWidth() && n.pageY > p.top && n.pageY < p.top + q.outerHeight()) {
if (i.revert) {
f(n.data.target).css({
position : n.data.startPosition,
left : n.data.startLeft,
top : n.data.startTop
})
}
f(this).trigger("_drop", [n.data.target]);
h();
o = true;
this.entered = false;
return false
}
});
if (!o && !i.revert) {
h()
}
return o
}
return false
}
f.fn.draggable = function (g, h) {
if (typeof g == "string") {
return f.fn.draggable.methods[g](this, h)
}
return this.each(function () {
var j;
var l = f.data(this, "draggable");
if (l) {
l.handle.unbind(".draggable");
j = f.extend(l.options, g)
} else {
j = f.extend({}, f.fn.draggable.defaults, g || {})
}
var k = j.handle ? (typeof j.handle == "string" ? f(j.handle, this) : j.handle) : f(this);
f.data(this, "draggable", {
options : j,
handle : k
});
if (j.disabled) {
f(this).css("cursor", "");
return
}
k.unbind(".draggable").bind("mousemove.draggable", {
target : this
}, function (n) {
if (f.fn.draggable.isDragging) {
return
}
var m = f.data(n.data.target, "draggable").options;
if (i(n)) {
f(this).css("cursor", m.cursor)
} else {
f(this).css("cursor", "")
}
}).bind("mouseleave.draggable", {
target : this
}, function (m) {
f(this).css("cursor", "")
}).bind("mousedown.draggable", {
target : this
}, function (p) {
if (i(p) == false) {
return
}
f(this).css("cursor", "");
var m = f(p.data.target).position();
var q = f(p.data.target).offset();
var o = {
startPosition : f(p.data.target).css("position"),
startLeft : m.left,
startTop : m.top,
left : m.left,
top : m.top,
startX : p.pageX,
startY : p.pageY,
offsetWidth : (p.pageX - q.left),
offsetHeight : (p.pageY - q.top),
target : p.data.target,
parent : f(p.data.target).parent()[0]
};
f.extend(p.data, o);
var n = f.data(p.data.target, "draggable").options;
if (n.onBeforeDrag.call(p.data.target, p) == false) {
return
}
f(document).bind("mousedown.draggable", p.data, a);
f(document).bind("mousemove.draggable", p.data, b);
f(document).bind("mouseup.draggable", p.data, d)
});
function i(u) {
var n = f.data(u.data.target, "draggable");
var s = n.handle;
var q = f(s).offset();
var o = f(s).outerWidth();
var w = f(s).outerHeight();
var x = u.pageY - q.top;
var m = q.left + o - u.pageX;
var v = q.top + w - u.pageY;
var p = u.pageX - q.left;
return Math.min(x, m, v, p) > n.options.edge
}
})
};
f.fn.draggable.methods = {
options : function (g) {
return f.data(g[0], "draggable").options
},
proxy : function (g) {
return f.data(g[0], "draggable").proxy
},
enable : function (g) {
return g.each(function () {
f(this).draggable({
disabled : false
})
})
},
disable : function (g) {
return g.each(function () {
f(this).draggable({
disabled : true
})
})
}
};
f.fn.draggable.defaults = {
proxy : null,
revert : false,
cursor : "move",
deltaX : null,
deltaY : null,
handle : null,
disabled : false,
edge : 0,
axis : null,
onBeforeDrag : function (g) {},
onStartDrag : function (g) {},
onDrag : function (g) {},
onStopDrag : function (g) {}
};
f.fn.draggable.isDragging = false
})(jQuery);