function accessCSS(layerID){
  if(document.getElementById){
    return document.getElementById(layerID).style;
  }else if(document.all) {
    return document.all[layerID].style;
  }else if(document.layers){
    return document.layers[layerID];
  }
}

function placeItem(layerID, ToX, ToY){
  accessCSS(layerID).left = ToX;
  accessCSS(layerID).top = ToY;
}

function sizeItem(layerID, ToX, ToY){
  accessCSS(layerID).width = ToX;
  accessCSS(layerID).height = ToY;
}

function moveThisLayer(layerID, endx, endy, StepX, StepY){
  var stopmoving;
  var NextPos;
  stopmoving = true;
  NextPos = parseInt(accessCSS(layerID).left);
  if (NextPos != endx) {
    NextPos+=StepX;
    accessCSS(layerID).left=NextPos;
    stopmoving = false;
  }
  NextPos = parseInt(accessCSS(layerID).top);
  if (NextPos != endy) {
    NextPos+=StepY;
    accessCSS(layerID).top=NextPos;
    stopmoving = false;
  }
  if (stopmoving == false) {
    var interV = setTimeout("moveThisLayer('" + layerID + "', " + endx + ", " + endy + ", " + StepX + ", " + StepY + ")", 40);
  }
}

function sizeThisLayer(layerID, endx, endy, StepX, StepY){
  var stopmoving;
  var NextPos;
  stopmoving = true;
  NextPos = parseInt(accessCSS(layerID).width);
  if (NextPos != endx) {
    NextPos+=StepX;
    accessCSS(layerID).width=NextPos;
    stopmoving = false;
  }
  NextPos = parseInt(accessCSS(layerID).height);
  if (NextPos != endy) {
    NextPos+=StepY;
    accessCSS(layerID).height=NextPos;
    stopmoving = false;
  }
  if (stopmoving == false) {
    var interV = setTimeout("sizeThisLayer('" + layerID + "', " + endx + ", " + endy + ", " + StepX + ", " + StepY + ")", 40);
  }
}

function moveLayerTo(layerID, endx, endy, Speed) {
  var CurX = parseInt(accessCSS(layerID).left);
  var CurY = parseInt(accessCSS(layerID).top);
  var dX = ((endx > CurX) ? (endx - CurX): (CurX - endx));
  var dY = ((endy > CurY) ? (endy - CurY): (CurY - endy));
  var Steps = parseInt((dX > dY ? dX: dY) / Speed);
  var IncX = parseInt(dX / Steps);
  var IncY = parseInt(dY / Steps);
  placeItem(layerID, ((IncX == 0) ? CurX: CurX + (dX % IncX)), ((IncY == 0) ? CurY: CurY + (dY % IncY)));
  moveThisLayer(layerID, endx, endy, IncX, IncY);
}

function sizeLayerTo(layerID, endx, endy, Speed) {
  var CurX = parseInt(accessCSS(layerID).width);
  var CurY = parseInt(accessCSS(layerID).height);
  var dX = ((endx > CurX) ? (endx - CurX): (CurX - endx));
  var dY = ((endy > CurY) ? (endy - CurY): (CurY - endy));
  var Steps = parseInt((dX > dY ? dX: dY) / Speed);
  var IncX = parseInt(dX / Steps);
  var IncY = parseInt(dY / Steps);
  sizeItem(layerID, ((IncX == 0) ? CurX: CurX + (dX % IncX)), ((IncY == 0) ? CurY: CurY + (dY % IncY))); // so resizing ends exactly at final size
  sizeThisLayer(layerID, endx, endy, IncX, IncY);
}

