<!-- Original LogiKwiz source code by Roelof de Graaf <Roelof.deGraaf@wtcm.be>

// Compilation and JavaScript (C)opyright 2002 Steven de Brouwer
// Don't you do nothing without emailing me... ;)
// Steven@deBrouwer.org

//<script language="JavaScript"><!--
//document.write('<script src="myinput.js"><\/' + script>');
////--></script>


/////////////////////////////////
// Global Variables for this game
//var iconplus = "p/plus.gif"
//var iconmins = "p/mins.gif"
//var iconzero = "p/zero.gif"

var iconplus = new Image (15,15);
iconplus.src = "p/plus.gif";
var iconmins = new Image (15,15);
iconmins.src = "p/mins.gif";
var iconzero = new Image (15,15);
iconzero.src = "p/zero.gif";

var iconundo = new Image (40,40);
iconundo.src = "p/undo.gif";
var iconnoundo = new Image (40,40);
iconnoundo.src = "p/noundo.gif";

var iconself = new Image (40,40);
iconself.src = "p/self.gif";
var iconauto = new Image (40,40);
iconauto.src = "p/auto.gif";

var help = 'Los de puzzel logisch op.\n'+
'\n' +
'Deze puzzel lijkt op het eerste oog misschien ingewikkeld, maar\n'+
'met een gezond verstand en een systematische aanpak is hij\n'+
'door iedereen op te lossen.\n'+
'\n'+
'Ieder probleem bestaat uit een inleiding, aanwijzingen en een tabel.\n'+
'In de tabel kunt u de gegevens weergeven. Met gewoon clicken plaatst\n'+
'u een min (-) bij een onmogelijke combinatie, en met ctrl-clicken een\n'+
'plus (+) bij een goede combinatie. Door de aanwijzingen door te\n'+
'lopen en de gegevens te combineren, komt u vanzelf bij de oplossing.\n'+
'\n'+
'Daarnaast beschikt u over een Undo knop, waarmee u eventueel\n'+
'een stap ongedaan kunt maken. En wilt u liever niet geholpen worden\n'+
'met het invullen van de puzzel, klik dan op de Auto knop.\n'+
'\n'+
'Veel plezier!\n'+
'\n'+
'Steven@deBrouwer.org (23-jul-07)'+
'';

var INeedHelp = true;
var oplossing = (typeof myLQ.opl != "undefined") ;

function show(a) {alert(a)};

function klaar()
{
  var uitslag="";
  var x,y;

  with (myLQ)
  {
	uitslag +=
		"<html>\n<head>\n<title>Uitslag: "+title+"</title>\n"+
		'<LINK REL=STYLESHEET TYPE="text/css" HREF="/deBrouwer.css">\n'+
		'<LINK REL=STYLESHEET TYPE="text/css" HREF="logikwiz.css">\n'+
		"<body>\n"+
		"<h1>Uitslag</h1> <b>"+title+"</b><p>"+
		"<table border=1>\n"
	allesgoed=true;
    uitslag += "<tr>";
    uitslag+="<th class=cl"+nr_of_cats+"c>"+item[nr_of_cats].cat+"</th>\n";
	for (var i=1; i < nr_of_cats; i++)
    {
	  uitslag+="<th class=cl"+i+"c>"+item[i].cat+"</th>\n";
    }
    uitslag += "</tr>\n";
	for (var i=1; i<=nr_of_items; i++)
    {
      uitslag += "<tr>";
	  uitslag += "<td class=cl"+nr_of_cats+"c>"+item[nr_of_cats][i]+"</td>";
	  for (var j=1; j< nr_of_cats; j++)
	  {
	     x = v_hor[j][i];
		 kleur = " ";
		 if (oplossing)
		 {
			 kleur=" style='color: ";
			 if (x==opl[j][i])
			 {
				kleur=" style='color: green'";
			 } else 
			 {
				kleur=" style='color: red'";
				allesgoed=false;
			 }
		 }
		 uitslag += "<td class=cl"+j+"c "+kleur+">"+item[j][x]+"</td>";
	  }
      uitslag += "</tr>\n";
    }
	uitslag += "</table>\n<p>";
	if (oplossing)
	{
	  if (allesgoed)
	  {
		uitslag+="<h1>Alles goed! Proficiat!</h1>";
	  } else
	  {
		uitslag+="<h3>Helaas, niet alles goed...</h3> Probeer het nog eens...";
	  }
	} else
	{
		uitslag+='<h3>Oplossing helaas nog niet bekend bij Steven....</h3>Kan dus helaas niet controleren, of jouw oplossing klopt.<br>Zou je hem mij willen mailen?<p>Thanks!<br>Steven &lt;<a href="mailto:Steven@deBrouwer.org">Steven@deBrouwer.org</a>&gt;';
	}
	uitslag+="\n</body>\n</html>\n";
  } // myLQ
newWindow = window.open('','newWin','width=400,height=400');
newWindow.document.write(uitslag);
newWindow.document.close();
}

