/* SCRABBLE */

function checkDropedInDiv(div, ev, margin) {
	if(dragObject == null) return false;
	
    // get offsets
    //mouseOffsetCont = getMouseOffset($(div), ev);
    //mouseOffsetDragObject = getMouseOffset(dragObject, ev);
    
    // get position
    var contPos = getPosition($(div));
    var dragObjectPos = getPosition(dragObject);
    
    // get dimentions
    var contDim = getElementDimentionsById(div);
    var dragObjectDim = getElementDimentionsById(dragObject);
    
    var contTop = contPos.y;
    var contRight = contPos.x + contDim.width;
    var contBottom = contPos.y + contDim.height;
    var contLeft = contPos.x;
    
    if(!margin) {
        var dragCenterX = dragObjectPos.x + dragObjectDim.width / 2;
        var dragCenterY = dragObjectPos.y + dragObjectDim.height / 2;
    }
    
    if(dragCenterX >= contLeft && dragCenterX <= contRight && dragCenterY >= contTop && dragCenterY <= contBottom)
        return true;
    
    return false;
}

// премахва плочка от масива с плочки за заменяне
var dropExchange = false;
function dropExchangePlate() {
	var stepBackKey = null;
	
	if(dropExchange) return false;
	
	dropExchange = true;
	
	for(var k in droppedExchangeObjects) {
		if(droppedExchangeObjects[k].id == dragObject.id) {
			droppedExchangeObjects.splice(k, 1);
			stepBackKey = k;
			break;
		}
	}
	
	for(var k in droppedExchangeObjects) {
		if(stepBackKey <= k) {
			droppedExchangeObjects[(parseInt(k) - 1)] = droppedExchangeObjects[parseInt(k)];
			droppedExchangeObjects[(parseInt(k) - 1)].style.left = (parseInt(droppedExchangeObjects[(parseInt(k) - 1)].style.left) - spotSize)+'px';
		}
	}
}

// return plate in user cont
function dropPlateDefault() {
    dragObject.style.position = null;
    dragObject.style.left = null;
    dragObject.style.top = null;
	
	// премахва обекта от масива за смяна, ако е в него
	dropExchangePlate();
}

// match drop plate position with land field position
function dropPlateOnLand(landObj) {
    var offsetX = 2;
    var offsetY = 2;
    var landPos = getPosition(landObj);
    var contPos = getPosition($(dragContainerId));
    
    dragObject.style.left = (landPos.x - contPos.x + offsetX)+'px';
    dragObject.style.top = (landPos.y - contPos.y + offsetY)+'px';
    landObj.inField = dragObject.drop;
}

// play will currently writen word
function playWord() {
    // determinate if word is horizontal or vertical
    var result = '';
    var wordDim = 'auto';
    var startRow = 0;
    var startCol = 0;
    var dim = new Array();
    for(i in droppedObjects) {
        dim = droppedObjects[i].split('x');
		
        if(i == 0) {
            if(!startRow)
                startRow = dim[1];
            if(!startCol)
                startCol = dim[0];
        } else {
            if(wordDim == null || wordDim == 'auto') {
                if(startRow == dim[1])
                    wordDim = 'horizontal';
                else if(startCol == dim[0])
                    wordDim = 'vertical';
                else
                    wordDim = null;
            } else {
                if(wordDim == 'horizontal') {
                    if(startRow != dim[1])
                        wordDim = null;
                } else if(wordDim == 'vertical') {
                    if(startCol != dim[0])
                        wordDim = null;
                }
                
                if(wordDim == null)
                    break;
            }
        }
    }
    
    if(wordDim != null) {
        var forRemove = new Array();
        var letter = '';
        $('word_direction').value = wordDim;
        parent = $('submit_word_frm');
        parent.action = '_sender.php?scrabble=check_word';
        
        for(i in droppedObjects) {
            letter = '';
            childs = $($(droppedObjects[i]).inField).childNodes;
			
            for(j in childs)
                if(childs[j].tagName == 'STRONG')
                    letter = childs[j].innerHTML;
            
            newInput = document.createElement('INPUT');
            newInput.setAttribute('type', 'hidden');
            newInput.setAttribute('name', 'letter_'+droppedObjects[i]);
            newInput.setAttribute('value', letter);
            parent.appendChild(newInput);
            
            forRemove[forRemove.length] = newInput;
        }
        
        sendRequest(parent, 'scrabble_cont', 'reloadScrabble();', '', true);
		
		droppedObjects = new Array();
        
        // remove unnecessery childs
        parent.action = '';
        for(i in forRemove)
            parent.removeChild(forRemove[i]);
    }
}

