// Made by Blinde Kuh - Die erste deutschspr. Suchmaschine nur fuer Kinder
// Online-Memo mit div. Optionen (c)2001 Stefan R. Mueller (www.blinde-kuh.de)
// Dieser Code unterliegt dem Urheberrecht. Das bedeutet in der einfachsten
// Auslegung, die Nutzung fuer private Zwecke ist frei, aber die Nutzung
// fuer komerzielle Zwecke eben nicht. Diese muss mit dem Urheber vereinbart
// werden, wobei eine angemessene Gegenleistung in Betracht zu ziehen ist.
// Geschrieben ist dieses Spiel fuer Netscape ab Version 3 und auch Microsoft
// Internet Explorer ab Version 3.
// Die hier verwendeten Bilder stammen von Birte Schneider.
 
if (document.images)
{
  MeldeStatus("Das Spiel wird gerade neu aufgebaut ...");
  // Bilder muss der Browser schon laden koennen, 
  // sonst ist es irgendwie langweilig
  // Voreinstellungen

 var Matrix = new Array (
  '------',
  '------',
  '------',
  '------',
  '------',
  '------'
  );
 
  var KartenModellTyp = 'C';

  var Spalten = 6;
  var Zeilen = 6;



  var Paare        = (Zeilen*Spalten) / 2;
  var MischFaktor  = 10;
  
  // Motive deklarieren
  // alle weiteren Parameter fuer die Motiv-Vorgabe
  // richten sich nach diesen Angaben
  var Seperator    = "_";
  var ErsteKarte   = "1";
  var ZweiteKarte  = "1";
  var Endung       = "gif";
  var Universum = new Array(
   
    "marit-larsen", "sarah-connor", "justin-bieber", "madonna", "bruno-mars", "catterfeld", 
    "tokio-hotel", "lena-meyer-landrut", "shakira", "nuo", "ben", "alicia-keys", 
    "jennifer-lopez", "lady-gaga", "jamie-cullum", "pietro-lombardi", "luxuslaerm", "hannah-montana", "maria-mena", "prinzen","take-that", "anastacia", "stefanie-heinzmann", "pink", "ich-und-ich",
    "silbermond", "wir-sind-helden", "kesha"
  );
  var AnzahlMotive = Universum.length;
  // Bild-Daten deklarieren
  var AnzahlKarten = Paare * 2;
  var Rueckseite=new Image();         Rueckseite.src="inaktiv.jpg"
  var AktiveRueckseite=new Image() ;  AktiveRueckseite.src="aktiv.jpg"
  var LeerBild=new Image() ;          LeerBild.src="leer.jpg"
  var AnzahlRichtige = 0;
  // Parameter zuruecksetzen
  var Bilder=new Array(AnzahlKarten+1);
  var Weggeraeumt=new Array(AnzahlKarten+1);
  var Klicks=0;
  var LetzteKarte=0;
  var VorletzteKarte=0;
  var sum = 0;
  var SpielStand = 0;
    
  var arr=new Array(AnzahlKarten+1);
  var arrCount=0;
  
}
 else
{
  alert(   "Du benoetigst fuer dieses Memo\n"
         + "einen moderneren Browser, z.B.:\n"
         + "Netscape ab 3.0 oder MS Internet Explorer ab 4.0" )
  history.go(-1)
}
function Init() 
{
  SpielStand = 0;
  MeldeStatus( "Einen Moment, bitte. Ich mische gerade ...");
  
  var j=0; var n=0; arrCount=AnzahlKarten;
  var i = 0;
  // Parameter Zurueckseten
  AnzahlRichtige = 0;
  Klicks         = 0;
  LetzteKarte    = 0;
  VorletzteKarte = 0;
  sum = 0;  
  KartenVerdecken();
  SetzeModus();
  BilderAuswahlen();
  KartenMischen();
  KlicksAusgabe(0)
  // Test per View
  // BilderAufdecken();
  SpielStand = 1;
  // Startmeldung
  MeldeStatus("Das Spiel kann beginnen! Klicke auf die Karte, die du aufdecken moechtest.");
}
function SetzeBild(n,source)
{
  if ( document.images['bild'+n] )
  {
   if ( arr[n] == 1  )
   {
     KarteDeaktivieren(n);
   }
   else { document.images['bild'+n].src = source;  KarteAktivieren(n); }
 }
}

