
// Definitionen für Puzzle, Netscape Navigator

function definiere_layers()
{
   // Zuerst die fixen Felder randomisieren:
   zufall_fixefelder();

   // 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>Association of categories</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>Association of categories</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 (k=0; k<=1; k++)
for (i=1; i<=nhalbe; 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+k*(Felder_Groesse_fix[1]+zweiteReihe))+'"\n'+
'WIDTH="'+Felder_Groesse_fix[0]+'" HEIGHT="'+Felder_Groesse_fix[1]+'">'+texte_fixeFelder[i-1+nhalbe*k]+'</LAYER>');

  // die Markierungen_Ziel:
for (k=0; k<=1; k++)
for (i=1; i<=nhalbe; 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+k*(Felder_Groesse_fix[1]+zweiteReihe))+'"\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]+'" TOP="'+(Markierungen_Beginn[1]+shift_Y)+'"\n'+
'WIDTH="'+Felder_Groesse_bew[0]+'" HEIGHT="'+Felder_Groesse_bew[1]+'"></LAYER>');

// verdoppeln:
  // die Markierungen_Beginn:
for (i=1; i<=n; i++)
document.write('<LAYER BGCOLOR="FFFFEE" LEFT="'+Markierungen_Beginn[2]+'" TOP="'+(Markierungen_Beginn[3]+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]+'" TOP="'+(Markierungen_Beginn[1]+shift_Y)+'"\n'+
'WIDTH="'+Felder_Groesse_bew[0]+'" HEIGHT="'+Felder_Groesse_bew[1]+'">'+texte_beweglicheFelder[0]+'</LAYER>');

// verdoppeln:
  // die beweglichen Felder:
for (i=1; i<=n; i++)
document.write('<LAYER LEFT="'+Markierungen_Beginn[2]+'"TOP="'+(Markierungen_Beginn[3]+shift_Y)+'"\n'+
'WIDTH="'+Felder_Groesse_bew[0]+'" HEIGHT="'+Felder_Groesse_bew[1]+'">'+texte_beweglicheFelder[1]+'</LAYER>');

  // die Richtig-Markierungen (unsichtbar):
if (richtigfalsch01 == 1)
for (k=0; k<=1; k++)
for (i=1; i<=nhalbe; 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+k*UnTen)+'"\n'+
'WIDTH="'+richtigfalsch_Groesse[0]+'" HEIGHT="'+richtigfalsch_Groesse[1]+'" VISIBILITY="hidden">'+texte_richtigfalsch[0]+'</LAYER>');

  // die Falsch-Markierungen (unsichtbar):
if (richtigfalsch01 == 1)
for (k=0; k<=1; k++)
for (i=1; i<=nhalbe; 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+k*UnTen)+'"\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 < (6+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_fixefelder() 
{
// 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_fixeFelder[i-1];
      aux_rf[i] = rf[i-1];
    }
    
    for (i=1; i<=n ; i++) 
    { texte_fixeFelder[i-1] = aux_text[permutation[i]];
      rf[i-1] =  aux_rf[permutation[i]];
	  rf[i-1+n] = aux_rf[permutation[i]];
    }
    // alert(''+rf);	
}



// Punktesystem: jede richtige Zuordnung --> 1 Punkt
// Resultat wird erst zum Schluß gezeigt
// n = Maximalzahl der Punkte 
// bei Random-Versuch -> im statistischen Mittel die halbe Maximalpunktezahl, da
// ungefähr beide Kategorien gleich oft vorkommen
// nach Auswerten -> Punktezahl ändert sich nicht mehr

var punktezahl = 0;  
sperren=0; 
resultat = new Array();
for (i = n+1; i < 2*n+1;i++) { resultat[i] = 2; }  // 1.. richtig, 0... falsch, 2... leer

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 < 4*n+1 ; i++) besetzt[i] = 0; // zunächst alles als unbesetzt registrieren!


function begin_event(e) {
        for (i = 4*n+1 ; i < 6*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 < 4*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;
                    if (n+1 <= i && i<= 2*n) 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 < 4*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) { 
           // ÄNDERUNG: Kategorienfelder dürfen nur auf ihresgleichen zurück!
           //  alert('curr: '+reihenf[i_current-4*n-1]+' ziel: '+reihenf[i-2*n-1]);
 if ( n+1 <= i && i<= 2*n || reihenf[i_current-4*n-1] == reihenf[i-2*n-1] )
           {
                    current_layer.left=einschnapp_layer.left; 
                    current_layer.top=einschnapp_layer.top; 
                    getroffen=1;
					if (n+1 <= i && i<= 2*n) besetzt[i]=1; // nur die Zielfelder werden als besetzt registriert!					
                     if (richtigfalsch01 == 1 && i_herkunft > n && i_herkunft < 2*n+1 )  // falls von Zielfeld
                     {
                       ALLE_layer[i_herkunft+5*n].visibility='hidden';  // frühere Richtig- und
                       ALLE_layer[i_herkunft+6*n].visibility='hidden';  // Falsch-Layer (von Auswerten) wieder weg                        
					   resultat[i_herkunft]=2;  // jetzt leer
                     }

                     if (richtigfalsch01 == 1 && i > n && i < 2*n+1 )  // falls auf Zielfeld
                     {
                       ALLE_layer[i+5*n].visibility='hidden';  // frühere Richtig- und
                       ALLE_layer[i+6*n].visibility='hidden';  // Falsch-Layer (von Auswerten) zunächst weg 
					   resultat[i]=2; // jetzt leer - eigentlich überflüssig
      						 
                       // falls richtig:
                       // DAS GEÄNDERT - beim Original-Puzzle war: if ( rf[i_current-3*n-1] == i-n )
     				   // alert('herkunft: '+reihenf[i_current-4*n-1]+' und ziel: '+rf[i-n-1]);
				       if ( reihenf[i_current-4*n-1] == rf[i-n-1] ) 
                       {
                        // ALLE_layer[i+5*n].visibility='show';  // Richtig-Layer ... noch nicht zeigen
                         resultat[i] = 1;					 
                        }
                       // falls falsch:
                       else
                       {// ALLE_layer[i+6*n].visibility='show';  // Falsch-Layer ... noch nicht zeigen 
					     resultat[i] = 0;
                       }
            }
                     } 
                    }
                }

           if (getroffen==0 && geparkt==0) {    // zurücksetzen
                    current_layer.left=herkunft_layer.left; 
                    current_layer.top=herkunft_layer.top; 
                    if (n+1 <= i_herkunft && i_herkunft<= 2*n) 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_katego.html","Fenster_info_punkte_P","width=500,height=335,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 punkteberechnen()
{
// alert(''+resultat[n+1]+' '+resultat[n+2]+' '+resultat[n+3]+' '+resultat[n+4]+' '+resultat[n+5]);
for (i = n+1; i<=2*n; i++)
  if (resultat[i]==1) 
  {  if (sperren == 0) punktezahl = punktezahl + 1;
     ALLE_layer[i+5*n].visibility='show';  // Richtig-Layer 
  }
  else if (resultat[i]==0)
  {
  ALLE_layer[i+6*n].visibility='show';  // Falsch-Layer  
  }
  // falls resultat[i]==2 -> nix passiert
  sperren = 1;  // nach einmal Auswerten ändert sich die Punktezahl nicht mehr
}

function zuruecksetzen()
{
  window.document.layers['Ende'].document.ausw.auswert.value=''
}
