
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'] = 'Какъв е цвета на полето?';
	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)
{
	
	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'] = 'Открийте правилният ход за белите и го напишете в PGN нотация (примери: e4,Ke1,Re8,Nh6#,Bh7+ или Bxd4)';	
}

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'] = 'Може ли коня да се придвижи от едното до другото поле за ' + moves + ' ход(а)?';
	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'] = 'На един диагонал ли са полетата?';
	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 = 'Задача ' + (quizIndex+1) + ' от ' + 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 = 'Бели фигури: ' + arrayOfQuiz[quizIndex]['stringWhite'];	
			document.getElementById('blackPieces').innerHTML = 'Черни фигури: ' + 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 = 'Ходове:<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] + ' и ' + 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] + ' на ' + 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_correctAnswers + '/' + (quizIndex+1) + ')';
	//quiz_score  + 
}

function resetAllQuiz()
{
	arrayOfQuiz.length=0;
}

function displayMovesStepByStep(moves,moveIndex,tmp_quiz_counter)
{
	if(tmp_quiz_counter!=quiz_counter)return;
	//alert(tmp_quiz_counter + '|' + quiz_counter);
	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 = 'Поздравления! - Правилен отговор';
			}else{
				quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
				document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Съжалявам! Вие дадохте грешен отговор';
			}
			break;
		
		case 'findTheMove':
			addPeicesFromQuiz();
			
			setTimeout('translateAMove("' + arrayOfQuiz[quizIndex]['correctAnswer'] + '",0)',500);
			
			
			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 = 'Поздравления! ' + arrayOfQuiz[quizIndex]['correctAnswer'] +  ' е правилният ход';
			}else{
				quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
				document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Съжалявам - дадохте грешен отговор! Правилният е ' + 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,' + quiz_counter + ')',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 = 'Поздравления! ' + arrayOfQuiz[quizIndex]['correctAnswer'] +  ' е правилният ход';
			}else{
				quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
				document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Съжалявам - дадохте грешен отговор! Правилният е ' + 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 = 'Поздравления! ' + arrayOfQuiz[quizIndex]['square'][0] + ' и ' + arrayOfQuiz[quizIndex]['square'][1] + ' са на един и същ диагонал';
				else
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Поздравления! ' + arrayOfQuiz[quizIndex]['square'][0] + ' и ' + arrayOfQuiz[quizIndex]['square'][1] + ' не са на един и същ диагонал';
					
			}else{
				quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
				if(answer=='yes')
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Съжалявам - дадохте грешен отговор!  ' + arrayOfQuiz[quizIndex]['square'][0] + ' и ' + arrayOfQuiz[quizIndex]['square'][1] + ' не са на един и същ диагонал';
				else
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Съжалявам - дадохте грешен отговор! ' + arrayOfQuiz[quizIndex]['square'][0] + ' и ' + arrayOfQuiz[quizIndex]['square'][1] + ' са на един и същ диагонал';
			}
			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 = 'Правилно! Конят може да се придвижи от ' + arrayOfQuiz[quizIndex]['square'][0] + ' до ' + arrayOfQuiz[quizIndex]['square'][1] + ' за ' + arrayOfQuiz[quizIndex]['numberOfMoves'] + ' ход(а) <br>' + arrayOfQuiz[quizIndex]['path'];
				else
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Правилно! Конят не може да се проидвижи от ' + arrayOfQuiz[quizIndex]['square'][0] + ' до ' + arrayOfQuiz[quizIndex]['square'][1] + ' за ' + arrayOfQuiz[quizIndex]['numberOfMoves'] + ' ход(а)';
					
			}else{
				quiz_score = quiz_score - (arrayOfQuiz[quizIndex]['levelDifficulty'] * 10);
				if(answer=='yes')
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Съжалявам - дадохте грешен отговор! Конят не може да се придвижи от ' + arrayOfQuiz[quizIndex]['square'][0] + ' до ' + arrayOfQuiz[quizIndex]['square'][1] + ' за ' + arrayOfQuiz[quizIndex]['numberOfMoves'] + ' ход(а)';
				else
					document.getElementById('txt_correctOrWrongAnswer').innerHTML = 'Съжалявам - дадохте грешен отговор! Конят може да се придвижи от ' + arrayOfQuiz[quizIndex]['square'][0] + ' до ' + arrayOfQuiz[quizIndex]['square'][1] + ' за ' + arrayOfQuiz[quizIndex]['numberOfMoves'] + ' ход(а) <br>' + arrayOfQuiz[quizIndex]['path'];
			}
			break;	
			
	}
	

	
	
	
	if(quizIndex==arrayOfQuiz.length-1){
		document.getElementById('nextButton').style.display='none';
	}
	updateQuizScore();
}

function addFindNextMoveFromSequence(moves,correctAnswer,levelDifficulty,additionalDescription,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'] = 'Открийте правилният ход за белите и го напишете в PGN нотация (примери: e4,Ke1,Re8,Nh6#,Bh7+ или 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 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();
}
	