function nospaces(entry)
{
  out = " "; // replace this
  add = "&nbsp;"; // with this
  temp = "" + entry; // temporary holder

  while (temp.indexOf(out)>-1) {
    poep=true;
    pos= temp.indexOf(out);
    temp = "" + (temp.substring(0, pos) + add + 
    temp.substring((pos + out.length), temp.length));
  }

  out = "-"; // replace this
  add = "&minus;"; // with this

  while (temp.indexOf(out)>-1) {
    poep=true;
    pos= temp.indexOf(out);
    temp = "" + (temp.substring(0, pos) + add + 
    temp.substring((pos + out.length), temp.length));
  }

return temp;
}

var alfabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var totmatmax = myLQ.nr_of_cats * (myLQ.nr_of_cats - 1) / 2;
var sol   = new Array(totmatmax+1);
var v_hor = new Array(totmatmax+1);
var v_ver = new Array(totmatmax+1);

var GlobCount = 0;
var saveAll = new Array(100);
for (var sa=0;sa<100 ;sa++ ) saveAll[sa] = new Array(totmatmax+1);

with (myLQ)
{
   for (var i=1; i<=totmatmax; i++ )
   {
      for (var sa=0;sa<100 ;sa++ ) saveAll[sa][i] = new Array(maxItems+1);
      sol[i]   = new Array(maxItems+1);
	  v_hor[i] = new Array(maxItems+1);
	  v_ver[i] = new Array(maxItems+1);
      for (var j=1; j<=maxItems; j++ )
      {
         for (var sa=0;sa<100 ;sa++ ) saveAll[sa][i][j] = new Array(maxItems+1);
         sol[i][j] = new Array(maxItems+1);
	     for (var k=1; k<=maxItems; k++ )
	     {
            for (var sa=0;sa<100 ;sa++ ) saveAll[sa][i][j][k] = 0;
		    sol[i][j][k] = 0;
	     }
		 v_hor[i][j] = 0;
		 v_ver[i][j] = 0;
      }
   }
}

var ImageArray = new Array();
////////////////////
function getImages()
{
   for (var t=0; t<document.images.length ;t++ )
   {
      eval('ImageArray["'+document.images[t].name+'"] = t;');
   }
}


///////////////////
function foundall()
{
  var yes=true;
  with (myLQ)
  {
    for (var   i=1; (i<=totmatmax  ) && yes; i++)
    {
      for (var j=1; (j<=nr_of_items) && yes; j++)
      {
	    yes = yes && (v_hor[i][j]!=0);
      }
	}
  }
  return yes;
}

/////////////////////////////
function setsign(i,j,k, sign)
{
   var tag=""+i+"_"+j+"_"+k+"";

   sol[i][j][k] = sign;
   if (sign==2)
   {
      v_hor[i][j]=k; 
	  v_ver[i][k]=j;
   }

   var pic;
   pic = 'iconzero';
   if (sign==1)
   {
      pic='iconmins';
   }
   if (sign==2)
   {
      pic='iconplus';
   }

   t = ImageArray[tag];
   document.images[t].src=eval(pic).src;
}

