/*
############################################################
###                    puzzle.js                         ###
###               von Michael Duetting                   ###
###                 copyright 2007                       ###

                für mimigernaford.de                     
      

            CMS              |----||----|
            Datenbanken      |    ||    |
                             |----||----|
            eShops                 |----|
                        |------|   |    |
            Webdesign   |      |   |----|
                        | multi|p l i c o
            Multimedia  |------|

					   30.1.2006
						
###                  Telemannstr. 26                     ###
###                   48147 Münster                      ###
###             http://www.multiplico.de                 ###
###             USt-IdNr.: DE 233 806 458                ###
############################################################
*/
/*
Start
 0 21 19 18 17
20 24 16 10 11
23  7 14 15  3
22 13  1  6  8
12  4  5  9  2
Ziel
 0 17 24 14 21
22 18 11 19 23
 8  9 20 16 12
13  7  4  3  2
 5  1 15 10  6   
*/
var puzzles 	= ["puzzle-0/","puzzle-1/","puzzle-2/","puzzle-3/"];
var Muster 		= [0,21,19,18,17,20,24,16,10,11,23,7,14,15,3,22,13,1,6,8,12,4,5,9,2];
var Target 		= [0,17,24,14,21,22,18,11,19,23,8,9,20,16,12,13,7,4,3,2,5,1,15,10,6];
var merkerPIC 	= [];
var puzzle;
var klicks;
var ObjectArray;
var Tiles;
var X;
var Y;
var X2;
var Y2;
//--------------------------------------------------------------------------------------------------------------
function initPuz(e)
{
puzzle = (!arguments[1])?puzzles[0]:arguments[1];
ObjectArray = [];
Tiles = [];
klicks = 0
X = 260;//52
Y = 240;
X2 = 642;
Y2 = 265;
if(!document.getElementById("tabelle"))
{
  	if(document.getElementById("spielfeld"))
	{document.getElementById("spielfeld").parentNode.removeChild(document.getElementById("spielfeld"));}
	if(document.getElementById("klicks"))
	{document.getElementById("klicks").parentNode.removeChild(document.getElementById("klicks"));}
var spielfeld = document.createElement("div");
spielfeld.id = "spielfeld";	
var klickfeld = document.createElement("div");
klickfeld.id = "klicks";
var klicktext = document.createTextNode("Klicks: ");
klickfeld.appendChild(klicktext);
var counter = document.createElement("span");
counter.id = "counter";
var counterBlank = document.createTextNode("0");
counter.appendChild(counterBlank);
klickfeld.appendChild(counter);
var infoFeld = document.createElement("div");
infoFeld.id = "infoFeld";
var infoTxt = document.createTextNode("Spielstand");
infoFeld.appendChild(infoTxt);
var optFeld 	= document.createElement("div");
optFeld.id 		= "optFeld";
var puzzWahl	= document.createTextNode("Puzzle-Auswahl: ");
optFeld.appendChild(puzzWahl);
var table		= document.createElement("table");
table.id		= "tabelle";
var tbody		= document.createElement("tbody");
	for(i=0;i<puzzles.length;i++)
	{
		if(i==0 || i==2){var tr		= document.createElement("tr");}
		var xpuz	= document.createElement("img");
		xpuz.src	= puzzles[i] + "puzzle_0.jpg";
		aWahl		= document.createElement("a");
		aWahl.href	= "javascript:initPuz(0,'"+puzzles[i]+"')";
		aWahl.appendChild(xpuz);
		var td		= document.createElement("td");
		td.className = "pzztd";
		td.appendChild(aWahl);
		tr.appendChild(td);
		if(i==0 || i==2){tbody.appendChild(tr);}
	}	
var tr0			= document.createElement("tr");
var tdA			= document.createElement("td");
tdA.className 	= "pzztd";
var aHilfe		= document.createElement("a");
aHilfe.id		= "hilfe";
aHilfe.className = "pzzlnk";
aHilfe.href		= "javascript:zeigeLoesung()";
var HilfeTxt	= document.createTextNode("Hilfe");
aHilfe.appendChild(HilfeTxt);
tdA.appendChild(aHilfe);
tr0.appendChild(tdA);
var tdB			= document.createElement("td");
tdB.className 	= "pzztd";
var liste		= document.createElement("a");
liste.id		= "liste";
liste.className = "pzzlnk";
liste.href		= "javascript:ladeWinner()";
var listeTxt	= document.createTextNode("Bestenliste");
liste.appendChild(listeTxt);
tdB.appendChild(liste);
tr0.appendChild(tdB);
tbody.appendChild(tr0);	
table.appendChild(tbody);
optFeld.appendChild(table);
infoFeld.appendChild(optFeld);
document.getElementById("puzzle").appendChild(infoFeld);
document.getElementById("puzzle").appendChild(klickfeld);
document.getElementById("puzzle").appendChild(spielfeld);
/*
document.getElementsByTagName("body")[0].appendChild(infoFeld);
document.getElementsByTagName("body")[0].appendChild(klickfeld);
document.getElementsByTagName("body")[0].appendChild(spielfeld);
*/
	if(!document.getElementById("decker"))
	{
	var decker = document.createElement("div");
	decker.id ="decker";
	document.getElementsByTagName("body")[0].appendChild(decker);
	document.getElementById("decker").style.display =  "none";
	}
	else
	{document.getElementById("decker").style.display =  "none";}
}
/*
	if(!window.netscape && !window.opera && /KHTML/.test(navigator.userAgent) == false)
	{document.styleSheets[0].rules[2].style.border = "#ffffff solid 1px";}
	else
	{document.styleSheets[0].cssRules[2].style.border = "#ffffff solid 1px";}
*/	
makeTilesID()	
}
//--------------------------------------------------------------------------------------------------------------
function TILE()
{
this.y = arguments[0].split("_")[1];
this.x = arguments[0].split("_")[2];
this.muster = arguments[1];
this.target = Target[arguments[1]];
this.bild = Muster[arguments[1]];
this.id = arguments[0];
ObjectArray.push(this);
}
//--------------------------------------------------------------------------------------------------------------
function makeTilesID()
{
var muster = -1;
	for(var x=0;x<=4;x++)
	{
		for(var y=0;y<=4;y++)
		{
		muster += 1;
		Tiles["t_"+x+"_"+y] = new TILE("t_"+x+"_"+y,muster);
		createTile(Tiles["t_"+x+"_"+y],muster);
		createMemTile("m_"+x+"_"+y);
		}
	}
Tiles["keiner"] = new TILE("t_"+-1+"_"+-1,-1);	
}
//--------------------------------------------------------------------------------------------------------------
function createTile()
{
	if(document.getElementById(arguments[0].id))
	{document.getElementById(arguments[0].id).parentNode.removeChild(document.getElementById(arguments[0].id));}
	if(X == 560)
	{X = 260;Y += 60;}
var xTile = document.createElement("div");
xTile.id = arguments[0].id;
xTile.className = "tile";
xTile.style.top = Y + "px";
xTile.style.left = X + "px";
	if(!window.opera && !window.netscape && /KHTML/.test(navigator.userAgent) == false)
	{xTile.setAttribute("onclick",Ausgabe);}
	else
	{xTile.setAttribute("onclick","Ausgabe(this.id)");}
xTile.style.backgroundImage = "url("+puzzle+Muster[arguments[0].muster]+".jpg)"; 
document.getElementById("puzzle").appendChild(xTile);
//document.getElementsByTagName("body")[0].appendChild(xTile);
X += 60;
}
//--------------------------------------------------------------------------------------------------------------
function createMemTile()
{
	if(document.getElementById(arguments[0]))
	{document.getElementById(arguments[0]).parentNode.removeChild(document.getElementById(arguments[0]));}	
	if(X2 == 692)
	{X2 = 642;Y2 += 10;}
var mTile = document.createElement("div");
mTile.id = arguments[0];
mTile.className = "memtile";
mTile.style.top = Y2 + "px";
mTile.style.left = X2 + "px";
document.getElementById("puzzle").appendChild(mTile);
//document.getElementsByTagName("body")[0].appendChild(mTile);
X2 += 10;	
}
//--------------------------------------------------------------------------------------------------------------
function Ausgabe()
{
arguments[0] = (!this.id)?arguments[0]:this.id;
var y = arguments[0].split("_")[1]; y = parseInt(y);
var x = arguments[0].split("_")[2]; x = parseInt(x);
var z = arguments[0].split("_")[3]; 
var nTop = Tiles["keiner"]; var nLeft = Tiles["keiner"]; var nBot = Tiles["keiner"]; var nRight = Tiles["keiner"];
var nTopX = 0; var nTopY = 0;
var nLeftX = 0;var nLeftY = 0;
var nRightX = 0;var nRightY = 0;
var nBotX = 0; var nBotY = 0;
	if(y != 0 && y != 4 && x != 0 && x != 4)
	{
	nTopY =  y-1; nTopX = x;
	nTop = Tiles["t_"+nTopY+"_"+nTopX];
	(nTop.muster==0)?Zug(Tiles[arguments[0]],nTop):void(0);
	nLeftY = y; nLeftX = x-1;
	nLeft = Tiles["t_"+nLeftY+"_"+nLeftX];
	(nLeft.muster==0)?Zug(Tiles[arguments[0]],nLeft):void(0);
	nRightY = y;nRightX = x+1;
	nRight = Tiles["t_"+nRightY+"_"+nRightX];
	(nRight.muster==0)?Zug(Tiles[arguments[0]],nRight):void(0);
	nBotY =  y+1; nBotX = x;
	nBot = Tiles["t_"+nBotY+"_"+nBotX]; 
	(nBot.muster==0)?Zug(Tiles[arguments[0]],nBot):void(0);
	}	
	if(y == 0 && x < 4 && x != 0)
	{
	nRightY = y;nRightX = x+1;
	nRight = Tiles["t_"+nRightY+"_"+nRightX];
	(nRight.muster==0)?Zug(Tiles[arguments[0]],nRight):void(0);
	nLeftY = y; nLeftX = x-1;
	nLeft = Tiles["t_"+nLeftY+"_"+nLeftX];	
	(nLeft.muster==0)?Zug(Tiles[arguments[0]],nLeft):void(0);
	nBotY =  y+1; nBotX = x;
	nBot = Tiles["t_"+nBotY+"_"+nBotX]; 
	(nBot.muster==0)?Zug(Tiles[arguments[0]],nBot):void(0);
	}	
	if(y == 4 && x < 4 && x != 0)
	{
	nRightY = y;nRightX = x+1;
	nRight = Tiles["t_"+nRightY+"_"+nRightX];
	(nRight.muster==0)?Zug(Tiles[arguments[0]],nRight):void(0);
	nLeftY = y; nLeftX = x-1;
	nLeft = Tiles["t_"+nLeftY+"_"+nLeftX];	
	(nLeft.muster==0)?Zug(Tiles[arguments[0]],nLeft):void(0);
	nTopY =  y-1; nTopX = x;
	nTop = Tiles["t_"+nTopY+"_"+nTopX]; 
	(nTop.muster==0)?Zug(Tiles[arguments[0]],nTop):void(0);
	}	
	if(x == 0 && y < 4 && y != 0)
	{
	nRightY = y;nRightX = x+1;
	nRight = Tiles["t_"+nRightY+"_"+nRightX];
	(nRight.muster==0)?Zug(Tiles[arguments[0]],nRight):void(0);
	nBotY =  y+1; nBotX = x;
	nBot = Tiles["t_"+nBotY+"_"+nBotX]; 
	(nBot.muster==0)?Zug(Tiles[arguments[0]],nBot):void(0);
	nTopY =  y-1; nTopX = x;
	nTop = Tiles["t_"+nTopY+"_"+nTopX]; 
	(nTop.muster==0)?Zug(Tiles[arguments[0]],nTop):void(0);
	}	
	if(x == 4 && y < 4 && y != 0)
	{
	nLeftY = y; nLeftX = x-1;
	nLeft = Tiles["t_"+nLeftY+"_"+nLeftX];	
	(nLeft.muster==0)?Zug(Tiles[arguments[0]],nLeft):void(0);
	nBotY =  y+1; nBotX = x;
	nBot = Tiles["t_"+nBotY+"_"+nBotX]; 
	(nBot.muster==0)?Zug(Tiles[arguments[0]],nBot):void(0);
	nTopY =  y-1; nTopX = x;
	nTop = Tiles["t_"+nTopY+"_"+nTopX]; 
	(nTop.muster==0)?Zug(Tiles[arguments[0]],nTop):void(0);
	}	
	if(y == 0 && x == 0)
	{
	nRightY = y;nRightX = x+1;
	nRight = Tiles["t_"+nRightY+"_"+nRightX];
	(nRight.muster==0)?Zug(Tiles[arguments[0]],nRight):void(0);
	nBotY =  y+1; nBotX = x;
	nBot = Tiles["t_"+nBotY+"_"+nBotX]; 
	(nBot.muster==0)?Zug(Tiles[arguments[0]],nBot):void(0);
	}
	if(y == 0 && x == 4)
	{
	nLeftY = y; nLeftX = x-1;
	nLeft = Tiles["t_"+nLeftY+"_"+nLeftX];
	(nLeft.muster==0)?Zug(Tiles[arguments[0]],nLeft):void(0);
	nBotY =  y+1; nBotX = x;
	nBot = Tiles["t_"+nBotY+"_"+nBotX]; 
	(nBot.muster==0)?Zug(Tiles[arguments[0]],nBot):void(0);
	}
	if(y == 4 && x == 0)
	{
	nRightY = y;nRightX = x+1;
	nRight = Tiles["t_"+nRightY+"_"+nRightX];
	(nRight.muster==0)?Zug(Tiles[arguments[0]],nRight):void(0);
	nTopY =  y-1; nTopX = x;
	nTop = Tiles["t_"+nTopY+"_"+nTopX];
	(nTop.muster==0)?Zug(Tiles[arguments[0]],nTop):void(0);
	}	
	if(y == 4 && x == 4)
	{
	nLeftY = y; nLeftX = x-1;
	nLeft = Tiles["t_"+nLeftY+"_"+nLeftX];
	(nLeft.muster==0)?Zug(Tiles[arguments[0]],nLeft):void(0);
	nTopY =  y-1; nTopX = x;
	nTop = Tiles["t_"+nTopY+"_"+nTopX];
	(nTop.muster==0)?Zug(Tiles[arguments[0]],nTop):void(0);
	}			
}
//--------------------------------------------------------------------------------------------------------------
function Zug()
{
klicks +=1;
var musterA = arguments[0].muster; var bildA = arguments[0].bild;
var musterB = arguments[1].muster; var bildB = arguments[1].bild;
arguments[0].muster = musterB; arguments[0].bild = bildB;
arguments[1].muster = musterA; arguments[1].bild = bildA;
document.getElementById(arguments[0].id).style.backgroundImage = "url("+puzzle+arguments[0].bild+".jpg)"; 
document.getElementById(arguments[1].id).style.backgroundImage = "url("+puzzle+arguments[1].bild+".jpg)";
document.getElementById("counter").firstChild.nodeValue = klicks;
Pruefe();
}
//--------------------------------------------------------------------------------------------------------------
function Pruefe()
{
var pruefeArray = [];
	for(var i=0;i<ObjectArray.length-1;i++)
	{
	(ObjectArray[i].bild == ObjectArray[i].target)?pruefeArray.push(true):pruefeArray.push(false);
	var mTileId = ObjectArray[i].id.replace(/t/,"m");
		if(ObjectArray[i].bild == ObjectArray[i].target)
		{document.getElementById(mTileId).style.backgroundColor = "#6883AE";}
		else
		{document.getElementById(mTileId).style.backgroundColor = "#cccccc";}
	}
pruefeArray.join();
(/false/.test(pruefeArray)==false)?Winner():void(0);	
}
//--------------------------------------------------------------------------------------------------------------
function zeigeLoesung()
{
	for(i=0;i<ObjectArray.length-1;i++)
	{
		with(ObjectArray[i])
		{
		merkerPIC[i] = document.getElementById(id).style.backgroundImage;
		document.getElementById(id).style.backgroundImage = "url("+puzzle+Target[i]+".jpg)";
		}
	}
document.getElementById("decker").style.display =  "block";
document.getElementById("hilfe").firstChild.nodeValue = "weiter";
document.getElementById("hilfe").href = "javascript:Restore()";
}
//--------------------------------------------------------------------------------------------------------------
function Restore()
{
	for(i=0;i<ObjectArray.length-1;i++)
	{
		with(ObjectArray[i])
		{
		merkerPIC[i] = document.getElementById(id).style.backgroundImage = merkerPIC[i];
		}
	}
document.getElementById("decker").style.display =  "none";	
document.getElementById("hilfe").firstChild.nodeValue = "Hilfe";
document.getElementById("hilfe").href = "javascript:zeigeLoesung()";	
}
//--------------------------------------------------------------------------------------------------------------
function Winner()
{
Tiles["t_"+0+"_"+0].muster = 1;
	if(!window.netscape && !window.opera && /KHTML/.test(navigator.userAgent) == false)
	{document.styleSheets[0].rules[2].style.border = "none";}
	else
	{document.styleSheets[0].cssRules[2].style.border = "none";}
document.getElementById("t_"+0+"_"+0).style.backgroundImage = "url("+puzzle+"0a.jpg)";
document.getElementById("decker").style.display =  "block";
neuWinner();
}
//--------------------------------------------------------------------------------------------------------------
/* *********************************** */
function neuWinner()
/* *********************************** */
{
neuWinDiv 		= document.createElement("div");
neuWinDiv.id 	= "neuWinDiv";
var winTxt 		= document.createTextNode("GEWONNEN!");
neuWinDiv.appendChild(winTxt);	
neuWinIn = document.createElement("input");
neuWinIn.setAttribute("type","text");
neuWinIn.setAttribute("id","winner");
neuWinIn.setAttribute("maxlength","15");
neuWinIn.setAttribute("value","Dein Name?");
neuWinIn.setAttribute("onfocus","this.value=''");
neuWinIn.style.display =  "block";
neuWinIn.className = "neuWinIn";		
var savWin = document.createElement("a");
savWin.href = "javascript:saveWin()";
var savWinTxt = document.createTextNode("clear skies!");
savWin.appendChild(savWinTxt);	
savWin.className = "pzzlnk";	
neuWinDiv.appendChild(neuWinIn);	
neuWinDiv.appendChild(savWin);	
document.getElementById("optFeld").appendChild(neuWinDiv);
}
/* ----------------------------------------------------------------------------------------------------------------------------------------- */
/* *********************************** */
function saveWin()
/* *********************************** */
{
var winZeichen = /[?<>%\&]|(SELECT)|(select)/.test(document.getElementById("winner").value);
	if(winZeichen == false && document.getElementById("winner").value.length > 2)
	{
	var savImg = document.createElement("img");
	savImg.src = "templates2010/saveWinnerPuzzle.php?name="+document.getElementById("winner").value+"&score="+klicks;
	document.getElementById("neuWinDiv").appendChild(savImg);
	document.getElementById("neuWinDiv").parentNode.removeChild(document.getElementById("neuWinDiv"));
	document.getElementById("decker").style.display =  "none";
	var altPuzzle = puzzle.split("-")[1].split("/")[0];
	altPuzzle = parseInt(altPuzzle);
	var nextPuzzle = (altPuzzle != 3)?altPuzzle+1:0;
	initPuz(0,"puzzle-"+nextPuzzle+"/");
	}
	else
	{alert("Mindestens 3 Zeichen (< ? u.ä. können nicht eingegeben werden)!");}
}
/* ----------------------------------------------------------------------------------------------------------------------------------------- */
/* *********************************** */
function ladeWinner()
/* *********************************** */
{
httpObject = false;
httpObject = (window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
	if(httpObject)
	{
		httpObject.open("GET", "js2010/puzwin.js", true);
		httpObject.onreadystatechange = function()
				{
					if(httpObject.readyState == 4)
					{
						if(httpObject.status == 200)
						{
						puzzBest()
						}
					}
				}
		httpObject.send(null);
	}
}
/* ----------------------------------------------------------------------------------------------------------------------------------------- */
function puzzBest()
{
eval(httpObject.responseText);
var Gewinner = eval("("+top+")");
var winContainer = document.createElement("div");
winContainer.id = "winContainer";
var titext = document.createTextNode("Bestenliste");	
winContainer.appendChild(titext);	
var winbox = document.createElement("div");
winbox.id = "winbox";
var winTab = document.createElement("table");
var winGroup = document.createElement("colgroup");
var col = document.createElement("col");
col.setAttribute("width","30px");
var col0 = document.createElement("col");
col0.setAttribute("width","100px");	
var col1 = document.createElement("col");
col1.setAttribute("width","85px");	
winGroup.appendChild(col);winGroup.appendChild(col0);winGroup.appendChild(col1);
winTab.appendChild(winGroup);
var winBod = document.createElement("tbody");
winTab.appendChild(winBod);	
var z = 0;
		for(var keilofs in Gewinner.winner)
		{
		z += 1;
		var tr = document.createElement("tr");
		var td = document.createElement("td");
		td.className = "pzztd";
		var tokus = document.createTextNode(z + ".");
		td.appendChild(tokus);
		td.style.textAlign = "right";
		var td0 = document.createElement("td");
		td0.className = "pzztd";
		var tokus0 = document.createTextNode(Gewinner.winner[keilofs].name);
		td0.style.textAlign = "left";
		td0.appendChild(tokus0);
		var td1 = document.createElement("td");
		td1.className = "pzztd";
		var tokus1 = document.createTextNode(Gewinner.winner[keilofs].score + " Klicks");
		td1.appendChild(tokus1);
		td1.style.textAlign = "right";
		tr.appendChild(td);tr.appendChild(td0);tr.appendChild(td1);
		winBod.appendChild(tr);
		}
var closeWinner = document.createElement("a");
closeWinner.className = "pzzlnk";
closeWinner.href = "javascript:closeWinner()";
var closeText = document.createTextNode("schließen");
closeWinner.appendChild(closeText);
winbox.appendChild(winTab);
winContainer.appendChild(winbox);	
winContainer.appendChild(closeWinner);	
document.getElementById("puzzle").appendChild(winContainer);
//document.getElementsByTagName("body")[0].appendChild(winContainer);
}
/* *********************************** */
function closeWinner()
/* *********************************** */
{
	if(document.getElementById("winContainer"))
	{document.getElementById("winContainer").parentNode.removeChild(document.getElementById("winContainer"));}
}
//--------------------------------------------------------------------------------------------------------------
//onload = initPuz;
//=================================================================================
//----------------------------- 25.05.2009 ----------------------------------------
//=================================================================================
