﻿/*
 * $Id: ad.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

var imagepath = '/_LAYOUTS/AES/images/wagnym/';


function ad(startx,starty,endx,endy,code)
{
	this.startx=startx;
	this.starty=starty;
	this.endx=endx;
	this.endy=endy;
	this.code=code;
}


/*
 * $Id: undefined_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function undefined_cell()
{
	this.state="undefined";
}


/*
 * $Id: synonym_top_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function synonym_top_cell(size,synonym,startx,starty,endx,endy)
{
	this.size=size;
	this.synonym=synonym;
	this.startx=startx;
	this.starty=starty;
	this.endx=endx;
	this.endy=endy;
}


/*
 * $Id: synonym_split_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function synonym_split_cell(synonym,startx,starty,endx,endy)
{
	this.state="split synonym";
}


/*
 * $Id: synonym_middle_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function synonym_middle_cell(size,synonym,startx,starty,endx,endy)
{
	this.size=size;
	this.synonym=synonym;
	this.startx=startx;
	this.starty=starty;
	this.endx=endx;
	this.endy=endy;
}


/*
 * $Id: synonym_full_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function synonym_full_cell(size,synonym,startx,starty,endx,endy)
{
	this.state="full synonym";
	this.size=size;
	this.synonym=synonym;
	this.startx=startx;
	this.starty=starty;
	this.endx=endx;
	this.endy=endy;
}


/*
 * $Id: synonym_bottom_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function synonym_bottom_cell(size,synonym,startx,starty,endx,endy)
{
	this.size=size;
	this.synonym=synonym;
	this.startx=startx;
	this.starty=starty;
	this.endx=endx;
	this.endy=endy;
}



/*
 * $Id: synonym.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

/*
 * subpos:
 *	'f': Full
 *	't': Top
 *	'm': Middle
 *	'b': Bottom
 *
 * size:
 *	'n': Normal
 *	'b': Big
 */
function synonym(xpos,ypos,subpos,size,syntext,startx,starty,endx,endy)
{
	this.xpos=xpos;
	this.ypos=ypos;
	this.subpos=subpos;
	this.size=size;

	var synonymtext;

	switch(syntext)
	{
		case "->NE":
		case "->ne":
		case "->NØ":
		case "->nø":
			synonymtext='<img class=\"netkryds_synonym_arrow\" src="' + imagepath + 'synonym_arrow_ne.png" alt="pil fra nord mod øst" />';
		break;

		case "->WE":
		case "->we":
		case "->VØ":
		case "->vø":
			synonymtext='<img class=\"netkryds_synonym_arrow\" src="' + imagepath + 'synonym_arrow_we.png" alt="pil fra vest mod øst" />';
		break;

		case "->WS":
		case "->ws":
		case "->VS":
		case "->vs":
			synonymtext='<img class=\"netkryds_synonym_arrow\" src="' + imagepath + 'synonym_arrow_ws.png" alt="pil fra vest mod syd" />';
		break;

		case "->NS":
		case "->ns":
			synonymtext='<img class=\"netkryds_synonym_arrow\" src="' + imagepath + 'synonym_arrow_ns.png" alt="pil fra nord mod syd" />';
		break;

		default:
			synonymtext=syntext.replace(/ /g,"<br />");
			synonymtext=synonymtext.replace(/_/g," ");
		break;
	}

	this.synonymtext=synonymtext;
	this.startx=startx;
	this.starty=starty;
	this.endx=endx;
	this.endy=endy;
}



/*
 * $Id: solution.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function solution(startx,starty,endx,endy)
{
	this.startx=startx;
	this.starty=starty;
	this.endx=endx;
	this.endy=endy;
}


/*
 * $Id: show_undefined_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function show_undefined_cell(kryds,x,y)
{
	document.write("<td class=\"netkryds_undefined\">Undefined cell</td>");
}


/*
 * $Id: show_synonym_split_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function show_synonym_split_cell(kryds,x,y)
{
	document.write("<td class=\"netkryds_synonym\"");
/*
	if(kryds.cells[x][y].xsize)
	{
		document.write(" colspan=\""+kryds.cells[x][y].xsize+"\"");
	}
	if(kryds.cells[x][y].ysize)
	{
		document.write(" rowspan=\""+kryds.cells[x][y].ysize+"\"");
	}
*/
	document.write(">");

	document.write("<table class=\"netkryds_synonym_split\">");

	if(kryds.cells[x][y].top_synonym)
	{
		document.write("<tr>");
		document.write("<td class=\"netkryds_synonym_top\"");
		document.write(" onclick=\"javascript:mark_cells("+kryds.id+","+kryds.cells[x][y].top_synonym.startx+","+kryds.cells[x][y].top_synonym.starty+","+kryds.cells[x][y].top_synonym.endx+","+kryds.cells[x][y].top_synonym.endy+")\"");
		document.write(">");
		if(kryds.cells[x][y].top_synonym.size=='b')
		{
			document.write("<span class=\"netkryds_big\">");
		}
		document.write(kryds.cells[x][y].top_synonym.synonym);
		if(kryds.cells[x][y].top_synonym.size=='b')
		{
			document.write("</span>");
		}
		document.write("</td>");
		document.write("</tr>");
	}

	if(kryds.cells[x][y].middle_synonym)
	{
		document.write("<tr>");
		document.write("<td class=\"netkryds_synonym_middle\"");
		document.write(" onclick=\"javascript:mark_cells("+kryds.id+","+kryds.cells[x][y].middle_synonym.startx+","+kryds.cells[x][y].middle_synonym.starty+","+kryds.cells[x][y].middle_synonym.endx+","+kryds.cells[x][y].middle_synonym.endy+")\"");
		document.write(">");
		if(kryds.cells[x][y].middle_synonym.size=='b')
		{
			document.write("<span class=\"netkryds_big\">");
		}
		document.write(kryds.cells[x][y].middle_synonym.synonym);
		if(kryds.cells[x][y].middle_synonym.size=='b')
		{
			document.write("</span>");
		}
		document.write("</td>");
		document.write("</tr>");
	}

	if(kryds.cells[x][y].bottom_synonym)
	{
		document.write("<tr>");
		document.write("<td class=\"netkryds_synonym_bottom\"");
		document.write(" onclick=\"javascript:mark_cells("+kryds.id+","+kryds.cells[x][y].bottom_synonym.startx+","+kryds.cells[x][y].bottom_synonym.starty+","+kryds.cells[x][y].bottom_synonym.endx+","+kryds.cells[x][y].bottom_synonym.endy+")\"");
		document.write(">");
		if(kryds.cells[x][y].bottom_synonym.size=='b')
		{
			document.write("<span class=\"netkryds_big\">");
		}
		document.write(kryds.cells[x][y].bottom_synonym.synonym);
		if(kryds.cells[x][y].bottom_synonym.size=='b')
		{
			document.write("</span>");
		}
		document.write("</td>");
		document.write("</tr>");
	}

	document.write("</table>");

	document.write("</td>");
}


