var i;
var gOpacity;
var gHLSquareColor='#e7ffd5';
var gLineColor="#0000FF";
var IE = document.all;
var gMyID;

var oHiLite = new Array(20);
for (i=0; i <=20; i++)
    {
	oHiLite[i]=new Array(2);
	oHiLite[i][0]=0;
	}

var oLines = new Array(20);
for (i=0; i <=20; i++)
    {
	oLines[i]=new Array(4);
	oLines[i][0]=0;
	}
var jg;
var igX;
var igY;
var igNewX;
var igNewY;

igX = 0;
igY = 0;
igNewX = 1;
igNewY = 1;

function XBrowserAddHandler(target,eventName,handlerName) { 
  if ( target.addEventListener ) { 
    target.addEventListener(eventName, function(e){target[handlerName](e);}, false);
  } else if ( target.attachEvent ) { 
    target.attachEvent("on" + eventName, function(e){target[handlerName](e);});
  } else { 
    var originalHandler = target["on" + eventName]; 
    if ( originalHandler ) { 
      target["on" + eventName] = function(e){originalHandler(e);target[handlerName](e);}; 
    } else { 
      target["on" + eventName] = target[handlerName]; 
    } 
  } 
}


function PlayInit()
{
var iX;
var iY;
var oControl;

for (iY=1;iY<=imDown;iY++)
	{
	for (iX=1;iX<=imAcross;iX++)
	    {
 	    oControl=document.getElementById('T' + iX + '_' + iY);
    	oControl.MouseMoveHandler = MyMouseMove; 
    	XBrowserAddHandler(oControl,"mousemove","MouseMoveHandler");
    	}
	}
jg = new jsGraphics("WordSearch");
}

function ClearHiLiteLines()
{
var i;
    for (i=0; oHiLite[i][0]!=0; i++)
        {
        document.getElementById('T' + oHiLite[i][0] + '_' + oHiLite[i][1]).bgColor='';
	    oHiLite[i][0]=0;
	    }

}

function DrawHiLiteLines(iX,iY,iA,iB)
{
var iXInc=1;
var iYInc=1;
var iC;
var i;
var iSwap=1;
var iOrigY=iY;

if (iX==iA && iY==iB)
    return true;
    
if (iX>iA)
    {
    i=iX;
    iX=iA;
    iA=i;
    iSwap=iSwap*-1;
    }
    
if (iY>iB)
    {
    if (iSwap==-1)
        iOrigY=iB;
    i=iY;
    iY=iB;
    iB=i;
    iSwap=iSwap*-1;
    } else
    {
    if (iSwap==-1)
        iOrigY=iB;
    }

i=0;
if ((iX-iA)==0) 
    {
    for (iC=iY;iC<=iB;iC++)
        {
        oHiLite[i][0]=iX;
        oHiLite[i][1]=iC;
        document.getElementById('T' + oHiLite[i][0] + '_' + oHiLite[i][1]).bgColor=gHLSquareColor;
        i++;
        }
    }
    
if ((iY-iB)==0) 
    {
    for (iC=iX;iC<=iA;iC++)
        {
        oHiLite[i][0]=iC;
        oHiLite[i][1]=iY;
        document.getElementById('T' + oHiLite[i][0] + '_' + oHiLite[i][1]).bgColor=gHLSquareColor;
        i++;
        }
    } else
    {
    for (iC=iX;iC<=iA;iC++)
        {
        oHiLite[i][0]=iC;
        oHiLite[i][1]=iOrigY;
        iOrigY=iOrigY+iSwap;
        document.getElementById('T' + oHiLite[i][0] + '_' + oHiLite[i][1]).bgColor=gHLSquareColor;
        i++;
        }
    }    
    
}