function KarteDeaktivieren(n) {
 if ( SpielStand == 0 ) {return;};
 if ( Weggeraeumt[n] > 0  )
 {
 	KarteVerschwindet (n);
 }
 else
 {
 var Karte = document.getElementById('memomargin'+n);
 if ( Karte )
 {
  Karte.style.visibility='hidden';
  var Rahmen = document.getElementById('memocell'+n);
  if ( Rahmen )
  {
  	Rahmen.style.visibility='hidden';
  }
  Weggeraeumt[n]=0;
 }
}
}

function KarteAktivieren(n) {
 Weggeraeumt[n]=100;
 var Karte = document.getElementById('memomargin'+n);
 if ( Karte )
 {
  Karte.style.visibility='visible';
  Karte.style.opacity = 1;
  Karte.style.filter ="alpha(opacity=100)";
  var Rahmen = document.getElementById('memocell'+n);
  if ( Rahmen )
  {
  	Rahmen.style.visibility='visible';
  }
  
 }
}

function KarteVerschwindet (n) {
//document.game.counter.value = Weggeraeumt[n];
 var transp = Weggeraeumt[n];
 var step = 2;
 transp = transp - step;
 if ( transp < step ) { transp = 0};
 var transp2 = transp / 100;
 if ( transp > -1 )
 {
 	
  var Karte = document.getElementById('memomargin'+n);
  if ( Karte )
  {
   Karte.style.visibility='visible';
   Karte.style.opacity = transp2;
   Karte.style.filter ="alpha(opacity="+transp+")";
  }
  Weggeraeumt[n] = transp;
  setTimeout( "KarteDeaktivieren("+n+")", 10);
 }
else
{
 KarteDeaktivieren(n);
}
}


