﻿var maxColor;
var dot;
var deletingDot;
var checked;
var width, height, selectedX, selectedY, allPoint;

function MultiDimensionalArray(iCols, iRows) 
{ 
  var i; 
  var j; 
   var a = new Array(iCols); 
   for (i=0; i < iCols; i++) 
   { 
       a[i] = new Array(iRows); 
       for (j=0; j < iRows; j++) 
       { 
           a[i][j] = ""; 
       } 
   } 
   return(a); 
} 

function CreateObj(w, h, c)
{
  width = w;
  height = h;
  maxColor = c;

  dot = MultiDimensionalArray(width, height);
  deletingDot = MultiDimensionalArray(width, height);
  checked = MultiDimensionalArray(width, height);

  CreateNew();
}

function CreateNew()
{
  allPoint = 0;
  Reset();

  for (y = 0; y < height; y++)
  {
    for (x = 0; x < width; x++)
    {
      dot[x][y] = parseInt(Math.random() * maxColor);
    }
  }
}

function Reset()
{
  for (y = 0; y < height; y++)
  {
    for (x = 0; x < width; x++)
    {
      deletingDot[x][y] = false;
      checked[x][y] = false;
    }
  }
}

function SelectedPoint()
{
  var p = 0;
  for (y = 0; y < height; y++)
  {
    for (x = 0; x < width; x++)
    {
      if (deletingDot[x][y] == true)
      {
        p++;
      }
    }
  }
  if (p < 2)
  {
    p = 0;
  }
  else
  {
    p = Math.pow(1.6, p) + 3;
  }
  return parseInt(p);
}

function Selected(x, y)
{
  if (x < width && y < height && x >= 0 && y >= 0)
  {
    if (dot[x][y] == -1)
    {
      selectedX = -1;
      selectedY = -1;
    }
    else
    {
      selectedX = x;
      selectedY = y;
      Reset();
      Deleting(x, y, dot[x][y]);
      if (SelectedPoint() == 0)
      {
        Reset();
        selectedX = -1;
        selectedY = -1;
      }
    }
  }
}

function Deleting(x, y, center)
{
  if (x < width && y < height && x >= 0 && y >= 0)
  {
    if (checked[x][y] == false)
    {
      if (dot[x][y] == center)
      {
        checked[x][y] = true;
        Deleting(x - 1, y, center);
        Deleting(x + 1, y, center);
        Deleting(x, y - 1, center);
        Deleting(x, y + 1, center);
        deletingDot[x][y] = true;
      }
    }
  }
}

function Delete()
{
  if (SelectedPoint() > 0)
  {
    allPoint += SelectedPoint();

    //set deleting dot -2
    for (y = 0; y < height; y++)
    {
      for (x = 0; x < width; x++)
      {
        if (deletingDot[x][y])
        {
          dot[x][y] = -2;
        }
      }
    }
    
    //move dots down in column while column in -2 dot
    var dy;
    for (x = 0; x < width; x++)
    {
      dy = GetMovingY(x);
      while (dy > -1)
      {
        MoveDown(x, dy);
        dy = GetMovingY(x);
      }
    }
    

    //move column right if empty
    if (IsEmpty() == false)
    {
      var b;
      var startX = GetStartX();
  
      while (true)
      {
        b = false;
        for (x = width - 1; x >= startX; x--)
        {
          if (IsDeletingColumn(x))
          {
            DeleteColumn(x);
            startX = GetStartX();
            b = true;
          }
        }
        if (!b)
        {
          break;
        }  
      }
    }
    
    Reset();
  }
}

function IsEmpty()
{
  var result = true;
  for (x = 0; x < width; x++)
  {
    if (result)
    {
      for (y = 0; y < height; y++)
      {
        if (dot[x][y] != -1)
        {
          result = false;
          break;
        }
      }
    }
  }
  return result;
}

function GetStartX()
{
  var startX = -1;
  for (x = 0; x < width; x++)
  {
    if (!IsDeletingColumn(x))
    {
      startX = x;
      break;
    }
  }
  return startX;
}

function DeleteColumn(dx)
{
  for (x = dx; x >= 1; x--)
  {
    for (y = 0; y < height; y++)
    {
      dot[x][y] = dot[x - 1][y];
    }
  }
  for (y = 0; y < height; y++)
  {
    dot[0][y] = -1;
  }                 
}