/*
 * $Id: show_synonym_full_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function show_synonym_full_cell(kryds,x,y)
{
	document.write("<td class=\"netkryds_synonym\"");
/*
	if(kryds.cells[x][y].xsize)
	{
		document.write(" colspan=\""+kryds.cells[x][y].xsize+"\"");
	}
	if(kryds.cells[x][y].ysize)
	{
		document.write(" rowspan=\""+kryds.cells[x][y].ysize+"\"");
	}
*/
	document.write(" onclick=\"javascript:mark_cells("+kryds.id+","+kryds.cells[x][y].startx+","+kryds.cells[x][y].starty+","+kryds.cells[x][y].endx+","+kryds.cells[x][y].endy+")\"");
	document.write(">");

	if(kryds.cells[x][y].size=='b')
	{
		document.write("<span class=\"netkryds_big\">");
	}

	document.write(kryds.cells[x][y].synonym);

	if(kryds.cells[x][y].size=='b')
	{
		document.write("</span>");
	}

	document.write("</td>");
}


/*
 * $Id: show_kryds.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function show_kryds(kryds)
{
	if(!(kryds.cells))
	{
		log("Can't show kryds. Maybe it has some errors?");
		return;
	}

	document.write("<table class=\"netkryds_kryds\" id=\""+kryds.id+"\">");

	for(y=0;y<kryds.ysize;y++)
	{
		document.write("<tr>");

		for(x=0;x<kryds.xsize;x++)
		{
			if(kryds.cells[x][y])
			{
				switch(kryds.cells[x][y].state)
				{
					case "undefined":
						show_undefined_cell(kryds,x,y);
					break;

					case "full synonym":
						show_synonym_full_cell(kryds,x,y);
					break;

					case "split synonym":
						show_synonym_split_cell(kryds,x,y);
					break;

					case "input cell":
						show_input_cell(kryds,x,y);
					break;

					case "ad cell":
						show_ad_cell(kryds,x,y);
					break;

					default:
						document.write("<td>"+kryds.cells[x][y].state+"</td>");
					break;
				}
			}
		}

		document.write("</tr>");
	}

	document.write("</table>");
}


/*
 * $Id: show_input_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function show_input_cell(kryds,x,y)
{
	document.write("<td class=\"netkryds_input\"");
/*
	if(kryds.cells[x][y].xsize)
	{
		document.write(" colspan=\""+kryds.cells[x][y].xsize+"\"");
	}
	if(kryds.cells[x][y].ysize)
	{
		document.write(" rowspan=\""+kryds.cells[x][y].ysize+"\"");
	}
*/
	document.write(" id=\""+kryds.id+"_"+x+"_"+y+"\"");
	document.write(" onclick=\"javascript:mark_cells("+kryds.id+","+x+","+y+","+x+","+y+")\"");
	document.write(">");

	document.write("<table class=\"netkryds_input_table\">");

	document.write("<tr>");
	document.write("<td class=\"netkryds_input_nw\">");
	if(kryds.cells[x][y].nw)
	{
		if(kryds.cells[x][y].nw=="->NE")
		{
			document.write("<img class=\"netkryds_input_nw_arrow\" src=\"" + imagepath + "arrow_ne.png\" alt=\"lille pil fra nord mod øst\" />");
		}
		if(kryds.cells[x][y].nw=="->WS")
		{
			document.write("<img class=\"netkryds_input_nw_arrow\" src=\"" + imagepath + "arrow_ws.png\" alt=\"lille pil fra vest mod syd\" />");
		}
	}
	document.write("</td>");
	document.write("<td class=\"netkryds_input_n\">");
	document.write("</td>");
	document.write("<td class=\"netkryds_input_ne\">");
	if(kryds.cells[x][y].ne)
	{
		if(kryds.cells[x][y].ne=="->ES")
		{
			document.write("<img class=\"netkryds_input_ne_arrow\" src=\"" + imagepath + "arrow_es.png\" alt=\"lille pil fra øst mod syd\" />");
		}
	}
	document.write("</td>");
	document.write("</tr>");

	document.write("<tr>");
	document.write("<td class=\"netkryds_input_w\">");
	document.write("</td>");

	document.write("<td class=\"netkryds_input_center\">");

	document.write("<div class=\"netkryds_hideshow\">");

	document.write("<div class=\"netkryds_hide\">");
	document.write("<input");
	document.write(" id=\""+kryds.id+"_"+x+"_"+y+"_input\"");
	document.write(" type=\"text\"");
	document.write(" value=\"\"");
	document.write(" size=\"1\"");
	document.write(" maxlength=\"1\"");
	document.write(" onkeyup=\"javascript:keyup('"+kryds.id+"',"+x+","+y+");\" />");
	document.write("</div>");

	document.write("<div");
	if(
		(kryds.cells[x][y].solution)
	&&
		(kryds.cells[x][y].solution=="solution")
	)
	{
		document.write(" class=\"netkryds_show_solution\"");
	}
	else
	{
		document.write(" class=\"netkryds_show\"");
	}
//	document.write(" id=\""+kryds.id+"_"+x+"_"+y+"\"");
	document.write(">");

	document.write("<table class=\"netkryds_input_letter\">");

	document.write("<tr>");

	document.write("<td");
	document.write(" id=\""+kryds.id+"_"+x+"_"+y+"_letter\"");
	document.write(">");

