// Othello, written by Lex Wassenberg (lexwassenberg@hotmail.com).
// Copyright (c) 2002 Lex Wassenberg
// All rights reserved.
//
// Redistribution and use in source form, with or without modification, is
// permitted provided that the following conditions are met:
// 1. Redistributions of source code must retain the above copyright
//    notice, this list of conditions and the following disclaimer,
//    without modification, immediately at the beginning of the file.
// 2. All advertising materials mentioning features or use of this software
//    must display the following acknowledgement:
//      This product includes software developed by Lex Wassenberg
//    and a reference to the URL http://www.hetnet.nl/~wasse257
// 3. The name of the author may not be used to endorse or promote products
//    derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

var lex1 = 8;
var lex2 = 8;
var lex3 = lex1 * lex2;

var lex4 = 1;

var lex5 = new Array();
for (var lex_y = 0; lex_y < lex1; lex_y++)
{
  lex5[lex_y] = new Array();
  for (var lex_x = 0; lex_x < lex2; lex_x++)
  {
    lex5[lex_y][lex_x] = 0;
  }
}

var lex7 = new Array();
lex7[0] = new Array( 20, -5, 10,  2,  2, 10, -5, 20 );
lex7[1] = new Array( -5,-10,  0,  0,  0,  0,-10, -5 );
lex7[2] = new Array( 10,  0,  5,  1,  1,  5,  0, 10 );
lex7[3] = new Array(  2,  0,  1,  0,  0,  1,  0,  2 );
lex7[4] = new Array(  2,  0,  1,  0,  0,  1,  0,  2 );
lex7[5] = new Array( 10,  0,  5,  1,  1,  5,  0, 10 );
lex7[6] = new Array( -5,-10,  0,  0,  0,  0,-10, -5 );
lex7[7] = new Array( 20, -5, 10,  2,  2, 10, -5, 20 );

var lex8 = 0;
var lex9 = 0;

var lex10 = 1;
var lex11 = false;
var lex12 = false;
var lex13 = false;
var lex14 = 0;

function lex16()
{
  for (var y = 0; y < lex1; y++)
  {
    for (var x = 0; x < lex2; x++)
    {
      lex5[y][x] = 0;
    }
  }
  lex5[3][3]=1; lex5[4][4]=1;
  lex5[3][4]=2; lex5[4][3]=2;
  lex3 = (lex1 * lex2) - 4;
  lex8 = 2; lex9 = 2;
  lex11 = false; lex12 = false; lex13 = false; lex14 = 0;
  lex10 = 1;
  lex15();

  document.forms['score'].elements['lex8'].value = lex8;
  document.forms['score'].elements['lex9'].value = lex9;
  document.images['preview'].src = lex6[lex10].src;

  if (lex4 == 2) lex17();
}

function lex18(a) { return (a>=0 && a<lex2); }
function lex19(a) { return (a>=0 && a<lex1); }

function cst()
{
  if (!lex13)
  {
    lex10 = 2;
    lex17();
  }
}

function lex175()
{
  if (lex20())
  {
    var lex21 = -100;
    var lex22 = 0;
    var lex24; var lex25;
    var lex23 = new Array();

    for (var y=0; y<lex1; y++)
    {
      for (var x=0; x<lex2; x++)
      {
        var g = lex26(y,x);
        if ( g <= 0) continue;
        g += lex7[y][x];
        if (g > lex21)
        {
          lex21 = g;
          lex22 = 1;
          lex23[0] = new Array();
          lex23[0][0] = y;
          lex23[0][1] = x;
        }
        else if (g == lex21)
        {
          lex23[lex22] = new Array();
          lex23[lex22][0] = y;
          lex23[lex22][1] = x;
          lex22++;
        }
      }
    }
    var lex29 = Math.floor(Math.random() * lex22);
    lex28(lex23[lex29][0],lex23[lex29][1]);
  }
  else
    lex30();
}

function lex176()
{
  if (lex20())
  {
    var lex21 = -1000;
    var lex22 = 0;
    var lex24; var lex25;
    var lex23 = new Array();

    for (var y=0; y<lex1; y++)
    {
      for (var x=0; x<lex2; x++)
      {
        var g = lex26(y,x);
        if ( g <= 0) continue;
        g += lex7[y][x];
        g += lex32(y,x);

        if (g > lex21)
        {
          lex21 = g;
          lex22 = 1;
          lex23[0] = new Array();
          lex23[0][0] = y;
          lex23[0][1] = x;
        }
        else if (g == lex21)
        {
          lex23[lex22] = new Array();
          lex23[lex22][0] = y;
          lex23[lex22][1] = x;
          lex22++;
        }
      }
    }
    var lex29 = Math.floor(Math.random() * lex22);
    lex28(lex23[lex29][0],lex23[lex29][1]);
  }
  else
    lex30();
}

function lex17()
{
  lex175();
}


function lex20()
{
  for (var y=0; y<lex1; y++)
  {
    for (var x=0; x<lex2; x++)
    {
      if (lex26(y,x) > 0)
        return true;
    }
  }
  var txt = '';
  txt = (lex10==1)?'Tu no puedes':'Yo no puedo';
  txt += ' mover, ';
  txt += (lex10==1)?'Yo puedo':'Tu puedes';
  txt += ' mover otra vez.';
  alert(txt);
  return false;
}