// презарежда игралното поле
function reloadScrabble() {
    if($('reload').value) {
        droppedObjects = new Array();
        insert_code('_sender.php?scrabble=reload', 'scrabble_cont');
    }
}

// изчиства дъската
function clearBoard() {
	insert_code('_sender.php?scrabble=clear', 'scrabble_cont');
}

// изпраща съобщение в чата
function sendChat() {
    if($('chat_message').value == '') return false;
    
    form = $('chat_frm');
    form.action = '_sender.php?scrabble=chat';
    
    sendRequest(form, '', 'periodicChatReload('+true+', '+true+');');
    $('chat_message').value = '';
}

// периодично презарежда чата
var clearChatTimeout = 0;
function periodicChatReload(start, once) {
    period = 2; // време за опресняване в секунди
    
    if(start != null && $('chat_cont') != null)
        insert_code('_sender.php?scrabble=chat_reload', 'chat_cont'); // , 'scrollToBottom();'
    
    if(once == null) {
		clearTimeout(clearChatTimeout);
        clearChatTimeout = setTimeout('periodicChatReload('+true+')', period * 1000);
    }
}

// скролира до дъното на чата
function scrollToBottom() {
    $('chat_messages_list').scrollTop = $('chat_messages_list').scrollHeight;
}

// създава нова игра
function createNewScrabbleGame() {
    form = $('new_game_frm');
    form.action = '_sender.php?scrabble=create_game';
    
	first = false;
    sendRequest(form, '', 'reloadGamesList('+true+', '+true+'); periodicChatReload('+true+', '+true+'); reloadGamePlayersList('+true+');');
}

// вкарва играча в играта
function joinScrabbleGame(gameId) {
	first = false;
    insert_code('_sender.php?scrabble=join_in_game&game_id='+gameId, '', 'reloadGamesList('+true+', '+true+'); reloadGamePlayersList('+true+');');
}

// потвърждава, че играча ще играе
function confirmPlay(confirm) {
	var stat = 'yes';
	
	if(!confirm)
		stat = 'no';
	
	insert_code('_sender.php?scrabble=confirm_play&confirm='+stat, '', 'reloadGamePlayersList('+true+', '+true+');');
}

// премахва играч от играта - само създателя на играта може да го ползва
function dropUser(userId) {
	insert_code('_sender.php?scrabble=drop_user&user_id='+userId, '', 'reloadGamePlayersList('+true+', '+true+');');
}

// изтрива играта
function deleteScrabbleGame() {
    insert_code('_sender.php?scrabble=delete_game', 'games_list', 'periodicChatReload('+true+', '+true+'); reloadGamePlayersList('+true+');');
}

// потребителя излиза от играта
function disconnectScrabbleGame() {
	insert_code('_sender.php?scrabble=disconnect', '', 'reloadGamesList('+true+', '+true+'); periodicChatReload('+true+', '+true+'); loadNewGameForm();');
}

// презарежда списъка с играчите в играта
var reloadGamePlayersListTimeoutId = 0
var first = true;
function reloadGamePlayersList(start, once) {
    period = 5; // време за опресняване в секунди
	
	if($('confirmation') != null) {
		if($('confirmation').innerHTML == 'begin') {
			startGame();
			return false;
		}
	}
    
    if(start != null && $('create_new_game') != null)
        insert_code('_sender.php?scrabble=reload_game_players', 'create_new_game');
        
    if(once == null) {
		if($('game_users_list') == null) {
			if(first) {
				clearTimeout(reloadGamePlayersListTimeoutId);
				first = false;
				return false;
			} else
				reloadGamePlayersListTimeoutId = setTimeout('reloadGamePlayersList('+true+')', period * 1000);
		} else {
			first = true;
			reloadGamePlayersListTimeoutId = setTimeout('reloadGamePlayersList('+true+')', period * 1000);
		}
	}
}

// зарежда формата за нова игра
function loadNewGameForm() {
    insert_code('_sender.php?scrabble=new_game_form', 'create_new_game');
}