/*
	document.write("()");
*/

	document.write("</td>");

	document.write("</tr>");

	document.write("</table>");

	document.write("</div>");

	document.write("</div>");

	document.write("</td>");

	document.write("<td class=\"netkryds_input_e\">");
	document.write("</td>");
	document.write("</tr>");

	document.write("<tr>");
	document.write("<td class=\"netkryds_input_sw\">");
	if(kryds.cells[x][y].sw)
	{
		if(kryds.cells[x][y].sw=="->SE")
		{
			document.write("<img class=\"netkryds_input_sw_arrow\" src=\"" + imagepath + "arrow_se.png\" alt=\"lille pil fra syd mod øst\" />");
		}
	}
	document.write("</td>");
	document.write("<td class=\"netkryds_input_s\">");
	document.write("</td>");
	document.write("<td class=\"netkryds_input_se\">");
	document.write("</td>");
	document.write("</tr>");

	document.write("</table>");

	document.write("</td>");

	var cell=document.getElementById(kryds.id+"_"+x+"_"+y);
	if(cell)
	{
		if(
			(kryds.cells[x][y].solution)
		&&
			(kryds.cells[x][y].solution=="solution")
		)
		{
			cell.style.backgroundImage="url(\"" + imagepath + "input_solution_not_marked.png\")";
		}
		else
		{
			cell.style.backgroundImage="url(\"" + imagepath + "input_not_marked.png\")";
		}
	}
}


