
// Definitionen für Ableitungs-Puzzle, Internet Explorer

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 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';

document.write('<div ID="Seitenkopf">'+zunaechst+text_Seitenkopf+'</div>\n');

  // Effekt des Seitenkopfs: um folgenden Y-Betrag wird alles Weitere nach unten verschoben:
var aux1 = document.all.tags("DIV").item("Seitenkopf").style.posTop;
var aux2 = document.all.tags("DIV").item("Seitenkopf").offsetHeight;
var shift_Y = aux1 + aux2 + 40;
                                                        // 40 sichert kleinen Abstand zum eigentlichen Puzzle 
                                                        // (kann geändert werden)
  // Alle anderen Layer:

  // die fixen Felder:
for (i=1; i<=n; i++)
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>');


// Aussehen der Ziel-Markierungen:
var Tabellenrand = '';
// oder
// var Tabellenrand = '<TABLE BORDER=1 WIDTH="100%" HEIGHT="100%" CELLPADDING="0" CELLSPACING="0"><TD>&nbsp;</TD></TABLE>';


  // die Markierungen_Ziel:
for (i=1; i<=n; i++)
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'+
'<TABLE BGCOLOR="#FFFFEE" BORDER=0 WIDTH="100%" HEIGHT="100%"\n'+
'CELLPADDING="0" CELLSPACING="0"><TD>&nbsp;'+Tabellenrand+'</TD></TABLE>\n'+
'</div>');


  // die Markierungen_Beginn:
for (i=1; i<=n; i++)
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'+
'<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++)
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++)
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++)
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++)
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
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(
    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++) 
           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();

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;

function begin_event() {
        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.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);
                if (correct_width && correct_height) {
                        current_layer = test_layer;  
                        i_current = i;

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; 
                        }
                }

        // Herkunft ermitteln
        for (i = n+1 ; i < 3*n+1 ; i++) {     // checke alle Markierungen
                test_layer = ALLE_layer[i];
                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;
}


function drag_event() {
        if (current_layer != null) {  

                  current_layer.style.posLeft += window.event.clientX+window.document.body.scrollLeft - oldX;
				  current_layer.style.posTop += window.event.clientY+window.document.body.scrollTop - oldY;
                oldX = window.event.clientX+window.document.body.scrollLeft;
                oldY = window.event.clientY+window.document.body.scrollTop; 
                }
        return false;
}


function end_event() {
        if (current_layer != null) {  
        last_layer = current_layer;

        // 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.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) { 

                    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

                    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;   

   }
        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
}

document.onmousedown=begin_event;
document.onmouseup=end_event;
document.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.all.tags("DIV").item("Ende").document.ausw.auswert.value=''
}

