/* variant board */

var variantFrom = '';
var variantTo = '';
var turnedBoard = false;

function toVariantBoard(url,gameID) {
  window.open(url + '?show=c_variantBoard&gameID='+gameID,'_blank','width=600,height=600,resizable=yes,status=no,menubar=no,location=no,scrollbars=yes,toolbar=no');
}

function pickupPiece(piece) {
  variantFrom = piece;
  variantTo = '';
}

function variantBoardClick(coord) {
  if(variantFrom == '')
  {
    var obj = $(coord);
    /* first click cannot be empty field */
    if(isBlankField(obj.src)) 
    {
      //alert('empty');
    }
    else
    {
      variantFrom = coord;
    }
  }
  else
  {
    variantTo = coord;
    variantMove();
    variantFrom = '';
    variantTo = '';
  }
}

function variantMove()
{
  var from = $(variantFrom);
  var to = $(variantTo);
  
  if(isPickedUp(variantFrom))
  {
    if(isLightField(to.src))
    {
      to.src = "/img/chess/default/default_45px/light-"+variantFrom+".png";
    }
    else
    {
      to.src = "/img/chess/default/default_45px/dark-"+variantFrom+".png";
    }
  }  
  else
  {
    if(isLightField(to.src))
    {
      var tmp = from.src;
      to.src = tmp.replace(/dark-/g,"light-");
    }
    else
    {
      var tmp = from.src;
      to.src = tmp.replace(/light-/g,"dark-");
    }
      
    if(isLightField(from.src))
    {
      from.src = "/img/chess/default/default_45px/light-blank.png";
    }
    else
    {
      from.src = "/img/chess/default/default_45px/dark-blank.png";
    }  
  }
  
  var quiz = $('bQuizBoard');
  if(quiz)
  {
    if(quiz.value == 1)
    {
      getBoardsFen();
    }
  }
  
}

function isBlankField(field)
{
  if(field.match(/light-blank\.png/g) || field.match(/dark-blank\.png/g))
  {
    return true;
  }
  return false;
}

function isLightField(field)
{
  if(field.match(/light-/g))
  {
    return true;
  }
  return false;
}

function isPickedUp(field)
{
  if(field.match(/-/g))
  {
    return true;
  }
  return false;
}

/* */

function turnBoard(all)
{ 
  // get current board
  var board = new Array2D(8,8);
  for(x = 0;x < 8; x++)
  {
    for(y = 0;y < 8; y++)
    {
        board.items[x][y] = document.getElementById(getLetter(x)+""+(y+1)).src;        
    }
  }
  //switch
  for(x = 0;x < 8; x++)
  {
    for(y = 0;y < 8; y++)
    {
      document.getElementById(getLetter(other(x))+""+(other(y)+1)).src = board.items[x][y];        
    }
  }
  
  if(all == 1)
  {  
    // update borders
    for(x = 1;x <=8;x++)
    {
      var left = $('left'+x);
  	  left.innerHTML = otherBorder(left.innerHTML);
  
      var right = $('right'+x);
  	  right.innerHTML = otherBorder(right.innerHTML);
  
      var bot = $('bot'+x);
  	  bot.innerHTML = otherBorder(bot.innerHTML);
  
      var top = $('top'+x);
  	  top.innerHTML = otherBorder(top.innerHTML);    
    }  
    
    if(turnedBoard == false)
    {
      turnedBoard = true;
    }
    else
    {
      turnedBoard = false;
    }
  }
}

function other(num)
{
  switch (num)
  {
    case 0:
      return 7;
    case 1:
      return 6;
    case 2:
      return 5;
    case 3:
      return 4;
    case 4:
      return 3;
    case 5:
      return 2;
    case 6:
      return 1;
    case 7:
      return 0;
    default:
      return 0;      
  }
}

function otherBorder(num)
{  

  num = num.replace(/&nbsp;/g,'');
  
  switch (num)
  {
    case "1":
      return "8";
    case "2":
      return "7";
    case "3":
      return "6";
    case "4":
      return "5";
    case "5":
      return "4";
    case "6":
      return "3";
    case "7":
      return "2";
    case "8":
      return "1";
    case "a":
    case "A":
      return "H";
    case "b":
    case "B":
      return "G";      
    case "c":
    case "C":
      return "F";      
    case "d":
    case "D":
      return "E";      
    case "e":
    case "E":
      return "D";      
    case "f":
    case "F":
      return "C";      
    case "g":
    case "G":
      return "B";      
    case "h":
    case "H":
      return "A";      
            
    default:
      return "";      
  }
}

/* history */