function KartenVerdecken()
{
  // Je nachdem, was aus der Selectbox ausgewaehlt wird,
  // wird bei den Zweiten Karten die angegebene Endung
  // mit angehaengt.
  for (var i=1; i<=AnzahlKarten; i++)
  {
    arr[i]=0;
    // SetzeBild(i, Bilder[i].src);
    SetzeBild(i, Rueckseite.src);
  }
}
function SetzeModus()
{
  // Je nachdem, was aus der Selectbox ausgewaehlt wird,
  // wird bei den Zweiten Karten die angegebene Endung
  // mit angehaengt.
  if ( document.game.type )
  {
  var i = document.game.type.selectedIndex;
  if ( i > -1 )
  {
   var modus = document.game.type.options[i].value;
  if ( modus )
  {
    ZweiteKarte = modus;
  }
  }
  }
}
function HoleBild(n,source)
{
  var source = document.images['bild'+n].src;
  return source;
}
function Klick(n) // Wenn man auf die Karte klickt
{
	
	 if (SpielStand == 0 ) { Init(0); return; }
  
   if (document.images)
   // if ((document.images) && (!arr[n]))
   {
    // if ( LeerBild.src == document.images['bild'+n].src ) return;
    if (arr[n] == 1 ) return;
     
    
    
     Klicks++
     if (Klicks % 2 == 0) // "zweiter" Klick
     {
       sum++
       KlicksAusgabe(sum);
       if (n != VorletzteKarte )
       {
         SetzeBild(n, Bilder[n].src);
         LetzteKarte=n;
         var source = HoleBild(LetzteKarte);
         var Name1 = HoleNamen( source );
         source = HoleBild(VorletzteKarte);
         var Name2 = HoleNamen( source );
         if (Name1 == Name2)
         {
            // Wegraeumen, wenn gewuenscht
            // SetzeBild(LetzteKarte, LeerBild.src)
            // SetzeBild(VorletzteKarte, LeerBild.src)
            KarteDeaktivieren(LetzteKarte);
            KarteDeaktivieren(VorletzteKarte);
            arr[LetzteKarte]=1
            arr[VorletzteKarte]=1
            AnzahlRichtige++
            if (AnzahlRichtige==Paare) { SpielGewonnen() }
         }
       }
       else
       { Klicks -- }
     }
     else // "erster" Klick
     {
        if ((LetzteKarte) && (!arr[LetzteKarte]))
        {
          SetzeBild(LetzteKarte, Rueckseite.src );
          SetzeBild(VorletzteKarte, Rueckseite.src);
        }
        SetzeBild(n, Bilder[n].src );
        VorletzteKarte=n;
     }
  }
}
function Out(n) // Ausserhalb des Spielfeldes
{
  if (document.images)
  {
  var source = HoleBild(n);
  if ( source == AktiveRueckseite.src )
  {
    SetzeBild(n, Rueckseite.src);
  }
  if ( SpielStand == 1 )
  {
   MeldeStatus("Bewege den Mauszeiger ueber das Spielfeld");
  }
  }
}
function Over(n)
{
  if (document.images)
  {
  if ( SpielStand != 1 )
  {
   MeldeStatus( 'Das Spiel ist beendet');
  }
  else
  {
  var source = HoleBild(n);
  // Wenn die Maus ueber die Rueckseite faehrt
  //if ( source == LeerBild.src )
  if ( arr[n] == 1 )
  {
    MeldeStatus( 'An diesem Platz ist die Karte bereits abgeraeumt!');
  }
  else
  {
  if ((source == AktiveRueckseite.src ) || (source == Rueckseite.src ) )
  {
    SetzeBild( n, AktiveRueckseite.src )
    MeldeStatus("Du musst die Karte anklicken, um sie aufzudecken");
  }
  // Maus faehrt ueber eine aufgedeckte Karte
  else
  {
    MeldeStatus('Motiv auf der Karte: ' + HoleNamen(source));
  }
  }
  }
  }
}

function Move(n)
{
  if (document.images)
  {
  if ( SpielStand != 1 )
  {
   MeldeStatus('Das Spiel ist beendet');
  }
  else
  {
  var source = HoleBild(n);
  // Wenn die Maus ueber die Rueckseite faehrt
  if ( arr[n] == 1  )
  {
    MeldeStatus( 'An diesem Platz ist die Karte bereits abgeraeumt!');
  }
  else
  {
  if ((source == AktiveRueckseite.src ) || (source == Rueckseite.src ) )
  {
    SetzeBild( n, AktiveRueckseite.src )
    MeldeStatus("Du musst die Karte anklicken, um sie aufzudecken");
  }
  // Maus faehrt ueber eine aufgedeckte Karte
  else
  {
    MeldeStatus('Motiv auf der Karte: ' + HoleNamen(source));
  }
  }
  }
  }
}


function HoleNamen(source)
{
  // Schneidet den String heraus, der im Feld Universum
  // angegeben wurde
  var p=source.lastIndexOf("/");
  var q=source.length;
  source = source.substring( p+1, q );
  p=source.indexOf(Seperator);
  source = source.substring( 0, p );
  return source;
}
function KlicksAusgabe(n)
{
  var x = '000';
  x = n;
  if ( x < 100 )
  {
   if (x >9 )
     x = '0' + x;
   else
     x = '00' + x;
  }
  document.game.counter.value = x;
}
function SpielGewonnen()
{
 SpielStand = 0;
 BilderAufdecken();
 var a = "Hurra. Geschafft!!!\n";
 a = a + "Du hattest insgesamt "+sum+ " Zuege.";
 MeldeStatus( a);
 a = a + "\n\nMoechtest du dieses Spiel noch einmal spielen?";
 // if ( confirm( a ) ) { Init();}
}

