
/*
Pas een tabel met daarin een pandiagonaal 5x5 magisch vierkant aan zodat deze interactief wordt.
(c) Copyright Christian Eggermont All rights reserved.
*/

var MACIE5 = (
        navigator.userAgent.indexOf('MSIE 5') != -1
        &&
        navigator.userAgent.indexOf('Mac') != -1
);

function rpltxt( strid, vl )
{
	if ( document.getElementById && document.createTextNode )
	{
		var elem = document.getElementById( strid );
		if (! elem ) return;
		// netscape 7.1 safari 1.2, firefox 1.0 op OSX, ie6win, opera werkt
		// problemen bij mac ie 5.2 met extra whitespace (geen xtra Children, geen extra content!?, breedte-bug?)
		if ( MACIE5 )
		{ // bah wat lelijk :(
			elem.innerHTML = ""+ vl; return;
		}
		if ( elem && elem.firstChild )
			elem.replaceChild( document.createTextNode( "" + vl ), elem.firstChild );
		else
			elem.appendChild( document.createTextNode( "" + vl ) );
	}
	else if ( document.all )
	{ // niet getest
		document.all[strid].innerHTML = "" + vl;
	}
}

function numeralsOnly(evt)
{
	evt = (evt) ? evt : event;
	var charCode = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : ((evt.which) ? evt.which : 0));
	if (charCode > 31 && (charCode < 48 || charCode > 57))
	{
		alert("Enter numerals only in this field.");
		return false;
	}
	return true;
}

function makemagic()
{
	if (! pan5) return;
	var dat = new Date();
	var a = new Number( (""+dat.getFullYear() ).substring(0,2) );
	var b = new Number( (""+dat.getFullYear() ).substring(2,4) );
	var c = new Number( dat.getMonth() + 1);
	var d = new Number( dat.getDate() );
	rpltxt( 'r1c1' , (""+dat.getFullYear() ).substring(0,2) );
	rpltxt( 'r1c2' , (""+dat.getFullYear() ).substring(2,4) );
	rpltxt( 'r1c3', c );
	rpltxt( 'r1c4', d );
	var e = new Number( document.getElementById("r2c1").value );
	var f = new Number( document.getElementById("r2c2").value );
	var g = new Number( document.getElementById("r2c3").value );
	var h = new Number( document.getElementById("r2c4").value );
	rpltxt( "r1c5", -c-d-a-b);
	rpltxt( "r2c5", -g-h-e-f);
	rpltxt( "r3c1", g+h-a); rpltxt( "r3c2", -b-e-f-g); rpltxt( "r3c3", -c-f-g-h); rpltxt( "r3c4", -d+e+f); rpltxt( "r3c5", a+b+c+d+f+g);
	rpltxt( "r4c1", -c-d-g-h); rpltxt( "r4c2", a+b+c+e+f+g); rpltxt( "r4c3", b+c+d+f+g+h); rpltxt( "r4c4", -a-b-e-f); rpltxt( "r4c5", -b-c-f-g);
	rpltxt( "r5c1", c+d-e); rpltxt( "r5c2", -a-b-c-f); rpltxt( "r5c3", -b-c-d-g); rpltxt( "r5c4", a+b-h); 
	rpltxt( "r5c5", b+c+e+f+g+h);
	return;
}

var pan5 = false;

function startup()
{
	if ( document.getElementById && document.createTextNode && document.getElementsByTagName && document.createElement )
	{
		var p = document.getElementById('pan5');
		if (! p ) return;
		pan5 = true;
		rpltxt( "pan5txt", "Adjust as nescessary" );
		p.onsubmit = makemagic;
		var k,n,sti;
		p.style.visibility = "hidden"; // to avoid a rendering bug in Safari 1.2
		var a = new Array("rr2c1","rr2c2","rr2c3","rr2c4"); 
		var b = new Array(19,51,12,14); 
		for(var j=0; j<a.length; j++)
		{
			sti = a[j];
			k = document.getElementById( sti ).parentNode;
			n = document.createElement('INPUT');
			if (! n) {p.style.visibility = "visible"; return;} // Opera 6.03 zegt wel createElement te kunnen maar kan dit kennelijk toch niet 
			n.setAttribute("value", b[j]); // moet voor het hangen aan k anders wordt deze niet meegenomen!
			k.replaceChild( n, document.getElementById( sti ));
			n.setAttribute('id', sti.replace(/^./,""));
			n.setAttribute('name', sti.replace(/^./,""));
			n.setAttribute('maxlength', "3");
			n.setAttribute('size', "2");
			if (sti == "rr2c1" ) n.setAttribute('style', "text-align: right");
			if (sti == "rr2c2" ) n.setAttribute('style', "text-align: left");
			if (! MACIE5 ) n.setAttribute('type', 'text');
			n.onblur = makemagic;
			// onfocus/select werkt niet in safari, omniweb, ie5.2osx
			// wel in netscape7.1 (osx,win) en opera (osx,win), ie6win
			n.onfocus = function (){ this.select() };
			// onkeypress lijkt in omniweb 4.5 niet ondersteund te worden...
			// wel safari, ie5.2osx, netscape7, opera, ie6-4win
			n.onkeypress = numeralsOnly;
			if (sti.match(/.$/)[0] % 2 == 0) n.setAttribute('class','odd');

		}
		makemagic();
	}
	else return;
	setTimeout("document.getElementById('pan5').style.visibility = 'visible';",1000);
}
// IE/win snapt dit niet: self.onload=startup;
window.onload = startup;
window.defaultStatus='Happy Puzzling Forever';

