 var IMG_OFFSET = 1;          // Index of the first picture in document.images[*]
                              // set by searchFirstImage()
 var IMG_PATH   = "memory/";  // Path of the pictures
 var IMG_MODE   = 0;           // IMG_MODE=0 match of two identical pictures
                               //            filename picX.jpg
                               // IMG_MODE=1 match of two similar pictures
                               //            filename picXa.jpg und picXb.jpg 

 // Index of the pictures in document.images[*]
 var IMG_START = 18;
 var IMG_STOP  = 20;
 var IMG_PLUS  = 28;
 var IMG_MINUS = 24;

 var IMG_LEVEL = 26;
 var IMG_SEC   = 33;
 var IMG_HIT   = 49;
 var IMG_ATTEMPTS = 41;
 
 var nImages = 8;                               // Number of single pictures
 var arrHighScore    = new Array();             // Array of highscore objects 
 var imgArrField     = new Array(nImages * 2);  // Pictures of the cats
 var imgBackside     = new Image();             // The backside of a card
 var imgArrStartStop = new Array(4);            // Start and stop button
 var imgArrPlusMinus = new Array(4);            // Plus and minus button
 var imgArrNumber    = new Array(11);           // Ciphers 0 to 9
 var bRunning        = false;                   // State of the game   
 var nLevel          =  4;                      // Speed level
 var nSeconds        =  0;                      // Duration of the game in seconds
 var nAttempts       =  0;                      // Number of attempts
 var nHit            =  0;                      // Number of hits
 var nSelected1      = -1;                      // First selected picture
 var nSelected2      = -1;                      // Second selected picture
 var bShowCard       = false;                   // State of the card (uncovered or not)
 var strPlayerName   = "xxx";                   // Name of player for highscore
 var strDate         = "";                      // Date for highscore
 var nPoints         = 0;                       // Points for highscore
 var bCookies        = false;                   // Cookies enabled ?
 var nSumImages      = nImages * 2 + 4 + 4 + 11;// Sum of all images
  
/*
 *  Preload of images
 */
 function loadImages()
 {
   if(document.images)
   {
     imgBackside.src  = IMG_PATH + "card.jpg";
     
     // Load start and stop button
     for(var i = 0; i < 4; i++)
     {
       imgArrStartStop[i] = new Image();
       imgArrStartStop[i].src = IMG_PATH + "startstop" + (i + 1) + ".gif";
     }

     // Load plus and minus button
     for(var i = 0; i < 4; i++)
     {
       imgArrPlusMinus[i] = new Image();
       imgArrPlusMinus[i].src = IMG_PATH + "plusminus" + (i + 1) + ".gif";
     }
     
     // Load ciphers
     for(var i = 0; i < 11; i++)
     {
       imgArrNumber[i] = new Image();
       imgArrNumber[i].src = IMG_PATH + i + ".gif";
     }

     // Load cat pictures
     for(var i = 0; i < nImages; i++)
     {
       if(IMG_MODE == 1)
       {
         imgArrField[i * 2] = new Image();
         imgArrField[i * 2].src = IMG_PATH + "pic" + (i + 1) + "a.jpg";
         imgArrField[i * 2 + 1] = new Image();
         imgArrField[i * 2 + 1].src = IMG_PATH + "pic" + (i + 1) + "b.jpg";
       }
       else
       {
         IMG_MODE = 0;
         imgArrField[i * 2] = new Image();
         imgArrField[i * 2].src = IMG_PATH + "pic" + (i + 1) + ".jpg";
         imgArrField[i * 2 + 1] = new Image();
         imgArrField[i * 2 + 1].src = IMG_PATH + "pic" + (i + 1) + ".jpg";
       }
     }
          
     nLevel = 4;
     nSeconds  =  0;
     nAttempts =  0;
     nHit      =  0;
     searchFirstImage();
     clearField();
     updateAll();
     setTimeout("checkLoading()", 1000)
   }   
 }
 