function BilderAufdecken()
{
  for ( var i=1; i<=AnzahlKarten; i++ )
  {
    arr[i]=0;
    SetzeBild(i, Bilder[i].src);
    KarteAktivieren(i);
  }
}
function BilderAuswahlen()
{
  // Aus dem Array Universum werden die ersten Motive
  // herauskopiert.
  MotiveMischen();
  for ( var i=0; i<Paare; i++ )
  {
  	
    Bilder[i+1].src = 
      Universum[i] + Seperator + ErsteKarte + "." + Endung;
    Bilder[i+1+Paare].src = 
      Universum[i] + Seperator + ZweiteKarte + "." + Endung;
  }
}
function MotiveMischen()
{
  // Die im Array Universum angegebenen Motive werden
  // heftigst durcheinander gemischt, damit es ein wenig
  // Abwechslung bei jedem neuen Spiel gibt.
  var temporaer = "";
  var ziel = 0;
  for ( var i=0; i<MischFaktor; i++ )
  { 
   for ( var j=0; j<AnzahlMotive; j++ )
   {
    ziel = random( AnzahlMotive );
    if ( ziel != j )
    {
     temporaer = Universum[ziel];
     Universum[ziel] = Universum[j];
     Universum[j] = temporaer;
    }
   }
  }
}

function HTMLKarte (Position){
 var HTML	= '';
 HTML = HTML + '<div';
 HTML = HTML + ' id="memomargin'+Position+'"';
 HTML = HTML + ' class="memomargin"';
 HTML = HTML + ' onClick="javascript:Klick('+Position+')"';
 HTML = HTML + ' onMouseMove="Move('+Position+')"';
 HTML = HTML + ' onMouseOver="Over('+Position+')"';
 HTML = HTML + ' onMouseOut="Out('+Position+')"';
 HTML = HTML + ' width="110"';
 HTML = HTML + ' height="110"';
 HTML = HTML + '>';
 HTML = HTML + '<img';
 HTML = HTML + ' id="memoimage'+Position+'"';
 HTML = HTML + ' class="memoimage"';
 HTML = HTML + ' name="bild'+Position+'"';
 HTML = HTML + ' width="100"';
 HTML = HTML + ' height="100"';
 HTML = HTML + ' alt=""';
 HTML = HTML + ' title=""';
 HTML = HTML + ' src="inaktiv.jpg"';
 HTML = HTML + ' />';
 HTML = HTML + '</div>';
 return( HTML);
}

// Alle Karten Auslegen auf das gesamte Feld
function KartenModellA () {
 Spalten = 6;
 Zeilen = 6;
 Paare        = (Zeilen*Spalten) / 2;
 AnzahlKarten = Paare * 2;
 var Position = 0;
 var HTML	= '';
  HTML = HTML + '<table border="0" cellpadding="0" cellspacing="2">\n';
  for ( var Zeile=0; Zeile<Zeilen; Zeile++ )
  { 
   HTML = HTML + '<tr>\n';
   for ( var Spalte=0; Spalte<Spalten; Spalte++ )
   {
   	Position = (Spalte+(Zeile*Spalten))+1;
   	Weggeraeumt[Position]=100;
    HTML = HTML + '<td class="memocell" id="memocell'+Position+'" valign="middle" align="center">\n';
    HTML = HTML + HTMLKarte(Position);
    HTML = HTML + '</td>\n';
   }
   HTML = HTML + '</tr>\n';
  }
  HTML = HTML + '</table>\n';
 return( HTML);
}

function KartenModellB () {
 Spalten = 6;
 Zeilen = 5;
 Paare        = (Zeilen*Spalten) / 2;
 AnzahlKarten = Paare * 2;
 var Position = 0;
 var HTML	= '';
  HTML = HTML + '<table border="0" cellpadding="0" cellspacing="2">\n';
  for ( var Zeile=0; Zeile<Zeilen; Zeile++ )
  { 
   HTML = HTML + '<tr>\n';
   for ( var Spalte=0; Spalte<Spalten; Spalte++ )
   {
   	Position = (Spalte+(Zeile*Spalten))+1;
   	Weggeraeumt[Position]=100;
    HTML = HTML + '<td class="memocell" id="memocell'+Position+'" valign="middle" align="center">\n';
    HTML = HTML + HTMLKarte(Position);
    HTML = HTML + '</td>\n';
   }
   HTML = HTML + '</tr>\n';
  }
  HTML = HTML + '</table>\n';
 return( HTML);
}