/*
 * $Id: show_ad_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function show_ad_cell(kryds,x,y)
{
	document.write("<td class=\"netkryds_ad\"");
	if(kryds.cells[x][y].xsize)
	{
		document.write(" colspan=\""+kryds.cells[x][y].xsize+"\"");
	}
	if(kryds.cells[x][y].ysize)
	{
		document.write(" rowspan=\""+kryds.cells[x][y].ysize+"\"");
	}
	document.write(">");

	document.write("<table class=\"netkryds_ad_content\">");
	document.write("<tr>");
	document.write("<td>");

	document.write(kryds.cells[x][y].code);

	document.write("</td>");
	document.write("</tr>");
	document.write("</table>");

	document.write("</td>");
}


/*
 * $Id: netkryds.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

var input_cell_kryds=null;
var input_cell_x=-1;
var input_cell_y=-1;
var input_cell_delta_x=0;
var input_cell_delta_y=0;
var input_cell_start_x=-1;
var input_cell_start_y=-1;
var input_cell_stop_x=-1;
var input_cell_stop_y=-1;



/*
 * $Id: mark_cells.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function mark_cells(kryds,startx,starty,endx,endy)
{
//	log("mark_cells('"+kryds.id+"',"+startx+","+starty+","+endx+","+endy+")");

	var x;
	var y;

	if(input_cell_kryds)
	{
		clear_cells(input_cell_kryds);
	}

	for(x=startx;x<=endx;x++)
	{
		for(y=starty;y<=endy;y++)
		{
			mark_cell(kryds,x,y);
		}
	}

	input_cell_kryds=kryds;

	input_cell_x=startx;
	input_cell_y=starty;

	var input=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_input");
	if(input)
	{
		input.focus();
	}

	if(startx==endx)
	{
		input_cell_delta_x=0;
	}
	else
	{
		input_cell_delta_x=1;
	}

	if(starty==endy)
	{
		input_cell_delta_y=0;
	}
	else
	{
		input_cell_delta_y=1;
	}

	input_cell_start_x=startx;
	input_cell_start_y=starty;

	input_cell_stop_x=endx;
	input_cell_stop_y=endy;
}


/*
 * $Id: mark_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function mark_cell(kryds,x,y)
{
//	log("mark_cell('"+kryds.id+"',"+x+","+y+")");

	var cell=document.getElementById(kryds.id+"_"+x+"_"+y);

	if(cell)
	{
		if(
			(kryds.cells[x][y].solution)
		&&
			(kryds.cells[x][y].solution=="solution")
		)
		{
			cell.style.backgroundImage="url(\"" + imagepath + "input_solution_marked.png\")";
		}
		else
		{
			cell.style.backgroundImage="url(\"" + imagepath + "input_marked.png\")";
		}
	}
}



/*
 * $Id: log.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

// var show_log_message=true;
var show_log_message=false;

var logmessage="";

function log(message)
{
	if(show_log_message)
	{
		show_log_message=confirm(message+"\n"+"\n"+"Continue to display log messages?");
	}

	logmessage+=message+"<br />";

	var logelement=document.getElementById("log");

	if(logelement)
	{
		logelement.innerHTML=logmessage;
	}
}



/*
 * $Id: kryds.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function kryds(id,xsize,ysize,synonyms,ads,solutions)
{
	this.id=id;
	this.xsize=xsize;
	this.ysize=ysize;
	this.synonyms=synonyms;
	this.ads=ads;
	this.solutions=solutions;

	var x;
	var y;

	var cells=new Array(xsize);

	for(x=0;x<xsize;x++)
	{
		cells[x]=new Array(ysize);
		for(y=0;y<ysize;y++)
		{
			cells[x][y]=new undefined_cell();
		}
	}

	var count;

	var synonym;

	for(count in synonyms)
	{
		synonym=synonyms[count];

		if(synonym.xpos<0)
		{
			log("Error in synonym #"+count+", xpos<0");
			return;
		}

		if(synonym.xpos>=xsize)
		{
			log("Error in synonym #"+count+", xpos>=xsize");
			return;
		}

		if(synonym.ypos<0)
		{
			log("Error in synonym #"+count+", ypos<0");
			return;
		}

		if(synonym.ypos>=ysize)
		{
			log("Error in synonym #"+count+", ypos>=ysize");
			return;
		}

		x=synonym.xpos;
		y=synonym.ypos;

		if(
			(synonym.subpos!='f')
		&&
			(synonym.subpos!='t')
		&&
			(synonym.subpos!='m')
		&&
			(synonym.subpos!='b')
		)
		{
			log("Error in synonym #"+count+", subpos unknown");
			return;
		}

		if(
			(synonym.subpos=='f')
		&&
			(cells[x][y].state!="undefined")
		)
		{
			log("Error in synonym #"+count+", subpos=='f', but cell is already in use");
			return;
		}

		if(
			(synonym.subpos=='t')
		&&
			(cells[x][y].state!="undefined")
		&&
			(cells[x][y].state!="split synonym")
		&&
			(cells[x][y].top_synonym)
		)
		{
			log("Error in synonym #"+count+", subpos=='t', but cell is already in use");
			return;
		}

		if(
			(synonym.subpos=='m')
		&&
			(cells[x][y].state!="undefined")
		&&
			(cells[x][y].state!="split synonym")
		&&
			(cells[x][y].middle_synonym)
		)
		{
			log("Error in synonym #"+count+", subpos=='m', but cell is already in use");
			return;
		}

		if(
			(synonym.subpos=='b')
		&&
			(cells[x][y].state!="undefined")
		&&
			(cells[x][y].state!="split synonym")
		&&
			(cells[x][y].bottom_synonym)
		)
		{
			log("Error in synonym #"+count+", subpos=='b', but cell is already in use");
			return;
		}

		if(
			(synonym.size!='n')
		&&
			(synonym.size!='b')
		)
		{
			log("Error in synonym #"+count+", size unknown");
			return;
		}

		if(synonym.startx<0)
		{
			log("Error in synonym #"+count+", startx<0");
			return;
		}

		if(synonym.startx>=xsize)
		{
			log("Error in synonym #"+count+", startx>=xsize");
			return;
		}

		if(synonym.starty<0)
		{
			log("Error in synonym #"+count+", starty<0");
			return;
		}

		if(synonym.starty>=ysize)
		{
			log("Error in synonym #"+count+", starty>=ysize");
			return;
		}

		if(synonym.endx<0)
		{
			log("Error in synonym #"+count+", endx<0");
			return;
		}

		if(synonym.endx>=xsize)
		{
			log("Error in synonym #"+count+", endx>=xsize");
			return;
		}

		if(synonym.endy<0)
		{
			log("Error in synonym #"+count+", endy<0");
			return;
		}

		if(synonym.endy>=ysize)
		{
			log("Error in synonym #"+count+", endy>=ysize");
			return;
		}

		if(synonym.startx>synonym.endx)
		{
			log("Error in synonym #"+count+", startx>endx");
			return;
		}

		if(synonym.starty>synonym.endy)
		{
			log("Error in synonym #"+count+", starty>endy");
			return;
		}

		if(
			(synonym.startx!=synonym.endx)
		&&
			(synonym.starty!=synonym.endy)
		)
		{
			log("Error in synonym #"+count+", startx!=endx AND starty!=endy");
			return;
		}

		if(synonym.subpos=='f')
		{
			cells[x][y]=new synonym_full_cell(synonym.size,synonym.synonymtext,synonym.startx,synonym.starty,synonym.endx,synonym.endy);
		}

		if(synonym.subpos=='t')
		{
			if(cells[x][y].state=="undefined")
			{
				cells[x][y]=new synonym_split_cell();
			}

			cells[x][y].top_synonym=new synonym_top_cell(synonym.size,synonym.synonymtext,synonym.startx,synonym.starty,synonym.endx,synonym.endy);
		}

		if(synonym.subpos=='m')
		{
			if(cells[x][y].state=="undefined")
			{
				cells[x][y]=new synonym_split_cell();
			}

			cells[x][y].middle_synonym=new synonym_middle_cell(synonym.size,synonym.synonymtext,synonym.startx,synonym.starty,synonym.endx,synonym.endy);
		}

		if(synonym.subpos=='b')
		{
			if(cells[x][y].state=="undefined")
			{
				cells[x][y]=new synonym_split_cell();
			}

			cells[x][y].bottom_synonym=new synonym_bottom_cell(synonym.size,synonym.synonymtext,synonym.startx,synonym.starty,synonym.endx,synonym.endy);
		}

		for(x=synonym.startx;x<=synonym.endx;x++)
		{
			for(y=synonym.starty;y<=synonym.endy;y++)
			{
				if(cells[x][y].state!="input cell")
				{
					if(cells[x][y].state!="undefined")
					{
						log("Error in synonym #"+count+", input cell already in use");
						return;
					}

					cells[x][y]=new input_cell(x,y);
				}
			}
		}

		if(
			(synonym.startx==synonym.endx)
		&&
			(synonym.starty!=synonym.endy)
		&&
			(synonym.xpos-1==synonym.startx)
		)
		{
			cells[synonym.startx][synonym.starty].ne="->ES";
		}

		if(
			(synonym.startx==synonym.endx)
		&&
			(synonym.starty!=synonym.endy)
		&&
			(synonym.xpos+1==synonym.startx)
		)
		{
			cells[synonym.startx][synonym.starty].nw="->WS";
		}

		if(
			(synonym.startx!=synonym.endx)
		&&
			(synonym.starty==synonym.endy)
		&&
			(synonym.ypos-1==synonym.starty)
		)
		{
			cells[synonym.startx][synonym.starty].sw="->SE";
		}

		if(
			(synonym.startx!=synonym.endx)
		&&
			(synonym.starty==synonym.endy)
		&&
			(synonym.ypos+1==synonym.starty)
		)
		{
			cells[synonym.startx][synonym.starty].nw="->NE";
		}
	}

	var ad;

	for(count in ads)
	{
		ad=ads[count];

		if(ad.startx<0)
		{
			log("Error in ad #"+count+", startx<0");
			return;
		}

		if(ad.startx>=xsize)
		{
			log("Error in ad #"+count+", startx>=xsize");
			return;
		}

		if(ad.starty<0)
		{
			log("Error in ad #"+count+", starty<0");
			return;
		}

		if(ad.starty>=ysize)
		{
			log("Error in ad #"+count+", starty>=ysize");
			return;
		}

		if(ad.endx<0)
		{
			log("Error in ad #"+count+", endx<0");
			return;
		}

		if(ad.endx>=xsize)
		{
			log("Error in ad #"+count+", endx>=xsize");
			return;
		}

		if(ad.endy<0)
		{
			log("Error in ad #"+count+", endy<0");
			return;
		}

		if(ad.endy>=ysize)
		{
			log("Error in ad #"+count+", endy>=ysize");
			return;
		}

		if(ad.startx>ad.endx)
		{
			log("Error in ad #"+count+", startx>endx");
			return;
		}

		if(ad.starty>ad.endy)
		{
			log("Error in ad #"+count+", starty>endy");
			return;
		}

		if(cells[ad.startx][ad.starty].state!="undefined")
		{
			log("Error in ad #"+count+", cell already in use");
			return;
		}

		for(x=ad.startx;x<=ad.endx;x++)
		{
			for(y=ad.starty;y<=ad.endy;y++)
			{
				if(cells[x][y].state!="undefined")
				{
					log("Error in ad #"+count+", cell already in use");
					return;
				}

				cells[x][y]=null;
			}
		}

		cells[ad.startx][ad.starty]=new ad_cell((ad.endx-ad.startx)+1,(ad.endy-ad.starty)+1,ad.code);
	}

	var solution;

	for(count in solutions)
	{
		solution=solutions[count];

		if(solution.startx<0)
		{
			log("Error in solution #"+count+", startx<0");
			return;
		}

		if(solution.startx>=xsize)
		{
			log("Error in solution #"+count+", startx>=xsize");
			return;
		}

		if(solution.starty<0)
		{
			log("Error in solution #"+count+", starty<0");
			return;
		}

		if(solution.starty>=ysize)
		{
			log("Error in solution #"+count+", starty>=ysize");
			return;
		}

		if(solution.endx<0)
		{
			log("Error in solution #"+count+", endx<0");
			return;
		}

		if(solution.endx>=xsize)
		{
			log("Error in solution #"+count+", endx>=xsize");
			return;
		}

		if(solution.endy<0)
		{
			log("Error in solution #"+count+", endy<0");
			return;
		}

		if(solution.endy>=ysize)
		{
			log("Error in solution #"+count+", endy>=ysize");
			return;
		}

		if(solution.startx>solution.endx)
		{
			log("Error in solution #"+count+", startx>endx");
			return;
		}

		if(solution.starty>solution.endy)
		{
			log("Error in solution #"+count+", starty>endy");
			return;
		}

		for(x=solution.startx;x<=solution.endx;x++)
		{
			for(y=solution.starty;y<=solution.endy;y++)
			{
				if(cells[x][y].state!="input cell")
				{
					log("Error in solution #"+count+", cell["+x+"]["+y+"] isn't an input cell, but '"+cells[x][y].state+"'");
					return;
				}

				cells[x][y].solution="solution";
			}
		}
	}

	for(y=0;y<ysize;y++)
	{
		for(x=0;x<xsize;x++)
		{
			if(cells[x][y])
			{
				if(cells[x][y].state=="split synonym")
				{
					if(!(cells[x][y].top_synonym))
					{
						log("cells["+x+"]["+y+"] has no 'top'-synonym");
						cells[x][y].top_synonym=new synonym_top_cell('n','<span style="color: red;">Missing synonym</span>',-1,-1,-1,-1);
					}

					if(!(cells[x][y].bottom_synonym))
					{
						log("cells["+x+"]["+y+"] has no 'bottom'-synonym");
						cells[x][y].bottom_synonym=new synonym_bottom_cell('n','<span style="color: red;">Missing synonym</span>',-1,-1,-1,-1);
					}
				}

				if(cells[x][y].state=="undefined")
				{
					log("cells["+x+"]["+y+"] is still not defined");
				}
			}
		}
	}

	this.cells=cells;
}



/*
 * $Id: keyup.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function keyup(kryds,x,y)
{
//	log("keyup");
	if(input_cell_kryds)
	{
		var input=document.getElementById(
			input_cell_kryds.id+
			"_"+
			input_cell_x+
			"_"+
			input_cell_y+
			"_input"
		);
		if(input)
		{
			input.value=" ";
			input.focus();
		}
	}
}




/*
 * $Id: keypress.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function keypress(e)
{
//	log("keypress");
	if(!e)
	{
		e=window.event;
	}
	if(
		(e.altKey)
	||
		(e.altLeft)
	||
		(e.ctrlKey)
	||
		(e.ctrlLeft)
	||
		(e.metaKey)
	||
		((e.modifiers)&(0x0B))
	)
	{
		if(input_cell_kryds)
		{
			var input=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_input");
			if(input)
			{
				input.focus();
			}
		}
		return;
	}
	var from;
	var code;
	if(e["keyCode"])
	{
		from="keyCode";
		code=e["keyCode"];
	}
	else
	{
		if(e["charCode"])
		{
			from="charCode";
			code=e["charCode"];
		}
		else
		{
			from="nowhere";
			code=-1;
		}
	}
	var keytype;
	var chr;
	switch(code)
	{
/*
		case 8:
			keytype="special";
			chr="backspace";
		break;
		case 13:
			keytype="special";
			chr="enter/return";
		break;
		case 32:
			keytype="special";
			chr="space";
		break;
		case 37:
			keytype="arrow";
			chr="left";
		break;
		case 38:
			keytype="arrow";
			chr="up";
		break;
		case 39:
			keytype="arrow";
			chr="right";
		break;
		case 40:
			keytype="arrow";
			chr="down";
		break;
		case 46:
			keytype="special";
			chr="delete";
		break;
		case 95:
			keytype="special";
			chr="_";
		break;
*/
		case 197:
			keytype="letter";
			chr="Å";
		break;
		case 198:
			keytype="letter";
			chr="Æ";
		break;
		case 216:
			keytype="letter";
			chr="Ø";
		break;
		case 229:
			keytype="letter";
			chr="å";
		break;
		case 230:
			keytype="letter";
			chr="æ";
		break;
		case 248:
			keytype="letter";
			chr="ø";
		break;
		default:
