<html>
<head>
<title>Drag 'n' Drop</title>
<style type="text/css">
<!--
.folder {
border: 1px solid black;
background-color: yellow;
height: 100px;
width: 100px;
position: relative;
float: left;
margin-right: 100px;
}
.file {
height: 30px;
width: 50px;
border: 1px solid black;
background-color: red;
cursor: pointer;
position: relative;
left: 0px;
top: 0px;
z-index: 1;
}
#all {
position: absolute;
left: 10px;
top: 10px;
}
br {
clear: both;
}
-->
</style>
<script type="text/javascript">
<!--
var active = null;
var next = null;
var lastFolder = null;
var IE = !(!document.all);
if (!IE) document.captureEvents(Event.MOUSEMOVE)
document.onmousemove = saveMouseXY;
var last_x, last_y;
function saveMouseXY(e)
{
if (IE)
{
mouse_x = event.clientX + document.body.scrollLeft;
mouse_y = event.clientY + document.body.scrollTop;
}
else
{
mouse_x = e.pageX-25;
mouse_y = e.pageY-25;
}
if (active != null)
{
active.style.position = "absolute";
active.style.left = mouse_x;
active.style.top = mouse_y;
}
}
function doMouseDown(elem)
{
lastFolder = document.getElementById(elem.parentNode.id);
next = (elem.nextSibling == null) ? null : document.getElementById(elem.nextSibling.id);
active = elem;
active.parentNode.removeChild(active)
document.getElementById('all').appendChild(active);
}
function doMouseUp(elem)
{
active = null;
var folders = getFolderElements(document.getElementById("all"));
for (var i=0; i<folders.length; i++)
{
if (folders[i] == lastFolder) continue;
var dims = getElementPosition(folders[i]);
var left = parseInt(elem.style.left), top = parseInt(elem.style.top);
if (left >= dims.left && left <= dims.left+100 && top >= dims.top && top <= dims.top+100)
{
elem.style.position = "relative";
elem.style.left = "0px";
elem.style.top = "0px";
elem.parentNode.removeChild(elem);
folders[i].appendChild(elem);
setFrame(elem.id, folders[i].id);
return;
}
}
elem.parentNode.removeChild(elem);
elem.style.position = "relative";
elem.style.left = "0px";
elem.style.top = "0px";
if (next != null)
lastFolder.insertBefore(elem, next);
else
lastFolder.appendChild(elem);
}
function setFrame(file, folder)
{
var ifr = document.getElementById('editframe');
ifr.src = "changing.html?file=" + file + "&folder=" + folder;
}
function getFolderElements(elem)
{
var children = elem.childNodes;
var all = new Array();
for (var i=0; i<children.length; i++)
{
if (!children[i].id) continue;
if (children[i].id.indexOf("folder") > -1)
all.push(children[i]);
if (children[i].childNodes.length > 0)
all.concat(getFolderElements(children[i]));
}
return all;
}
function getElementPosition(elem) {
var offsetTrail = elem;
var offsetLeft = 0;
var offsetTop = 0;
while (offsetTrail) {
offsetLeft += offsetTrail.offsetLeft;
offsetTop += offsetTrail.offsetTop;
offsetTrail = offsetTrail.offsetParent;
}
if (navigator.userAgent.indexOf("Mac") != -1 &&
typeof document.body.leftMargin != "undefined") {
offsetLeft += document.body.leftMargin;
offsetTop += document.body.topMargin;
}
return {left:offsetLeft, top:offsetTop};
}
// -->
</script>
</head>
<body>
<div id="all">
<div class="folder" id="folder1">Folder 1
<div class="file" id="file1" onmousedown="doMouseDown(this);" onmouseup="doMouseUp(this);">File 1
</div><div class="file" id="file2" onmousedown="doMouseDown(this);" onmouseup="doMouseUp(this);">File 2
</div><div class="file" id="file3" onmousedown="doMouseDown(this);" onmouseup="doMouseUp(this);">File 3</div>
</div>
<div class="folder" id="folder2">Folder 2
</div>
<br><br><br>
<iframe id="editframe" src="done.html">Your browser does not support iframes!</iframe>
</div>
</body>
</html>