// JavaScript Document
var provera = new ProveraPoteza();
var od = false;
var beli_je_dole = true;
function PotezPocetak(obj)
{
 var i = obj.cellIndex;
 var j = obj.parentNode.rowIndex; 
 var tabla = document.getElementById("tabla");
 var vrste = tabla.getElementsByTagName("tr");
 var kolona = vrste[j].getElementsByTagName("td");
 if (!od)
 {
  od = true;
  slika = kolona[i].innerHTML;
  pami = i;
  pamj = j;
 }
 else
 {
  if (beli_je_dole)
  {
   pocetno = (10-pamj)*12+1+pami;
   krajnje = (10-j)*12+1+i;
  }
  else
  {
   pocetno = (10-(9 - pamj))*12+1+(9 - pami);
   krajnje = (10-(9 - j))*12+1+(9 - i);
  }
  if (!provera.ObradiPotez(pocetno, krajnje))
  {
   alert("Illegal move!");
   od = false;
   return;
  }
  od = false;
  kolona[i].innerHTML = slika;
  kolona = vrste[pamj].getElementsByTagName("td");
  kolona[pami].innerHTML = "&nbsp;";
  getMovesList();
  //alert(provera.nizfenova.length + " " + provera.listapoteza.length);
 }
}
//* okretanjae table */
function OkreniTablu()
{    
 var tabla = document.getElementById("tabla");
 var vrste = tabla.getElementsByTagName("tr");
 var zadnji_index_vrste = vrste.length - 1;
 for (var n = 0; n < vrste.length; n++)
 {
  var kolona = vrste[n].getElementsByTagName("td");
  var zadnji_index_kolone = kolona.length - 1;
  for (var i = 0; i < kolona.length - n; i++)
  {
  	if ((i + n == zadnji_index_vrste) && n > vrste.length/2 - 1)
  	 continue;
  	var pom = kolona[i].innerHTML;
  	//alert(pom);
  	kolona[i].innerHTML = vrste[zadnji_index_vrste - n].getElementsByTagName("td")[zadnji_index_kolone - i].innerHTML;
  	vrste[zadnji_index_vrste - n].getElementsByTagName("td")[zadnji_index_kolone - i].innerHTML = pom;
  }
 }
 ( beli_je_dole ) ? beli_je_dole = false : beli_je_dole = true;
}
/*
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
*/
// Revised version May 11th 2007
function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}	
	}
	return returnElements;
}

/**
na osnovu zadatog fena vraca listu sledecih poteza
**/
function getMovesList()
{
	var d = document.getElementById("dmovelist");
	d.innerHTML = '<img src="/images/ajax-loader.gif" border="0" />';
	var nocache = new Date();
	var url = "/ajax/get_moves_list.php?fen="+provera.FEN+"&"+nocache.getTime();
	obj = createHTTPObject();
	obj.open("GET", url, true);
	obj.send(null);
	obj.onreadystatechange = function()
	{
	 if (obj.readyState == 4)
	 {
	  if (obj.status == 200)
	  {
	   handleMovesList(obj.responseText);
	   prikaziListuPoteza();
	  }
	  else
	  {
	   alert('There was a problem with the request.');
	  }
	 }	
	};
}

function handleMovesList(result)
{
 var d = document.getElementById("dmovelist");
 d.innerHTML = result;
 
 var movebackDugme = document.getElementById("movebackDugme");
 ( provera.pokazivacNaNizFen != 0 ) ? movebackDugme.disabled = false : movebackDugme.disabled = true;
}

