
// Definitionen für Puzzle, Netscape Navigator

function definiere_layers()
{
   // Zuerst randomisieren:
   zufall();

   // Seitenkopf definieren:

// folgender Kopf mit Logo kann weggelassen werden:
zunaechst ='<BR><CENTER><TABLE CELLPADDING="0" CELLSPACING="0" BORDER="0" WIDTH="90%">\n'+
'<TD><DIV ALIGN="left">\n'+ 
'  <A HREF="../../tests.html"><IMG SRC="../../grafiken/testskopf.gif"\n'+ 
'   ALT="Interactive tests - Table of contents" BORDER="0"></A>\n'+
'</DIV></TD><TD> <DIV ALIGN="right"><A HREF="../../index.html">\n'+
'<IMG SRC="../../grafiken/pfeile.gif" ALT="To the Welcome Page" BORDER="0"></A></DIV>\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';



document.write('<LAYER ID="Seitenkopf">'+zunaechst+text_Seitenkopf+'</LAYER>\n');

  // Effekt des Seitenkopfs: um folgenden Y-Betrag wird alles Weitere nach unten verschoben:
var shift_Y = document.layers[0].pageY + document.layers[0].clip.height + 0; 
                                                        // 0 sichert kleinen Abstand zum eigentlichen Puzzle 
                                                        // (kann geändert werden)

  // Alle anderen Layer:

  // die fixen Felder:
for (i=1; i<=n; i++)
document.write('<LAYER 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]+'</LAYER>');

  // die Markierungen_Ziel:
for (i=1; i<=n; i++)
document.write('<LAYER 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]+'"></LAYER>');

  // die Markierungen_Beginn:
for (i=1; i<=n; i++)
document.write('<LAYER BGCOLOR="FFFFEE" 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]+'"></LAYER>');

  // die beweglichen Felder:
for (i=1; i<=n; i++)
document.write('<LAYER 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]+'</LAYER>');

  // die Richtig-Markierungen (unsichtbar):
if (richtigfalsch01 == 1)
for (i=1; i<=n; i++)
document.write('<LAYER 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]+'</LAYER>');

  // die Falsch-Markierungen (unsichtbar):
if (richtigfalsch01 == 1)
for (i=1; i<=n; i++)
document.write('<LAYER 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]+'</LAYER>');

  // die Gleichzeichen-Felder:
if (istgleich01 == 1)
for (i=1; i<=n; i++)
document.write('<LAYER 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+'</LAYER>');


if (seitenende01 == 1) {
// noch ein Layer für Nachbemerkungen
     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);
                      // checke die jeweils letzten Layers der drei Gruppen, welcher weiter unten ist
     document.write('<LAYER TOP="'+shift_Ytot+'" ID="Ende">'+text_Seitenende+'</LAYER>');
     }

ALLE_layer = new Array()   
for (i = 1; i < (4+2*richtigfalsch01+istgleich01)*n+1 ;i++) 
           ALLE_layer[i] = document.layers[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();
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;


function begin_event(e) {
        for (i = 3*n+1 ; i < 4*n+1 ; i++) {   // checke die beweglichen Felder
                var test_layer = ALLE_layer[i];
                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);
                if (correct_width && correct_height) {
                        current_layer = test_layer;  
                        i_current = i;
                        current_layer.zIndex=3; 
                        oldX = e.pageX;
                        oldY = e.pageY;
                        geparkt = 0;
                        window.captureEvents(Event.MOUSEMOVE);
                        break;
                        }
                }

        // Herkunft ermitteln
        for (i = n+1 ; i < 3*n+1 ; i++) {     // checke alle Markierungen
                test_layer = ALLE_layer[i];
                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);
                if (correct_width && correct_height) {
                    herkunft_layer=test_layer; 
                    i_herkunft=i;
                    besetzt[i_herkunft]=0;
                    }
                }
                return true;
}

function drag_event(e) {
        if (current_layer != null) {  
                current_layer.moveBy(e.pageX - oldX, e.pageY - oldY);
                oldX = e.pageX;
                oldY = e.pageY; 
                }
        return false;
}

function end_event(e) {
// nachträglich eingefügt
        if (current_layer != null) {  
        last_layer = current_layer;
        window.releaseEvents(Event.MOUSEMOVE);

        // Einschnapp-Mechanismus
        for (i = n+1 ; i < 3*n+1 ; i++) {     // checke alle Markierungen
                var einschnapp_layer = ALLE_layer[i];
                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);
                if (correct_width && correct_height  && besetzt[i]==0) { 
                    current_layer.left=einschnapp_layer.left; 
                    current_layer.top=einschnapp_layer.top; 
                    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].visibility='hidden';  // Richtig- und
                       ALLE_layer[i_herkunft+4*n].visibility='hidden';  // Falsch-Layer wieder weg                        
                     }

                     if (richtigfalsch01 == 1 && i > n && i < 2*n+1 )  // falls auf Zielfeld
                     {
                       ALLE_layer[i+3*n].visibility='hidden';  // frühere Richtig- und
                       ALLE_layer[i+4*n].visibility='hidden';  // Falsch-Layer zunächst weg 

                       // falls richtig:
                       if ( rf[i_current-3*n-1] == i-n )
                       {
                         ALLE_layer[i+3*n].visibility='show';  // 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].visibility='show';  // Falsch-Layer  
                         versuch = versuch + 1;
                       }
                     } 
                    }
                }

           if (getroffen==0 && geparkt==0) {    // zurücksetzen
                    current_layer.left=herkunft_layer.left; 
                    current_layer.top=herkunft_layer.top; 
                    besetzt[i_herkunft]=1;         
                    }
           getroffen=0; geparkt=1;

        current_layer = null;   
   }		
        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
}

window.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP | Event.MOUSEDRAG);
window.onmousedown=begin_event;
window.onmouseup=end_event;
window.onmousemove=drag_event;


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()
{
  window.document.layers['Ende'].document.ausw.auswert.value=''
}