//////////////////
function refresh()
{
   for (var i=1; i<=totmatmax; i++)
      for (var j=1; j<=myLQ.nr_of_items; j++)
	     for (var k=1; k<=myLQ.nr_of_items; k++)
	     {
		    var x=sol[i][j][k];
		    setsign(i,j,k, x);
		 }
}

///////////
function togglehelp()
{
   INeedHelp = ! INeedHelp;
   var t = ImageArray['togglehelp'];
   document.images[t].src=INeedHelp?iconauto.src:iconself.src;
}

///////////////
function undo()
{
  if (GlobCount > 1)
  {
     GlobCount--;

     for (var i=1; i<=totmatmax; i++)
       for (var j=1; j<=myLQ.nr_of_items; j++)
	   {
	     for (var k=1; k<=myLQ.nr_of_items; k++)
		    sol[i][j][k] = saveAll[GlobCount-1][i][j][k];
         v_hor[i][j]=0; 
	     v_ver[i][j]=0;
	   }
//	 sol=saveAll[GlobCount-1]
	 refresh();
  }
  if (GlobCount <= 1)
  {
     var t = ImageArray['undo'];
     document.images[t].src=iconnoundo.src;
  }
}

///////////////
function savedo()
{
     for (var i=1; i<=totmatmax; i++)
       for (var j=1; j<=myLQ.nr_of_items; j++)
	     for (var k=1; k<=myLQ.nr_of_items; k++)
		    saveAll[GlobCount][i][j][k] = sol[i][j][k];
//   saveAll[GlobCount] = sol;
   GlobCount++;

  if (GlobCount > 1)
  {
    var t = ImageArray['undo'];
    document.images[t].src=iconundo.src;
  }
}


