function WM_netscapeCssFix() {
  
  if (document.WM.WM_netscapeCssFix.initWindowWidth != window.innerWidth || document.WM.WM_netscapeCssFix.initWindowHeight != window.innerHeight) {
    document.location = document.location;
  }
}

function WM_netscapeCssFixCheckIn() {
	
  if ((navigator.appName == 'Netscape') && (parseInt(navigator.appVersion) == 4)) {
    if (typeof document.WM == 'undefined'){
      document.WM = new Object;
    }
    if (typeof document.WM.WM_scaleFont == 'undefined') {
      document.WM.WM_netscapeCssFix = new Object;
      document.WM.WM_netscapeCssFix.initWindowWidth = window.innerWidth;
      document.WM.WM_netscapeCssFix.initWindowHeight = window.innerHeight;
    }
    window.onresize = WM_netscapeCssFix;
  }
}

WM_netscapeCssFixCheckIn();

var safari = navigator.userAgent.toLowerCase().indexOf("safari") != -1;
var ffox = navigator.userAgent.toLowerCase().indexOf("firefox") != -1;
var ns5 = navigator.appName.indexOf("Netscape") != -1 && navigator.appVersion.charAt(0) >= 5;
var ns4 = navigator.appName.indexOf("Netscape") != -1 && navigator.appVersion.charAt(0) >= 4;
var ns3 = navigator.appName.indexOf("Netscape") != -1 && navigator.appVersion.charAt(0) >= 3;
var ie4 = navigator.appName.indexOf("Microsoft Internet Explorer") != -1 && navigator.appVersion.charAt(0) >= 4;

function rollOverOn(NAME){
	if (ns3 || ie4 || safari || ffox) {
		imagesON = eval(NAME + "on.src");
		document.images[NAME].src= imagesON;
	}
}	//rollOverOn

function rollOut(NAME){
	if (ns3 || ie4 || safari || ffox) {
		imageOFF = eval(NAME + ".src");
		document.images[NAME].src= imageOFF;
	}
}	//rollOut

function toggleLayer( whichLayer )
{
  var elem, vis;
  if( document.getElementById ) // this is the way the standards work 
    elem = document.getElementById( whichLayer );
  else if( document.all ) // this is the way old msie versions work
      elem = document.all[whichLayer];
  else if( document.layers ) // this is the way nn4 works
    elem = document.layers[whichLayer];
  vis = elem.style;
  // if the style.display value is blank we try to figure it out here
  if(vis.display=='' && elem.offsetWidth!=undefined && elem.offsetHeight!=undefined)
    vis.display = (elem.offsetWidth!=0 && elem.offsetHeight!=0)?'block':'none';
  vis.display = (vis.display=='' || vis.display=='block')?'none':'block';
}

