function getLayer(name) {
  if (moz || dom2) {
    return eval(document.getElementById(name));
  }
  if (ie4 || ie5 || ie6) {
    return eval('document.all.' + name);
  }
}
function moveLayerTo(layer, x, y) {
  layer.style.left = x;
  layer.style.top  = y;
}
function makeDraggable(layer, downHandler, upHandler) {
  if (moz || dom2) {
	layer.addEventListener("mousedown",dragStart, 0);
	layer.addEventListener("mouseup",dragStop, 0);
  }
  if (ie4 || ie5 || ie6) {
    layer.onmousedown = dragStart;
    layer.onmouseup = dragStop;
  }
}
function dragStart(e) {
  if (moz || dom2) {
    dragObject.layer = this;
    //set dragObject.dbo
    //destroy dbo's parent's child, if parent exists
    //destroy dbo's parent
    dragObject.dbo = eval('dragbox' + dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length));
    eval('document.getElementById("image'+dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length)+'")').src = 'images/drag_'+dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length)+'_down.gif';
    if (dragObject.dbo.parent) {
      dragObject.dbo.parent.child = null;
      dragObject.dbo.parent = null;
    }
    dragObject.inDrag = true;
    dragObject.offsetX = e.clientX + document.documentElement.scrollLeft - dragObject.style.pixelLeft;
    dragObject.offsetY = e.clientY + document.documentElement.scrollTop - dragObject.style.pixelTop;
    e.stopPropagation();
    e.preventDefault();
  }
  if (ie4 || ie5 || ie6) {
    dragObject.layer = this;
    //set dragObject.dbo
    //destroy dbo's parent's child, if parent exists
    //destroy dbo's parent
    dragObject.dbo = eval('dragbox' + dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length));
    eval('document.all.image'+dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length)).src = 'images/drag_'+dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length)+'_down.gif';
    if (dragObject.dbo.parent) {
      dragObject.dbo.parent.child = null;
      dragObject.dbo.parent = null;
    }
    dragObject.inDrag = true;
    dragObject.offsetX = event.clientX + document.body.scrollLeft - this.style.pixelLeft;
    dragObject.offsetY = event.clientY + document.body.scrollTop  - this.style.pixelTop;
    event.cancelBubble = true;
    event.returnValue = false;
  }
}
function dragStop(e) {
  if (moz || dom2) {
    eval('document.getElementById("image'+dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length)+'")').src = 'images/drag_'+dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length)+'.gif';
    dragObject.inDrag = false;
    e.stopPropagation();
    e.preventDefault();
    landed();
  }
  if (ie4 || ie5 || ie6) {
    eval('document.all.image'+dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length)).src = 'images/drag_'+dragObject.layer.id.slice(dragObject.layer.id.length-1,dragObject.layer.id.length)+'.gif';
    dragObject.inDrag = false;
    event.cancelBubble = true;
    event.returnValue = false;
    landed();
  }
}
function dragUpdate(e) {
  if (moz || dom2) {
    var x, y
    if (!dragObject.inDrag)
      return;
    x = e.clientX + window.scrollX - dragObject.offsetX - 10;
    y = e.clientY + window.scrollY  - dragObject.offsetY - 10;
    moveLayerTo(dragObject.layer, x, y);
    e.stopPropagation();
    e.preventDefault();
  }
  if (ie4 || ie5 || ie6) {
    var x, y;
    if (!dragObject.inDrag)
      return;
    x = event.clientX + document.body.scrollLeft - dragObject.offsetX;
    y = event.clientY + document.body.scrollTop  - dragObject.offsetY;
    moveLayerTo(dragObject.layer, x, y);
    event.cancelBubble = true;
    event.returnValue = false;
  }
}