////////////////////////////
function fill_in(i, nofound)
{
with (myLQ)
{
  var hlp, j,k,count,dum;

  do
  {
    hlp=true;
    for (j=1; j<=nr_of_items; j++)
	{
      count=0;
      dum=v_hor[i][j];
      for (k=1 ; k<=nr_of_items; k++)
	  {
	     count=count+sol[i][j][k];
	  }
      if ((dum!=0) && (count!=(nr_of_items+1)) ) 
	  {
        for (k=1; k<=nr_of_items; k++)
		{
		   setsign(i,j,k,1);
		}
		setsign(i,j,dum,2);
        hlp=false;
      }
    }
    for (k=1 ; k<=nr_of_items; k++)
	{
      count=0;
      dum=v_ver[i][k];
      for (j=1 ; j<=nr_of_items; j++)
	  {
	    count=count+sol[i][j][k];
	  }
      if ((dum!=0) && (count!=(nr_of_items+1)) )
	  {
        for (j=1 ; j<=nr_of_items; j++)
		{
		   setsign(i,j,k,1);
		}
        setsign(i,dum,k,2);
        hlp=false;
      }
    }
    for (j=1 ; j<=nr_of_items; j++)
	{
      count=0;
      dum=v_hor[i][j];
      for (k=1 ; k<=nr_of_items; k++)
	  {
        count=count+sol[i][j][k];
	  }
      if ((dum==0) && (count==(nr_of_items-1)) )
	  {
        k=1; 
		while (sol[i][j][k]==1)
		{
		  k++;
		}
		setsign(i,j,k,2);
//x		v_hor[i][j]=k; v_ver[i][k]=j;
        hlp=false;
      }
    }
    for (k=1 ; k<=nr_of_items; k++)
	{
      count=0;
      dum=v_ver[i][k];
      for (j=1 ; j<=nr_of_items; j++)
	  {
	    count=count+sol[i][j][k];
	  }
      if ((dum==0) && (count==(nr_of_items-1)))
	  {
        j=1; 
		while (sol[i][j][k]==1)
		{
		  j++;
		}
		setsign(i,j,k,2);
//x		v_hor[i][j]=k; v_ver[i][k]=j;
        hlp=false;
      }
    }
    nofound=nofound && hlp;
  }
  while (!hlp);

  return nofound;
}
}
//////////////////////////////
function combineer(i,j,k, nofound)
{
 with (myLQ)
 {
   var hlp, l, m, dum;
   var vec = new Array(maxItems);
   do
   {
    hlp=true;
    hlp=fill_in(i,hlp); 
	hlp=fill_in(j,hlp); 
	hlp=fill_in(k,hlp);
    for (l=1; l<=nr_of_items; l++)
    {
      dum=v_hor[i][l];
      if (dum!=0)
	  {
        for (m=1; m<=nr_of_items; m++)
		{
          vec[m]=0;
          if ( (sol[j][l][m]==1) || (sol[k][m][dum]==1) ) vec[m]=1;
          if ( (sol[j][l][m]==2) || (sol[k][m][dum]==2) ) vec[m]=2;
        }
        for (m=1; m<=nr_of_items; m++)
		{
          if (sol[j][l][m]!=vec[m])
		  {
			setsign(j,l,m, vec[m]);
//x            if (vec[m]==2) { v_hor[j][l]=m; v_ver[j][m]=l;}
            hlp=false;
          }
          if (sol[k][m][dum]!=vec[m])
		  {
			setsign(k,m,dum, vec[m]);
//x            if (vec[m]==2) {v_hor[k][m]=dum; v_ver[k][dum]=m; }
            hlp=false;
          }
        }
      }
    }
    for (l=1 ; l<=nr_of_items; l++)
	{
      dum=v_hor[j][l];
      if (dum!=0)
	  {
        for (m=1; m<=nr_of_items; m++)
		{
          vec[m]=0;
          if ((sol[i][l][m]==1) || (sol[k][dum][m]==1)) vec[m]=1;
          if ((sol[i][l][m]==2) || (sol[k][dum][m]==2)) vec[m]=2;
        }
        for (m=1; m<=nr_of_items; m++)
		{
          if (sol[i][l][m]!=vec[m])
		  {
			setsign(i,l,m, vec[m]);
//x            if (vec[m]==2) {v_hor[i][l]=m; v_ver[i][m]=l;}
            hlp=false;
          }
          if (sol[k][dum][m]!=vec[m])
		  {
			setsign(k,dum,m, vec[m]);
//x            if (vec[m]==2) {v_hor[k][dum]=m; v_ver[k][m]=dum; }
            hlp=false;
          }
        }
      }
    }
    for (l=1; l<=nr_of_items; l++)
	{
      dum=v_hor[k][l];
      if (dum!=0)
	  {
        for (m=1 ; m<=nr_of_items; m++)
		{
          vec[m]=0;
          if ((sol[i][m][dum]==1) || (sol[j][m][l]==1)) vec[m]=1;
          if ((sol[i][m][dum]==2) || (sol[j][m][l]==2)) vec[m]=2;
        }
        for (m=1 ; m<=nr_of_items; m++)
		{
          if (sol[i][m][dum]!=vec[m]) 
		  {
			setsign(i,m,dum, vec[m]);
//x            if (vec[m]==2) {v_hor[i][m]=dum; v_ver[i][dum]=m; }
            hlp=false;
          }
          if (sol[j][m][l]!=vec[m]) 
		  {
			setsign(j,m,l, vec[m]);
//x            if (vec[m]==2) { v_hor[j][m]=l; v_ver[j][l]=m; }
            hlp=false;
          }
        }
      }
    }
    nofound=nofound && hlp;
   }
   while (!hlp);
 }
 return nofound;
}