function setModell(type) {
MeldeStatus("Moment, ich ändere das Karten-Modell ...");
	KartenModellTyp = type;
	SpielStand = 0;
	KartenLegen();
	Init();
}

// Alle Karten Auslegen auf das gesamte Feld
function KartenModellC () {
 Spalten = 5;
 Zeilen = 4;
 Paare        = (Zeilen*Spalten) / 2;
 AnzahlKarten = Paare * 2;
 var Position = 0;
 var HTML	= '';
  HTML = HTML + '<table border="0" cellpadding="0" cellspacing="2">\n';
  for ( var Zeile=0; Zeile<Zeilen; Zeile++ )
  { 
   HTML = HTML + '<tr>\n';
   for ( var Spalte=0; Spalte<Spalten; Spalte++ )
   {
   	Position = (Spalte+(Zeile*Spalten))+1;
   	Weggeraeumt[Position]=100;
    HTML = HTML + '<td class="memocell" id="memocell'+Position+'" valign="middle" align="center">\n';
    HTML = HTML + HTMLKarte(Position);
    HTML = HTML + '</td>\n';
   }
   HTML = HTML + '</tr>\n';
  }
  HTML = HTML + '</table>\n';
 return( HTML);
}


// Alle Karten Auslegen auf das gesamte Feld
function KartenModellierung () {
 Spalten = 6;
 Zeilen = 6;
 
 var Position = 0;
 var Position2 = 0;
 var MatrixZeile = '';
 var MatrixZeichen = '';
 var HTML	= '';
 var HTML2	= '';
  HTML = HTML + '<table border="0" cellpadding="0" cellspacing="2">\n';
  for ( var Zeile=0; Zeile<Zeilen; Zeile++ )
  { 
   MatrixZeile = Matrix[Zeile];
   HTML = HTML + '<tr>\n';
   HTML2 = HTML2 + '<br>';
   for ( var Spalte=0; Spalte<Spalten; Spalte++ )
   {
   	MatrixZeichen = MatrixZeile.charAt(Spalte);
   	Position = (Spalte+(Zeile*Spalten))+1;
   	if ( MatrixZeichen == '+' )
    {	
    	Position2 = Position2 +1;
   	Weggeraeumt[Position2]=100;
    HTML = HTML + '<td class="memocell" id="memocell'+Position2+'" valign="middle" align="center">\n';
    HTML = HTML + HTMLKarte(Position2);
    HTML = HTML + '</td>\n';
    }
  else
    {
    HTML = HTML + '<td class="memonocell" valign="middle" align="center">\n';
    HTML = HTML + '&nbsp';
    HTML = HTML + '</td>\n';
  }
   }
   HTML = HTML + '</tr>\n';
  }
  HTML = HTML + '</table>\n';
 Paare        = Position2 / 2;
 AnzahlKarten = Position2;
 
 
 return( HTML);
}