/*
			if(
				(
					(code>=65)
				&&
					(code<=90)
				)
			||
				(
					(code>=97)
				&&
					(code<=122)
				)
			)
			{
				keytype="letter";
				chr=String.fromCharCode(code);
			}
*/
		break;
	}
	if(chr)
	{
		log("body_onkeypress "+from+" "+code+" "+chr);
		switch(keytype)
		{
			case "arrow":
				log("'"+chr+"' arrow");
				if(
					(input_cell_x!=-1)
				&&
					(input_cell_y!=-1)
				)
				{
					switch(chr)
					{
						case "left":
							var new_x=input_cell_x-1;
							if(new_x<0)
							{
								new_x=0;
							}
							if(input_cell_kryds.cells[new_x][input_cell_y].state=="input cell")
							{
/* \/ POHO */
//								clear_cells(input_cell_kryds);
/* /\ POHO */
								mark_cells(input_cell_kryds,new_x,input_cell_y,new_x,input_cell_y);
							}
						break;
						case "up":
							var new_y=input_cell_y-1;
							if(new_y<0)
							{
								new_y=0;
							}
							if(input_cell_kryds.cells[input_cell_x][new_y].state=="input cell")
							{
/* \/ POHO */
//								clear_cells(input_cell_kryds);
/* /\ POHO */
								mark_cells(input_cell_kryds,input_cell_x,new_y,input_cell_x,new_y);
							}
						break;
						case "right":
							var new_x=input_cell_x+1;
							if(new_x>(input_cell_kryds.xsize-1))
							{
								new_x=input_cell_kryds.xsize-1;
							}
							if(input_cell_kryds.cells[new_x][input_cell_y].state=="input cell")
							{
/* \/ POHO */
//								clear_cells(input_cell_kryds);
/* /\ POHO */
								mark_cells(input_cell_kryds,new_x,input_cell_y,new_x,input_cell_y);
							}
						break;
						case "down":
							var new_y=input_cell_y+1;
							if(new_y>(input_cell_kryds.ysize-1))
							{
								new_y=input_cell_kryds.ysize-1;
							}
							if(input_cell_kryds.cells[input_cell_x][new_y].state=="input cell")
							{
/* \/ POHO */
//								clear_cells(input_cell_kryds);
/* /\ POHO */
								mark_cells(input_cell_kryds,input_cell_x,new_y,input_cell_x,new_y);
							}
						break;
						default:
							clear_cells(input_cell_kryds);
						break;
					}
				}
			break;
			case "letter":
				log("Normal letter");
				chr=chr.toUpperCase();
				var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
				if(letter)
				{
					var firstchild=letter.firstChild;
					while(firstchild)
					{
						letter.removeChild(firstchild);
						firstchild=letter.firstChild;
					}
					var textnode=document.createTextNode(chr);
					letter.appendChild(textnode);
				}
/*
				var input=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_input");
				if(input)
				{
					input.blur();
				}
*/
				if(
					(input_cell_x==input_cell_stop_x)
				&&
					(input_cell_y==input_cell_stop_y)
				)
				{
					input_cell_delta_x=0;
					input_cell_delta_y=0;
				}
				else
				{
					clear_cell(input_cell_kryds,input_cell_x,input_cell_y);
					input_cell_x+=input_cell_delta_x;
					input_cell_y+=input_cell_delta_y;
				}
			break;
			case "special":
				switch(chr)
				{
					case "backspace":
						if(
							(input_cell_delta_x==-0)
						&&
							(input_cell_delta_y==-0)
						)
						{
							var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
							if(letter)
							{
								var firstchild=letter.firstChild;
								while(firstchild)
								{
									letter.removeChild(firstchild);
									firstchild=letter.firstChild;
								}
								var textnode=document.createTextNode("");
								letter.appendChild(textnode);
							}
						}
						else
						{
							if(
								(input_cell_x!=-1)
							&&
								(input_cell_y!=-1)
							)
							{
								if(
									(input_cell_x!=input_cell_start_x)
								||
									(input_cell_y!=input_cell_start_y)
								)
								{
									input_cell_x-=input_cell_delta_x;
									input_cell_y-=input_cell_delta_y;
									mark_cell(input_cell_kryds,input_cell_x,input_cell_y);
								}
								var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
								if(letter)
								{
									var firstchild=letter.firstChild;
									while(firstchild)
									{
										letter.removeChild(firstchild);
										firstchild=letter.firstChild;
									}
									var textnode=document.createTextNode("");
									letter.appendChild(textnode);
								}
							}
						}
					break;
/*
					case "enter/return":
					break;
*/
					case "space":
						if(
							(input_cell_delta_x==0)
						&&
							(input_cell_delta_y==0)
						)
						{
							var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
							if(letter)
							{
								var firstchild=letter.firstChild;
								while(firstchild)
								{
									letter.removeChild(firstchild);
									firstchild=letter.firstChild;
								}
								var textnode=document.createTextNode("");
								letter.appendChild(textnode);
							}
						}
						else
						{
							if(
								(input_cell_x==input_cell_stop_x)
							&&
								(input_cell_y==input_cell_stop_y)
							)
							{
								input_cell_delta_x=0;
								input_cell_delta_y=0;
							}
							else
							{
								clear_cell(input_cell_kryds,input_cell_x,input_cell_y);
								input_cell_x+=input_cell_delta_x;
								input_cell_y+=input_cell_delta_y;
							}
						}
					break;
					case "delete":
						if(
							(input_cell_delta_x==0)
						&&
							(input_cell_delta_y==0)
						)
						{
							var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
							if(letter)
							{
								var firstchild=letter.firstChild;
								while(firstchild)
								{
									letter.removeChild(firstchild);
									firstchild=letter.firstChild;
								}
								var textnode=document.createTextNode("");
								letter.appendChild(textnode);
							}
						}
						else
						{
							if(
								(input_cell_x!=-1)
							&&
								(input_cell_y!=-1)
							)
							{
								var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
								if(letter)
								{
									var firstchild=letter.firstChild;
									while(firstchild)
									{
										letter.removeChild(firstchild);
										firstchild=letter.firstChild;
									}
									var textnode=document.createTextNode("");
									letter.appendChild(textnode);
								}
								if(
									(input_cell_x!=input_cell_stop_x)
								||
									(input_cell_y!=input_cell_stop_y)
								)
								{
									clear_cell(input_cell_kryds,input_cell_x,input_cell_y);
									input_cell_x+=input_cell_delta_x;
									input_cell_y+=input_cell_delta_y;
								}
							}
						}
					break;
					case "_":
						var ok=false;
						var ask=true;
						while(ask)
						{
							var new_chr=prompt("Vil du skrive et æ (ae), ø (oe) eller å (aa)?");
							log("new_chr : '"+new_chr+"'");
							new_chr=new_chr.toUpperCase();
							switch(new_chr)
							{
								case 'Æ':
								case 'AE':
									ok=true;
									chr='Æ';
								break;
								case 'Ø':
								case 'OE':
									ok=true;
									chr='Ø';
								break;
								case 'Å':
								case 'AA':
									ok=true;
									chr='Å';
								break;
								default:
									if(new_chr.length==1)
									{
										if(
											(new_chr>='A')
										&&
											(new_chr<='Z')
										)
										{
											ok=true;
											chr=new_chr;
										}
									}
									if(!ok)
									{
										ask=confirm("Hmm, '"+new_chr+"' var hverken et æ (ae), ø (oe) eller å (aa). Vil du prøve igen?");
										log("ask : '"+ask+"'");
									}
								break;
							}
							if(ok)
							{
								ask=false;
							}
						}
						if(ok)
						{
							var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
							if(letter)
							{
								var firstchild=letter.firstChild;
								while(firstchild)
								{
									letter.removeChild(firstchild);
									firstchild=letter.firstChild;
								}
								var textnode=document.createTextNode(chr);
								letter.appendChild(textnode);
							}
/*
							var input=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_input");
							if(input)
							{
								input.blur();
							}
*/
							if(
								(input_cell_x==input_cell_stop_x)
							&&
								(input_cell_y==input_cell_stop_y)
							)
							{
								input_cell_delta_x=0;
								input_cell_delta_y=0;
							}
							else
							{
								clear_cell(input_cell_kryds,input_cell_x,input_cell_y);
								input_cell_x+=input_cell_delta_x;
								input_cell_y+=input_cell_delta_y;
							}
						}
					break;
					default:
						log("TODO: special='"+chr+"'");
					break;
				}
			break;
			default:
				log("TODO: keytype='"+keytype+"'");
			break;
		}
	}
	if(input_cell_kryds)
	{
		var input=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_input");
		if(input)
		{
			input.focus();
		}
	}
}