function ptest(w)
{
  var l,x,y;
  var nofound;
  var splitArray = w.split('_');

  l=splitArray[0];
  x=splitArray[1];
  y=splitArray[2];
  if (sol[l][x][y] == 0)
  {
     if (CtrlKeyDown)
     {
		setsign(l,x,y,2)
//x		v_hor[l][x] = y; v_ver[l][y] = x;
     }
	 else
	 {
		setsign(l,x,y,1)
	 }
	 if (INeedHelp)
	 {
	   do
	   {
	      nofound = true;
		  if (myLQ.nr_of_cats==3)
  		  {
		     nofound = combineer(1,2,3, nofound);
		  }
		  if (myLQ.nr_of_cats==4)
		  {
		     nofound = combineer(4,5,6, nofound);
		     nofound = combineer(2,3,5, nofound);
		     nofound = combineer(1,2,6, nofound);
		     nofound = combineer(1,3,4, nofound);
		  }
	   } while (!nofound);
	 }
     savedo();
  }
  else
  {
    alert ('mag niet!');
  }
  if (foundall())
  {
    klaar();
  }
}

function printMatrix() {

with (myLQ) {
  document.write
  (
"<h3>" + title + "</h3>",
'<p>',intro,'<p>',
'<form name="blaat">',
'<table width=100%><tr><td>',
'<table border=0 cellpadding=01 cellspacing=01>',
'<tr>',
'    <td rowspan=',nr_of_items+1,' colspan=3>',
'<b>',title,'</b></td>\n',
'');

  for (var i=1; i<=nr_of_items; i++)
  {
    if (i>1) document.write ('<tr><td rowspan=',nr_of_items-i+1,' class="cl',1,'">&nbsp;</td>');
    document.write ('<td colspan=',((nr_of_items+1)*(nr_of_cats-1))-i+1,' class="cl',1,'l">',nospaces(item[1][i]),'</td></tr>');
  }
  document.write ('\n<tr>');
  for (var i=1; i<nr_of_cats ; i++)
  {
    document.write (' <th colspan=',nr_of_items+1,' class="cl',i,'c">',item[i].cat,'</th>');
  }
  document.write ('</tr>\n');

  document.write ('<tr><td colspan=3 class=right><img src="p/zero.gif" name="yesno"></td>');
  for (var i=1; i<nr_of_cats ; i++)
  {
    for (var j=1; j<=nr_of_items; j++)
    {
	  var x=(nr_of_cats-i-1)*nr_of_items+j-1;
  	  document.write (' <td class="cl',i,'c">', alfabet.substring(x,x+1),'</td>\n');
    }
	document.write (' <td class="empty" rowspan=',(nr_of_cats-1)*(nr_of_items+1),'></td>');
  }
  document.write ('</tr>\n');

  var leon=1;
  for (var i=nr_of_cats; i>1; i--)
  {
    for (var j=1; j<=nr_of_items; j++)
    {
       document.write ('<tr>');
	   if (j==1) document.write ('<th rowspan=',nr_of_items,' class="cl',i,'r">',item[i].cat,'</th>');
       if (i==nr_of_cats) 
       {
	     document.write ('<td colspan=2 class="cl',i,'r">',nospaces(item[i][j]),'</td>');
       }
	   else
	   {
	     var x=(nr_of_cats-i-1)*nr_of_items+j-1;
	     document.write ('<td class="cl',i,'r" width=100>',nospaces(item[i][j]),'</td>',
		                 '<td class="cl',i,'r">',alfabet.substring(x,x+1),'</td>');
	   }

	   for (var s=1; s<i; s++)
	   {
		  leon=s;
		  for (var temp=0; temp<nr_of_cats-i; temp++) leon += nr_of_cats - 1 - temp;
		  for (var t=1; t<=nr_of_items; t++)
	      {
             document.write ('\n<td><a xhref="javascript:tstCtrl();" onClick="javascript:ptest(\'',leon,'_',j,'_',t,'\')" onMouseover="window.status=\'',item[i].cat,':',item[i][j],' - ',item[s].cat,':',item[s][t],'\'; return true" xonClick="tstCtrl();" onMouseout="window.status=\'\'; onkeyupdown();"><img src="p/zero.gif" name="',leon,'_',j,'_',t,'" border=0></a></td>');
		  }
	   }
	   if (j==1)
	   {
  	     for (var s=i; s<nr_of_cats; s++)
	     {
	       document.write(' <td colspan=',nr_of_items,' rowspan=',nr_of_items,'>&nbsp;</td>');
	     }
	   }
       document.write ('</tr>\n');
	}
    document.write('<tr> <td colspan=',(nr_of_cats-1)*(nr_of_items+1)+3,' class=empty></td> </tr>');
  }

  document.write
  (
'</table>\n\n',
'</td><td>',
'<b>Aanwijzingen:</b>\n',
'<ol>\n'
  );
  for (var i=1; i<=nr_of_hints; i++)
  {
    document.write("<li>",hint[i],"\n");
  }
  document.write
  (
'</ol><br><textarea cols=40 rows=6>Notities</textarea>',
'</tr></table>\n',
'<a href="javascript:show(help)"><img src="p/help.gif" border=0></a>',
'<a href="javascript:undo()"><img src="p/noundo.gif" border=0 name=undo></a>',
'<a href="javascript:togglehelp()"><img src="p/auto.gif" border=0 name=togglehelp></a> ',
oplossing?'<img src="http://www.smilieshq.com/smilies/char1/character0112.gif" border=0 alt="Oplossing bekend!" title="Oplossing bekend!">':
          '<img src="http://www.smilieshq.com/smilies/confused0058.gif" border=0 alt="Oplossing niet bekend" title="Oplossing niet bekend">',
'</form>',
''
  );
  if (copyright != '')
  {
    document.write ('<br><i><font size="-1">&copy; ',copyright,'</font></i>')
  }
  getImages();

} // with myLQ

  savedo();
  return;
}