function getFENFromServer(game, move, session)
{
  var pars = 'gameID='+game+'&move='+move+'&sid='+session+'&timestamp='+ new Date();;
  new Ajax.Request('/cgi-bin/test.pl', {
  method:'get', 
  parameters: pars, 
    onSuccess:  function( transport, json )
    {
      updateBoard(json);
    }
  });
}

function getFENFromServerNext(game,session)
{
  if(document.Move.actMove.value != document.Move.lastMove.value)
  {
    var move = document.Move.actMove.value;
    move++;
    getFENFromServer(game,move,session);
  }  
}

function getFENFromServerBack(game,session)
{
  if(document.Move.actMove.value > 1)
  {
    getFENFromServer(game,document.Move.actMove.value-1,session);
  }
}

function replayGame(game,move,session)
{ 
  
  getFENFromServer(game,move,session);

  if(move < document.Move.lastMove.value)
  {
    window.setTimeout("replayGame("+game+","+(move+1)+",'"+session+"')",5000);
  } 
}
 
function getFenPiece(p) {
	var piece;
	
	if(p == "p") {
		piece = "pawn";
	} else if (p == "P") {
		piece = "pawn";
	}else if (p == "r") {
		piece = "rook";
	}else if (p == "R") {
		piece = "rook";
	}else if (p == "n") {
		piece = "knight";
	}else if (p == "N") {
		piece = "knight";
	}else if (p == "b") {
		piece = "bishop";
	}else if (p == "B") {
		piece = "bishop";
	}else if (p == "q") {
		piece = "queen";
	}else if (p == "Q") {
		piece = "queen";
	}else if (p == "k") {
		piece = "king";
	}else if (p == "K") {
		piece = "king";
	}
	return piece;
}

function getFenColor(p) {
  var color;
	
	if(p == "p") {
		color = "black";
	} else if (p == "P") {
		color = "white";
	}else if (p == "r") {
		color = "black";
	}else if (p == "R") {
		color = "white";
	}else if (p == "n") {
		color = "black";
	}else if (p == "N") {
		color = "white";
	}else if (p == "b") {
		color = "black";
	}else if (p == "B") {
		color = "white";
	}else if (p == "q") {
		color = "black";
	}else if (p == "Q") {
		color = "white";
	}else if (p == "k") {
		color = "black";
	}else if (p == "K") {
		color = "white";
	}
	return color;
}
  
function updateBoard(json)
{          
  var fen = json.board; 
  fen = fen.replace(/(\/)/g,'');
  var i;
  var x = 0;
  var y = 7;
  var color;
  var piece;
  var field = fen.split("");
  var board = new Array2D(8,8);
  var empty = getEmptyBoard();
  for(i = 0; i < field.length;i++)
  {
		if(field[i].match(/[1-8]+/g)) {
		var tmp = field[i];
			while (tmp > 0) {
				if(x == 7) {
					 x = 0;
					 y--;
					 tmp--;
				} else {
					 x++;
					 tmp--;
				}
			}
		} else {
			color = getFenColor(field[i]);
      piece = getFenPiece(field[i]);
			board.items[x][y] = color + "-" + piece;
			if(x == 7) {
				x = 0;
				y--;
			} else {
				x++;
			}
		}   
  }
  i=0;
  for (x = 0;x <= 7;x++) { 	
	  for (y = 0;y <= 7;y++) {   
      if(board.items[x][y]) 
      {
   	    if((x == json.xx && y == json.yy) || (x == json.x && y == json.y)) 
   	    {
          document.getElementById(getLetter(x)+""+(y+1)).src = json.directory+"high-"+board.items[x][y]+".png";
    	  }
    	  else
    	  {
          document.getElementById(getLetter(x)+""+(y+1)).src = json.directory+""+(empty[i]?"dark":"light")+"-"+board.items[x][y]+".png";
        }
      }
      else
      {
   	    if((x == json.xx && y == json.yy) || (x == json.x && y == json.y))
        {
           document.getElementById(getLetter(x)+""+(y+1)).src = json.directory+"high-blank.png";
        }
        else
        {  
          document.getElementById(getLetter(x)+""+(y+1)).src = json.directory+""+(empty[i]?"dark":"light")+"-blank.png";
        }
      }     
      i++;
    }
  }
  if(!json.pgn)
  { 
    updateHistory(json.move);
    controlMoveSubmit(json.move);
  }
  if(turnedBoard)
  {
    turnBoard(0);
  }  
}
  
function Array2D(x,y)
{
  this.items = new Array(x);
  for(i=0;i<y;i++){this.items[i] = new Array(y);}
}

function getLetter(x) {
	var letter = new Array("A","B","C","D","E","F","G","H");
	return letter[x];
}

