
// Definitionen für Puzzle/Code, Internet Explorer
//
// NN -> IE   im Text bedeutet: Änderungen für Internet Explorer im
//                              Vergleich zum Code für Netscape Navigator,
//                              wobei LAYER -> div nicht eigens gekennzeichnet ist
// WICHTIG: alle div-Elemente müssen ganz von einer Tabelle überdeckt sein,
// um einen Bug im IE bezüglich des Werts von window.event.y zu umgehen!

function definiere_layers()
{
   // Zuerst randomisieren:
   zufall();

   // Seitenkopf definieren:

// folgender Kopf mit Logo kann weggelassen werden:
// NN -> IE ... hier keine DIV's mehr!
zunaechst ='<BR><CENTER><TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="90%">\n'+
'<TD ALIGN="left">\n'+ 
'  <A HREF="../../tests.html"><IMG SRC="../../grafiken/testskopf.gif"\n'+ 
'   ALT="Interactive tests - Table of contents" BORDER="0"></A>\n'+
'</TD><TD ALIGN="right"><A HREF="../../index.html">\n'+
'<IMG SRC="../../grafiken/pfeile.gif" ALT="To the Welcome Page" BORDER="0"></A>\n'+
'</TD></TABLE></CENTER><BR>\n'+
// große Variante:
'<BR><FONT FACE="Arial,Helvetica" SIZE="-1">\n'+
'<CENTER><FONT SIZE="+0"><B>Puzzle</B></FONT><BR><BR>\n'+
'<FONT SIZE="+3">' + titel + '</FONT></CENTER>\n';

// kleine Variante:
//'<FONT FACE="Arial,Helvetica" SIZE="-1"><CENTER><FONT SIZE="-1"><B>Puzzle</B></FONT><BR>\n'+
//'<FONT SIZE="+1">' + titel + '</FONT></CENTER>\n';

// NN -> IE
// document.write('<div ID="Seitenkopf">'+zunaechst+text_Seitenkopf+'</div>\n');
document.write('<div ID="Seitenkopf">'+zunaechst+text_Seitenkopf+'</div>\n');

  // Effekt des Seitenkopfs: um folgenden Y-Betrag wird alles Weitere nach unten verschoben:
// NN->IE var shift_Y = document.layers[0].pageY + document.layers[0].clip.height + 15; 
var aux1 = document.all.tags("DIV").item("Seitenkopf").style.posTop;
var aux2 = document.all.tags("DIV").item("Seitenkopf").offsetHeight;
var shift_Y = aux1 + aux2 + 30;                         // NN -> IE   15 -> 30
                                                        // 30 sichert kleinen Abstand zum eigentlichen Puzzle 
                                                        // (kann geändert werden)
  // Alle anderen Layer:

  // die fixen Felder:
for (i=1; i<=n; i++)
// NN -> IE
//document.write('<div LEFT="'+(fixeFelder[0]+(i-1)*(fixeFelder[2]-fixeFelder[0]))+'"\n'+ 
//'TOP="'+(fixeFelder[1]+(i-1)*(fixeFelder[3]-fixeFelder[1])+shift_Y)+'"\n'+
//'WIDTH="'+Felder_Groesse_fix[0]+'" HEIGHT="'+Felder_Groesse_fix[1]+'">'+texte_fixeFelder[i-1]+'</div>');
document.write('<div STYLE="position:absolute; left:'+(fixeFelder[0]+(i-1)*(fixeFelder[2]-fixeFelder[0]))+';\n'+ 
'top:'+(fixeFelder[1]+(i-1)*(fixeFelder[3]-fixeFelder[1])+shift_Y)+';\n'+
'width:'+Felder_Groesse_fix[0]+'; height:'+Felder_Groesse_fix[1]+';">'+texte_fixeFelder[i-1]+'</div>');


  // die Markierungen_Ziel:
for (i=1; i<=n; i++)
// NN -> IE
//document.write('<div BGCOLOR="FFFFEE" LEFT="'+(Markierungen_Ziel[0]+(i-1)*(Markierungen_Ziel[2]-Markierungen_Ziel[0]))+'"\n'+ 
//'TOP="'+(Markierungen_Ziel[1]+(i-1)*(Markierungen_Ziel[3]-Markierungen_Ziel[1])+shift_Y)+'"\n'+
//'WIDTH="'+Felder_Groesse_bew[0]+'" HEIGHT="'+Felder_Groesse_bew[1]+'"></div>');
document.write('<div STYLE="position:absolute; left:'+(Markierungen_Ziel[0]+(i-1)*(Markierungen_Ziel[2]-Markierungen_Ziel[0]))+';\n'+ 
'top:'+(Markierungen_Ziel[1]+(i-1)*(Markierungen_Ziel[3]-Markierungen_Ziel[1])+shift_Y)+';\n'+
'width:'+Felder_Groesse_bew[0]+'; height:'+Felder_Groesse_bew[1]+'; background-color: red">\n'+
// NN -> IE
'<TABLE BGCOLOR="#FFFFEE" BORDER=0 WIDTH="100%" HEIGHT="100%"\n'+
'CELLPADDING="0" CELLSPACING="0"><TD>&nbsp;</TD></TABLE>\n'+
'</div>');


  // die Markierungen_Beginn:
for (i=1; i<=n; i++)
// NN -> IE NEU (gegen window.event.y-Bug)
//document.write('<div LEFT="'+(Markierungen_Beginn[0]+(i-1)*(Markierungen_Beginn[2]-Markierungen_Beginn[0]))+'"\n'+ 
//'TOP="'+(Markierungen_Beginn[1]+(i-1)*(Markierungen_Beginn[3]-Markierungen_Beginn[1])+shift_Y)+'"\n'+
//'WIDTH="'+Felder_Groesse_bew[0]+'" HEIGHT="'+Felder_Groesse_bew[1]+'"></div>');
document.write('<div BGCOLOR="FFFFEE" STYLE="position:absolute; left:'+(Markierungen_Beginn[0]+(i-1)*(Markierungen_Beginn[2]-Markierungen_Beginn[0]))+';\n'+ 
'top:'+(Markierungen_Beginn[1]+(i-1)*(Markierungen_Beginn[3]-Markierungen_Beginn[1])+shift_Y)+';\n'+
'width:'+Felder_Groesse_bew[0]+'; height:'+Felder_Groesse_bew[1]+'; background-color: red">\n'+
// NN -> IE NEU (gegen window.event.y-Bug)
'<TABLE BGCOLOR="#FFFFEE" BORDER=0 WIDTH="100%" HEIGHT="100%"\n'+
'CELLPADDING="0" CELLSPACING="0"><TD>&nbsp;</TD></TABLE>\n'+
'</div>');



  // die beweglichen Felder:
for (i=1; i<=n; i++)
// NN -> IE
//document.write('<div LEFT="'+(Markierungen_Beginn[0]+(i-1)*(Markierungen_Beginn[2]-Markierungen_Beginn[0]))+'"\n'+ 
//'TOP="'+(Markierungen_Beginn[1]+(i-1)*(Markierungen_Beginn[3]-Markierungen_Beginn[1])+shift_Y)+'"\n'+
//'WIDTH="'+Felder_Groesse_bew[0]+'" HEIGHT="'+Felder_Groesse_bew[1]+'">'+texte_beweglicheFelder[i-1]+'</div>');
document.write('<div STYLE="position:absolute; left:'+(Markierungen_Beginn[0]+(i-1)*(Markierungen_Beginn[2]-Markierungen_Beginn[0]))+';\n'+ 
'top:'+(Markierungen_Beginn[1]+(i-1)*(Markierungen_Beginn[3]-Markierungen_Beginn[1])+shift_Y)+';\n'+
'width:'+Felder_Groesse_bew[0]+'; height:'+Felder_Groesse_bew[1]+';">'+texte_beweglicheFelder[i-1]+'</div>');


  // die Richtig-Markierungen (unsichtbar):
if (richtigfalsch01 == 1)
for (i=1; i<=n; i++)
// NN -> IE
//document.write('<div xBGCOLOR="magenta" LEFT="'+(richtigfalsch[0]+(i-1)*(richtigfalsch[2]-richtigfalsch[0]))+'"\n'+ 
//'TOP="'+(richtigfalsch[1]+(i-1)*(richtigfalsch[3]-richtigfalsch[1])+shift_Y)+'"\n'+
//'WIDTH="'+richtigfalsch_Groesse[0]+'" HEIGHT="'+richtigfalsch_Groesse[1]+'" VISIBILITY="hidden">'+texte_richtigfalsch[0]+'</div>');
document.write('<div STYLE="position:absolute; left:'+(richtigfalsch[0]+(i-1)*(richtigfalsch[2]-richtigfalsch[0]))+';\n'+ 
'top:'+(richtigfalsch[1]+(i-1)*(richtigfalsch[3]-richtigfalsch[1])+shift_Y)+';\n'+
'width:'+richtigfalsch_Groesse[0]+'; height:'+richtigfalsch_Groesse[1]+'; visibility: hidden">'+texte_richtigfalsch[0]+'</div>');



  // die Falsch-Markierungen (unsichtbar):
if (richtigfalsch01 == 1)
for (i=1; i<=n; i++)
// NN -> IE
//document.write('<div LEFT="'+(richtigfalsch[0]+(i-1)*(richtigfalsch[2]-richtigfalsch[0]))+'"\n'+ 
//'TOP="'+(richtigfalsch[1]+(i-1)*(richtigfalsch[3]-richtigfalsch[1])+shift_Y)+'"\n'+
//'WIDTH="'+richtigfalsch_Groesse[0]+'" HEIGHT="'+richtigfalsch_Groesse[1]+'" VISIBILITY="hidden">'+texte_richtigfalsch[1]+'</div>');
document.write('<div STYLE="position:absolute; left:'+(richtigfalsch[0]+(i-1)*(richtigfalsch[2]-richtigfalsch[0]))+';\n'+ 
'top:'+(richtigfalsch[1]+(i-1)*(richtigfalsch[3]-richtigfalsch[1])+shift_Y)+';\n'+
'width:'+richtigfalsch_Groesse[0]+'; height:'+richtigfalsch_Groesse[1]+'; visibility: hidden">'+texte_richtigfalsch[1]+'</div>');


  // die Gleichzeichen-Felder:
if (istgleich01 == 1)
for (i=1; i<=n; i++)
// NN -> IE
//document.write('<div LEFT="'+(istgleich[0]+(i-1)*(istgleich[2]-istgleich[0]))+'"\n'+ 
//'TOP="'+(istgleich[1]+(i-1)*(istgleich[3]-istgleich[1])+shift_Y)+'"\n'+
//'WIDTH="'+istgleich_Groesse[0]+'" HEIGHT="'+istgleich_Groesse[1]+'">'+text_istgleich+'</div>');
document.write('<div STYLE="position:absolute; left:'+(istgleich[0]+(i-1)*(istgleich[2]-istgleich[0]))+';\n'+ 
'top:'+(istgleich[1]+(i-1)*(istgleich[3]-istgleich[1])+shift_Y)+';\n'+
'width:'+istgleich_Groesse[0]+'; height:'+istgleich_Groesse[1]+';">'+text_istgleich+'</div>');


if (seitenende01 == 1) {
// noch ein Layer für Nachbemerkungen
// NN -> IE
var aux1 = document.all.tags("DIV").item(n).style.posTop;
var aux2 = document.all.tags("DIV").item(n).style.posHeight;
var aux3 = document.all.tags("DIV").item(2*n).style.posTop;
var aux4 = document.all.tags("DIV").item(2*n).style.posHeight;
var aux5 = document.all.tags("DIV").item(3*n).style.posTop;
var aux6 = document.all.tags("DIV").item(3*n).style.posHeight;
	 var shift_Ytot = Math.max(Math.max(
//                    document.layers[n].pageY + document.layers[n].clip.height + 25,  
//                    document.layers[2*n].pageY + document.layers[2*n].clip.height + 25),
//                    document.layers[3*n].pageY + document.layers[3*n].clip.height + 25);
    aux1 + aux2 + 25,
	aux3 + aux4 + 25),
	aux5 + aux6 + 25);
                      // checke die jeweils letzten Layers der drei Gruppen, welcher weiter unten ist
     document.write('<div STYLE="position:absolute; top:'+shift_Ytot+';" ID="Ende">'+text_Seitenende+'</div>');
     }

ALLE_layer = new Array()   
for (i = 1; i < (4+2*richtigfalsch01+istgleich01)*n+1 ;i++) 
// NN -> IE   ALLE_layer[i] = document.layers[i];
           ALLE_layer[i] = document.all.tags("DIV").item(i);		   
            // speichert jetzt alle Puzzle-relevanten Felder (mit selber Platznummer)
            // war nötig, da der Array document.layers[..] durch die z-Index-Sache durcheinanderkommt
}