////////////////////////////////////
// KeyGrab code inspired by DevGuru:
//   http://www.devguru.com/features/knowledge_base/A100231.html
var blnDOM = false, blnIE4 = false, blnNN4 = false, CtrlKeyDown=false; 

if (document.getElementById) blnDOM = true;
else if (document.layers) blnNN4 = true;
else if (document.all) blnIE4 = true;

function KeycodeUp(evt)
{
  var e = evt || window.event; 
  var MyKeyCode, MyCtrlKey;
  if (blnNN4)
  {
    MyKeyCode = e.which;
	MyCtrlKey = (e.modifiers==Event.CONTROL_MASK);
  }
  if (blnIE4)
  {
    MyKeyCode = e.keyCode;
	MyCtrlKey = e.ctrlKey;
  }
  if (blnDOM)
  {
    MyKeyCode = e.charCode;
	MyCtrlKey = e.ctrlKey;
  }

//  if ((MyKeyCode==17) || (MyCtrlKey == true)) ;
//  MyCtrlKey=false;
  if (MyKeyCode==17) {
	  MyCtrlKey=false;
  };
  CtrlKeyDown = MyCtrlKey;
  if (document.images)
  {
    document["yesno"].src=(MyCtrlKey?iconplus.src:iconmins.src);
  }
}

function KeycodeDown(evt)
{
  var e = evt || window.event; 
  var MyKeyCode, MyCtrlKey;
  if (blnNN4)
  {
    MyKeyCode = e.which;
	MyCtrlKey = (e.modifiers==Event.CONTROL_MASK);
  }
  if (blnIE4)
  {
    MyKeyCode = e.keyCode;
	MyCtrlKey = e.ctrlKey;
  }
  if (blnDOM)
  {
    MyKeyCode = e.charCode;
	MyCtrlKey = e.ctrlKey;
  }

  if (MyKeyCode==17) {
	  MyCtrlKey=false;
  };
  CtrlKeyDown = MyCtrlKey;
  if (document.images)
  {
    document["yesno"].src=(MyCtrlKey?iconplus.src:iconmins.src);
  }
  CtrlKeyDown = MyCtrlKey;
}

function tstCtrl() {return  CtrlKeyDown?false:true;}
function onkeyupdown() {
	document.onkeydown = KeycodeDown;
	document.onkeyup =   KeycodeUp;
}
onkeyupdown();
if (blnNN4) document.captureEvents(Event.KEYDOWN)
if (blnNN4) document.captureEvents(Event.KEYUP)


//// The End -->
