
  jd = 16;
  ct = 150;
  sw = 2000;
  bw = 3800;
  wd = 480;
  wf = 0.5;

  var stopped = false;
  var timer;
  var yawn;
  var sleep;
  var bored;
  var grabbed;
  var killed;
  var daemonconfig;

  var daemonimage = new Image();
  var yawnimage = new Image();
  var sleepimage = new Image();
  daemonimage.src = "/daemon/daemon.gif";
  yawnimage.src = "/daemon/yawning.gif";
  sleepimage.src = "/daemon/sleep.gif";
  var leftin = new Image();
  var leftout = new Image();
  var rightin = new Image();
  var rightout = new Image();
  leftin.src = "/daemon/left-in.gif";
  leftout.src = "/daemon/left-out.gif";
  rightin.src = "/daemon/right-in.gif";
  rightout.src = "/daemon/right-out.gif";
  var downin = new Image();
  var downout = new Image();
  var downrightin = new Image();
  var downrightout = new Image();
  var downleftin = new Image();
  var downleftout = new Image();
  downin.src = "/daemon/down-in.gif";
  downout.src = "/daemon/down-out.gif";
  downrightin.src = "/daemon/down-right-in.gif";
  downrightout.src = "/daemon/down-right-out.gif";
  downleftin.src = "/daemon/down-left-in.gif";
  downleftout.src = "/daemon/down-left-out.gif";
  var upin = new Image();
  var upout = new Image();
  var uprightin = new Image();
  var uprightout = new Image();
  var upleftin = new Image();
  var upleftout = new Image();
  upin.src = "/daemon/up-in.gif";
  upout.src = "/daemon/up-out.gif";
  uprightin.src = "/daemon/up-right-in.gif";
  uprightout.src = "/daemon/up-right-out.gif";
  upleftin.src = "/daemon/up-left-in.gif";
  upleftout.src = "/daemon/up-left-out.gif";

  var ns4 = (document.layers)? true:false;
  var ie4 = (document.all)? true:false;
	var obj = null;
  var img = null;

function begin() {
  messageover("syberchic.net:: gaudy, overdone and kitsch");

  if (ns4) {
    document.captureEvents(Event.MOUSEMOVE);
    if (ns4) document.daemon.document.captureEvents(Event.MOUSEDOWN);
  }
  document.onmousemove = mousemove;
  document.onmousedown = mousedown;

  cursorX = 200;
  cursorY = 200;
  if (ns4) {
    obj = eval('document.daemon');
    img = eval('document.daemon.document.d');
  }
  else if (ie4) {
    obj = eval('document.all.daemon');
    img = eval('document.all.d');
  }
  else {
    obj = document.getElementById("daemon");
    img = document.getElementById("dimg");
  }
  stride = "in";
  click();
}

function mousemove(e) {
  messageout();
  clearTimeout(yawn);
  clearTimeout(sleep);
  clearTimeout(bored);
  if (stopped) {
    timer = setTimeout("click()",ct);
    stopped = false;
  }
  if (ie4) {
		cursorX = event.x + document.body.scrollLeft;
		cursorY = event.y + document.body.scrollTop;
	}
	else {
		cursorX = e.pageX;
		cursorY = e.pageY;
	}
}

function mousedown(e) {
  messageout();
  if (ie4) {
    if (button == 2) config();
    else if (event.button == 1) {
      if (!grabbed) grab();
      else drop();
    }
  }
  else {
    if (e.which==3) config();
    else if (e.which==1) {
      if (!grabbed) grab();
      else drop();
    }
  }
  return false;
}

function drop() {
  img.src = daemonimage.src;
  grabbed = false;
  if (ns4) {
    window.captureEvents(Event.MOUSEMOVE);
  }
  window.onmousemove = mousemove;
  click();
}

function grab() {
  clearTimeout(timer);
  clearTimeout(yawn);
  clearTimeout(sleep);
  clearTimeout(bored);
  img.src = sleepimage.src;
  grabbed = true;
}

function click() {
  clearTimeout(timer);
  move(cursorX, cursorY);
  if (!stopped) {
    timer = setTimeout('click()',ct);
    stopped = false;
  }
}

function config() {
  if (!daemonconfig || daemonconfig.closed) {
    daemonconfig = window.open("/daemon/daemonconfig.html",
      "nc","width=180,height=240,dependent");
  }
  else daemonconfig.focus();
}