function getEmptyBoard () {
  var empty = new Array(
			1,0,1,0,1,0,1,0,
			0,1,0,1,0,1,0,1,
			1,0,1,0,1,0,1,0,
			0,1,0,1,0,1,0,1,
			1,0,1,0,1,0,1,0,
			0,1,0,1,0,1,0,1,
			1,0,1,0,1,0,1,0,
			0,1,0,1,0,1,0,1
	);
  return empty;
}

function updateHistory(move) {

  if((document.Move.actMove.value & 1) == 0 )
  {
    if(document.getElementById("histtype").value  == 1 )
    {
      document.getElementById("hist"+document.Move.actMove.value).className = 'pgnhistblack';
    }
    else
    {
      document.getElementById("hist"+document.Move.actMove.value).className = 'histblack';
    }
  }
  else
  {
    if(document.getElementById("histtype").value  == 1 )
    {
      document.getElementById("hist"+document.Move.actMove.value).className = 'histwhite';
    }
    else
    {
      document.getElementById("hist"+document.Move.actMove.value).className = 'histwhite';
    }
  }
  document.getElementById("hist"+move).className = 'histactivated';
  document.Move.actMove.value = move;    
}

function controlMoveSubmit(move)
{
  if(isLastMove(move))
  {
    if(document.getElementById('disabled').value == 0)
    {
      document.getElementById('movebutton').disabled = false;
    }
  }
  else
  {
    document.getElementById('movebutton').disabled = true;
  }
}

function isLastMove(move)
{
  if(document.Move.lastMove.value == move)
  {
    return true;
  }
  return false;
}

function nothing() {return true;};

function other(x)
{
  if(x == 7)
  {
    return 0;
  }
  else if(x == 6)
  {
    return 1;
  }
  else if(x == 5)
  {
    return 2;
  }
  else if(x == 4)
  {
    return 3;
  }
  else if(x == 3)
  {
    return 4;
  }
  else if(x == 2)
  {
    return 5;
  }
  else if(x == 1)
  {
    return 6;
  }
  else if(x == 0)
  {
    return 7;
  }
}

function getBoardsFen()
{
  var obj;
  var x;
  var y;
  var board = new Array2D(8,8);
  var rev;
  var rev2;
  var res;
  var res2;
  var fen = '';
  var fenFin;
  var one = '';
  var two = '';
  var thr = '';
  var four = '';
  var five = '';
  var six = '';
  var sev = '';
  var eight = '';
  var k = 1;
  
  for (x = 0;x <= 7;x++) { 	
	  for (y = 0;y <= 7;y++) {	     
	     
      obj = $(''+getLetter(x)+''+(other(y)+1));
      
      if(!obj.src.match(/blank/g))
      {
        rev = obj.src.split("/");
        rev2 = rev[7].split("-");
        //http://www.my-corner.de/img/chess/default/default_45px/light-white-knight.png          
        if(rev2[2] == "knight.png")
        {
          res[0] = "n";
        }
        else
        {
          res = rev2[2].split("");
        }
        if(rev2[1] == 'white')
        {
          res2 = res[0].toUpperCase();
        }
        else
        {
          res2 = res[0];
        }
        if(res2)
        {
          fen = fen + res2;
        }
        
      }
      else
      {
        fen = fen + '.';
      }
    }
  }
  fenArray = fen.split("");
  for(i=0;i< fenArray.length;i++)
  {
		if(k == 1) {
			one += fenArray[i];
			k++;
		} else if(k == 2) {
			two += fenArray[i];
			k++;
		} else if(k == 3) {
			thr +=  fenArray[i];
			k++;
		} else if(k == 4) {
			four += fenArray[i];
			k++;
		} else if(k == 5) {
			five += fenArray[i];
			k++;
		} else if(k == 6) {
			six += fenArray[i];
			k++;
		} else if(k == 7) {
			sev += fenArray[i];
			k++;
		} else if(k == 8) {
			eight += fenArray[i];
			k = 1;
		}
	}
	one = convertZeros(one);
	two = convertZeros(two);
	thr = convertZeros(thr);
	four = convertZeros(four);
	five = convertZeros(five);
	six = convertZeros(six);
	sev = convertZeros(sev);
	eight = convertZeros(eight);
	
	fenFin = one+'/'+two+'/'+thr+'/'+four+'/'+five+'/'+six+'/'+sev+'/'+eight;

	var fval = $('fen');
	if(fval)
	{
    fval.value = fenFin;
  }
}

function reverse(x) {
  var out = '';

  for (i = 0; i <= x.length; i++) {
    out = x.charAt (i) + out
  }

  return out;
} 