/*
 * $Id: keydown.js,v 1.2 2008/04/02 12:30:07 poho Exp $
 */

function keydown(e)
{
//	log("keydown");
	if(!e)
	{
		e=window.event;
	}
	if(
		(e.altKey)
	||
		(e.altLeft)
	||
		(e.ctrlKey)
	||
		(e.ctrlLeft)
	||
		(e.metaKey)
	||
		((e.modifiers)&(0x0B))
	)
	{
		if(input_cell_kryds)
		{
			var input=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_input");
			if(input)
			{
				input.focus();
			}
		}
		return;
	}
	var from;
	var code;
	if(e["keyCode"])
	{
		from="keyCode";
		code=e["keyCode"];
	}
	else
	{
		if(e["charCode"])
		{
			from="charCode";
			code=e["charCode"];
		}
		else
		{
			from="nowhere";
			code=-1;
		}
	}
	var keytype;
	var chr;	

	switch(code)
	{
		case 8:
			keytype="special";
			chr="backspace";
		break;
		case 13:
			keytype="special";
			chr="enter/return";
		break;
		case 32:
			keytype="special";
			chr="space";
		break;
		case 37:
			keytype="arrow";
			chr="left";
		break;
		case 38:
			keytype="arrow";
			chr="up";
		break;
		case 39:
			keytype="arrow";
			chr="right";
		break;
		case 40:
			keytype="arrow";
			chr="down";
		break;
		case 46:
			keytype="special";
			chr="delete";
		break;
		case 95:	// Opera
			keytype="special";
			chr="_";
		break;
		case 109:	// Firefox
			keytype="special";
			chr="_";
		break;
		case 189:	// Internet Explorer
			keytype="special";
			chr="_";
		break;
/*
		case 192:	// Internet Explorer
			keytype="letter";
			chr="%E6";
		break;
		case 197:	// Opera
			keytype="letter";
			chr="å";
		break;
		case 198:	// Opera
			keytype="letter";
			chr="æ";
		break;
		case 216:	// Opera
			keytype="letter";
			chr="ø";
		break;
		case 221:	// Internet Explorer
			keytype="letter";
			chr="å";
		break;
		case 222:	// Internet Explorer
			keytype="letter";
			chr="ø";
		break;
*/
		default:
			if(
				(
					(code>=65)
				&&
					(code<=90)
				)
			||
				(
					(code>=97)
				&&
					(code<=122)
				)
			)
			{
				keytype="letter";
				chr=String.fromCharCode(code);
			}
		break;
	}
	if(chr)
	{
		log("body_onkeydown "+from+" "+code+" "+chr);
		switch(keytype)
		{
			case "arrow":
				log("'"+chr+"' arrow");
				if(
					(input_cell_x!=-1)
				&&
					(input_cell_y!=-1)
				)
				{
					switch(chr)
					{
						case "left":
							var new_x=input_cell_x-1;
							if(new_x<0)
							{
								new_x=0;
							}
							if(input_cell_kryds.cells[new_x][input_cell_y].state=="input cell")
							{
/* \/ POHO */
//								clear_cells(input_cell_kryds);
/* /\ POHO */
								mark_cells(input_cell_kryds,new_x,input_cell_y,new_x,input_cell_y);
							}
						break;
						case "up":
							var new_y=input_cell_y-1;
							if(new_y<0)
							{
								new_y=0;
							}
							if(input_cell_kryds.cells[input_cell_x][new_y].state=="input cell")
							{
/* \/ POHO */
//								clear_cells(input_cell_kryds);
/* /\ POHO */
								mark_cells(input_cell_kryds,input_cell_x,new_y,input_cell_x,new_y);
							}
						break;
						case "right":
							var new_x=input_cell_x+1;
							if(new_x>(input_cell_kryds.xsize-1))
							{
								new_x=input_cell_kryds.xsize-1;
							}
							if(input_cell_kryds.cells[new_x][input_cell_y].state=="input cell")
							{
/* \/ POHO */
//								clear_cells(input_cell_kryds);
/* /\ POHO */
								mark_cells(input_cell_kryds,new_x,input_cell_y,new_x,input_cell_y);
							}
						break;
						case "down":
							var new_y=input_cell_y+1;
							if(new_y>(input_cell_kryds.ysize-1))
							{
								new_y=input_cell_kryds.ysize-1;
							}
							if(input_cell_kryds.cells[input_cell_x][new_y].state=="input cell")
							{
/* \/ POHO */
//								clear_cells(input_cell_kryds);
/* /\ POHO */
								mark_cells(input_cell_kryds,input_cell_x,new_y,input_cell_x,new_y);
							}
						break;
						default:
							clear_cells(input_cell_kryds);
						break;
					}
				}
			break;
			case "letter":
				log("Normal letter");
				chr=chr.toUpperCase();
				var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
				if(letter)
				{
					var firstchild=letter.firstChild;
					while(firstchild)
					{
						letter.removeChild(firstchild);
						firstchild=letter.firstChild;
					}
					var textnode=document.createTextNode(chr);
					letter.appendChild(textnode);
				}
/*
				var input=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_input");
				if(input)
				{
					input.blur();
				}
*/
				if(
					(input_cell_x==input_cell_stop_x)
				&&
					(input_cell_y==input_cell_stop_y)
				)
				{
					input_cell_delta_x=0;
					input_cell_delta_y=0;
				}
				else
				{
					clear_cell(input_cell_kryds,input_cell_x,input_cell_y);
					input_cell_x+=input_cell_delta_x;
					input_cell_y+=input_cell_delta_y;
				}
			break;
			case "special":
				switch(chr)
				{
					case "backspace":
						if(
							(input_cell_delta_x==0)
						&&
							(input_cell_delta_y==0)
						)
						{
							var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
							if(letter)
							{
								var firstchild=letter.firstChild;
								while(firstchild)
								{
									letter.removeChild(firstchild);
									firstchild=letter.firstChild;
								}
								var textnode=document.createTextNode("");
								letter.appendChild(textnode);
							}
						}
						else
						{
							if(
								(input_cell_x!=-1)
							&&
								(input_cell_y!=-1)
							)
							{
								if(
									(input_cell_x!=input_cell_start_x)
								||
									(input_cell_y!=input_cell_start_y)
								)
								{
									input_cell_x-=input_cell_delta_x;
									input_cell_y-=input_cell_delta_y;
									mark_cell(input_cell_kryds,input_cell_x,input_cell_y);
								}
								var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
								if(letter)
								{
									var firstchild=letter.firstChild;
									while(firstchild)
									{
										letter.removeChild(firstchild);
										firstchild=letter.firstChild;
									}
									var textnode=document.createTextNode("");
									letter.appendChild(textnode);
								}
							}
						}
					break;
/*
					case "enter/return":
					break;
*/
					case "space":
						if(
							(input_cell_delta_x==0)
						&&
							(input_cell_delta_y==0)
						)
						{
							var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
							if(letter)
							{
								var firstchild=letter.firstChild;
								while(firstchild)
								{
									letter.removeChild(firstchild);
									firstchild=letter.firstChild;
								}
								var textnode=document.createTextNode("");
								letter.appendChild(textnode);
							}
						}
						else
						{
							if(
								(input_cell_x==input_cell_stop_x)
							&&
								(input_cell_y==input_cell_stop_y)
							)
							{
								input_cell_delta_x=0;
								input_cell_delta_y=0;
							}
							else
							{
								clear_cell(input_cell_kryds,input_cell_x,input_cell_y);
								input_cell_x+=input_cell_delta_x;
								input_cell_y+=input_cell_delta_y;
							}
						}
					break;
					case "delete":
						if(
							(input_cell_delta_x==0)
						&&
							(input_cell_delta_y==0)
						)
						{
							var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
							if(letter)
							{
								var firstchild=letter.firstChild;
								while(firstchild)
								{
									letter.removeChild(firstchild);
									firstchild=letter.firstChild;
								}
								var textnode=document.createTextNode("");
								letter.appendChild(textnode);
							}
						}
						else
						{
							if(
								(input_cell_x!=-1)
							&&
								(input_cell_y!=-1)
							)
							{
								var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
								if(letter)
								{
									var firstchild=letter.firstChild;
									while(firstchild)
									{
										letter.removeChild(firstchild);
										firstchild=letter.firstChild;
									}
									var textnode=document.createTextNode("");
									letter.appendChild(textnode);
								}
								if(
									(input_cell_x!=input_cell_stop_x)
								||
									(input_cell_y!=input_cell_stop_y)
								)
								{
									clear_cell(input_cell_kryds,input_cell_x,input_cell_y);
									input_cell_x+=input_cell_delta_x;
									input_cell_y+=input_cell_delta_y;
								}
							}
						}
					break;
					case "_":
						var ok=false;
						var ask=true;
						while(ask)
						{
							var new_chr=prompt("Vil du skrive et æ (ae), ø (oe) eller å (aa)?");
							log("new_chr : '"+new_chr+"'");
							if(new_chr)
							{
								new_chr=new_chr.toUpperCase();
								switch(new_chr)
								{
									case 'Æ':
									case 'AE':
										ok=true;
										chr='Æ';
									break;
									case 'Ø':
									case 'OE':
										ok=true;
										chr='Ø';
									break;
									case 'Å':
									case 'AA':
										ok=true;
										chr='Å';
									break;
									default:
										if(new_chr.length==1)
										{
											if(
												(new_chr>='A')
											&&
												(new_chr<='Z')
											)
											{
												ok=true;
												chr=new_chr;
											}
										}
										if(!ok)
										{
											ask=confirm("Hmm, '"+new_chr+"' var hverken et æ (ae), ø (oe) eller å (aa). Vil du prøve igen?");
											log("ask : '"+ask+"'");
										}
									break;
								}
								if(ok)
								{
									ask=false;
								}
							}
							else
							{
								ask=false;
							}
						}
						if(ok)
						{
							var letter=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_letter");
							if(letter)
							{
								var firstchild=letter.firstChild;
								while(firstchild)
								{
									letter.removeChild(firstchild);
									firstchild=letter.firstChild;
								}
								var textnode=document.createTextNode(chr);
								letter.appendChild(textnode);
							}
/*
							var input=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_input");
							if(input)
							{
								input.blur();
							}
*/
							if(
								(input_cell_x==input_cell_stop_x)
							&&
								(input_cell_y==input_cell_stop_y)
							)
							{
								input_cell_delta_x=0;
								input_cell_delta_y=0;
							}
							else
							{
								clear_cell(input_cell_kryds,input_cell_x,input_cell_y);
								input_cell_x+=input_cell_delta_x;
								input_cell_y+=input_cell_delta_y;
							}
						}
					break;
					default:
						log("TODO: special='"+chr+"'");
					break;
				}
			break;
			default:
				log("TODO: keytype='"+keytype+"'");
			break;
		}
	}
	if(input_cell_kryds)
	{
		var input=document.getElementById(input_cell_kryds.id+"_"+input_cell_x+"_"+input_cell_y+"_input");
		if(input)
		{
			input.focus();
		}
	}
}