function obradiPotez(id, pp, kp)
{
	//alert(provera.FEN);
//	var d = document.getElementById("dmovelist");
//	d.innerHTML = '<img src="/images/ajax-loader.gif" border="0" />';
	povuciPotezNaTabli(pp, kp);
	
	return false;
}
//alert(provera.FEN);
/**
* Vuce potez na tabli na osnovu ajax razultata iz funkcije obradiPotez(id)
*/
function povuciPotezNaTabli(pocetnoPolje, krajnjePolje)
{
 var iPocetno =  pocetnoPolje%12 - 2;
 var jPocetno =  parseInt(pocetnoPolje/12,10) - 2;
 
 var iKrajnje =  krajnjePolje%12 - 2;
 var jKrajnje =  parseInt(krajnjePolje/12,10) - 2;
 if (beli_je_dole)
 {
 	iPocetno =  1 + iPocetno;
 	jPocetno =  8 - jPocetno;
 	
 	iKrajnje =  1 + iKrajnje;
 	jKrajnje =  8 - jKrajnje;
 }
 else
 {
 	iPocetno =  9 - 1  - iPocetno;
 	jPocetno =  9 - 8 + jPocetno;
 	
 	iKrajnje =  9 - 1 - iKrajnje;
 	jKrajnje =  9 - 8 + jKrajnje;
 }
 if (!provera.ObradiPotez(parseInt(pocetnoPolje, 10), parseInt(krajnjePolje, 10)))
  {
   alert("Illegal move!");
   return;
  }
  
 var tabla = document.getElementById("tabla");
 var vrste = tabla.getElementsByTagName("tr");
 var kolona = vrste[jPocetno].getElementsByTagName("td");
 
 pom = kolona[iPocetno].innerHTML;
 kolona[iPocetno].innerHTML = "&nbsp;";
 
 kolona = vrste[jKrajnje].getElementsByTagName("td");
 kolona[iKrajnje].innerHTML = pom; 
 
 getMovesList();
}

/**
* jedan potez nazad
*/
function moveBack(index)
{
	( index == -1 ) ? provera.pokazivacNaNizFen-- : provera.pokazivacNaNizFen = index + 1;
	provera.kreirajPozicijuNaOsnovuFena(provera.nizfenova[provera.pokazivacNaNizFen]);
	kreirajTabeluNaOsnovuPozicije();
	getMovesList();
}

/**
* na osnovu pozicije kreira tabelu partije
*/
function kreirajTabeluNaOsnovuPozicije()
{
	for(var i=0;i<provera.m_cPozicija.length;i++)
	{
		if (provera.m_cPozicija[i] == 'o')
			continue;
		var str = getTableString(provera.m_cPozicija[i]);
		
		var iPocetno =  i%12 - 2;
		var jPocetno =  parseInt(i/12,10) - 2;
		
		if (beli_je_dole)
		{
			iPocetno =  1 + iPocetno;
			jPocetno =  8 - jPocetno;
		}
		else
		{
			iPocetno =  9 - 1  - iPocetno;
			jPocetno =  9 - 8 + jPocetno;
		}
		
		var tabla = document.getElementById("tabla");
		var vrste = tabla.getElementsByTagName("tr");
		var kolona = vrste[jPocetno].getElementsByTagName("td");
		
		kolona[iPocetno].innerHTML = str;
	}
}

/**
* vraca string koji treba staviti u tabelu partije
*/
function getTableString(slovo)
{
	var str = "";
	switch(slovo)
	{
		case 'x':
			str = "&nbsp;";
			break;
		case 'P':
			str = "<img src=\"/images/wp.gif\">";
			break;
		case 'T':
			str = "<img src=\"/images/wr.gif\">";
			break;
		case 'S':
			str = "<img src=\"/images/wn.gif\">";
			break;
		case 'L':
			str = "<img src=\"/images/wb.gif\">";
			break;
		case 'D':
			str = "<img src=\"/images/wq.gif\">";
			break;
		case 'K':
			str = "<img src=\"/images/wk.gif\">";
			break;
		case 'p':
			str = "<img src=\"/images/bp.gif\">";
			break;
		case 't':
			str = "<img src=\"/images/br.gif\">";
			break;
		case 's':
			str = "<img src=\"/images/bn.gif\">";
			break;
		case 'l':
			str = "<img src=\"/images/bb.gif\">";
			break;
		case 'd':
			str = "<img src=\"/images/bq.gif\">";
			break;
		case 'k':
			str = "<img src=\"/images/bk.gif\">";
			break;
	}
	return str;
}