function zufall() 
{
// Die Arrays texte_beweglicheFelder und rf simultan (per Zufalls-Permutation) umordnen:

aux_text = new Array();
aux_rf = new Array();
permutation = new Array();

      // (dieser Teil ist fast identisch mit Puzzle-Applets)
      for (var a=1;a<=n;a++)
      {   
          zufalltest=0;
          while (zufalltest==0 || zufallszahl==0 || zufallszahl==n+1)
          { 
            zufallszahl=Math.floor(n*Math.random()+1);  // zwischen 1 und n
            permutation[a]=zufallszahl;
            zufalltest=1;
            for (i=1; i<=a-1;i++)
            if(permutation[i]==zufallszahl) zufalltest=0;   // schauen, ob zufallszahl schon vorkommt
          }  
      } 

    for (i=1; i<=n ; i++) 
    { aux_text[i] = texte_beweglicheFelder[i-1];
      aux_rf[i] = rf[i-1];
    }
    
    for (i=1; i<=n ; i++) 
    { texte_beweglicheFelder[i-1] = aux_text[permutation[i]];
      rf[i-1] =  aux_rf[permutation[i]];
    }
}



// Punktesystem:
// n(n+1)/2 = Maximalzahl der Punkte = Zahl der Schritte, mit der das Puzzle
// bei richtigfalsch01 == 1 auf jeden Fall gelöst werden kann
// das ist äquivalent zu: bei jedem falsch wird ein Punkt abgezogen!
// bei Random-Versuch -> im statistischen Mittel die halbe Maximalpunktezahl

