var x,y;
var xStep=0;
var yStep=0;
var separation;
var orientation = 1;
var message=null;
var xpos=new Array()
var ypos=new Array()
var chars=new Array();
var length = 0; 
var unchanged = 0;
var delay=100;

function makeSnake(msg, sep) {
  message=msg.split("");
  length = message.length;
  for (i=0; i<=message.length; i++) {xpos[i]=ypos[i]=-100;}
  separation = yStep = xStep = sep;
  for (i=0; i<message.length; i++) {
    document.write("<span id='char" + i + "' class='charstyle'>");
    document.write(message[i]);
    document.write("</span>");
    chars[i] = document.getElementById("char"+i);
  }
  setOrientation();
  refreshSnake();  
}

function handlerMM(e){
  x = (document.layers) ? e.pageX : document.body.scrollLeft+event.clientX
  y = (document.layers) ? e.pageY : document.body.scrollTop+event.clientY
}

document.onmousemove = handlerMM;

function refreshSnake() {
  setTimeout("refreshSnake()", delay)
  if (message==null) return;
  
  for (i=length-1; i>=0; i--) {
    if (i == 0) {
      xpos[0]=x+xStep;
      ypos[0]=y-10;
    } else {
      xpos[i]=xpos[i-1] + xStep
      ypos[i]=ypos[i-1] + yStep;
    }
    var aCharStyle = chars[i].style
    aCharStyle.posLeft=xpos[i]
    aCharStyle.posTop=ypos[i]
  }

  unchanged += delay;  
  // Change the orientation every 10 seconds.
  if (unchanged > 10000) {
    unchanged=0;
    setOrientation();
  }
}

function randomXY() {
  return separation*(Math.floor(Math.random()*3)-1);
}

function setOrientation() {
  var separationNew = separation;
  var xStepNew = xStep;
  var yStepNew = yStep;
  while ((xStepNew == 0 && yStepNew == 0) || 
         (xStep == xStepNew && yStep == yStepNew && separation == separationNew)) {
    xStepNew = randomXY();
    yStepNew = randomXY();
    separationNew = Math.floor(Math.max(9, Math.min(13, separation*2*Math.random())));
  }
  xStep = xStepNew;
  yStep = yStepNew;
  separation = separationNew;
  var desiredOrientation = (xStep < 0 || xStep == 0 && yStep < 0) ? -1 : 1;
  if (orientation == desiredOrientation) return;
  orientation = desiredOrientation;
  for (i=0; i<length/2; i++) {
    var tempChar = chars[i].innerHTML;
    chars[i].innerHTML = chars[length-i-1].innerHTML;
    chars[length-i-1].innerHTML = tempChar;
  }
}