function convertZeros(str) {
	var tmp = 0;
  var result = '';
  var i;
	var spl = str.split("");
	
	for(i = 0;i < spl.length;i++) {
		if(spl[i].match(/\./))
		{
			tmp++;
		} 
    else 
    {
			if(tmp == 0) 
      {
				result += spl[i];
			} 
      else 
      {
				result += tmp + spl[i];
				tmp = 0;
			}
		}
	}	
	if(tmp) 
  {
		result += tmp;
	}
  return result;
}

/* moves*/
function firstOne($x){
	if(document.getElementById('moveFrom').value == '' && document.getElementById('Lock').value == '') {
		document.getElementById('moveFrom').value=$x;
		document.getElementById('Lock').value='1';

	} else  {
		document.getElementById('moveFrom').value='';
		document.getElementById('Lock').value='';
	}
}


function secondOne($x) {
if(document.getElementById('moveTo').value == '' && document.getElementById('Lock').value == '1') {
	document.getElementById('moveTo').value=$x;
} else {
	if(document.getElementById('moveTo').value == $x) {
		document.getElementById('moveTo').value='';
	} else {
		document.getElementById('moveFrom').value='';
		document.getElementById('moveTo').value='';
		document.getElementById('Lock').value='';
	}
}
}


function selectPiece($x) {
if (document.getElementById('moveFrom').value == '' || document.getElementById('moveFrom').value == $x) {
firstOne($x);
} else {
secondOne($x);
}
}

function clearCoords() {
	document.getElementById('moveFrom').value='';
	document.getElementById('moveTo').value='';
	document.getElementById('Lock').value='';
	setFocus();
}

function clearAutoCoords() {
	document.Auto.auto_enemy_from.value='';
	document.Auto.auto_enemy_to.value='';
	document.Auto.auto_me_to.value='';
	document.Auto.auto_me_from.value='';
	document.Auto.count.value=0;
	document.Auto.auto_enemy_from.focus();
}


function setAutoWildcard() {
	document.Auto.auto_enemy_from.value='*';
	document.Auto.auto_enemy_to.value='';
	document.Auto.auto_me_to.value='';
	document.Auto.auto_me_from.value='';
	document.Auto.count.value=2;
	document.Auto.auto_me_from.focus();
}

function selectPieceAuto($x) {
	if (document.Auto.count.value==0) {
		document.Auto.auto_enemy_from.value = $x;
		document.Auto.count.value++;
		return;
	} 

	if (document.Auto.count.value==1) {
		document.Auto.auto_enemy_to.value = $x;
		document.Auto.count.value++;
		return;
	} 

	if (document.Auto.count.value==2) {
		document.Auto.auto_me_from.value = $x;
		document.Auto.count.value++;
		return;
	} 

	if (document.Auto.count.value==3) {
		document.Auto.auto_me_to.value = $x;
		document.Auto.count.value++;
		return;
	}
	clearAutoCoords();
}


function rapidTime($x) {
	if(!$x){ setFocus();}
	var amTime = window.document.Rapid.Am.value;
	amTime++;
	var baseTime = window.document.Rapid.Base.value;
	if(baseTime == amTime) { alert("Die Zeit ist abgelaufen !");return false;}
	var absSeconds = baseTime - amTime;
	var relSeconds = absSeconds % 60;
	var absMinutes = Math.abs(Math.round((absSeconds - 30)/60));
	var coSeconds ="" + ((relSeconds > 9) ? relSeconds : "0" + relSeconds);
	var coMinutes ="" + ((absMinutes > 9) ? absMinutes : "0" + absMinutes);
	window.document.Rapid.Time.value = coMinutes + ":" + coSeconds;
	window.document.Rapid.Am.value = amTime;
	window.setTimeout('rapidTime(1)',1000);
}

function setFocus() {
	document.Move.moveFrom.focus();
} 

function setFocusAuto() {
	document.Auto.auto_enemy_from.focus();
} 

/* QUIZ */
var qmove = 1;
function selectPieceQuiz(p) {  
  var obj = $('move'+qmove);
  var obj2 = $('m_count');
  var i;
   
  for(i=1;i<=64;i++)
  {
    if(obj.options[i].value == p)
    {
      obj.options[i].selected = true;
      if(qmove == obj2.value)
      {
        qmove = 1;
      }
      else
      {
        qmove++;
      }
    }
  }
  //variantBoardClick(p);
}

function clearQuizCoords()
{
  var obj = $('m_count');
  var i;
  for(i=1;i<=obj.value;i++)
  {
    var obj2 = $('move'+i);
    obj2.options[0].selected = true;
  }
  qmove = 1;
}