/**
* stampa listu poteza ispod tabele
*/
function prikaziListuPoteza()
{
	var divLista = document.getElementById("listaPotezaDiv");
	if (provera.listapoteza.length == 0)
		return;
	var potez = 1;
	var strListaPoteza = "";
	for(var i=0;i<provera.listapoteza.length;i++)
	{
		var prvoSlovo = provera.listapoteza[i].charAt(0);
		var strZaPrikaz = provera.listapoteza[i];
		if (prvoSlovo == "K" || prvoSlovo == "Q" || prvoSlovo == "R" || prvoSlovo == "B" || prvoSlovo == "N")
		{
			prvoSlovo = "<img src=\"/images/" + prvoSlovo.toLowerCase() + ".gif\" width=\"14\" height=\"14\" border=\"0\" />";
			strZaPrikaz = prvoSlovo + provera.listapoteza[i].substr(1);
		}
		if (i%2 == 0)
		{
			strListaPoteza += potez + ". " + "<a href=\"#\" onclick=\"moveBack(" + i + ")\" >" + strZaPrikaz + "</a>";
			potez++;
		}
		else
			strListaPoteza += " " + "<a href=\"#\" onclick=\"moveBack(" + i + ")\" >" + strZaPrikaz + "</a> ";
	}
	divLista.innerHTML = strListaPoteza;
}

function translateFigureLetterEnglish(slovo)
{
	var str = "";
	switch(slovo)
	{
		case 'R':
			str = "T";
			break;
		case 'N':
			str = "S";
			break;
		case 'B':
			str = "L";
			break;
		case 'Q':
			str = "D";
			break;
		case 'K':
			str = "K";
			break;
	}
	return str;
}

function searchDatabaseForPosition(fen)
{
	var arrFen = fen.split(" ");
	var pozicijaFen = arrFen[0];
	location.href = "/searchposition/" + pozicijaFen + "/";
	return false;
}
window.onload = getMovesList;

function save()
{
	if (document.getElementById("savepositiondiv") != null || document.getElementById("savedpositiondiv") != null)
		return false;
	var objLink = document.getElementById("savepositionimg");
	var arrPos = findPosition(objLink);
	var topLeftX = arrPos[0];
	var topLeftY = arrPos[1];
	var height = getHeight(objLink);
	var width = getWidth(objLink);
	var eDiv=document.createElement("DIV");
	eDiv.style.width=200 + "px";
	eDiv.style.height=120 + "px";
	eDiv.style.position="absolute";
	eDiv.style.display="block";
	eDiv.style.backgroundColor="white";
	eDiv.style.textAlign = "center";
	eDiv.style.left=topLeftX - 200 + "px";
	eDiv.style.top=topLeftY + height + "px";
	
	
	//eDiv.style.overflow="scroll";
	eDiv.setAttribute("id", "savepositiondiv");
	//eDiv.setAttribute("class", "drag");
	//eDiv.setAttribute("className", "drag");
	eDiv.innerHTML = '<div><table style="margin-top: 5px;" width="98%" border="0" cellpadding="0" cellspacing="0" align="center"><tbody><tr><td class="sBoxTL"><img alt="" src="/images/spacer.gif" width="1" height="1"></td><td class="sBoxT"><img alt="" src="/images/spacer.gif" width="1" height="1"></td><td class="sBoxTR"><img alt="" src="/images/spacer.gif" width="1" height="1"></td></tr><tr><td class="sBoxL"><img alt="" src="/images/spacer.gif" width="1" height="1"></td><td class="sBoxM" style="vertical-align: middle;" align="center"><!--    ITEM BOX    -->Add note<br /><textarea name="note" id="note"></textarea><br /><input type="button" value="Submit" name="addNoteBtn" onclick="doSave();" /><input type="button" value="Cancel" onclick="doSaveCancel();" /><!--    ITEM BOX    --></td><td class="sBoxR"><img alt="" src="/images/spacer.gif" width="1" height="1"></td></tr><tr><td class="sBoxBL"><img alt="" src="/images/spacer.gif" width="1" height="1"></td><td class="sBoxB"><img alt="" src="/images/spacer.gif" width="1" height="1"></td><td class="sBoxBR"><img alt="" src="/images/spacer.gif" width="1" height="1"></td></tr></tbody></table></div>';
	document.body.appendChild(eDiv);
	
	
	return false;
}