function MyMouseMove(e)
{

document.getElementById('T' + igNewX + '_' + igNewY).bgColor='';

if (igX!=0)
    ClearHiLiteLines();
            
igNewX = parseInt(this.id.replace('T','').split('_')[0]);
igNewY = parseInt(this.id.split('_')[1]);

document.getElementById('T' + igNewX + '_' + igNewY).bgColor=gHLSquareColor;

if (igX!=0)
    {
    if (MoveOK(igX,igY,igNewX,igNewY)==true)
        DrawHiLiteLines(igX,igY,igNewX,igNewY);
    else
        document.getElementById('T' + igX + '_' + igY).bgColor=gHLSquareColor;
    }
}


function MouseClick(bIsDown)
{

if (igX!=0)
    {
    document.getElementById('T' + igX + '_' + igY).bgColor='';
    if (MoveOK(igX,igY,igNewX,igNewY)==true)
        {
        StartLine(igX,igY,igNewX,igNewY);
        ClearHiLiteLines();
        igX=0;
        igY=0;
        return true;
        } else
	{
	if (igX==igNewX && igY==igNewY)
		{
		if (bIsDown==true)
			igX=0;
		return true;
		}
	}
        igX=0;
    }

if (bIsDown==false)
	return true;

if (igX==0)
    {
    igX=igNewX;
    igY=igNewY;
    document.getElementById('T' + igX + '_' + igY).bgColor=gHLSquareColor;
    }
}

function MoveOK(iX,iY,iA,iB)
{
var iXDiff;
var iYDiff;

iXDiff =Math.abs(iX - iA);
iYDiff =Math.abs(iY - iB);

if (iXDiff==0 && iYDiff==0)
    return false;
    
if (iXDiff==0 || iYDiff==0 || iXDiff==iYDiff)
    return true;
else
    return false;
}

function StartLine(iX,iY,iA,iB)
{
var iC;
var iSpareLine;
var bLineAlreadyExists;
var sEraseID;

iSpareLine = -1;
bLineAlreadyExists=false;

for (iC=0;iC<oLines.length;iC++)
    {
    if (oLines[iC][0]==0)
        iSpareLine=iC;
    else
        {
        if (oLines[iC][0]==iX && oLines[iC][1]==iY)
            {
            if (oLines[iC][2]==iA && oLines[iC][3]==iB)
                {
                bLineAlreadyExists=true;
                break;
                }
            }
        if (oLines[iC][2]==iX && oLines[iC][3]==iY)
            {
            if (oLines[iC][0]==iA && oLines[iC][1]==iB)
                {
                bLineAlreadyExists=true;
                break;
                }
            }
        }
    }
if ( bLineAlreadyExists==true)
    {
    WordSelected(false,oLines[iC][0],oLines[iC][1],oLines[iC][2],oLines[iC][3]);
    sEraseID=IDMake(oLines[iC][0],oLines[iC][1],oLines[iC][2],oLines[iC][3]);
    oLines[iC][0]=0;
    var myregexp = new RegExp('name="' + sEraseID +'"' ,'g');
    document.getElementById('WordSearch').innerHTML = document.getElementById('WordSearch').innerHTML.replace(myregexp,'style="display:none"');
    PlayInit();
    } else
    {
    if (iSpareLine==-1)
        iSpareLine=oLines.length-1;
    
    oLines[iSpareLine][0]=iX;
    oLines[iSpareLine][1]=iY;
    oLines[iSpareLine][2]=iA;
    oLines[iSpareLine][3]=iB;

    DrawLine(iX,iY,iA,iB);
    WordSelected(true,iX,iY,iA,iB);
    SolvedCheck();
    }
}
function IDMake(iX,iY,iA,iB)
{
var sID;
var iTemp;

if (iX>iA)
	{
	iTemp=iX;
	iX=iA;
	iA=iTemp;
	iTemp=iY;
	iY=iB;
	iB=iTemp;
	}
return iX + '#' + iY + '#' + iA + '#' + iB;
}