function getAbsX(obj) { return (obj.x) ? obj.x : getAbsPos(obj,"Left"); }
function getAbsY(obj) { return (obj.y) ? obj.y : getAbsPos(obj,"Top"); }
function getAbsPos(obj, which) {
 p = 0;
 while (obj != null) {
  p += obj["offset" + which];
  obj = obj.offsetParent;
 }
 return p;
}
function moveBy(obj,dx,dy) {
 obj.left = parseInt(obj.left) + dx;
 obj.top = parseInt(obj.top) + dy;
}
function move(x,y) {
  xpos = getAbsX(obj);
  ypos = getAbsY(obj);
  deltaX = x + 18 - xpos;
  deltaY = y + 34 - ypos;
  if ((Math.abs(deltaX)<=jd) && (Math.abs(deltaY)<=jd)) stop();
  else {
    if (Math.abs(deltaX)<=jd) vert(deltaY);
    else {
      if ((xpos)<x) moveTo(xpos+jd,ypos);
      if ((xpos)>x) moveTo(xpos-jd,ypos);
    }
    if (Math.abs(deltaY)<=jd) horiz(deltaX);
    else {
      if ((ypos)<y) moveTo(xpos,ypos+jd);
      if ((ypos)>y) moveTo(xpos,ypos-jd);
    }
    if ((deltaX>jd) && (deltaY>jd)) diag0a();
    if ((deltaX>jd) && (deltaY<-jd)) diag0b();
    if ((deltaX<-jd) && (deltaY>jd)) diag0c();
    if ((deltaX<-jd) && (deltaY<-jd)) diag0d();
  }
}

function kill() {
  if (!killed) {
    clearTimeout(timer);
    hideObject("daemon");
    killed = true;
  }
  else alert('You cannot kill him more than once.');
}

function reincarnate() {
  if (killed) {
    showObject("daemon");
    killed = false;
    click();
  }
  else alert('You cannot reincarnate him if he is not dead.');
}

function stop() {
  messageout();
  clearTimeout(timer);
  stopped = true;
  img.src = daemonimage.src;
  yawn = setTimeout('yawning()',sw);
}

function yawning() {
  messageover("daemon bored");
  img.src = yawnimage.src;
  sleep = setTimeout('sleeping()',2400);
}

function sleeping() {
  messageover("daemon sleep now");
  img.src = sleepimage.src;
  bored = setTimeout('hypo()',bw);
}

function hypo() {
  messageover("daemon really bored - go hypo");
  rX = (wd*(Math.random()-0.5));
  rY = (wd*(Math.random()-0.5));
  if (((Math.abs(rX) > 2*jd) || (Math.abs(rY) > 2*jd)) && (Math.random() < wf)) {
    cursorX += rX;
    cursorY += rY;
    stopped = false;
    click();
  }
  else bored = setTimeout('hypo()',bw);
}

function moveTo(x,y) {
  if (ie4) {
     obj.style.pixelTop = y;
     obj.style.pixelLeft = x;
  }
  else if (ns4) {
     obj.top = y;
     obj.left = x;
  }
  else {
     obj.style.top = y +"px";
     obj.style.left = x + "px";
  }
}

function horiz(x) {
  if (x < 0) {
    if (stride=="in") {
      img.src = leftin.src;
      stride = "out";
    }
    else {
      img.src = leftout.src;
      stride = "in";
    }
  }
  else {
    if (stride=="in") {
      img.src = rightin.src;
      stride = "out";
    }
    else {
      img.src = rightout.src;
      stride = "in";
    }
  }
}

function vert(y) {
  if (y<0) {
    if (stride=="in") {
      img.src = upin.src;
      stride = "out";
    }
    else {
      img.src = upout.src;
      stride = "in";
    }
  }
  else {
    if (stride=="in") {
      img.src = downin.src;
      stride = "out";
    }
    else {
      img.src = downout.src;
      stride = "in";
      return;
    }
  }
}

function diag0a() {
  if (stride=="in") {
    img.src = downrightin.src;
    stride = "out";
  }
  else {
    img.src = downrightout.src;
    stride = "in";
  }
}

function diag0b() {
  if (stride=="in") {
    img.src = uprightin.src;
    stride = "out";
  }
  else {
    img.src = uprightout.src;
    stride = "in";
  }
}

function diag0c() {
  if (stride=="in") {
    img.src = downleftin.src;
    stride = "out";
  }
  else {
    img.src = downleftout.src;
    stride = "in";
  }
}

function diag0d() {
  if (stride=="in") {
    img.src = upleftin.src;
    stride = "out";
  }
  else {
    img.src = upleftout.src;
    stride = "in";
  }
}

function messageover(message) {
  window.status = message;
  return true;
}

function messageout() {
  window.status = window.defaultStatus;
  return true;
}