function IsDeletingColumn(x)
{
  var result = true;
  for (y = 0; y < height; y++)
  {
    if (dot[x][y] != -1)
    {
      result = false;
      break;
    }
  }
  return result;
}

function GetMovingY(x)
{
  var result = -1;
  for (y = 0; y < height; y++)
  {
    if (dot[x][y] == -2)
    {
      result = y;
      break;
    }
  }
  return result;
}

function MoveDown(dx, dy)
{
  if (dy > 0)
  {
    for (y = dy - 1; y >= 0; y--)
    {
      dot[dx][y + 1] = dot[dx][y];
    }
  }
  dot[dx][0] = -1;
}




function IsEnd()
{
  var result = true;
  for (y = 0; y < height; y++)
  {
    for (x = 0; x < width - 1; x++)
    {
      if (dot[x][y] != -1)
      {
        if (dot[x][y] == dot[x + 1][y])
        {
          result = false;
        }
      }
    }
  }
  if (result)
  {
    for (y = 0; y < height - 1; y++)
    {
      for (x = 0; x < width; x++)
      {
        if (dot[x][y] != -1)
        {
          if (dot[x][y] == dot[x][y + 1])
          {
            result = false;
          }
        }
      }
    }
  }
  return result;
}





function mclick(x, y)
{
  Delete();
  Selected(x, y);
  Paint();
  if (IsEnd() == true)
  {
//    $get('ctl00_up1').style.display = 'block'; 
    Animare.Penzkoveto.Web.WebService.Command.StoreNewGame(allPoint, OnSucceeded, OnFailed);
    alert("Gratulálunk! " + allPoint + " pontot értél el a játékban!");
//    CreateNew();
//    Paint();
  }  
}

    
function OnSucceeded(result)
{
//  $get('ctl00_up1').style.display = 'none'; 
  __doPostBack("ctl00$C$lbRefresh", "");
}

function OnFailed(error)
{
  Animare.Penzkoveto.Web.WebService.Command.Error(
    error.get_exceptionType(),
    error.get_message(),
    error.get_statusCode(),
    error.get_stackTrace(),
    error.get_timedOut()
  );
//  $get('ctl00_up1').style.display = 'none'; 
//  alert(errorMessage);
}   


function mover(x, y)
{
  if (selectedX != x || selectedY != y)
  {
    Selected(x, y);
    Paint();
  }
}

function mout()
{
  selectedX = -1;
  selectedY = -1;
  Reset();
  Paint();
}

function Paint()
{
  var s = "";
  for (y = 0; y < height; y++)
  {
    for (x = 0; x < width; x++)
    {
      if (dot[x][y] == -1)
      {
        s += '<div class="emp">&nbsp;</div>';
      }   
      else
      {
        if (selectedX == x && selectedY == y)
        {
          s += '<div class="sel" onmouseleave="mout();" onclick="mclick('+x+','+y+');" >';
//          s += '<div class="sel" onmouseout="mout();" onmouseover="mover('+x+','+y+');" onclick="mclick('+x+','+y+');" >';
          s += '<img src="../i/';
          s += dot[x][y];
          s += '.jpg">';
          s += '</div>';
        }
        else
        {
          if (deletingDot[x][y] == true)
          {
            s += '<div class="del" onmouseleave="mout();" onmouseover="mover('+x+','+y+');"  >';
//            s += '<div class="del" onmouseout="mout();"  onmouseover="mover('+x+','+y+');" onclick="mclick('+x+','+y+');" >';
            s += '<img src="../i/';
            s += dot[x][y];
            s += '.jpg">';
            s += '</div>';
          }
          else
          {
            s += '<div class="dott" onmouseleave="mout();" onmouseover="mover('+x+','+y+');"  >';
//            s += '<div class="dot" onmouseout="mout();"  onmouseover="mover('+x+','+y+');" onclick="mclick('+x+','+y+');" >';
            s += '<img src="../i/';
            s += dot[x][y];
            s += '.jpg">';
            s += '</div>';
          }
        }
      }
    }
    s += '<div class="bre">&nbsp;</div>';
  }  
  
  var palet = $get("palet");
  palet.innerHTML = s;
  
  var point = $get("point");
  point.innerHTML = SelectedPoint();
  var point = $get("ent");
  point.innerHTML = allPoint;
}

function pageLoad()
{
  selectedX = -1;
  selectedY = -1;
  CreateObj(7, 9, 5);
  Paint();
}