function DrawAllLines()
{
var iC;

jg.clear();
PlayInit();

for (iC=0;iC<oLines.length;iC++)
    {
    if (oLines[iC][0]!=0)
        DrawLine(oLines[iC][0],oLines[iC][1],oLines[iC][2],oLines[iC][3]);
    }
}

function DrawLine(iX,iY,iA,iB)
{
    if (iX!=iA && iY!=iB)
	gOpacity=0.07;
    else
	gOpacity=0.14;

  jg.setStroke(4); 
  jg.setColor(gLineColor);
  gMyID=IDMake(iX,iY,iA,iB); 
  jg.drawLine( ((iX-1)*21+8), ((iY-1)*21+8), ((iA-1)*21+8), ((iB-1)*21)+8);
  jg.paint();
}

function WordSelected(bStrikeOut,iX,iY,iA,iB)
{
var iC;
var bFound=false

for (iC=0;iC<goWords.length;iC++)
	{
	if (goWords[iC][1]==iX && goWords[iC][2]==iY && goWords[iC][3]==iA && goWords[iC][4]==iB)
		{
		bFound = true;
		break;
		}
	if (goWords[iC][1]==iA && goWords[iC][2]==iB && goWords[iC][3]==iX && goWords[iC][4]==iY)
		{
		bFound = true;
		break;
		}
	}
if (bFound==true)
	{
	if (bStrikeOut==true)
		document.getElementById('W_' + goWords[iC][0]).style.textDecoration='line-through';
	else
		document.getElementById('W_' + goWords[iC][0]).style.textDecoration='';
		
	}
}

function SolvedCheck()
{
var oNames;
var iC;
var bAllFound=true;

oNames = document.getElementsByTagName("div");
for (iC=0;iC<oNames.length;iC++)
	{
	if (oNames[iC].id.substr(0,2)=='W_')
		{
		if (oNames[iC].style.textDecoration!='line-through')
			{
			bAllFound = false;
			break;
			}
		}
	}
if (bAllFound==true)
	ShowPrize();
}

function ShowPrize()
{
var sNewSize;
var iNewSize;
sNewSize = document.getElementById('tbBoard').style.width;
sNewSize = sNewSize.replace('px','');
iNewSize = parseInt(sNewSize);

document.getElementById('hideDiv').style.MozOpacity = '0.0';
document.getElementById('hideDiv').style.height = iNewSize  + 'px';
document.getElementById('hideDiv').style.width= iNewSize  + 'px';
document.getElementById('hideDiv').style.position = 'relative';
document.getElementById('hideDiv').style.top = (-iNewSize) + 'px';
document.getElementById('hideDiv').style.display = '';
document.getElementById('Grabber').style.position = 'relative';
document.getElementById('Grabber').style.top =(-iNewSize)  + 'px';
document.getElementById('tbBoard').style.MozOpacity = '1.0';
document.getElementById('PrizePic').style.height = (iNewSize)  + 'px';
document.getElementById('PrizePic').style.width = iNewSize  + 'px';

curOpac = 0;
oPrizeInverval = setInterval("ShowPrizeGrad()",10)
}

function ShowPrizeGrad()
{
document.getElementById('PrizePic').style.display = '';

curOpac++;

if (curOpac>100 && curOpac<500)
	{
	curOpac=1000;
	document.getElementById('hideDiv').style.MozOpacity = '1.0';
	document.getElementById('tbBoard').style.MozOpacity = '0.0';
	alert("Congratulations for solving the word search!" + sSolvedMsg);
	return true;
	}
	
IE?document.getElementById("hideDiv").style.filter="alpha(opacity="+curOpac+")":document.getElementById("hideDiv").style.MozOpacity=curOpac/90.1;

IE?document.getElementById("tbBoard").style.filter="alpha(opacity="+(90-curOpac)+")":document.getElementById("tbBoard").style.MozOpacity=(90-curOpac)/90.1;

}