var punktezahl = 0;          
var bereits_richtig = 0
var versuch =0;   // soundsovielter Versuch, die nächste richtige zu finden
warschon = new Array();
for (i = n+1; i < 2*n+1;i++) warschon[i] = 0;

current_layer = null;
var i_current;
last_layer = null;
herkunft_layer = null
var i_herkunft=null;
var getroffen = 0;
var geparkt = 1;
besetzt=new Array();

// NN -> IE
var indexzaehl=3;

for (i = n+1; i < 2*n+1;i++) besetzt[i] = 0;
for (i = 2*n+1 ; i < 3*n+1 ; i++) besetzt[i] = 1;

// NN -> IE   e weg!
function begin_event() {
        for (i = 3*n+1 ; i < 4*n+1 ; i++) {   // checke die beweglichen Felder
                var test_layer = ALLE_layer[i];
// NN -> IE
//                var the_x = test_layer.pageX;
//                var the_width = test_layer.clip.width;
//                var the_y = test_layer.pageY;				
//                var the_height = test_layer.clip.height;
//                var correct_width = check_width(e.pageX, the_x, the_width);
//                var correct_height = check_height(e.pageY, the_y, the_height);
var the_x = test_layer.style.posLeft;
var the_width = test_layer.style.posWidth;
var the_y = test_layer.style.posTop;
var the_height = test_layer.style.posHeight;
var correct_width = check_width(window.event.clientX+window.document.body.scrollLeft, the_x, the_width);
var correct_height = check_height(window.event.clientY+window.document.body.scrollTop, the_y, the_height);
// NN -> IE PROBLEM: Falsches window.event.y, falls die Markierungen leer sind!!!
// Test:
// window.document.all.tags("DIV").item("Ende").document.ausw.auswert.value=''+window.event.y				
                if (correct_width && correct_height) {
                        current_layer = test_layer;  
                        i_current = i;
// NN -> IE
//                        current_layer.zIndex=3; 
//                        oldX = e.pageX;
//                        oldY = e.pageY;
indexzaehl=indexzaehl+1;  current_layer.style.zIndex=indexzaehl;
                        oldX = window.event.clientX+window.document.body.scrollLeft;
                        oldY = window.event.clientY+window.document.body.scrollTop;
						
                        geparkt = 0; 
// NN -> IE: weg:       window.captureEvents(Event.MOUSEMOVE);
// weg:                 break;
                        }
                }

        // Herkunft ermitteln
        for (i = n+1 ; i < 3*n+1 ; i++) {     // checke alle Markierungen
                test_layer = ALLE_layer[i];
// NN -> IE
//                the_x = test_layer.pageX;
//                the_width = test_layer.clip.width;
//                the_y = test_layer.pageY;
//                the_height = test_layer.clip.height;
//                correct_width = check_width(e.pageX, the_x, the_width);
//                correct_height = check_height(e.pageY, the_y, the_height);
                the_x = test_layer.style.posLeft;
                the_width = test_layer.style.posWidth;
                the_y = test_layer.style.posTop;
                the_height = test_layer.style.posHeight;
				correct_width = check_width(window.event.clientX+window.document.body.scrollLeft, the_x, the_width);
			    correct_height = check_height(window.event.clientY+window.document.body.scrollTop, the_y, the_height);
                if (correct_width && correct_height) {
                    herkunft_layer=test_layer; 
                    i_herkunft=i;
                    besetzt[i_herkunft]=0;
                    }
                }
                return true;
}