/////////////////////////////

	//========================================================================
	//   "MemorySquares" JavaScript Memory Game
	//
	//   Copyright (C) 2000,2001  Jan Mulder
	//
	//   This program is free software; you can redistribute it and/or modify
	//   it under the terms of the GNU General Public License as published by
	//   the Free Software Foundation; either version 2 of the License, or
	//   (at your option) any later version, and as long as this notice is
	//   kept unmodified at the top of the JavaScript source code.
	//
	//   This program is distributed in the hope that it will be useful,
	//   but WITHOUT ANY WARRANTY; without even the implied warranty of
	//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	//   GNU General Public License (license.txt) for more details.
	//
	//   Contact: Jan Mulder info@EnglishCafe.co.uk
	//
	//=======================================================================

	imageCount = 0;
	numImages = 20;
	numCorrect = 0;
	numWrong = 0;
	numAttempts = 0;
	numMinutes = 0;
	numSeconds = 0;
	timeTaken = 0;
	maxTime = 540; //9 minute time limit
	isTimed = true;
	timerOn = false;
	gameOver = false;
	triviaLayerVis = "cx_blank";
	
	var progressBar = '||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||';

	var delay = 0;
	var doneAction   = "finishedGame();";
	var sourceDir = "/cx/img/memorygame/";
	

	var solvedItems = new Array();
	var randArray = new Array();
	var tempArray = new Array();

	var matchingPairs = null;

	function arrayDeletePair( arrayName, delIndex )
	{
	  var ar = new Array();
	  for (var ii = 0; ii < arrayName.length; ii++)
	  {
	     if ((ii != delIndex) && (ii != (delIndex+1)))
	      ar[ar.length] = arrayName[ii];
	  }
	  return ar;ti
	} //arrayDeletePair
	

	function randomizeArray()
	{
	  for (var i=0; i < matchingPairs.length; i=i+2)
	  {
	    tempArray[tempArray.length] = "item"+i;
	    tempArray[tempArray.length] = sourceDir + matchingPairs[i];
	    tempArray[tempArray.length] = "item"+i;
	    tempArray[tempArray.length] = sourceDir + matchingPairs[i+1];
	  }

	  var count = matchingPairs.length;

	  for (var i = 0; i < count; i++)
	  {
	    imageRem = count - i;
	    var rand = Math.floor(Math.random()*imageRem);
	    randArray[randArray.length] = tempArray[rand*2];
	    randArray[randArray.length] = tempArray[(rand*2)+1];

	    tempArray = arrayDeletePair(tempArray, rand*2);
	  }
	}	//randomizeArray

	function doFunction(aFunction)
	{
	 if (aFunction.indexOf('(') > -1)
	   eval( aFunction );
	 else
	   eval(aFunction+'()');
	}	//doFunction


	function updateTime()
	{
	  if (!timerOn) return;

	  if(numSeconds == 59)
	  {
	    numMinutes++;
	    numSeconds=0;
	  }
	  else
	    numSeconds++;

	  if ((isTimed) && !(gameOver))
	  {
	    timeTaken++;

		var textStr= numMinutes.toString() + ':';
		if (numSeconds<10)
		{
		  textStr = textStr + '0';
		}
		textStr = textStr + numSeconds.toString();
		
		eval(time_counter_tag); // "assign" to element

		if (timeTaken == maxTime)
		{
		  gameOver = true;
	      numAttempts = numCorrect + numWrong;
	      doFunction(doneAction);
		}
	  }	
	}	//updateTime


	function startTimer()
	{
	  numSeconds = 0;
	  numMinutes = 0;
	  timerOn = true;
	  timer=setInterval('updateTime()',1000);
	}	//startTimer
	

	function stopTimer()
	{
	  timerOn = false;
	  clearInterval(timer);
	}	//stopTimer
	

	function onComplete()
	{
	 window.status='Done';
	}	//onComplete
	

	function updateProgress(ims)
	{
	 var cnt=0;

	 for(var i = 0; i < ims.length; i++)
	  if(ims[i].complete || ims[i].errored) cnt++;

	 if(ims.length > 0)
	    window.status='Loading ['+Math.round((cnt / imageCount)*100)+'%] ' + progressBar.substring(0, cnt);

	 if(cnt < ims.length)
	 {
	  tempArray = ims;
	  setTimeout("updateProgress(tempArray)",200);
	 }
	 else
	  onComplete();
	}	//updateProgress
	

	function preloadImages()
	{
	 imageCount = matchingPairs.length;

	 this.length = imageCount;

	 for (var i = 0; i < matchingPairs.length; i++)
	 {
	  this[i] = new Image();
	  this[i].errored=false;
	  this[i].onerror=new Function("this["+i+"].errored=true");
	  this[i].src = sourceDir + matchingPairs[i];
	 }
	 updateProgress(this);
	}	//preloadImages


	var lastID="none";
	var lastItem="none";
	var currentID = "";
	var currentItem = "";
	var numVisible = 0;
	var wrongAnswer = false;

	function resetChecked()
	{
	  if (!wrongAnswer) return;
	  wrongAnswer = false;
	  numVisible = 0;
	  eval("document."+currentID+".src = '/cx/img/memorygame/blank.gif';");
	  eval("document."+lastID+".src = '/cx/img/memorygame/blank.gif';");
	  lastID="none";
	  lastItem="none";
	  
	  toggleLayer ('cx_blank');
	  toggleLayer (triviaLayerVis);
	  triviaLayerVis = 'cx_blank';

	}	//resetChecked


	function imgMouseOut()
	{
	  if (numVisible == 2)
	    if ((delay == 0) && (wrongAnswer))
		  resetChecked();
	}	//imgMouseOut
	
	
	function check(boxID)
	{
	  var imgName;
	  	
	  if (numVisible == 2)
	    if (wrongAnswer)
		  resetChecked();
		else
	      return;

	  if ((gameOver) || (boxID == lastID)) return;
	  
	  itemIndex = parseInt(boxID.slice(3, boxID.length));
	  if (checkSolved(randArray[2*itemIndex])) return;
	  	 
	  imgName = randArray[2*itemIndex+1].substring(sourceDir.length + 7);
	  imgName = 'cx_' + imgName.substring(0,imgName.length-4);

	  toggleLayer (imgName);
	  toggleLayer (triviaLayerVis);
	  triviaLayerVis = imgName;
	  

	  if (!timerOn) startTimer();

	  if (numVisible==0)
	  {
	    numVisible = 1;
	    lastID = boxID;
	    itemIndex = parseInt(boxID.slice(3, boxID.length));
	    lastItem = randArray[2*itemIndex];
	    return eval("document."+boxID+".src = '"+randArray[2*itemIndex+1]+"';");
	  }
	  else if (numVisible==1)
	  {
	    numVisible=2;
	    itemIndex = parseInt(boxID.slice(3, boxID.length));
	    eval("document."+boxID+".src = '"+randArray[2*itemIndex+1]+"';");
	    currentID = boxID;
	    currentItem = randArray[2*itemIndex];
	    checkItem2(currentItem);
	  }
	}	//imgMouseOut


	function checkItem2(item)
	{
	  if(lastItem==item)
	  {
	    numVisible=0;
	    wrongAnswer = false;
	    if (!checkSolved(item))
	    {
	      solvedItems[solvedItems.length] = item;
	      numCorrect++;
	    }
	    if (numCorrect >= imageCount/2)
	    {
	      stopTimer();
	      if (doneAction != '')
	      {
	        gameOver = true;
	        numAttempts = numCorrect + numWrong;
	        doFunction(doneAction);
	      }
	    }
	  }
	  else if (lastItem!=item)
	  {
	    numWrong++;
	    wrongAnswer = true;
		if (delay > 0)
	      window.setTimeout("resetChecked()", delay);
	  }
	}	//checkItem2


	function checkSolved(iSolved)
	{
	  found = false;
	  for (var i=0; i < solvedItems.length; i++)
	    if (solvedItems[i] == iSolved)
	      found = true;

	  return found;
	}	//checkSolved


	function resetGame()
	{
		location.reload();
	}	//resetGame

	//Code for document.write in setting up read-only tags
	var before_tagMsg = '<font face="Arial Black, Geneva, Helvetica, sans-serif" size="4" color="#F3D946"><center>';
	var after_tagMsg = '</center></font>';
		
	function setupReadOnlyText(tag_name) {
		//Set up the document.write code for each read-only tag field
		var eval_tag;
		
		if (document.layers) {
			document.write('<ilayer id="' + tag_name + 'NS4message" height=28 width=165><layer id="' +
				tag_name + 'NS4message2" class="mmtimer" height=28 width=165></layer></ilayer>');
				
			eval_tag = 'document.' + tag_name + 'NS4message.document.' + tag_name +
				'NS4message2.document.write(before_tagMsg + textStr + after_tagMsg);' +
				'document.' + tag_name + 'NS4message.document.' + tag_name + 
				'NS4message2.document.close()';
		}
		else if (document.getElementById) {
			document.write(before_tagMsg + '<div id="' + tag_name + 
				'message" style="position:relative; height:28;" class="mmtimer">&nbsp;</div>' + after_tagMsg);
				
			eval_tag = 'document.getElementById("' + tag_name +
				'message").firstChild.nodeValue = textStr;';
		}
		else if (document.all) {
			document.write(before_tagMsg + '<div id="' + tag_name +
				'message" style="position:relative; height:28;" class="mmtimer">&nbsp;</div>' + after_tagMsg);
				
			eval_tag = tag_name + 'message.innerHTML = textStr;';
		}
		
		return eval_tag;
		
	}	//setupReadOnlyText


	function setupOnLoad() {
		//Called in the page's "OnLoad" event
		//used to refresh the read-only display of game's time counter
		var textStr= '0:00';
		eval(time_counter_tag); // "assign" to element
	}	//setupOnLoad

	function finishedGame()
	{
		if(document.forms["frmFinishGame"])
			document.forms["frmFinishGame"].submit();

		//if (timeTaken < maxTime) {			
			//document.forms["frmFinishGame"].submit();		
		//}
	}	//finishedGame