function doSave()
{
	var txtarea = document.getElementById('note');
	var nocache = new Date();
	var url = '/ajax/saveposition.php?pokazivacNaNizFen=' + provera.pokazivacNaNizFen + '&nemaulistisledecihpoteza=' + provera.nemaulistisledecihpoteza + '&nizfenova=' + provera.nizfenova + '&listapoteza=' + provera.listapoteza + '&promocijautoku=' + provera.promocijautoku + '&FEN=' + provera.FEN + '&m_cPozicija=' + provera.m_cPozicija + '&note=' + txtarea.value + '&' + nocache.getTime();
	obj = createHTTPObject();
	obj.open("GET", url, true);
	obj.send(null);
	obj.onreadystatechange = function()
	{
	 if (obj.readyState == 4)
	 {
	  if (obj.status == 200)
	  {
	   doSaveCancel();
	  }
	  else
	  {
	   alert('There was a problem with the request.');
	  }
	 }	
	};
}

function getSavedPositions()
{
	if (document.getElementById("savedpositiondiv") != null || document.getElementById("savepositiondiv") != null)
		return false;
	var objLink = document.getElementById("savedpositionlink");
	var arrPos = findPosition(objLink);
	var topLeftX = arrPos[0];
	var topLeftY = arrPos[1];
	var height = getHeight(objLink);
	var width = getWidth(objLink);
	var eDiv=document.createElement("DIV");
	eDiv.style.width=400 + "px";
	eDiv.style.height=300 + "px";
	eDiv.style.position="absolute";
	eDiv.style.display="block";
	eDiv.style.backgroundColor="white";
	eDiv.style.textAlign = "center";
	eDiv.style.left=topLeftX - 400 + "px";
	eDiv.style.top=topLeftY + height + "px";
	eDiv.style.overflow="scroll";
	eDiv.setAttribute("id", "savedpositiondiv")
	//eDiv.setAttribute("class", "drag");
	//eDiv.setAttribute("className", "drag");
	eDiv.innerHTML = '<img src="/images/ajax-loader.gif" border="0" />';
	document.body.appendChild(eDiv);
		
	var nocache = new Date();
	var url = '/ajax/getsavedpositions.php?' +nocache.getTime();
	obj = createHTTPObject();
	obj.open("GET", url, true);
	obj.send(null);
	obj.onreadystatechange = function()
	{
	 if (obj.readyState == 4)
	 {
	  if (obj.status == 200)
	  {
	   eDiv.innerHTML = obj.responseText;
	  }
	  else
	  {
	   alert('There was a problem with the request.');
	  }
	 }	
	};
	return false;
}

function findPosition(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}
	
function getHeight(el) {
	if(el.offsetHeight)
		return el.offsetHeight;
	else 
		if(el.style.pixelHeight)
			return el.style.pixelHeight;
	return el.offsetHeight;
}
function getWidth(el) {
	if(el.offsetWidth)
		return el.offsetWidth;
	else 
		if(el.style.pixelWidth)
			return el.style.pixelWidth;
}

function removeElem()
{
	var div = document.getElementById("savedpositiondiv");
	div.parentNode.removeChild(div);
	return false;
}

function deletePosition(id)
{
	var nocache = new Date();
	var url = '/ajax/deletesavedposition.php?id=' + id + '&' + nocache.getTime();
	obj = createHTTPObject();
	obj.open("GET", url, true);
	obj.send(null);
	obj.onreadystatechange = function()
	{
	 if (obj.readyState == 4)
	 {
	  if (obj.status == 200)
	  {
	   //alert(obj.responseText);
	  }
	  else
	  {
	   alert('There was a problem with the request.');
	  }
	 }	
	};
	
	var div = document.getElementById('div' + id);
	div.style.display = "none";
	return false;
}

function doSaveCancel()
{
	var div = document.getElementById("savepositiondiv");
	div.parentNode.removeChild(div);
	return false;
}

function loadSavedPosition(id)
{
	provera.pokazivacNaNizFen = document.getElementById('pokazivacNaNizFen_' + id).value;
	provera.nemaulistisledecihpoteza = document.getElementById('nemaulistisledecihpoteza_' + id).value;
	provera.nizfenova = document.getElementById('nizfenova_' + id).value.split(",");
	provera.listapoteza = document.getElementById('listapoteza_' + id).value.split(",");
	provera.promocijautoku = document.getElementById('promocijautoku_' + id).value;
	provera.FEN = document.getElementById('FEN_' + id).value;
	provera.m_cPozicija = document.getElementById('m_cPozicija_' + id).value.split(",");
	getMovesList();
	prikaziListuPoteza();
	kreirajTabeluNaOsnovuPozicije();
	removeElem();
		
	return false;
}