function KartenLegen()
{
 
 
  var HTML = '';
  if ( KartenModellTyp == 'A' ) {
 	 Matrix = new Array (
   '++++++',
   '++++++',
   '++++++',
   '++++++',
   '++++++',
   '++++++'
   ); HTML = KartenModellierung();
  }
  if ( KartenModellTyp == 'B' ) {
 	 Matrix = new Array (
   '++++++',
   '++++++',
   '++++++',
   '++++++',
   '++++++',
   '------'
   ); HTML = KartenModellierung();
  }
  
  if ( KartenModellTyp == 'C' ) {HTML = KartenModellC();}
  
  if ( KartenModellTyp == 'D' ) {
 	 Matrix = new Array (
   '--++--',
   '-++++-',
   '++++++',
   '++++++',
   '-++++-',
   '--++--'
   ); HTML = KartenModellierung();
  }
  
  if ( KartenModellTyp == 'E' ) {
 	 Matrix = new Array (
   '--++--',
   '--++--',
   '++++++',
   '++++++',
   '--++--',
   '--++--'
   ); HTML = KartenModellierung();   
  }
 
  if ( KartenModellTyp == 'F' ) {
 	 Matrix = new Array (
   '++--++',
   '++++++',
   '-++++-',
   '-++++-',
   '++++++',
   '++--++'
   ); HTML = KartenModellierung();   
  }

  if ( KartenModellTyp == 'G' ) {
 	 Matrix = new Array (
   '++++++',
   '++++++',
   '++--++',
   '++--++',
   '++++++',
   '++++++'
   ); HTML = KartenModellierung();   
  }
  
  var container = document.getElementById('memotable');
  if( container )
  {
  	container.innerHTML = HTML;
  } else
  {
  	document.write( HTML )
  }
  
 
}


function KartenMischen()
{
  // Das Array Bilder wird komplett durcheinander gemischt,
  // damit duerften die Paerchen etwas verstreut sein
  var temporaer = "";
  var ziel = 0;
  var zuletztaktiv = 0;
  for ( var i=0; i<MischFaktor; i++ )
  {
   for ( var j=0; j<AnzahlKarten; j++ )
   {
    ziel = random( AnzahlKarten );
    if ( ziel != j )
    {
     if ( zuletztaktiv > 0 )
     {
      SetzeBild(zuletztaktiv, Rueckseite.src);
     }
     SetzeBild(ziel+1, AktiveRueckseite.src);
     
     
     zuletztaktiv = ziel+1;
     temporaer = Bilder[ziel+1].src;
     Bilder[ziel+1].src = Bilder[j+1].src;
     Bilder[j+1].src = temporaer;
    }
   }
  }
  if ( zuletztaktiv > 0 )
  {
   SetzeBild(zuletztaktiv, Rueckseite.src);
  }
}

function BilderInitialisieren() {

 for (i=1; i<=AnzahlKarten; i++)
 {
   Bilder[i] = new Image();
 }
}

function MeldeStatus(text) {
  var container = document.getElementById('memostatus');
  if( container )
  {
  container.innerHTML = text;
  }


}


function BilderVorladen()
{
	var  x=0;
  MeldeStatus("Ich muss erst einmal all die Bilder laden ...");
  document.write( '<table border="0" id="memopreview"  cellpadding="2" cellspacing="2" titel="Alle Motive">' );
  for ( var i=0; i<AnzahlMotive; i++ )
  {
  	x = i+1;
  document.write( '<tr>');
  document.write( '<td colspan="3" class="memopreviewtext">');
  document.write( '<p>' + x + ') ' +Universum[i] +'</p>' );
  document.write( '</td>');
  document.write( '</tr>');
  document.write( '<tr>');
  
   for ( var a=1; a<=3; a++ )
   {
   	document.write( '<td>');
    document.write( '<img src="'+ Universum[i] + Seperator );
    if ( a <= 2 ) document.write( a );
    if ( a == 3 ) document.write( 'text' );
    document.write( '.' + Endung +'"' );
    document.write( ' width=32 height=32' );
    document.write( '>' );
   document.write( '</td>');
   }
  document.write( '</tr>');
  }
  document.write( '</table>' );
}
// Zufallsgenerator von
// Paul Houle 
// Department of Physics,  Cornell University 
today=new Date();
jran=today.getTime();
function rnd() 
{
 ia=9301;
 ic=49297;
 im=233280;
 jran = (jran*ia+ic) % im;
 return jran/(im*1.0);
}
function random(number) {
 return Math.floor(rnd()*number);
}




BilderInitialisieren();  

