/**
 * The pacman object
 * @author Stalski
 */
var Pacman = Pacman || {};

Pacman.url = 'http://blog.menhir.be/pacman/pacman.gif';
Pacman.pacman = null;
Pacman.food = 0;
Pacman.energy = new Array();
Pacman.energyBoostInterval = 12;
Pacman.energyBoosts = 0;
Pacman.startTimeout = null;
Pacman.foodSelector = 'a,object';

/**
 * Pacman init
 */
Pacman.init = function() {

  Pacman.pacman = $('<img id="pacman" src="'+ Pacman.url +'" />');
  Pacman.pacman.css({'border': 'none', 'position': 'absolute', 'top' : '200px', 'left' : '200px', 'z-index' : '100'});
  
  Pacman.energy[0] = $('<div id="food0"></div>').css({'width': '40px', 'height': '40px', 'position': 'absolute', 'top' : '20px', 'right' : '20px', 'z-index' : '300', 'background-color': '#CC0000'});
  Pacman.energy[1] = $('<div id="food1"></div>').css({'width': '40px', 'height': '40px', 'position': 'absolute', 'top' : '20px', 'left' : '20px', 'z-index' : '300', 'background-color': '#CC0000'});
  $('body').prepend(Pacman.pacman);
  for (piece in Pacman.energy) {
    $('body').prepend(Pacman.energy[piece]);
  }
  
  Pacman.startTimeout = setTimeout("Pacman.seek()", 2000);
  
}

/**
 * Pacman seek
 */
Pacman.seek = function(timeout) {
  clearTimeout(Pacman.startTimeout);
  setTimeout("Pacman.walk()", 400);  
}

/**
 * Pacman walk
 */
Pacman.walk = function() {
  
  var number = $(Pacman.foodSelector).length;
  
  // Show victory when finished
  if (number == 0) {
    return Pacman.victory();
  }
  Pacman.food++;

  // What am i gonna eat
  if (!(Pacman.food % Pacman.energyBoostInterval) && Pacman.energyBoosts < 2) {
    var jElement = $(Pacman.energy[Pacman.energyBoosts]);
    Pacman.energyBoosts++;  
  }
  else {
    // Pick a random link
    var link = Math.floor(Math.random() * number);
    var jElement = $($(Pacman.foodSelector).get(link));    
  }
  
  var position = jElement.offset();    
  var direction = Pacman.getDirection(position);
  
  Pacman.pacman.animate({
    left: '+=' + direction.left,
    top: '+=' + direction.top,
  }, 1200, function() {  
    Pacman.eat(jElement);  
    if (jElement.is('div')) {
      Pacman.bonus();
    }  
  });
}

/**
 * Pacman eat
 */
Pacman.eat = function(jElement) {
  jElement.remove();
  Pacman.seek();
}

/**
 * Pacman victory
 */
Pacman.victory = function() {
  $('body').prepend('<h1 style="padding: 10px 25px; background-color: #cccccc;width: 400px; margin: 0 auto;">Continue to level 2?</h1>').fadeTo("slow", 1.0);
  return true;
}

/**
 * Pacman victory
 */
Pacman.bonus = function() {
    
  $('body').fadeTo('slow', 0.2, function() {
    $('body').fadeTo('slow', 1, function() {
      $('body').fadeTo('slow', 0.2, function() {
        $('body').fadeTo('slow', 1, function() {
          $('body').fadeTo('slow', 0.2, function() {
            $('body').fadeTo('slow', 1, function() {
              $('body').fadeTo('slow', 0.2, function() {
                $('body').fadeTo('slow', 1, function() {
                  // Animation really complete.
                });
              });
            });
          });
        });
      });
    });
  });
}

/**
 * Pacman get direction
 */
Pacman.getDirection = function(position) {

  var pacmanPosition = Pacman.pacman.offset();
  var goToLeft = position.left - pacmanPosition.left - 40;
  var goToTop = position.top - pacmanPosition.top - 40;
  
  return {left: goToLeft, top: goToTop};
}

/**
 * Document onload behaviour
 */
$(document).ready(function() {
  Pacman.init();
});