function lex15()
{
  for (var y = 0; y < lex5.length; y++)
  {
    for (var x = 0; x < lex5[y].length; x++)
    {
      if (document.images['r'+y+'c'+x].src != lex6[lex5[y][x]].src)
      {
        document.images['r'+y+'c'+x].src = lex6[lex5[y][x]].src;
      }
    }
  }
}

function lex28(row, col)
{
  if (lex5[row][col] > 0) return;
  if (lex26(row,col) == 0) return;

  lex14 = 1; lex13 = true;
  document.images['preview'].src = lex6[0].src;
  lex5[row][col] = lex10;
  document.images['r'+row+'c'+col].style.cursor = "crosshair";
  lex3--;
  (lex10==1) ? lex8++ : lex9++ ;

  document.forms['score'].elements['lex8'].value = lex8;
  document.forms['score'].elements['lex9'].value = lex9;

  lex10 = (lex10==1)? 2:1;
  lex15();
  lex12 = lex11; lex11 = false;
  setTimeout('lex35('+row+','+col+')', 500);
}

function lex30()
{
    lex10 = (lex10==1)? 2:1;	// player switch
    lex12 = lex11; lex11 = true;
    lex36();
    lex14 = 0;
}

function lex35(r,c)
{
  for (var xm = -1; xm <= 1; xm++)
  {
    for (var ym = -1; ym <= 1; ym++)
    {
      var i=1;
      if (ym==0 && xm==0) continue;
      //alert('r+i*ym: '+r+i*ym+ '\nc+i*xm: '+c+i*xm);
      while ( lex19(r+i*ym) && lex18(c+i*xm) && lex5[r+i*ym][c+i*xm] > 0 && lex5[r+i*ym][c+i*xm] != lex5[r][c])
        i++;
      if ( lex19(r+i*ym) && lex18(c+i*xm) && lex5[r+i*ym][c+i*xm] == lex5[r][c] )
      {
        while (i>1)
        {
          i--;
          lex5[r+i*ym][c+i*xm] = lex5[r][c];
          if (lex10==1) { lex9++; lex8--; }
          else { lex8++; lex9--; }
        }
      }
    }
  }

  lex15();
  document.forms['score'].elements['lex8'].value = lex8;
  document.forms['score'].elements['lex9'].value = lex9;

  lex36();
}

function lex36()
{
  if ( lex3 == 0 || lex8 == 0 || lex9 == 0 || (lex11 && lex12) )
  {
    lex14 = 0;
    if (lex8 > lex9)
       alert('Ganaste. Felicitationes!');
    else if (lex9 > lex8)
       alert('Lo siento, yo gan\351!');
    else
       alert('\241Empate!');
    if (confirm('\277Juegamos otra vez?')) lex16();

  }
  else
  {
    document.images['preview'].src = lex6[lex10].src;
    if (lex10 == 2 && lex4 == 1 || lex4 == 2)
    {
      setTimeout('lex17()', 500);
    }
    else
    {
      if (lex20())
        lex14 = 0;
      else
        setTimeout('lex17()', 500);
    }
  }
}

function lex26(r,c)
{
  if (lex5[r][c] > 0)
    return 0;
  var g = 0;
  for (var xm = -1; xm <= 1; xm++)
  {
    for (var ym = -1; ym <= 1; ym++)
    {
      var i=1;
      if (ym==0 && xm==0) continue;
      while ( lex19(r+i*ym) && lex18(c+i*xm) && lex5[r+i*ym][c+i*xm] > 0 && lex5[r+i*ym][c+i*xm] != lex10)
        i++;
      if ( lex19(r+i*ym) && lex18(c+i*xm) && lex5[r+i*ym][c+i*xm] == lex10 )
      {
        while (i>1)
        {
          i--;
          //alert('r,c: '+r+','+c+'\nwon: '+(r+i*ym)+','+(c+i*xm));
          g++;
        }
      }
    }
  }
  return g;
}

function lex32(r,c)
{
  if (lex5[r][c] > 0)
    return 0;
  var g = 0;
  for (var xm = -1; xm <= 1; xm++)
  {
    for (var ym = -1; ym <= 1; ym++)
    {
      var i=1;
      if (ym==0 && xm==0) continue;
      while ( lex19(r+i*ym) && lex18(c+i*xm) && lex5[r+i*ym][c+i*xm] > 0 && lex5[r+i*ym][c+i*xm] != lex10)
        i++;
      if ( lex19(r+i*ym) && lex18(c+i*xm) && lex5[r+i*ym][c+i*xm] == lex10 )
      {
        while (i>1)
        {
          i--;
          g += lex7[r+i*ym][c+i*xm];
        }
      }
    }
  }
  return g;
}

function lex33(y,x)
{
  if (lex26(y,x) > 0)
  {
    document.images['r'+y+'c'+x].style.cursor = "hand";
  }
}

function lex34(y,x)
{
    document.images['r'+y+'c'+x].style.cursor = "crosshair";
}
