/***********************************************************************************************************
 * su.bot.checkers.javascript.User
 * Location: http://www.bot.su/library/su/bot/checkers/javascript/User.js
 * Index Version Location: http://www.bot.su/library/su/bot/checkers/javascript/user/index.html
 * © Bot.Su (http://www.bot.su/)
***********************************************************************************************************/

if (typeof su == "undefined") {su = {};};
if (typeof su.bot == "undefined") {su.bot = {};};
if (typeof su.bot.checkers == "undefined") {su.bot.checkers = {};};
if (typeof su.bot.checkers.javascript == "undefined") {su.bot.checkers.javascript = {};};

if (typeof su.bot.checkers.javascript.User == "undefined") {
 su.bot.checkers.javascript.User = function() {}; 
 su.bot.checkers.javascript.User.prototype = new su.bot.checkers.javascript.Gamer();

 su.bot.checkers.javascript.User.prototype.className = "User"; 
 su.bot.checkers.javascript.User.prototype.classNamespace = "su.bot.checkers.javascript.User"; 
 su.bot.checkers.javascript.User.prototype.classCreated = "20070403"; 
 su.bot.checkers.javascript.User.prototype.classCreator = "http://www.bot.su/"; 
 su.bot.checkers.javascript.User.prototype.classLocation = "http://www.bot.su/library/su/bot/checkers/javascript/User.js"; 
 su.bot.checkers.javascript.User.prototype.classIndexLocation = "http://www.bot.su/library/su/bot/checkers/javascript/user/index.html"; 
 su.bot.checkers.javascript.User.prototype.classVersion = "20070528"; 
 su.bot.checkers.javascript.User.prototype.classVersionLocation = "http://www.bot.su/library/su/bot/checkers/javascript/user/builds/20070528/User.js"; 
 su.bot.checkers.javascript.User.prototype.classVersionIndexLocation = "http://www.bot.su/library/su/bot/checkers/javascript/user/index.html";
 
 su.bot.checkers.javascript.User.prototype.environment;
  su.bot.checkers.javascript.User.prototype.getEnvironment = function () {return this.environment;};
  su.bot.checkers.javascript.User.prototype.setEnvironment = function (environment) {this.environment = environment;}; 
 su.bot.checkers.javascript.User.prototype.makedSquare = null;
  su.bot.checkers.javascript.User.prototype.getMakedSquare = function () {return this.makedSquare;};
  su.bot.checkers.javascript.User.prototype.setMakedSquare = function (makedSquare) {this.makedSquare = makedSquare;};  
 
 su.bot.checkers.javascript.User.prototype.init = function(e) {
  if(this.mustTrace()) {this.getLog().println("su.bot.checkers.javascript.User.init is runing...");};
  this.setMakedSquare(null);
 };
 
 su.bot.checkers.javascript.User.prototype.makeSquare = function(e) {
  //if(this.mustTrace()) {this.getLog().println("su.bot.checkers.javascript.User.makeSquare is runing...");};
  var targetElement;
  if (e.target) {targetElement = e.target;} else if (e.srcElement) {targetElement = e.srcElement;};
  if (targetElement.nodeType == 3) {targetElement = targetElement.parentNode;}; // defeat Safari bug
  var environment = this.getEnvironment();
  var referee = environment.getReferee();
  if(referee.getWhoseMove() == this.name) {
   var mainBoard = environment.getMainBoard();
   if(this.makedSquare == null) {
    var fromSquare = new su.bot.checkers.javascript.Square();
	fromSquare.setId(targetElement.id);
	var checker = mainBoard.getChecker(fromSquare.i, fromSquare.j);
    if(checker.getOwner() == this.name) {
     this.makedSquare = fromSquare; 
     document.getElementById(targetElement.id).style.borderColor = "yellow";
	};
   } else {
    var toSquare = new su.bot.checkers.javascript.Square();
	toSquare.setId(targetElement.id);
	var toChecker = mainBoard.getChecker(toSquare.i, toSquare.j);
    if(toChecker.getOwner() == this.name) {
     document.getElementById(this.makedSquare.getId()).style.borderColor = "#000000";
     document.getElementById(targetElement.id).style.borderColor = "yellow";
     this.makedSquare = toSquare; 
	} else if(toChecker.isEmpty()) {
     var move = new su.bot.checkers.javascript.Move();
	 move.setFrom(this.makedSquare); move.setTo(toSquare);
	 move.setChecker(mainBoard.getChecker(this.makedSquare.i, this.makedSquare.j).clone());
	 var toI = toSquare.i;
	 var properties = environment.getProperties();
	 var whoseTopPosition = properties.getWhoseTopPosition();
	 move.setComeKing( ( (toI == (properties.getNumberSquaresVertical()-1)) && (this.name == whoseTopPosition) ) || ( (toI == 0) && (this.name != whoseTopPosition) ));
	 var toJ = toSquare.j; var fromI = this.makedSquare.i; var fromJ = this.makedSquare.j;
	 var directI = ((toI-fromI) > 0) ? 1 : -1; var directJ = ((toJ-fromJ) > 0) ? 1 : -1;
	 var takeI = fromI + directI; var takeJ = fromJ + directJ;
	 while(takeI != toI && takeJ != toJ
		   && mainBoard.getChecker(takeI, takeJ).isEmpty()) {
      takeI = takeI + directI; takeJ = takeJ + directJ;
	 };
     if(takeI != toI && takeJ != toJ
        && !mainBoard.getChecker(takeI, takeJ).isEmpty()) {
      var takedSquare = new su.bot.checkers.javascript.Square();
	  takedSquare.setI(takeI); takedSquare.setJ(takeJ);
	  move.setTake(takedSquare);
	  move.setTakedChecker(mainBoard.getChecker(takeI, takeJ).clone());
	 };
     if(referee.isLegalMove(move)) {
      document.getElementById(this.makedSquare.getId()).style.borderColor = "#000000";
      document.getElementById(targetElement.id).style.borderColor = "#000000";
	  referee.doMove(this.name, move);
	  this.makedSquare = null;
	 };
    };
   };
  };
 }; 
  
 su.bot.checkers.javascript.User.prototype.run = function() {
  if(this.mustTrace()) {this.getLog().println("su.bot.checkers.javascript.User.run is runing...");};
  var environment = this.getEnvironment();
  var the = this;
  environment.getEvents().addEventListener(environment.getProperties().getBoardElementId(), "click", function(e) {the.makeSquare(e);}, false);
 };
};
