	var selStartX = -1;
	var selStartY = -1;
	var selEndX = -1;
	var selEndY = -1;
	var IsDone = false;
	var HighlightedWord = '';
	
	function clearHighlights()
	{
		highlightCells(false);
	}
	
	function highlightCell(x, y, color, isSelecting)
	{
		if ((x > -1) && (y > -1))
		{
		  var cell = Ext.get('WSI_' + x + '_' + y);
		  if (cell != null)
		  {
  		  cell.setStyle('background-color', color);
	  	  if (isSelecting)
  	  	  HighlightedWord += cell.dom.innerHTML;
  	  }
		}
	}
	
	function highlightCells(isSelecting)
	{
	  var color ="#ffffff";
	  if (isSelecting)
	    color = "#FCFFA3";
	  
		if ((selStartX > -1) && (selStartY > -1) && (selEndX > -1) && (selEndY > -1))
		{
			var XDiff = 0;
			if (selStartX < selEndX) XDiff = 1;
			if (selStartX > selEndX) XDiff = -1;
			var YDiff = 0;
			if (selStartY < selEndY) YDiff = 1;
			if (selStartY > selEndY) YDiff = -1;
			var XLen = Math.abs(selStartX - selEndX);
			var YLen = Math.abs(selStartY - selEndY);
			var len = Math.max(XLen, YLen);
			var cellNumX = selStartX;
			var cellNumY = selStartY;
			if (isSelecting)
  			HighlightedWord = '';
			for (var x = 0; x <= len; x++)
			{
				highlightCell(cellNumX, cellNumY, color, isSelecting);
				cellNumX = cellNumX + XDiff;
				cellNumY = cellNumY + YDiff;
			}
		}
	}

  function frameCells(color)
  {
		if ((selStartX > -1) && (selStartY > -1) && (selEndX > -1) && (selEndY > -1))
		{
			var XDiff = 0;
			if (selStartX < selEndX) XDiff = 1;
			if (selStartX > selEndX) XDiff = -1;
			var YDiff = 0;
			if (selStartY < selEndY) YDiff = 1;
			if (selStartY > selEndY) YDiff = -1;
			var XLen = Math.abs(selStartX - selEndX);
			var YLen = Math.abs(selStartY - selEndY);
			var len = Math.max(XLen, YLen);
			var cellNumX = selStartX;
			var cellNumY = selStartY;
			for (var x = 0; x <= len; x++)
			{
			  //Frame cell
		    var cell = Ext.get('WSI_' + cellNumX + '_' + cellNumY);
        cell.frame();
        cell.highlight(color, 
          { attr: "background-color", //can be any valid css attribute that supports a color value
            duration: 1
          });
				cellNumX = cellNumX + XDiff;
				cellNumY = cellNumY + YDiff;
			}
		}
  }

	function crossOffWord(answer)
	{
		for (var i=0; i<answers.length; i++)
		{
			var cell = Ext.get('WSIAnswer_' + i);
			if (answers[i] == answer)
			{
				cell.setStyle('text-decoration', 'line-through');
				cell.setStyle('background-color', '#eeee00');
			}
		}
	}

  function allAnswered()
  {
    var result = true;
    for (var i=0; i<answers.length; i++)
    {
      if (answers[i].length > 0)
      {
        result = false;
      }
    }
    return result;
  }
  		
	function getSource(e)
	{
		var targ
		if (!e) var e = window.event
		if (e.target) targ = e.target
		else if (e.srcElement) targ = e.srcElement
		if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode
		return targ;
	}

  function ReverseWord (word)
  {
    var result = '';
    for (i = 0; i <= word.length; i++) 
    {
      result = word.charAt(i) + result;
    }
    return result;
  }
  
  function CheckAnswer(endX, endY)
  {
    var reverseHighlighted = ReverseWord(HighlightedWord);
    //Check if the answer exists
    for (var i=0; i<answers.length; i++)
    {
      if (answers[i] == HighlightedWord)
      {
        return i;
      }
      else if (answers[i] == reverseHighlighted)
      {
        HighlightedWord = reverseHighlighted;
        var startX = selStartX;
        var startY = selStartY;
        selStartX = selEndX;
        selStartY = selEndY;
        selEndX = startX;
        selEndY = startY;
        return i;
      }
    }
    return -1;
  }

  function showCongrats()
  {
    if (isPlayer == true)
      window.location = "congrats.aspx";
  }

	function clickCell(event)
	{
		var cell = getSource(event);
		var cellParts = cell.id.split("_");
		var cellX = cellParts[1] * 1;
		var cellY = cellParts[2] * 1;
    
		if (selStartX == -1)
		{
			//Selecting the start letter
			selStartX = cellX;
			selStartY = cellY;
			selEndX = selStartX;
			selEndY = selStartY;
			Ext.get(cell.id).frame();
			highlightCells(true);
		}
		else
		{
			if ((selStartX == cellX) && (selStartY == cellY)) return;
			//Check if an answer is found
			var answered = CheckAnswer(cellX, cellY);
			if (answered > -1)
			{
			  //If answer correct,change word style (with line through)
			  if (isPlayer)
  			  crossOffWord(HighlightedWord);
			  frameCells("70EA8D");
			  answers[answered] = "";
			}
			else
			{
			  frameCells("F97E71");
			}
			highlightCells(false);
			selStartX = -1;
			selStartY = -1;
			selEndX = -1;
			selEndY = -1;
			//Check if we're done
			if (allAnswered())
			{
			  showCongrats();
	    }
		}
	}

	function cellMouseMove(event)
	{
		if ((selStartX >= 0) && (selStartY >= 0))
		{
			var cell = getSource(event);
			var cellParts = cell.id.split("_");
			highlightCells(false);
			selEndX = cellParts[1] * 1;
			selEndY = cellParts[2] * 1;
			highlightCells(true);
		}
	}
