function report (report) { alert(report); }
function clock() 
{ var digital = new Date();
  var hours = digital.getHours();
  var minutes = digital.getMinutes();
  var seconds = digital.getSeconds();
  if (minutes <= 9) minutes = "0" + minutes;
  if (seconds <= 9) seconds = "0" + seconds;
  dispTime = hours + ":" + minutes + ":" + seconds;
  basicclock.innerHTML = dispTime;
  var now = new Date();
  var days = new Array('воскресенье','понедельник','вторник','среда','четверг','пятница','суббота');
  var months = new Array('января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
  var date = now.getDate();
  var year = (now.getYear() < 1000) ? now.getYear() + 1900 : now.getYear();
  today = days[now.getDay()] + ",<br>" + date + " " + months[now.getMonth()] + " " + year + " года";
  basicdate.innerHTML = today;
  setTimeout("clock()", 1000); }
var mousex = 0;
var mousey = 0;
var grabx = 0;
var graby = 0;
var orix = 0;
var oriy = 0;
var elex = 0;
var eley = 0;
var algor = 0;
var movedone='';
var tbl='';
// this variable determines which of players can make move
// you can use smth like:
// var initial_color = '<? echo($color) ?>';
var initial_color = 'white';
//var initial_color = 'black';
var rokirovka = false;
var dragobj = null;
var isDragNow = false;
function falsefunc() { return false; } // used to block cascading events
function init()
{
  document.onmousemove = update; // update(event) implied on NS, update(null) implied on IE
  update();
  var a=document.getElementsByTagName("img");
  if(a)
  {
    for( var b=0; b<a.length; b++)
	{
		a[b].onmousedown = function(){grab(this);};
	}
  }
	for(var i=1; i<9; i++){
		for(var j=1; j<9; j++){
			var q = j.toString(10)+i.toString(10);
			var a=document.getElementById(q);
			var x = getX(a); var y = getY(a);
//			alert('q'+q+'x'+x);
			a.isX = x;
			a.isY = y;
}}
}
function getMouseXY(e) // works on IE6,FF,Moz,Opera7
{ 
  if (!e) e = window.event; // works on IE, but not NS (we rely on NS passing us the event)
  if (e)
  { 
    if (e.pageX || e.pageY)
    { // this doesn't work on IE6!! (works on FF,Moz,Opera7)
      mousex = e.pageX;
      mousey = e.pageY;
      algor = '[e.pageX]';
      if (e.clientX || e.clientY) algor += ' [e.clientX] '
    }
    else if (e.clientX || e.clientY)
    { // works on IE6,FF,Moz,Opera7
      mousex = e.clientX + document.body.scrollLeft;
      mousey = e.clientY + document.body.scrollTop;
      algor = '[e.clientX]';
      if (e.pageX || e.pageY) algor += ' [e.pageX] '
    }  
  }
}
function update(e)
{
  getMouseXY(e); // NS is passing (event), while IE is passing (null)
}
function grab(context)
{
	if(isDragNow){
		return;
	}
	var initialp = context.parentNode.id;
	var ret = false;
	for(var i=0; i<moves.length; i++)
	{
		if(initialp==moves[i][0])
		{
			ret = true;
			break;
		}
	}
	if(!ret)
	{
		return;
	}
	tbl = document.getElementById('tbl').innerHTML;
  document.onmousedown = falsefunc; // in NS this prevents cascading of events, thus disabling text selection
  dragobj = context;
  dragobj.style.zIndex = 10; // move it to the top
  document.onmousemove = drag;
  document.onmouseup = drop;
  grabx = mousex;
  graby = mousey;
  elex = orix = dragobj.offsetLeft;
  eley = oriy = dragobj.offsetTop;
  isDragNow = true;
  update();
}
function drag(e) // parameter passing is important for NS family 
{
  if (dragobj)
  {
    elex = orix + (mousex-grabx);
    eley = oriy + (mousey-graby);
    dragobj.style.position = "absolute";
    dragobj.style.left = (elex).toString(10) + 'px';
    dragobj.style.top  = (eley).toString(10) + 'px';
  }
  update(e);
  return false; // in IE this prevents cascading of events, thus text selection is disabled
}
function drop()
{
	if (dragobj)
	{
		var a=checkDrop();
		if(a){
		    dragobj.style.zIndex = 0;
//			isDragNow = false;
//			alert (a.id);
			var x = a.isX; var y = a.isY;
			dragobj.style.left = (x).toString(10) + 'px';
			dragobj.style.top  = (y).toString(10) + 'px';
			par = dragobj.parentNode;
			if(par!=a)
			{
				par.removeChild(dragobj);
				a.innerHTML='';
				a.appendChild(dragobj);
				if(!rokirovka){
					initial_color = (initial_color == 'black')?'white':'black';
				}
				rokirovka = false;
				last_move = a.id;
				var y = 9 - parseInt(a.id.substr(1,1));
				
				movedone=convertId2Str(par.id)+'-'+convertId2Str(a.id);
				// Если черная пешка в конце своей доски, то выбор замены
				if(dragobj.src.lastIndexOf("bl_pawn.gif") > 0 && y == 1)
					dialogChoice(a.id);
				// Если белая пешка в конце своей доски, то выбор замены
				else if(dragobj.src.lastIndexOf("w_pawn.gif") > 0 && y == 8)
					dialogChoice(a.id);
				// you can submit form or use AJAX function with value of 'move' variable.
				// now alert shows last move to user. change this to smthng else.
//				alert(move);
//				document.frm.move = move; document.frm.submit();
			}
			else
			{
				isDragNow = false;
			}
		    dragobj = null;
			update();
			document.onmousemove = update;
			document.onmouseup = null;
			document.onmousedown = null;   // re-enables text selection on NS
		}
	}
}
function dialogChoice(id)
{ if(!isDragNow) return false;
  var winResult=window.open('choice.php?id='+id,'choice','toolbar=no,location=no,directoties=no,status=no,menubar=no,scrollbars=no,resizable=no,width=260,height=120,top=340,left=382');
  document.frm.moved.value = movedone; return true; }  
function setChoice(value, id, replacePrefix)
{ element = document.getElementById("choice"); element.value = value;
  if(element.value != null && element.value != "") 
   	document.getElementById(id).innerHTML = document.getElementById(id).innerHTML.replace("pawn", replacePrefix);
}
function winReturnValue(retValue, id, replacePrefix)
{ opener.setChoice(retValue, id, replacePrefix); window.close(); }
function winCancel()
{  opener.cancel(); window.close(); }
function checkMove()
{
	document.frm.actionName.value = "Move";
	if(!isDragNow)
	{
		return false;
	}
	if(confirm('Вы подтверждаете ход '+movedone+'?'))
	{
		document.frm.moved.value = movedone;
		return true;
	}
	else
	{
		cancel();
		return false;
	}
}
function cancel()
{
	isDragNow = false;
	document.getElementById('tbl').innerHTML = tbl;
	init();
}
function checkMoveDraw()
{
	document.frm.actionName.value = "MoveDraw";
	if(!isDragNow)
	{
		return false;
	}
	if(confirm('Вы подтверждаете ход '+movedone+' и предложение ничьей?'))
	{
		document.frm.moved.value = movedone;
		document.frm.result.value = "?";
		return true;
	}
	else
	{
		isDragNow = false;
		document.getElementById('tbl').innerHTML = tbl;
		init();
		return false;
	}
}
function checkMoveRes()
{
	if(confirm('Вы подтверждаете сдачу партии?'))
	{
		return true;
	}
	else
	{
		return false;
	}
}
function checkDraw()
{
	if(confirm('Вы подтверждаете согласие на ничью?'))
	{	
	    document.frm.result.value = "0.5";
		return true;
	}
	else
	{
		return false;
	}
}
function checkDrop()
{
	var b = null;
	for(var i=1; i<9; i++)
	{
		for(var j=1; j<9; j++)
		{
			var q = j.toString(10)+i.toString(10);
			var aa=document.getElementById(q);
			var x = aa.isX; var y = aa.isY;
			if((Math.abs(x-elex)<20) && (Math.abs(y-eley)<20))
			{
				b = aa;
				break;
			}
		}
	}
	if(!b)
	{
		return false;
	}
	var pcolor = (b.innerHTML.indexOf('white')!=-1)?'white':((b.innerHTML.indexOf('black')!=-1)?'black':'');
	var color = (dragobj.src.indexOf('white')!=-1)?'white':'black';
	if(b.id==dragobj.parentNode.id)
	{
		return b;
	}
	if(checkRules(dragobj, b)){
		return b;
	}
	return false;
}
function checkRules(source, destination)
{
	var ret = false;
	var initialp = source.parentNode.id;
	var destp = destination.id
	for(var i=0; i<moves.length; i++)
	{
		if(initialp==moves[i][0] && destp==moves[i][1])
		{
			ret = true;
			break;
		}
	}
	if(!ret)
	{
		return false;
	}
	var pcolor = (destination.innerHTML.indexOf('white')!=-1)?'white':((destination.innerHTML.indexOf('black')!=-1)?'black':'');
	var color = (source.src.indexOf('white')!=-1)?'white':'black';
	var ori = source.parentNode.id;
	var pri = destination.id;
	var sx = parseInt(ori.substr(0,1));
	var sy = parseInt(ori.substr(1,1));
	var dx = parseInt(pri.substr(0,1));
	var dy = parseInt(pri.substr(1,1));
	var fig = source.src;
	if(fig.indexOf('knight.gif')!=-1){
		fig = 'knight';
	}
	else if(fig.indexOf('king.gif')!=-1){
		fig = 'king';
	}
	else if(fig.indexOf('queen.gif')!=-1){
		fig = 'queen';
	}
	else if(fig.indexOf('rook.gif')!=-1){
		fig = 'rook';
	}
	else if(fig.indexOf('pawn.gif')!=-1){
		fig = 'pawn';
	}
	else if(fig.indexOf('bishop.gif')!=-1){
		fig = 'bishop';
	}
	if(fig!='pawn'&&fig!='king')
	{
		return true;
	}
	// shakh
//	alert('fig:'+fig+' color:'+color+' dx:'+dx+' dy:'+dy+' sx:'+sx+' sy:'+sy);	
	if(fig == 'pawn' && color=='white'){
		if(Math.abs(dx-sx)==1 && sy==4 && dy==3 && document.getElementById(dx+'3').innerHTML == '')
		{
			document.getElementById(dx+'4').innerHTML = '';
		}
	}
	if(fig == 'pawn' && color=='black'){
		if(Math.abs(dx-sx)==1 && sy==5 && dy==6 && document.getElementById(dx+'6').innerHTML == '')
		{
			document.getElementById(dx+'5').innerHTML = '';
		}
	}
	if(fig=='king' && Math.abs(dx-sx)==2 && dy==sy)
	{
		rokirovka = true;
		if(dx>sx){
			document.getElementById('6'+sy).innerHTML=document.getElementById('8'+sy).innerHTML;
			document.getElementById('8'+sy).innerHTML='';
		}
		else
		{
			document.getElementById('4'+sy).innerHTML=document.getElementById('1'+sy).innerHTML;
			document.getElementById('1'+sy).innerHTML='';
		}		
	}
//	alert('fig:'+fig+' dx:'+dx+' dy:'+dy+' sx:'+sx+' sy:'+sy);
	return true;
}
function checkShakh(src, dst, color)
{
	var prev = dst.innerHTML;
	par = src.parentNode;
	par.removeChild(src);
	dst.innerHTML='';
	dst.appendChild(src);
	var ret = true;
	var q = document.getElementsByTagName('img');
	var king=null;
	var qw = new Array();var i=0;
	for(var w=0; w<q.length; w++)
	{
		if(q[w].src.indexOf('king.gif')!=-1 && q[w].src.indexOf(color)!=-1)
		{
			king=q[w].parentNode;
		}
		if(q[w].src.indexOf(color)==-1)
		{
			qw[i]=q[w];
			i++;
		}
	}
	for(var j=0; j<i; j++)
	{
		if(checkRules(qw[j], king))
		{
			ret=false;
		}
	}
	dst.removeChild(src);
	dst.innerHTML=prev;
	par.appendChild(src);
	return ret;
}
function getX(e){
   p = e; x=0; if(!e) return 0;
   x = e.offsetLeft; //+e.offsetWidth; 
   while((p=p.offsetParent)!=null){
      x += p.offsetLeft //+e.offsetWidth;
   }
   return x;
}
function getY(e){
   p = e; y=0;if(!e) return 0;
   y = e.offsetTop;// +e.offsetHeight; //
   while((p=p.offsetParent)!=null){
      y += p.offsetTop //+e.offsetHeight;
   }
   return y;
}
function convertId2Str(id)
{
	var x=parseInt(id.substr(0,1));
	var y=parseInt(id.substr(1,1));
	var sootv=new Array('a','b','c','d','e','f','g','h');
	x = sootv[x-1];
	y = 9-y;
	return (x+''+y);
}