var obj_id = "";
var stx = 0;
var sty = 0;

var mousex = 0;
var mousey = 0;
var x = 0;
var y = 0;

var xs = 0;
var ys = 0;

var w = 0;
var h = 0;

var desx = 0;
var desy = 0;
var desw = 0;
var desh = 0;


function getMouseXY(e) // works on IE6,FF,Moz,Opera7
{ 
  if (!e) e = window.event; // works on IE, but not NS (we rely on NS passing us the event)
  
  if (e)
  { 
    if (e.pageX || e.pageY)
    { // this doesn't work on IE6!! (works on FF,Moz,Opera7)
      mousex = e.pageX;
      mousey = e.pageY;
      algor = '[e.pageX]';
      if (e.clientX || e.clientY) algor += ' [e.clientX] '
        }
    else if (e.clientX || e.clientY)
    { // works on IE6,FF,Moz,Opera7
      mousex = e.clientX + document.body.scrollLeft;
      mousey = e.clientY + document.body.scrollTop;
      algor = '[e.clientX]';
      if (e.pageX || e.pageY) algor += ' [e.pageX] '
        }  
  }
}





function movemouse(e)
{
  getMouseXY(e);
  
  var newx = (mousex-(xs-x));
  var newy = (mousey-(ys-y));
  
  my_obj_id = document.getElementById(obj_id);
  if((newx+my_obj_id.offsetWidth) < window.innerWidth && newx >= 0)
    my_obj_id.style.left = newx+"px";
  if(newy >= 0 && (newy + my_obj_id.offsetHeight) < window.innerHeight)
    my_obj_id.style.top = newy+"px";
  
  
  desxy(document.getElementById("des"));
  
  
  
  var hasDrop = false;
  var drop1 = false;
  var drop2 = false;
  
  for(var i = 0; i <= w; i++)
  {
    if(newx+i >= desx && newx+i <= desx+desw)
    {
      dropYes();
      drop1 = true;
    }
  }
  
  for(var i = 0; i <= h; i++)
  {
    if(newy+i >= desy && newy+i <= desy+desh)
    {
      dropYes();
      drop2 = true;
    }
  }
  
  if(drop1 == true && drop2 == true)
    hasDrop = true;
  
  if (hasDrop == false)
    dropNo();
}

function dropYes()
{
  //  document.getElementById("des").style.backgroundColor = "red";
  document.getElementById("des").style.background = "url(gfx/dropzone.png) 0 0 repeat-x";
}

function dropNo()
{
  document.getElementById("des").style.background = "url(blank.gif) 0 0 no-repeat";
}


function desxy(obj)
{
  desx = 0;
  desy = 0;
  
  desw = document.getElementById("des").offsetWidth;
  desh = document.getElementById("des").offsetHeight;
  
  while(obj)
  {
    desx += obj.offsetLeft;
    desy += obj.offsetTop;
    obj = obj.offsetParent;
  }
}

function noSelect()
{
  return false;
}

function drag(my_obj_id)
{  
  obj_id = my_obj_id;
  obj = document.getElementById(obj_id);
  
  document.onmousedown = noSelect;
  getMouseXY();
  
  x = 0;
  y = 0;
  
  xs = mousex;
  ys = mousey;
  
  w = obj.offsetWidth;
  h = obj.offsetHeight;
  
  while(obj)
  {
    x += obj.offsetLeft;
    y += obj.offsetTop;
    obj = obj.offsetParent;
  }
  
  stx = x;
  sty = y;
  
  obj = document.getElementById(obj_id);
  
  obj.style.position = "absolute";
  obj.style.left = x+"px";
  obj.style.top = y+"px";
  obj.style.visibility = "visible";
  obj.innerHTML = document.getElementById(my_obj_id.substring (0, my_obj_id.indexOf('_drag'))).innerHTML;
  
  document.onmousemove = movemouse;
  document.onmouseup = drop;
}

function drop()
{
  dropNo();
  my_obj_id = document.getElementById(obj_id);
  my_obj_id.style.visibility = "hidden";
  my_obj_id.style.left = stx+"px";
  my_obj_id.style.top = sty+"px";
  my_obj_id.innerHTML = "";
  document.onmousemove = null;
  document.onmouseup = null;
  document.onmousedown = null;
}