/*
 *  Shuffle all cat pictures
 */
 function shuffle()
 {
   if(document.images)
   {
     // Swap two pictures (random index)
     var j = Math.floor(new Date().getSeconds() * Math.random() + 60);
     for(var i = 0; i < j; i++)
     {
       n1 = Math.round(Math.random() * (nImages * 2 - 1));
       n2 = Math.round(Math.random() * (nImages * 2 - 1));
       img = imgArrField[n1];
       imgArrField[n1] = imgArrField[n2];
       imgArrField[n2] = img;
     } 
   }
 }
  
/*
 *  Start new game
 */
 function startGame()
 {
   if(document.images)
   {
     if(!bRunning)
     {
       shuffle();
       clearField();
       nSeconds = 0;
       nSelected1 = -1;
       nSelected2 = -1;    
       nAttempts  =  0;
       nHit       =  0;
       id = setInterval("countSeconds()", 1000)
       bRunning = true;
       bShowCard = false;
       updateAll();
     }
   }
 }
  
/*
 *  Stop game
 */
 function stopGame()
 {
   if(document.images)
   {
     if(bRunning)
     {
       clearInterval(id);
       bRunning = false;
       updateAll();
     }
   }
   return;
 }
 
/*
 *  Count seconds
 */
 function countSeconds()
 {
   nSeconds++;
   showNumber(nSeconds, IMG_SEC + IMG_OFFSET, 5);
 }
 
/*
 *  Show numbers
 */
 function showNumber(nNumber, nPosition, nCount)
 {
   if(document.images)
   {
     nNumber += "";
     while(nNumber.length < nCount) nNumber = " " + nNumber;
     for(var i = 0; i < nCount; i++)
     {
       var n = nNumber.charAt(i);
       if(n == " ")
       {
         document.images[nPosition + i].src = imgArrNumber[10].src;
       }
       else
       {
         document.images[nPosition + i].src = imgArrNumber[n].src;
       }
     }
   }
 }
 
/*
 *  Set the backside of all cards
 */
 function clearField()
 {
   if(document.images)
   {
     for(var i = 0; i < nImages * 2; i++)
     {
       document.images[i + IMG_OFFSET].src = imgBackside.src;
     }
   }
 }   

/*
 *  Show card
 */
 function showCard(nImage)
 {
   if(document.images)
   {
     if(bRunning && !bShowCard)
     {
       // Uncover a card, if not allready two are selected
       if(nSelected1 == -1 || nSelected2 == -1)
       {
         // Is the clicked not uncovered ?
         if(document.images[nImage + IMG_OFFSET].src == imgBackside.src)
         {
           // Uncover selected card
           document.images[nImage + IMG_OFFSET].src = imgArrField[nImage].src;
           if(nSelected1 == -1)
           {
             nSelected1 = nImage;
           }
           else
           {
             nSelected2 = nImage;
           }
         }
       }
       
       // There are two cards uncovered
       if(nSelected1 != -1 && nSelected2 != -1)
       {
         showNumber(++nAttempts, IMG_ATTEMPTS + IMG_OFFSET, 5);
                
         // Are the cards equal ?
         var pic1 = document.images[nSelected1 + IMG_OFFSET].src;
         var len1 = pic1.length;
         var pic2 = document.images[nSelected2 + IMG_OFFSET].src;
         var len2 = pic2.length;
         if(pic1.substr(0, len1 - IMG_MODE - 4) == pic2.substr(0, len2 - IMG_MODE - 4))
         {
           // If there are equal, incement the counter
           showNumber(++nHit, IMG_HIT + IMG_OFFSET, 5);
           nSelected1 = -1;
           nSelected2 = -1;
     
           // Are all pictures uncovered ?
           if(nHit == nImages)
           {
             stopGame();
             strMsg = "Tillykke. Du gennemførte spillet.";
             alert(strMsg);
		   }
         }
         else
         {
           // The two cards are not identical, start now the timer for hide the cards
           bShowCard = true;
           setTimeout("clearCard()", 2000 - nLevel * 200);
         }
       }
     }
     else
     {
       if(!bRunning)
       {
         alert("Tryk på startknappen for at begynde spillet !");
       }
     }
   }
 }
 
