/*
Fields:
xPos      the actual x position of the sleigh          
yPos      the actual y position of the sleigh
deltaX    the delta in x direction, the sleigh is moved per timeslice
deltaY    the delta in y direction, the sleigh is moved per timeslice
interval  the interval in milliseconds that sets how often per second 
          the sleigh is moved, size of above mentioned timeslice
*/

// Global counter that counts all created(!) sleighs and helps to
// identify individual images
sleighCounter = 0;

// Maximum number of instances of type sleigh()
sleighMaxNumber = 1;

// Array that hosts all sleigh instances
sleighInstances = new Array(sleighMaxNumber);

// Number of available sleigh images 
sleighNumberOfImages = 1;

// The four only possible (partial) turn cycles.
// A full side to side turn cycle has to be accomplished 
// by two of these turn cycles.
// The first elements denotes the srcIdx, the sleigh has
// to have before it may be turned through the corresponding
// cycle.
sleighTurnSequenceRightToFace = new Array(0,1,2,3);
sleighTurnSequenceLeftToFace = new Array(6,5,4,3);
sleighTurnSequenceFaceToRight = new Array(3,2,1,0);
sleighTurnSequenceFaceToLeft = new Array(3,4,5,6);

// Base path to sleigh images
sleighImageBase = "http://www.gullwings.de/images/weihnachten/";

sleighImageSource = new Array(sleighNumberOfImages);
  
sleighImageSource[0] = sleighImageBase + "xmas-sleigh.gif";
//sleighImageSource[1] = sleighImageBase + "sleighr2.gif";
//sleighImageSource[2] = sleighImageBase + "sleighr1.gif";
//sleighImageSource[3] = sleighImageBase + "sleighr0.gif";
//sleighImageSource[4] = sleighImageBase + "sleighl1.gif";
//sleighImageSource[5] = sleighImageBase + "sleighl2.gif";
//sleighImageSource[6] = sleighImageBase + "sleighl3.gif";

function Sleigh(xPos, yPos, deltaX, deltaY, interval){
  this.image = new Image();
  this.image.id = "sleigh_"+ sleighCounter;
  this.image.style.position = "absolute";
  this.image.style.left = xPos;
  this.image.style.top = yPos;
  
  // preload all images
  for (var i=0; i < sleighNumberOfImages; i++)
    this.image.src = sleighImageSource[i];

  this.sourceIdx = 0;    
  this.image.src = sleighImageSource[this.sourceIdx]; // flying from left to right
  
  this.xPos = xPos;
  this.yPos = yPos;
  this.deltaX = deltaX;
  this.deltaY = deltaY;	
  this.interval = interval;
  
  sleigh_Show(this.image);

  //window.setTimeout("sleigh_Show()",1000);
  sleighInstances[sleighCounter] = this;
  this.activeInterval = window.setInterval("sleigh_Move("+sleighCounter+")",interval);
  sleighCounter++;
  //alert("ok");
}

function sleigh_Preload(){
  var sleighImage = new Arry(sleighNumberOfImages);

  // preload all images
  for (var i=0; i < sleighNumberOfImages; i++) {
    //sleighImage[i] = new Image();
    aimage = new Image();
    aimage.src = sleighImageSource[i];
    //sleighImage[i].src = sleighImageSource[i];
  }
}

function sleigh_Show(img){
  document.getElementsByTagName("body")[0].appendChild(img);
}

function sleigh_Move(sleighNumber){
  var doRemove = false;

  sleigh = sleighInstances[sleighNumber];
  sleigh.xPos = sleigh.xPos + sleigh.deltaX;
  sleigh.yPos = sleigh.yPos + sleigh.deltaY;
  
  try {
    doRemove = doRemove || ((sleigh.xPos + sleigh.image.width) > window.innerWidth);
    doRemove = doRemove || ((sleigh.yPos + sleigh.image.height) > window.innerHeight);
    doRemove = doRemove || (sleigh.xPos < 0);
    doRemove = doRemove || (sleigh.yPos < 0);
    doRemove = doRemove || (sleigh.xPos > 2000)
  }
  catch (exc){
    doRemove = true;
  }

  if (doRemove) {
    window.clearInterval(sleigh.activeInterval);
    document.getElementsByTagName("body")[0].removeChild(sleigh.image);
  }
  else {
    sleigh.image.style.left = sleigh.xPos;
    sleigh.image.style.top = sleigh.yPos;
  }    
}

/*
function sleigh_TurnLeft(sleighNumber){
  sleigh = sleighInstances[sleighNumber];
  
  if (sleigh.srcIdx == 0) {
  }
  else if (sleigh.srcIdx == 6) {
       }	
}
*/
