	/************************************************************************************************************
	(C) www.dhtmlgoodies.com, March 2006
	
	This is a script from www.dhtmlgoodies.com. You will find this and a lot of other scripts at our website.	
	
	Terms of use:
	You are free to use this script as long as the copyright message is kept intact. However, you may not
	redistribute, sell or repost it without our permission.
	
	Thank you!
	
	www.dhtmlgoodies.com
	Alf Magne Kalleland
	
	************************************************************************************************************/
		
	var imageFolder = 'images/';
	
	var initShuffleQuestions = true;
	var quiz_moveSpeed = 1000;	// Microseconds between moves when they are animated. (500 = 1/2 second)
	
	var boardPiecesObj = false;
	
	var arrayOfQuiz = new Array();
	
	
	
	var quiz_score = 0;
	var quiz_correctAnswers =0;
	var quiz_seconds = 0;
	
	var square_previousSquare = false;
	var quiz_boardPieces = new Array();
	var quiz_typesOfPieces = ['p','p','p','p','p','p','p','p','R','N','B','Q','K','B','N','R'];
	
	// Preload images
	var imageTypes = ['p','r','n','b','q','k'];
	var preloadedImages = new Array();
	for(var no=0;no<imageTypes.length;no++){
		var index = preloadedImages.length;
		preloadedImages[index] = new Image();	
		preloadedImages[index].src = imageFolder + 'w' + imageTypes[no] + 'b.gif';
		var index = preloadedImages.length;
		preloadedImages[index] = new Image();		
		preloadedImages[index].src = imageFolder + 'b' + imageTypes[no] + 'b.gif';
		var index = preloadedImages.length;
		preloadedImages[index] = new Image();		
		preloadedImages[index].src = imageFolder + 'w' + imageTypes[no] + 'w.gif';
		var index = preloadedImages.length;
		preloadedImages[index] = new Image();		
		preloadedImages[index].src = imageFolder + 'b' + imageTypes[no] + 'w.gif';
	}
	var index = preloadedImages.length;
	preloadedImages[index] = new Image();		
	preloadedImages[index].src = imageFolder + 'board.gif';	
	// End preloading images
	
	
	var div_moveSource = false;
	var div_moveDestination = false;
	
	var quiz_counter = 0;
	
	function baseConverter (number,oldBase,newBase) {
		number = number + "";
		number = number.toUpperCase();
		var list = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		var dec = 0;
		for (var i = 0; i <=  number.length; i++) {
			dec += (list.indexOf(number.charAt(i))) * (Math.pow(oldBase , (number.length - i - 1)));
		}
		number = "";
		var magnitude = Math.floor((Math.log(dec))/(Math.log(newBase)));
		for (var i = magnitude; i >= 0; i--) {
			var amount = Math.floor(dec/Math.pow(newBase,i));
			number = number + list.charAt(amount); 
			dec -= amount*(Math.pow(newBase,i));
		}
		if(number.length==0)number=0;
		return number;
	}
		
	function clearBoard()
	{
		document.getElementById('txt_correctOrWrongAnswer').innerHTML='';
		document.getElementById('txt_additionalDescription').innerHTML='';
		if(!boardPiecesObj){
			boardPiecesObj = document.getElementById('boardPieces');
		}	
		var images = boardPiecesObj.getElementsByTagName('IMG');
		for(var no=images.length;no--;no>=0){
			images[no].parentNode.removeChild(images[no]);
		}	
		quiz_boardPieces = new Array();
		
	}
	
	function addAllPiecesToBoard()
	{
		quiz_boardPieces = new Array();
		for(var no=0;no<2;no++){
			quiz_boardPieces[no] = new Array();
			if(no==0)color='w'; else color='b';
			for(var no2=0;no2<quiz_typesOfPieces.length;no2++){
				quiz_boardPieces[no][no2] = new Array();
				
				var type = quiz_typesOfPieces[no2];
				if(type=='p')type='';
				var file = String.fromCharCode(no2%8+1+96);
				var rank = Math.ceil((no2+1)/8);
					
				if(color=='w'){
					rank = rank==1?2:1;						
				}else{
					rank+=6;
				}
				quiz_boardPieces[no][no2]['obj'] = addPiece(type + file + rank,color);
				quiz_boardPieces[no][no2]['pieceType'] = quiz_typesOfPieces[no2];
				quiz_boardPieces[no][no2]['onboard'] = true;
				quiz_boardPieces[no][no2]['x'] = (no2%8+1);
				quiz_boardPieces[no][no2]['y'] = rank;
			}
		}
		

	}
	
	function doCastle(kingSide,playerIndex)
	{
		
		for(var no=0;no<quiz_boardPieces[playerIndex].length;no++){
			var obj = quiz_boardPieces[playerIndex][no];
			if(obj['pieceType']=='R' && obj['x']==8 && kingSide){
				newPos = 6;
				obj['x']=newPos;
				obj['obj'].style.left = (newPos-1) * 38 + 'px';	
				setPieceBg(obj['obj'],obj['x'],obj['y']);					
			}
			if(obj['pieceType']=='R' && obj['x']==1 && !kingSide){
				newPos = 4;
				obj['x']=newPos;
				obj['obj'].style.left = (newPos-1) * 38 + 'px';	
				setPieceBg(obj['obj'],obj['x'],obj['y']);					
			}
			
			
			if(obj['pieceType']=='K' && obj['x']==5){
				if(kingSide)newPos = 7; else newPos = 3;
				obj['x']=newPos;
				obj['obj'].style.left = (newPos-1) * 38 + 'px';	
				setPieceBg(obj['obj'],obj['x'],obj['y']);					
			}				
		}				
		
	}
	
	function translateAMove(whichMove,playerIndex)
	{
		whichMove = whichMove.replace('#','');
		whichMove = whichMove.replace('+','');
		if(playerIndex==1)otherPlayerIndex = 0; else otherPlayerIndex = 1;
		if(whichMove=='O-O')doCastle(true,playerIndex);
		if(whichMove=='O-O-O')doCastle(false,playerIndex);
		if(whichMove.indexOf('O-O')>=0)return;
		var piecePromotion = false;
		var promoteTo = false;
		whichMove = whichMove.replace('+','');			
		var takeAPiece = whichMove.indexOf('x')>0?true:false;
		

		
		
		
		whichMove = whichMove.replace('x','');
		if(whichMove.indexOf('8=')>=0){
			piecePromotion = true;
			promoteTo = whichMove.replace(/.*?8=([A-Z])/gi,'$1');			
			whichMove = whichMove.replace(/.*?([a-h]8)=[A-Z]/gi,'$1');	
			pieceType = 'p';
		}
		
		var moveTo = whichMove.substr(whichMove.length-2,2);
		if(whichMove.length>2)pieceType = whichMove.substr(0,1);else pieceType = 'p';

		var colToMove = false;
		var rowToMove = false;
		

					
		if(whichMove.length>3){
			var colOrRow = whichMove.substr(1,1);
			if(colOrRow.match(/[a-z]/gi))colToMove = colOrRow; else colToMove = false;
			if(colOrRow.match(/[0-9]/gi))rowToMove = colOrRow; else rowToMove = false;
		
		}
		
		
		if(!pieceType.match(/p|K|N|Q|R|B/)){
			colToMove = pieceType;
			rowToMove = pieceType;
			pieceType = 'p';				
		}

		if(takeAPiece){
			var tmpCol = whichMove.substr(0,1);
			if(tmpCol.match(/[a-h]/g))colToMove = tmpCol;
			
		}
					
		if(colToMove)colToMove = baseConverter(colToMove,16,10) - 9;
		
		var moveToX = baseConverter(moveTo.substr(0,1),16,10) - 9;
		var moveToY = moveTo.substr(1,1);
		var objectToMove = false;
		var objectToRemove = false;
		var pieceToMoveIndex = false;		

		var pawnSpace = 10;
		
		for(var no=0;no<quiz_boardPieces[playerIndex].length;no++){	// Looping through board pieces
			var obj = quiz_boardPieces[playerIndex][no];	// Short reference

			if(!obj['onboard'])continue;
			if(colToMove && colToMove!=obj['x'] && obj['pieceType']!='p'){
				continue;
			}
			if(rowToMove && rowToMove!=obj['y'] && obj['pieceType']!='p'){
				continue;
			}
			
			if(obj['pieceType']==pieceType){	// Piece matched
				
				switch(pieceType){
					
					case "p":	// pawn
						var pawnDirection = playerIndex%2==0?1:-1;
						if(!takeAPiece && obj['x']==moveToX && Math.abs(obj['y']-moveToY)<pawnSpace){
							objectToMove = quiz_boardPieces[playerIndex][no]['obj'];
							pieceToMoveIndex = no;
							pawnSpace = Math.abs(obj['y']-moveToY);
						}

						if(takeAPiece && obj['y'] == moveToY-pawnDirection && (obj['x']==(moveToX-1) || obj['x']==(moveToX+1))){
							objectToMove = quiz_boardPieces[playerIndex][no]['obj'];	
							pieceToMoveIndex = no;
						}
						break;	
					case "N":	// Knight
						var diffX = Math.abs(obj['x'] - moveToX);
						var diffY = Math.abs(obj['y'] - moveToY);
						if((diffX==1 && diffY==2) || (diffX==2 && diffY==1)){
							objectToMove = quiz_boardPieces[playerIndex][no]['obj'];
							pieceToMoveIndex = no;
						}
					
						break;
						
					case "B":
						var diffX = Math.abs(obj['x'] - moveToX);
						var diffY = Math.abs(obj['y'] - moveToY);							
						if(diffX==diffY){
							objectToMove = quiz_boardPieces[playerIndex][no]['obj'];
							pieceToMoveIndex = no;
						}
						break;
					case "R":
						var diffX = Math.abs(obj['x'] - moveToX);
						var diffY = Math.abs(obj['y'] - moveToY);	
								
						if(diffX== 0 || diffY==0){
							var occupied = false;
							if(diffY==0){
								for(var ocNo=Math.min(obj['x']+1,moveToX);ocNo<=Math.max(obj['x']-1,moveToX);ocNo++){
									var tmpObj = getObjectAtPosition(ocNo,moveToY,playerIndex);
									if(tmpObj){
										occupied = true;
										break;
									}
								}
							}								
							if(diffX==0){
								for(var ocNo=Math.min(obj['y']+1,moveToY);ocNo<=Math.max(obj['y']-1,moveToY);ocNo++){
									var tmpObj = getObjectAtPosition(moveToX,ocNo,playerIndex);
									if(tmpObj){
										occupied = true;
										break;
									}										
								}
							}
							if(!occupied){
								objectToMove = quiz_boardPieces[playerIndex][no]['obj'];
								pieceToMoveIndex = no;
							}
						}						
						break;	
					case "Q":	// Queen
						objectToMove = quiz_boardPieces[playerIndex][no]['obj'];
						pieceToMoveIndex = no;
						break;
													
					case "K":
						objectToMove = quiz_boardPieces[playerIndex][no]['obj'];
						pieceToMoveIndex = no;
						break;
				}
			}

			if(objectToMove && pieceType!='p')break;			
		}
		
		if(promoteTo && objectToMove){
			quiz_boardPieces[playerIndex][pieceToMoveIndex]['pieceType'] = promoteTo;
			var img = objectToMove;
			var source = img.src;
			source = source.replace(/\/([wb])p/g,'/$1' + promoteTo.toLowerCase());			
			img.src = source;
			
		}
		
		if(takeAPiece){
			objectToRemove = getObjectAtPosition(moveToX,moveToY,otherPlayerIndex);

		}
		
		function getObjectAtPosition(x,y,playerIndex)
		{
			for(var no=0;no<quiz_boardPieces[playerIndex].length;no++){
				var obj = quiz_boardPieces[playerIndex][no];
				if(obj['onboard'] && obj['x'] == x && obj['y'] == y){
					return quiz_boardPieces[playerIndex][no];
				}		
			}
			
			return false;
			
			
			
		}
		
		
		if(objectToMove){

			div_moveSource.style.display='block';
			div_moveDestination.style.display='block';
			div_moveSource.style.visibility = 'visible';
			div_moveDestination.style.visibility = 'visible';
							
			div_moveSource.style.left = objectToMove.style.left;
			div_moveSource.style.top = (objectToMove.style.top.replace('px','')/1-1) + 'px';
			
			objectToMove.style.left = (moveToX - 1) * 38 + 'px';
			objectToMove.style.top = ((8 - moveToY) * 38) + 'px';				
			
			div_moveDestination.style.left = objectToMove.style.left;
			div_moveDestination.style.top = (objectToMove.style.top.replace('px','')/1-1) + 'px';
						
			setPieceBg(objectToMove,moveToX,moveToY);

			
			quiz_boardPieces[playerIndex][pieceToMoveIndex]['x'] = moveToX;
			quiz_boardPieces[playerIndex][pieceToMoveIndex]['y'] = moveToY;
			
		}
		
		if(objectToRemove){
			objectToRemove['onboard'] = false;
			objectToRemove['obj'].style.display='none';
			
			
		}
		
		
		
	}
			
	function setPieceBg(obj,x,y)
	{
		var blackOrWhiteBg = (x + (y-1*8)) % 2 ;				
		if(blackOrWhiteBg==0)blackOrWhiteBg = 'b'; else blackOrWhiteBg = 'w';
		var img = obj;
		img.src = img.src.replace('w.gif',blackOrWhiteBg + '.gif');
		img.src = img.src.replace('b.gif',blackOrWhiteBg + '.gif');			
		
		
	}
		
	
	function getSquareColorFromNotation(notation) /* Returns 'b' or 'w' = color of square */
	{
		notation = notation.substr(notation.length-2,2);
		var posX = notation.substr(notation.length-2,1);
		posX = posX.charCodeAt(0) - 97;
		var posY = notation.substr(notation.length-1,1);
		var bgColor = ((posY * 9) + posX/1)%2;
		if(bgColor==1)bgColor='b'; else bgColor='w';
		return bgColor;				
	}
	
	function getNumericFromLetter(letter)	/* Example converts A to 1, B to 2, C to 3 */
	{
		return letter.charCodeAt(0) - 96;
		
	}
	
	function toLetter(numeric)
	{
		return String.fromCharCode(numeric + 96);	
	}
	
	function addPiece(notation,color)
	{
		if(!boardPiecesObj){
			boardPiecesObj = document.getElementById('boardPieces');
		}
		var posX = notation.substr(notation.length-2,1);
		posX = posX.charCodeAt(0) - 97;
		var posY = notation.substr(notation.length-1,1);
		var pieceType;
		if(notation.length==2)pieceType='p'; else pieceType= notation.substr(0,1);
		pieceType = pieceType.toLowerCase();
		
		var bgColor = ((posY * 9) + posX/1)%2;
		if(bgColor==1)bgColor='b'; else bgColor='w';
		
		var image = document.createElement('IMG');
		image.src = imageFolder + color + pieceType + bgColor + '.gif';
		image.style.position = 'absolute';
		image.style.left = (posX*38) + 'px';
		image.style.top = (304 - posY*38) + 'px';
		boardPiecesObj.appendChild(image);	
		return image;
	}
	
	function addFindRightColorSquare(numberOfSquares)
	{
		numberOfSquares = 1; 	// Currently only supporting one square
		var indexThis = arrayOfQuiz.length;
		arrayOfQuiz[indexThis] = new Array();
		arrayOfQuiz[indexThis]['quizType'] = 'findColorOfSquare';	
		arrayOfQuiz[indexThis]['numberOfSquares'] = numberOfSquares;	
		arrayOfQuiz[indexThis]['quizDescription'] = 'What\'s the color of this square?';
		arrayOfQuiz[indexThis]['square'] = new Array();
		arrayOfQuiz[indexThis]['levelDifficulty'] = numberOfSquares;
		for(no2=0;no2<numberOfSquares;no2++){
			arrayOfQuiz[indexThis]['square'][no2] = getARandomSquare();
		}
	}
	
	function addFindTheMoveQuiz(stringWhitePieces,stringBlackPieces,correctAnswer,additionalDescription,levelDifficulty,sequenceOfMovesToExplainSolution)
	{
		
		var indexThis = arrayOfQuiz.length;
		arrayOfQuiz[indexThis] = new Array();
		arrayOfQuiz[indexThis]['stringWhite'] = stringWhitePieces;	
		arrayOfQuiz[indexThis]['stringBlack'] = stringBlackPieces;	
		arrayOfQuiz[indexThis]['correctAnswer'] = correctAnswer;	
		arrayOfQuiz[indexThis]['quizType'] = 'findTheMove';	
		arrayOfQuiz[indexThis]['additionalDescription'] = additionalDescription;	
		arrayOfQuiz[indexThis]['levelDifficulty'] = levelDifficulty;	
		arrayOfQuiz[indexThis]['quizDescription'] = 'Find the correct move for white and type in the notation(examples: e4,Ke1,Re8,Nh6#,Bh7+ or Bxd4)';	
		arrayOfQuiz[indexThis]['movesSolution'] = sequenceOfMovesToExplainSolution;	
	}
	
	function addFindNextMoveFromSequence(moves,correctAnswer,levelDifficulty,additionalDescription,sequenceOfMovesToExplainSolution)
	{
		if(!sequenceOfMovesToExplainSolution)sequenceOfMovesToExplainSolution='';
		var indexThis = arrayOfQuiz.length;
		arrayOfQuiz[indexThis] = new Array();
		
		arrayOfQuiz[indexThis]['moves'] = moves;	
		arrayOfQuiz[indexThis]['correctAnswer'] = correctAnswer;	
		arrayOfQuiz[indexThis]['quizType'] = 'findTheMoveFromSequence';	
		arrayOfQuiz[indexThis]['additionalDescription'] = additionalDescription;	
		arrayOfQuiz[indexThis]['levelDifficulty'] = levelDifficulty;	
		if(!sequenceOfMovesToExplainSolution)sequenceOfMovesToExplainSolution='';
		arrayOfQuiz[indexThis]['movesSolution'] = sequenceOfMovesToExplainSolution;	
		arrayOfQuiz[indexThis]['quizDescription'] = 'Find the correct next move for white and type in the notation(examples: e4,Ke1,Re8,Nh6#,Bh7+ or Bxd4)';	
	
		var displayedMoves = '';
		var moveItems = moves.split(',');
		for(var no=0;no<moveItems.length;no++){
			if(no>0 && no%2==0)displayedMoves = displayedMoves + '<br>';
			if(no%2==0)displayedMoves = displayedMoves + Math.ceil((no+1)/2) + '. ';
			displayedMoves = displayedMoves + moveItems[no] + " ";
			
		}		
		arrayOfQuiz[indexThis]['displayedMoves'] = displayedMoves;


			
	}

	
	function isOnSameDiagonal(square1,square2)
	{
		
		var xPos1 = getNumericFromLetter(square1.substr(0,1))/1;
		var yPos1 = square1.substr(1,1)/1;	
		var xPos2 = getNumericFromLetter(square2.substr(0,1))/1;
		var yPos2 = square2.substr(1,1)/1;		
		
		var diffX = Math.abs(xPos1 - xPos2);
		var diffY = Math.abs(yPos1 - yPos2);
		
		return diffX==diffY?true:false;	
	}
	
	function isAKnightMove(square1,square2,moves)
	{
		var xPos1 = getNumericFromLetter(square1.substr(0,1))/1;
		var yPos1 = square1.substr(1,1)/1;	
		var xPos2 = getNumericFromLetter(square2.substr(0,1))/1;
		var yPos2 = square2.substr(1,1)/1;		
		
		var diffX = Math.abs(xPos1 - xPos2);
		var diffY = Math.abs(yPos1 - yPos2);

		var max = Math.max(diffX,diffY);
		var min = Math.min(diffX,diffY);
		if(moves==1){
			if(max==2 && min==1)return true; 
			return false;	
		}
		if(moves==2){
			if(max==1 && min==1)return true;
			if(max==4 && (min==0 || min==2))return true;
			if(min==3 && max==3)return true;
			if(min==1 && max==3)return true;
			if(min==0 && max==2)return true;
			if(min==0 && max==0)return true;
			return false;	
		}	
	}
	
	var knightCounter = 0;
	function findAKnightMoveSquare(square,moves)
	{
		if(moves)knightCounter=0;
		knightCounter++;
		var xPos = getNumericFromLetter(square.substr(0,1))/1;
		var yPos = square.substr(1,1)/1;	
		

		var diffX = Math.random()>=0.5?2:1;
		var diffY = diffX==2?1:2;
		
		if(Math.random()>=0.5)diffX*=-1;
		if(Math.random()>=0.5)diffY*=-1;
			
		var file = xPos + diffX;
		var rank = yPos + diffY;
		
		if(file>8 || file<1)file=xPos-diffX;
		if(rank>8 || rank<1)rank=yPos-diffY;
		
		var newPos = toLetter(file)+rank;

		if(moves==2){
			var tmpNewPos = newPos;
			newPos2=findAKnightMoveSquare(newPos,false);
			while(knightCounter<10 && newPos2==square)newPos2 = findAKnightMoveSquare(newPos,false);
			
			var indexThis = arrayOfQuiz.length-1;
			arrayOfQuiz[indexThis]['path'] = '<p class="knightMovePath">1. N' + square + '-' + tmpNewPos + '<br>2. N' + tmpNewPos + '-'  + newPos2 + '</p>';
			return newPos2;
			
		}else{
			var indexThis = arrayOfQuiz.length-1;
			if(moves==1)arrayOfQuiz[indexThis]['path'] = '<p class="knightMovePath">1. N' + square + '-' + newPos;
			return newPos;
			
		}
	}
	
	function addFindKnightMove(moves)
	{
		
		var indexThis = arrayOfQuiz.length;
		arrayOfQuiz[indexThis] = new Array();
		var isItAKnightMove = Math.random()>=0.5?true:false;
		
		if(isItAKnightMove){
			square1 = getARandomSquare();
			square2 = findAKnightMoveSquare(square1,moves);
		}else{
			square1 = getARandomSquare();
			square2 = getARandomSquare();
			while(isAKnightMove(square1,square2,moves))square2 = getARandomSquare();
			arrayOfQuiz[indexThis]['path'] = '';
		}
		arrayOfQuiz[indexThis]['quizType'] = 'findKnightMove';
		arrayOfQuiz[indexThis]['square'] = new Array();
		arrayOfQuiz[indexThis]['square'][0] = square1;
		arrayOfQuiz[indexThis]['square'][1] = square2;		
		arrayOfQuiz[indexThis]['correctAnswer'] = isItAKnightMove?'yes':'no';
		arrayOfQuiz[indexThis]['quizDescription'] = 'Can a knight move from the first to the second square in ' + moves + ' move(s)?';
		arrayOfQuiz[indexThis]['levelDifficulty'] = 2 * moves ;	
		arrayOfQuiz[indexThis]['numberOfMoves'] = moves;	
	}
	
	function addFindSameDiagonal()
	{
		var indexThis = arrayOfQuiz.length;
		arrayOfQuiz[indexThis] = new Array();
		var onSameDiagonal = Math.random()>0.5?true:false;
		
		if(onSameDiagonal){			
			square1 = getARandomSquare();
			square2 = getASquareOnSameDiagonal(square1);
		}else{
			square1 = getARandomSquare();
			square2 = getARandomSquare();
			while(isOnSameDiagonal(square1,square2))square2 = getARandomSquare();
		}
		arrayOfQuiz[indexThis]['quizType'] = 'findSameDiagonal';
		arrayOfQuiz[indexThis]['square'] = new Array();
		arrayOfQuiz[indexThis]['square'][0] = square1;
		arrayOfQuiz[indexThis]['square'][1] = square2;
		arrayOfQuiz[indexThis]['correctAnswer'] = onSameDiagonal?'yes':'no';
		arrayOfQuiz[indexThis]['quizDescription'] = 'Are these two squares on the same diagonal?';
		arrayOfQuiz[indexThis]['levelDifficulty'] = '2';
		
	}
	
	function getASquareOnSameDiagonal(inputSquare)
	{		
		var xPos = getNumericFromLetter(inputSquare.substr(0,1))/1;
		var yPos = inputSquare.substr(1,1)/1;
		var offset = Math.floor(Math.random()*8);
		var file = Math.random()>0.5? xPos + offset:xPos-offset;
		var rank = Math.random()>0.5? yPos + offset:yPos-offset;
		var newPos = toLetter(file)+rank;
		if(file>8 || rank > 8 || file<1 || rank<1 || newPos==inputSquare)return getASquareOnSameDiagonal(inputSquare);
		return newPos;
	}	
	
	function getARandomSquare()
	{
		var rank = Math.floor(Math.random()*8) + 1;
		var file = String.fromCharCode(Math.floor(Math.random()*8) + 97);
		if(file+rank==square_previousSquare)return getARandomSquare();
		square_previousSquare = file+rank;
		return file + rank;
		
	}
	
	function clearQuestionDiv()
	{
		document.getElementById('whitePieces').style.display='none';	
		document.getElementById('blackPieces').style.display='none';	
		document.getElementById('squareTxt').style.display='none';	
		document.getElementById('whiteButton').style.display='none';	
		document.getElementById('blackButton').style.display='none';	
		document.getElementById('yesButton').style.display='none';	
		document.getElementById('noButton').style.display='none';	
		document.getElementById('moveInput').style.display='none';	
		document.getElementById('moveInput').value='';	
		document.getElementById('okButton').style.display='none';	
		document.getElementById('nextButton').style.display='none';	
		document.getElementById('txt_correctOrWrongAnswer').style.display='none';	
		document.getElementById('txt_additionalDescription').innerHTML='';
	}
	
	var quizIndex = false;
	var quizIntervalSet = false;
	
	function shuffleQuestions()
	{
		for(var no2=0;no2<arrayOfQuiz.length;no2++){
			var index1 = Math.floor(Math.random()*arrayOfQuiz.length);
			var index2 = Math.floor(Math.random()*arrayOfQuiz.length);
			if(index1!=index2){
				var tmpQuestion = arrayOfQuiz[index1];
				arrayOfQuiz[index1] = arrayOfQuiz[index2];
				arrayOfQuiz[index2] = tmpQuestion;
			}			
		}
	}
	
	function startQuiz()
	{		
		quiz_counter = quiz_counter + 1;
		if(!div_moveSource){
			div_moveSource = document.createElement('DIV');
			div_moveSource.className = 'moveIndicator';
			
			
			div_moveDestination = document.createElement('DIV');
			div_moveDestination.className = 'moveIndicator';
			document.getElementById('boardPieces').appendChild(div_moveSource);
			document.getElementById('boardPieces').appendChild(div_moveDestination);
		}

			
		div_moveSource.style.display='none';
		div_moveDestination.style.display='none';
				

		
		quiz_score = 0;
		quiz_seconds = 0;
		quiz_correctAnswers = 0;	
		if(!quizIntervalSet){
			setInterval('showSeconds()',1000);
			quizIntervalSet=true;
		}
		quizIndex = -1;
		if(initShuffleQuestions){
			shuffleQuestions();
		}
		updateQuizScore();
		showQuizItem();
	}
	
	function showQuizItem()
	{
		clearQuestionDiv();		
		quizIndex++;
		initSeconds();
		document.getElementById('whichQuestion').innerHTML = 'Question ' + (quizIndex+1) + ' of ' + arrayOfQuiz.length;
		document.getElementById('theBoard').style.display='none';
		div_moveSource.style.display='none';
		div_moveDestination.style.display='none';
		document.getElementById('quizText').style.display='block';
				
		document.getElementById('quizDescription').innerHTML = arrayOfQuiz[quizIndex]['quizDescription'];
		
		switch(arrayOfQuiz[quizIndex]['quizType']){
			case 'findColorOfSquare':
				document.getElementById('whiteButton').style.display='inline';	
				document.getElementById('blackButton').style.display='inline';				
				document.getElementById('squareTxt').style.display='block';				
				document.getElementById('squareTxt').innerHTML = arrayOfQuiz[quizIndex]['square'][0];
				break;	
			case 'findTheMove':
				document.getElementById('whitePieces').style.display='block';
				document.getElementById('blackPieces').style.display='block';
				document.getElementById('whitePieces').innerHTML = 'White pieces: ' + arrayOfQuiz[quizIndex]['stringWhite'];	
				document.getElementById('blackPieces').innerHTML = 'Black pieces: ' + arrayOfQuiz[quizIndex]['stringBlack'];	
				document.getElementById('moveInput').style.display='inline';	
				document.getElementById('okButton').style.display='inline';	
				break;
			case 'findTheMoveFromSequence':
				document.getElementById('whitePieces').style.display='block';
				document.getElementById('blackPieces').style.display='none';
				document.getElementById('whitePieces').innerHTML = 'Moves:<br>' + arrayOfQuiz[quizIndex]['displayedMoves'];	
				document.getElementById('moveInput').style.display='inline';	
				document.getElementById('okButton').style.display='inline';	
				break;
			case 'findSameDiagonal':
				document.getElementById('yesButton').style.display='inline';	
				document.getElementById('noButton').style.display='inline';	
				document.getElementById('squareTxt').style.display='block';	
				document.getElementById('squareTxt').innerHTML = arrayOfQuiz[quizIndex]['square'][0] + ' and ' + arrayOfQuiz[quizIndex]['square'][1];			
				break;
			case 'findKnightMove':
				document.getElementById('yesButton').style.display='inline';	
				document.getElementById('noButton').style.display='inline';	
				document.getElementById('squareTxt').style.display='block';	
				document.getElementById('squareTxt').innerHTML = arrayOfQuiz[quizIndex]['square'][0] + ' to ' + arrayOfQuiz[quizIndex]['square'][1];			
				break;
			
			
		}		
	}
	
	function addPeicesFromQuiz()
	{
		var items = arrayOfQuiz[quizIndex]['stringWhite'].split(',');	

		quiz_boardPieces = new Array();
		
		quiz_boardPieces[0] = new Array();	
		for(var no=0;no<items.length;no++){	
			var pieceType = items[no].substr(0,1);
			if(!pieceType.match(/p|K|N|Q|R|B|K/))pieceType='p';	
			var position = getXYFromNotation(items[no]);
			var file = (position[0]/38) + 1;
			var rank = 8 - (position[1]/38);
								
			quiz_boardPieces[0][no] = new Array();
			quiz_boardPieces[0][no]['obj'] = addPiece(items[no],'w');;
			quiz_boardPieces[0][no]['pieceType'] = pieceType;
			quiz_boardPieces[0][no]['onboard'] = true;
			quiz_boardPieces[0][no]['x'] = file;
			quiz_boardPieces[0][no]['y'] = rank;
				
							
		}
		quiz_boardPieces[1] = new Array();	
		items = arrayOfQuiz[quizIndex]['stringBlack'].split(',');			
		for(var no=0;no<items.length;no++){
			var pieceType = items[no].substr(0,1);
			if(!pieceType.match(/p|K|N|Q|R|B|K/))pieceType='p';				
			var position = getXYFromNotation(items[no]);
			var file = (position[0]/38) + 1;
			var rank = 8 - (position[1]/38);
				
			quiz_boardPieces[1][no] = new Array();
			quiz_boardPieces[1][no]['obj'] = addPiece(items[no],'b');;
			quiz_boardPieces[1][no]['pieceType'] = pieceType;
			quiz_boardPieces[1][no]['onboard'] = true;
			quiz_boardPieces[1][no]['x'] = file;
			quiz_boardPieces[1][no]['y'] = rank;
		}		
	}
	
	function getXYFromNotation(notation)
	{
		notation = notation.substr(notation.length-2,2);
		var posX = notation.substr(notation.length-2,1);
		posX = posX.charCodeAt(0) - 97;
		var posY = notation.substr(notation.length-1,1);

		return Array(posX*38,304-posY*38);	
		
	}
	
	function addStarAtNotation(notation)
	{
		var pos = getXYFromNotation(notation);
		var img = document.createElement('IMG');
		var color = getSquareColorFromNotation(notation);
		img.src = imageFolder + 'star_' + color + '.gif';
		img.style.left = pos[0] + 'px';
		img.style.position = 'absolute';
		img.style.top = pos[1] + 'px';
		boardPiecesObj.appendChild(img);		
		
		
	}
	
	var questionInProgress = false;
	var secondsOnTask;
	
	function initSeconds()
	{
		secondsOnTask = 30 * arrayOfQuiz[quizIndex]['levelDifficulty'];		
		document.getElementById('quizSeconds').innerHTML = secondsOnTask;
		questionInProgress = true;	
	}
	
	function showSeconds()
	{
		if(questionInProgress){
			secondsOnTask = secondsOnTask - 1;
			if(secondsOnTask<0){
				secondsOnTask=0;
				answerQuiz('false');
			}
			document.getElementById('quizSeconds').innerHTML = secondsOnTask;
		}
		
	}
	
	function updateQuizScore()
	{
		document.getElementById('quizScore').innerHTML = quiz_score  + ' (' + quiz_correctAnswers + '/' + (quizIndex+1) + ')';			
	}
	
	function resetAllQuiz()
	{
		arrayOfQuiz.length=0;
	}
	
	function displayMovesStepByStep(moves,moveIndex,tmp_quiz_counter)
	{
		if(tmp_quiz_counter!=quizIndex)return;
		var arrayOfMoves = moves.split(/,/g);
		translateAMove(arrayOfMoves[moveIndex],moveIndex%2);		
		if(moveIndex<arrayOfMoves.length-1){
			setTimeout('displayMovesStepByStep("' + moves + '",' + (moveIndex+1) + ',' + tmp_quiz_counter + ')',quiz_moveSpeed);	
		}else{
			if(quizIndex<arrayOfQuiz.length-1)document.getElementById('nextButton').style.display='block';
		
		}
		
	}
	
	function answerQuiz(answer)
	{
		answer = answer.replace(/\s/gi,'');
		questionInProgress = false;
		clearBoard();
		document.getElementById('theBoard').style.display='block';
		document.getElementById('quizText').style.display='none';
		document.getElementById('nextButton').style.display='block';	
		document.getElementById('txt_correctOrWrongAnswer').style.display='block';	
		
		div_moveSource.style.display='none';
		div_moveDestination.style.display='none';
		div_moveSource.style.visibility = 'hidden';
		div_moveDestination.style.visibility = 'hidden';
		
		switch(arrayOfQuiz[quizIndex]['quizType']){
			case 'findColorOfSquare':
				addStarAtNotation(arrayOfQuiz[quizIndex]['square'][0]);
				var color = getSquareColorFromNotation(arrayOfQuiz[quizIndex]['square'][0]);
				if(color == answer){
					quiz_score = quiz_score + secondsOnTask;
					quiz_correctAnswers++;
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Good job! - Your answer is correct';
				}else{
					// quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
					quiz_score = quiz_score - 100;
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Sorry, wrong answer';
				}
				break;
			
			case 'findTheMove':
				addPeicesFromQuiz();
				
				//setTimeout('translateAMove("' + arrayOfQuiz[quizIndex]['correctAnswer'] + '",0)',500);
	
				var moveAddition = arrayOfQuiz[quizIndex]['correctAnswer'];
				if(arrayOfQuiz[quizIndex]['movesSolution'] && arrayOfQuiz[quizIndex]['movesSolution'].length>0 && arrayOfQuiz[quizIndex]['movesSolution']!='undefined')moveAddition = moveAddition + ',' + arrayOfQuiz[quizIndex]['movesSolution'];
				
				setTimeout('displayMovesStepByStep("' + moveAddition + '",0,' + quizIndex + ')',300);
							
				var answerFixed = answer.replace(/#|\+/g,'');
				answerFixed = answerFixed.toLowerCase()
				
				var correctAnswer = arrayOfQuiz[quizIndex]['correctAnswer'].replace(/#|\+/g,'');
				correctAnswer = correctAnswer.toLowerCase()
				
				if(answerFixed==correctAnswer){
					quiz_score = quiz_score + secondsOnTask;
					quiz_correctAnswers++;
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Good job! ' + arrayOfQuiz[quizIndex]['correctAnswer'] +  ' is the correct move';
				}else{
					quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Sorry, wrong answer - the correct move is ' + arrayOfQuiz[quizIndex]['correctAnswer'];
				}
				document.getElementById('txt_additionalDescription').innerHTML = arrayOfQuiz[quizIndex]['additionalDescription'];
				break;
			case 'findTheMoveFromSequence':
				document.getElementById('nextButton').style.display='none';	
				addAllPiecesToBoard();
				var moveAddition = arrayOfQuiz[quizIndex]['correctAnswer'];
				if(arrayOfQuiz[quizIndex]['movesSolution'].length>0 && arrayOfQuiz[quizIndex]['movesSolution']!='undefined')moveAddition = arrayOfQuiz[quizIndex]['movesSolution'];

				
				setTimeout('displayMovesStepByStep("' + arrayOfQuiz[quizIndex]['moves'] + ',' + moveAddition + '",0,' + quizIndex + ')',300);
				
				var answerFixed = answer.replace(/#|\+/g,'');
				answerFixed = answerFixed.toLowerCase()
				
				var correctAnswer = arrayOfQuiz[quizIndex]['correctAnswer'].replace(/#|\+/g,'');
				correctAnswer = correctAnswer.toLowerCase()
								
				if(answerFixed==correctAnswer){
					quiz_score = quiz_score + secondsOnTask;
					quiz_correctAnswers++;
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Good job! ' + arrayOfQuiz[quizIndex]['correctAnswer'] +  ' is the correct move';
				}else{
					quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Sorry, wrong answer - the correct move is ' + arrayOfQuiz[quizIndex]['correctAnswer'];
				}
				var noMoves = arrayOfQuiz[quizIndex]['displayedMoves'].split('.');
				var nextMove = noMoves.length;
				document.getElementById('txt_additionalDescription').innerHTML = arrayOfQuiz[quizIndex]['additionalDescription'] + '<br><br>' + arrayOfQuiz[quizIndex]['displayedMoves'] + '<br>' + nextMove + '. ' + arrayOfQuiz[quizIndex]['correctAnswer'] ;
				break;
			case 'findSameDiagonal':
				addStarAtNotation(arrayOfQuiz[quizIndex]['square'][0]);
				addStarAtNotation(arrayOfQuiz[quizIndex]['square'][1]);
				if(answer.toLowerCase()==arrayOfQuiz[quizIndex]['correctAnswer'].toLowerCase()){
					quiz_score = quiz_score + secondsOnTask;
					quiz_correctAnswers++;
					if(answer=='yes')
						document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Good job! ' + arrayOfQuiz[quizIndex]['square'][0] + ' and ' + arrayOfQuiz[quizIndex]['square'][1] + ' are on the same diagonal';
					else
						document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Good job! ' + arrayOfQuiz[quizIndex]['square'][0] + ' and ' + arrayOfQuiz[quizIndex]['square'][1] + ' are not on the same diagonal';
						
				}else{
					quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
					if(answer=='yes')
						document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Sorry, wrong answer -  ' + arrayOfQuiz[quizIndex]['square'][0] + ' and ' + arrayOfQuiz[quizIndex]['square'][1] + ' are not on the same diagonal';
					else
						document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Sorry, wrong answer -  ' + arrayOfQuiz[quizIndex]['square'][0] + ' and ' + arrayOfQuiz[quizIndex]['square'][1] + ' are on the same diagonal';
				}
				break;	
			case 'findKnightMove':
				addStarAtNotation(arrayOfQuiz[quizIndex]['square'][0]);
				addStarAtNotation(arrayOfQuiz[quizIndex]['square'][1]);
				if(answer.toLowerCase()==arrayOfQuiz[quizIndex]['correctAnswer'].toLowerCase()){
					quiz_score = quiz_score + secondsOnTask;
					quiz_correctAnswers++;
					if(answer=='yes')
						document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Good job! A Knight can move from ' + arrayOfQuiz[quizIndex]['square'][0] + ' to ' + arrayOfQuiz[quizIndex]['square'][1] + ' in ' + arrayOfQuiz[quizIndex]['numberOfMoves'] + ' move(s) <br>' + arrayOfQuiz[quizIndex]['path'];
					else
						document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Good job! A Knight can not move from ' + arrayOfQuiz[quizIndex]['square'][0] + ' to ' + arrayOfQuiz[quizIndex]['square'][1] + ' in ' + arrayOfQuiz[quizIndex]['numberOfMoves'] + ' move(s)';
						
				}else{
					quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
					if(answer=='yes')
						document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Sorry, wrong answer -  A Knight can not move from ' + arrayOfQuiz[quizIndex]['square'][0] + ' to ' + arrayOfQuiz[quizIndex]['square'][1] + ' in ' + arrayOfQuiz[quizIndex]['numberOfMoves'] + ' move(s)';
					else
						document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Sorry, wrong answer -  A Knight can move from ' + arrayOfQuiz[quizIndex]['square'][0] + ' to ' + arrayOfQuiz[quizIndex]['square'][1] + ' in ' + arrayOfQuiz[quizIndex]['numberOfMoves'] + ' move(s) <br>' + arrayOfQuiz[quizIndex]['path'];
				}
				break;	
				
		}
		
	
		
		
		
		if(quizIndex==arrayOfQuiz.length-1){
			document.getElementById('nextButton').style.display='none';
		}
		updateQuizScore();
	}
	

		
	function selectQuiz_mixture()
	{
		resetAllQuiz();
		addCustomQuiz_sequence();
		addCustomQuiz();
		
		for(no=0;no<10;no++){
			addFindRightColorSquare(1);	// Add 10 "find the right color" puzzles
		}	
		for(no=0;no<10;no++){
			addFindSameDiagonal();	// Add 10 "is on the same diagonal" puzzles
		}	
		for(no=0;no<5;no++){
			addFindKnightMove(1);	// Add 5 "is on the same diagonal" puzzles
		}
		for(no=0;no<5;no++){
			addFindKnightMove(2);	// Add 5 "is on the same diagonal" puzzles
		}
		startQuiz();
					
	}
	
	
	function selectQuiz_squares()
	{
		resetAllQuiz();
		for(no=0;no<50;no++){
			addFindRightColorSquare(1);	// Add 10 "find the right color" puzzles
		}		
		startQuiz();
		
	}
	
	function selectQuiz_diagonals()
	{
		resetAllQuiz();
		for(no=0;no<50;no++){
			addFindSameDiagonal();	// Add 10 "is on the same diagonal" puzzles
		}			
		startQuiz();
	}
	
	function selectQuiz_findTheMove()
	{
		resetAllQuiz();
		addCustomQuiz();
		startQuiz();
	}
	
	function selectQuiz_findTheMove_sequence()
	{
		resetAllQuiz();
		addCustomQuiz_sequence();
		startQuiz();
	}
	
	
	
	function selectQuiz_findKnightMove(moves)
	{
		resetAllQuiz();
		for(no=0;no<50;no++){
			addFindKnightMove(moves);	// Add 10 "find the right color" puzzles
		}		
		startQuiz();
	}
		
	
	