/*
 *  Turn the uncovered cards
 */
 function clearCard()
 {
   document.images[nSelected1 + IMG_OFFSET].src = imgBackside.src;
   document.images[nSelected2 + IMG_OFFSET].src = imgBackside.src;
   nSelected1 = -1;
   nSelected2 = -1;
   bShowCard = false;
  }
  
/*
 *  Set the level
 */
 function setLevel(nValue)
 {
   if(document.images && !bRunning)
   {
     nLevel += nValue;
     if(nLevel < 0) nLevel = 0;
     if(nLevel > 9) nLevel = 9;
     showNumber(nLevel, IMG_LEVEL + IMG_OFFSET, 1);
   }
 }

  
/*
 *  Update all counter
 */
 function updateAll()
 {
   if(document.images)
   {
     showNumber(nLevel, IMG_LEVEL + IMG_OFFSET, 1);
     showNumber(nSeconds, IMG_SEC + IMG_OFFSET, 5);
     showNumber(nAttempts, IMG_ATTEMPTS + IMG_OFFSET, 5);
     showNumber(nHit, IMG_HIT + IMG_OFFSET, 5);

     if(bRunning)
     { 
       document.images[IMG_START + IMG_OFFSET].src = imgArrStartStop[1].src;
       document.images[IMG_STOP + IMG_OFFSET].src  = imgArrStartStop[2].src;
       document.images[IMG_PLUS + IMG_OFFSET].src  = imgArrPlusMinus[1].src;
       document.images[IMG_MINUS + IMG_OFFSET].src = imgArrPlusMinus[3].src;
     }
     else
     {  
       document.images[IMG_START + IMG_OFFSET].src = imgArrStartStop[0].src;
       document.images[IMG_STOP + IMG_OFFSET].src  = imgArrStartStop[3].src;
       document.images[IMG_PLUS + IMG_OFFSET].src  = imgArrPlusMinus[0].src;
       document.images[IMG_MINUS + IMG_OFFSET].src = imgArrPlusMinus[2].src;
     }
   }
 }
  

 

 
 
/*
 *  Search index of first image
 */
 function searchFirstImage()
 {
   for(var i = 0; i < document.images.length; i++)
   {
     if(document.images[i].name == "memory_id")
     {
       IMG_OFFSET = i + 1;
       break;
     }
   }
 }


/*
 *  Count of preloaded images
 */
 function countLoadedImages()
 {
   var nCompleted = 0;
   for(var i = 0; i < 2 * nImages; i++)
   {
     if(imgArrField[i].complete)
     {
       nCompleted++;
     } //else alert(imgArrField[i].src);
   }

   for(var i = 0; i < 4; i++)
   {
     if(imgArrStartStop[i].complete)
     {
       nCompleted++;
     } //else alert(imgArrStartStop[i].src);
   }

   for(var i = 0; i < 4; i++)
   {
     if(imgArrPlusMinus[i].complete)
     {
       nCompleted++;
     } //else alert(imgArrPlusMinus[i].src);
   }

   for(var i = 0; i < 11; i++)
   {
     if(imgArrNumber[i].complete)
     {
       nCompleted++;
     } //else alert(imgArrNumber[i].src);
   }
   return nCompleted;
 }


/*
 *  Progressbar for preload of images
 */
function checkLoading()
{
  var nLoaded = countLoadedImages();
  if(nLoaded < nSumImages)
  {
    document.images[IMG_OFFSET - 1].width = 456 - (456 / nSumImages * nLoaded);
    window.status = "" + nLoaded + " of " + nSumImages + " billede hentet";
    setTimeout("checkLoading()", 250);
  }
  else
  {
    document.images[IMG_OFFSET - 1].src = IMG_PATH + "blank.gif"; 
    document.images[IMG_OFFSET - 1].width = 5;
    window.status = "";
    updateAll();
  }
}