// NN -> IE   e weg!
function drag_event() {
        if (current_layer != null) {  
// NN -> IE
//                current_layer.moveBy(e.pageX - oldX, e.pageY - oldY);
//                oldX = e.pageX;
//                oldY = e.pageY; 
                  current_layer.style.posLeft += window.event.clientX+window.document.body.scrollLeft - oldX;
				  current_layer.style.posTop += window.event.clientY+window.document.body.scrollTop - oldY;
// NN -> IE PROBLEM mit windows.event.y-Bug, wenn Markierungen leer
// Test: 
// window.document.all.tags("DIV").item("Ende").document.ausw.auswert.value=''+window.event.y
                oldX = window.event.clientX+window.document.body.scrollLeft;
                oldY = window.event.clientY+window.document.body.scrollTop; 
                }
        return false;
}

// NN -> IE   e weg!
function end_event() {
// NN -> IE  NEUE BEDINGUNG BEGINN
        if (current_layer != null) {  
        last_layer = current_layer;
// NN -> IE   das weg:     window.releaseEvents(Event.MOUSEMOVE);

        // Einschnapp-Mechanismus
        for (i = n+1 ; i < 3*n+1 ; i++) {     // checke alle Markierungen
                var einschnapp_layer = ALLE_layer[i];
// NN -> IE
//                var the_x = einschnapp_layer.pageX;
//                var the_width = einschnapp_layer.clip.width;
//                var the_y = einschnapp_layer.pageY;
//                var the_height = einschnapp_layer.clip.height;
//                var correct_width = check_width(e.pageX, the_x, the_width);
//                var correct_height = check_height(e.pageY, the_y, the_height);
				var the_x = einschnapp_layer.style.posLeft;
                var the_width = einschnapp_layer.style.posWidth;
                var the_y = einschnapp_layer.style.posTop;
                var the_height = einschnapp_layer.style.posHeight;
                var correct_width = check_width(window.event.clientX+window.document.body.scrollLeft, the_x, the_width);
                var correct_height = check_height(window.event.clientY+window.document.body.scrollTop, the_y, the_height);
                if (correct_width && correct_height  && besetzt[i]==0) { 
// NN -> IE
//                    current_layer.left=einschnapp_layer.left; 
//                    current_layer.top=einschnapp_layer.top; 		
                    current_layer.style.posLeft=einschnapp_layer.style.posLeft; 
                    current_layer.style.posTop=einschnapp_layer.style.posTop; 
					
                    getroffen=1;
                    besetzt[i]=1;

                     if (richtigfalsch01 == 1 && i_herkunft > n && i_herkunft < 2*n+1 )  // falls von Zielfeld
                     {
                       ALLE_layer[i_herkunft+3*n].style.visibility='hidden';  // Richtig- und
                       ALLE_layer[i_herkunft+4*n].style.visibility='hidden';  // Falsch-Layer wieder weg                        
                     }

                     if (richtigfalsch01 == 1 && i > n && i < 2*n+1 )  // falls auf Zielfeld
                     {
                       ALLE_layer[i+3*n].style.visibility='hidden';  // frühere Richtig- und
                       ALLE_layer[i+4*n].style.visibility='hidden';  // Falsch-Layer zunächst weg 

                       // falls richtig:
                       if ( rf[i_current-3*n-1] == i-n )
                       {
                         ALLE_layer[i+3*n].style.visibility='visible';  // Richtig-Layer 
						 if (warschon[i]==0)
						 {
                         if (punktezahl + n - bereits_richtig - versuch > punktezahl)  // damit keine Punkte abgezogen werden
punktezahl = punktezahl + n - bereits_richtig - versuch;  
                         if (bereits_richtig < n) bereits_richtig = bereits_richtig + 1;
                         versuch = 0;
						 warschon[i] = 1;
						 }
                        }
                       // falls falsch:
                       else
                       { ALLE_layer[i+4*n].style.visibility='visible';  // Falsch-Layer  
                         versuch = versuch + 1;
                       }
                     } 
                    }
                }

           if (getroffen==0 && geparkt==0) {    // zurücksetzen
// NN -> IE
//                    current_layer.left=herkunft_layer.left; 
//                    current_layer.top=herkunft_layer.top; 
                    current_layer.style.posLeft=herkunft_layer.style.posLeft; 
                    current_layer.style.posTop=herkunft_layer.style.posTop; 					
					
                    besetzt[i_herkunft]=1;         
                    }
           getroffen=0; geparkt=1;

        current_layer = null;   
// NN -> IE  NEUE BEDINGUNG ENDE
   }
        return true;
}

        
function check_width(page_x, the_x, the_width) {
        if (page_x >= the_x && page_x <= the_x + the_width)
                return true
        else
                return false
}

function check_height(page_y, the_y, the_height) {
        if (page_y >= the_y && page_y <= the_y + the_height)
                return true
        else
                return false
}

// NN -> IE
//das weg: window.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.MOUSEDRAG);
//window.onmousedown=begin_event;
//window.onmouseup=end_event;
//window.onmousemove=drag_event;
document.onmousedown=begin_event;
document.onmouseup=end_event;
document.onmousemove=drag_event;

// NN -> IE ein paar //'s weg
function open_info_punkte_puzzle()
 {
  var fenster_info_punkte_P ; //= null;
  if ((fenster_info_punkte_P == null)||(fenster_info_punkte_P.closed)) 
  { 
  fenster_info_punkte_P = window.open("../defs/info_puzzle.html","Fenster_info_punkte_P","width=600,height=390,resizable=yes,status=no,menubar=no,location=no,scrollbars=yes"); 
  fenster_info_punkte_P.opener = top;
  fenster_info_punkte_P.focus(); 
  } 
  else { fenster_info_punkte_P.focus(); }

 }

function zuruecksetzen()
{
// NN -> IE     window.document.layers['Ende'].document.ausw.auswert.value=''
  window.document.all.tags("DIV").item("Ende").document.ausw.auswert.value=''
}