/*
 * $Id: input_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function input_cell(x,y)
{
	this.state="input cell";
	this.x=x;
	this.y=y;
	this.solution=null;
}


/*
 * $Id: error.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function error(message,url,line)
{
	log("Error in "+url+", line "+line+": "+message);

	return(true);
}

onerror=error;



/*
 * $Id: clear_cells.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function clear_cells(kryds)
{
//	log("clear_cells('"+kryds.id+"')");

	var x;
	var y;

	for(x=0;x<kryds.xsize;x++)
	{
		for(y=0;y<kryds.ysize;y++)
		{
			clear_cell(kryds,x,y);
		}
	}
}





/*
 * $Id: clear_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function clear_cell(kryds,x,y)
{
//	log("clear_cell('"+kryds.id+"',"+x+","+y+")");

	var cell=document.getElementById(kryds.id+"_"+x+"_"+y);

	if(cell)
	{
//		cell.style.backgroundImage="";

		if(
			(kryds.cells[x][y].solution)
		&&
			(kryds.cells[x][y].solution=="solution")
		)
		{
			cell.style.backgroundImage="url(\"" + imagepath + "input_solution_not_marked.png\")";
		}
		else
		{
			cell.style.backgroundImage="url(\"" + imagepath + "input_not_marked.png\")";
		}
	}
}


/*
 * $Id: ad_cell.js,v 1.1 2007/01/05 14:39:11 poho Exp $
 */

function ad_cell(xsize,ysize,code)
{
	this.state="ad cell";
	this.xsize=xsize;
	this.ysize=ysize;
	this.code=code;
}