// презарежда списъка със създадените игри
var clearGamesListTimeoutId = 0;
function reloadGamesList(start, once) {
    period = 5; // време за опресняване в секунди
	
	if(exitGame) return false;
    
    if(start != null && $('games_list') != null)
        insert_code('_sender.php?scrabble=reload_games', 'games_list');
        
    if(once == null)
        clearGamesListTimeoutId = setTimeout('reloadGamesList('+true+')', period * 1000);
}

// подвърждава, че играчът ще играе в играта
/*function startGame() {
	insert_code('_sender.php?scrabble=game_start_confirm', 'confirmation', 'confirmGame();');
}*/

// създателят на играта стартира играта
/*function beginGame() {
	insert_code('_sender.php?scrabble=begin_play', '', 'reloadGamePlayersList('+true+', '+true+');');
	
	$('start_game_bnt').className = $('start_game_bnt').className+' disabled';
	$('create_new_game').innerHTML = '';
}*/

// потвърждава, че всички играчи ще играят и стартира скрабъла
/*function confirmGame() {
	if($('confirmation').innerHTML == 'begin')
		insert_code('_sender.php?scrabble=reload', 'scrabble_cont');
}*/

// потребителя излиза от играта
var exitGame = false;
function exitFromGame() {
	exitGame = true;
	var funct = function() {exitGame = false; reloadGamesList(true, true);}
	insert_code('_sender.php?scrabble=exit', 'scrabble_cont', funct); // location.reload();
}

// изтегля по една буква за определяне на поредния ред на играчите в играта
var alpha = new Array('А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З', 'И', 'Й',
						  'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У',
						  'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ь', 'Ю', 'Я');
var srv_rsp = new Object;
function drawPosition(cnt, creator) {
	var tmp = $('srv_rsp').innerHTML;
	tmp = tmp.split('|');
	for(tmpRow in tmp) {
		parts = tmp[tmpRow].split(':');
		srv_rsp[parts[0]] = {'letter': parts[1], 'pos': parts[2]};
	}
	$('srv_rsp').innerHTML = '';
	
	for(i = 0; i < cnt; i++)
		rotateLetter(alpha[Math.floor(Math.random()*(alpha.length-1))], 30, i, cnt, creator);
}

// показва следващата буква
function rotateLetter(letter, next, num, cnt, creator) {
	if($('letter_drawed_'+num) == null) return;
	$('letter_drawed_'+num).innerHTML = '<strong>'+letter+'</strong>';
	
	if(next) {
		next = next - 1;
		letter = alpha[Math.floor(Math.random()*(alpha.length-1))];
		setTimeout('rotateLetter(\''+letter+'\', '+next+', '+num+', '+cnt+', '+creator+');', 100);
	} else {
		if(srv_rsp[$('letter_drawed_'+num).lang] != null) {
			$('letter_drawed_'+num).innerHTML = '<strong>'+srv_rsp[$('letter_drawed_'+num).lang].letter+'</strong>';
			$('position_'+num).innerHTML = srv_rsp[$('letter_drawed_'+num).lang].pos;
			$('letter_drawed_'+num).lang = '';
		}
		
		if(num == (cnt - 1)) {
			var period = 5;
			//if(creator) period = 2.5;
			
			setTimeout('insert_code(\'_sender.php?scrabble=play\', \'main\');', period * 1000);
		}
	}
}

// проверява дали броячът не е стартиран
var counting = false;
function tryUserTurnCounter() {
	if(!counting) {
		counting = true;
		startUserTurnCounter();
	} else
		return false;
	
}

// отброява, колко време остава от хода на играча
var cleartUserTurnTimeout = 0;
var countValue = 0;
var sync = false;
function startUserTurnCounter() {
	clearTimeout(cleartUserTurnTimeout);
	
	if(exitGame) return false;
	
	sync = false;
	
	if($('turn_time_left') != null) {
		if($('reload').innerHTML == 'reload' || $('turn_time_left').innerHTML < 0) {
			insert_code('_sender.php?scrabble=play', 'scrabble_cont');
		} else {
			if($('reload').innerHTML != null && $('reload').innerHTML != 'reload')
				countValue = parseInt($('reload').innerHTML);
			
			countValue = countValue - 1;
			if(countValue > 0) {
				if($('submit_word_frm') != null)
					showObj('submit_word_frm');
				if($('playing_controls') != null)
					showObj('playing_controls');
				
				$('turn_time_left').innerHTML = countValue;
				if($('turn_time_left_big') != null)
					$('turn_time_left_big').innerHTML = countValue;
			} else {
				if(typeof(parseInt($('reload').innerHTML)) == 'number') {
					if($('submit_word_frm') != null)
						hideObj('submit_word_frm');
					if($('playing_controls') != null)
						hideObj('playing_controls');
				}
			}
			$('reload').innerHTML = countValue;
			
			if(!(countValue % 10))
				sync = true;
		}
	} else {
		insert_code('_sender.php?scrabble=play', 'scrabble_cont');
	}
		
	if(sync) {
		insert_code('_sender.php?scrabble=sync&case=waiting', 'reload');
		//insert_code('_sender.php?scrabble=sync&case=waiting&debug=true', 'monitoring');
	}
	
	cleartUserTurnTimeout = setTimeout('startUserTurnCounter();', 1000);
}

// синхронизира играчите
var syncTimeoutId = 0;
function syncPlayers(type, divId, repeatAfter) {
	after = 5;
	if(repeatAfter != null)
		after = repeatAfter;
	
	clearTimeout(clearChatTimeout);
	clearTimeout(reloadGamePlayersListTimeoutId)
	clearTimeout(clearGamesListTimeoutId);
	clearTimeout(cleartUserTurnTimeout);
	clearTimeout(syncTimeoutId);
	
	//insert_code('_sender.php?scrabble=sync&case='+type, divId);
	syncTimeoutId = setTimeout("insert_code('_sender.php?scrabble=sync&case="+type+"', '"+divId+"');", after * 1000);
	//setTimeout("insert_code('_sender.php?scrabble=play', 'scrabble_cont');", after * 1000);
}

// отброява време до старт на играта
var gameStartAfter = 0;
function gameStartCountdown(secs) {
	if(!gameStartAfter)
		gameStartAfter = secs;
		
	if(gameStartAfter) {
		gameStartAfter = gameStartAfter - 1;
		
		if($('game_start_countdown') != null) {
			$('game_start_countdown').innerHTML = gameStartAfter;
			
			setTimeout('gameStartCountdown('+secs+');', 1000);
		}
	}
}

// отваря полето за замяна на плочки от играча
function exchangePlates(cancel) {
	if(cancel) {
		showObj('playing_controls');
		showObj('lk_exchange_plates');
		
		hideObj('exchange_field');
	} else {
		hideObj('playing_controls');
		hideObj('lk_exchange_plates');
		
		showObj('exchange_field');
	}
}

// сменя избраните плочки
function change() {
	var platesToExchange = new Array();
	var currentPlate = '';
	
	for(i in droppedExchangeObjects) {
		for(j in droppedExchangeObjects[i].childNodes) {
			if(droppedExchangeObjects[i].childNodes[j].tagName == 'STRONG')
				currentPlate = currentPlate+droppedExchangeObjects[i].childNodes[j].innerHTML;
			if(droppedExchangeObjects[i].childNodes[j].tagName == 'EM')
				currentPlate = currentPlate+'_'+droppedExchangeObjects[i].childNodes[j].innerHTML;
		}
		if(currentPlate != '')
			platesToExchange[platesToExchange.length] = currentPlate;
		
		currentPlate = '';
	}
	
	parent = $('submit_word_frm');
	
	var exchangeInput = document.createElement('input');
	for(i in platesToExchange) {
		exchangeInput.setAttribute('name', 'change['+i+']');
		exchangeInput.setAttribute('type', 'hidden');
		exchangeInput.setAttribute('value', platesToExchange[i]);
		parent.appendChild(exchangeInput);
		exchangeInput = document.createElement('input');
	}
	
    parent.action = '_sender.php?scrabble=sync&case=change';
	sendRequest(parent, 'scrabble_cont', '', '', true); /* reloadScrabble();*/
}

// пас един ход - играчът пропуска един ход
function passTurn() {
	parent = $('submit_word_frm');
	
	parent.action = '_sender.php?scrabble=sync&case=pass';
	sendRequest(parent, 'scrabble_cont', '', '', true);
}
