/*
 * Key Codes:
 * 13 - Enter
 * 27 - Esc
 * 33 - Page Up
 * 34 - Page Down
 * 38 - Arrow Up
 * 40 - Arrow Down
 *
 */
$(document).ready(function(){
    $('#form_search_name').submit(function(){
        if($('#searching_name').val() == 'Ищу имя...'){
            $('#searching_name').val('');
        }
    });
    $('#searching_name').val('Ищу имя...');
    $('#searching_name').click(function(){
        if($(this).val() == 'Ищу имя...'){
            $(this).val('');
        }
    });
    $('#searching_name').keypress(function(e){
        var keyCode = e.keyCode;
        if(keyCode == 13 && $('#ajax_results_list_names li a.selected').length == 1){
            $('#ajax_results_list_names li a.selected').click(function(event){
                window.location = event.target.href;
            });
            $('#ajax_results_list_names li a.selected').click();
            return false;
        }
    });
    $('*').keyup(function(e){
        var keyCode = e.keyCode;
        if(keyCode == 27){
            emptyResults_names = false;
            $('#ajax_search_results_names').html('');
            $('#ajax_search_results_names').css('display', 'none');
            emptyResults_surnames = false;
            $('#ajax_search_results_surnames').html('');
            $('#ajax_search_results_surnames').css('display', 'none');
        }
    });

    $('#searching_name').click(function(e){
        emptyResults_surnames = false;
        $('#ajax_search_results_surnames').html('');
        $('#ajax_search_results_surnames').css('display', 'none');
    });

    $('#searching_surname').click(function(e){
        emptyResults_names = false;
        $('#ajax_search_results_names').html('');
        $('#ajax_search_results_names').css('display', 'none');
    });

    $('#searching_name').keyup(function(e){
        var keyCode = e.keyCode;
        var searchingName = $(this).val();
        if(emptyResults_names === false && keyCode == 13 && $('#ajax_results_list_names li a.selected').length == 1){
            $('#ajax_results_list_names li a.selected').click();
        }
        else if(emptyResults_names === false && searchingName.length > 0 && (keyCode == 38 || keyCode == 40 || keyCode == 34 || keyCode == 33)){
            var needToSelectNum = 0;            
            var lastElementId = $('#ajax_results_list_names li:last a').attr('id');
            var lastNum = lastElementId.split('_')[2];
            var selectedElement = $('#ajax_results_list_names li a.selected');
            if(selectedElement.length == 1){
                var selectedElementId = selectedElement.attr('id');
                selectedElement.removeClass('selected');
                var num = selectedElementId.split('_')[2];
                if(num == lastNum && keyCode == 40 || keyCode == 33){
                    needToSelectNum = 0;
                }
                else if(num == 0 && keyCode == 38 || keyCode == 34){
                    needToSelectNum = lastNum;
                }
                else if(keyCode == 40){
                    needToSelectNum = ++num;
                }
                else{
                    needToSelectNum = --num;
                }
            }
            else{
                if(keyCode == 40 || keyCode == 33){
                    needToSelectNum = 0;
                }
                else{
                    needToSelectNum = lastNum;
                }
            }
            $('#search_result_' + needToSelectNum).addClass('selected');
        }
        else if(searchingName.length > 0 && !(emptyResults_names && searchingName.length > searchingNameOld.length) && searchingName != searchingNameOld){
            var rxp = new RegExp('[^а-яё]+', 'i');
            if(rxp.exec(searchingName) === null){
                $.post('/ajax.php', {'action' : 'search', 'searching_name' : $(this).val()}, function(data){
                    var response = eval('(' + data + ')');
                    var results = response.result;
                    if(results.length > 0){
                        emptyResults_names = false;
                        var resultsList = '<ul id="ajax_results_list_names">';
                        for(var i in results){
                            resultsList += '<li><a href="/imya/' +
                                encodeURIComponent(results[i].name) + '" id="search_result_' + i + '">' +
                                results[i].name.replace(new RegExp('(' + searchingName + ')', 'i'),
                                '<span class="search_highlight">$1</span>') +
                                '</a></li>';
                        }
                        resultsList += '</ul>';
                        $('#ajax_search_results_names').html(resultsList);
                        $('#ajax_search_results_names').css('display', 'block');
                        bindHoverNames();
                    }
                    else if(response.error != ''){
                        $('#ajax_search_results_names').html(response.error);
                        $('#ajax_search_results_names').css('display', 'block');
                    }
                    else{
                        emptyResults_names = true;
                        $('#ajax_search_results_names').html('');
                        $('#ajax_search_results_names').css('display', 'none');
                    }
                });
            }
            else{
                $('#ajax_search_results_names').html('Недопустимый символ');
                $('#ajax_search_results_names').css('display', 'block');
            }
            searchingNameOld = $(this).val();
        }        
    });
    
    $('#form_search_surname').submit(function(){
        if($('#searching_surname').val() == 'Ищу фамилию...'){
            $('#searching_surname').val('');
        }
    });
    $('#searching_surname').val('Ищу фамилию...');
    $('#searching_surname').click(function(){
        if($(this).val() == 'Ищу фамилию...'){
            $(this).val('');
        }
    });
    $('#searching_surname').keypress(function(e){
        var keyCode = e.keyCode;
        if(keyCode == 13 && $('#ajax_results_list_surnames li a.selected').length == 1){
            $('#ajax_results_list_surnames li a.selected').click(function(event){
                window.location = event.target.href;
            });
            $('#ajax_results_list_surnames li a.selected').click();
            return false;
        }
    });
    $('#searching_surname').keyup(function(e){
        var keyCode = e.keyCode;
        var searchingName = $(this).val();
        if(emptyResults_surnames === false && keyCode == 13 && $('#ajax_results_list_surnames li a.selected').length == 1){
            $('#ajax_results_list_surnames li a.selected').click();
        }
        else if(emptyResults_surnames === false && searchingName.length > 0 && (keyCode == 38 || keyCode == 40 || keyCode == 34 || keyCode == 33)){
            var needToSelectNum = 0;
            var lastElementId = $('#ajax_results_list_surnames li:last a').attr('id');
            var lastNum = lastElementId.split('_')[2];
            var selectedElement = $('#ajax_results_list_surnames li a.selected');
            if(selectedElement.length == 1){
                var selectedElementId = selectedElement.attr('id');
                selectedElement.removeClass('selected');
                var num = selectedElementId.split('_')[2];
                if(num == lastNum && keyCode == 40 || keyCode == 33){
                    needToSelectNum = 0;
                }
                else if(num == 0 && keyCode == 38 || keyCode == 34){
                    needToSelectNum = lastNum;
                }
                else if(keyCode == 40){
                    needToSelectNum = ++num;
                }
                else{
                    needToSelectNum = --num;
                }
            }
            else{
                if(keyCode == 40 || keyCode == 33){
                    needToSelectNum = 0;
                }
                else{
                    needToSelectNum = lastNum;
                }
            }
            $('#search_result_' + needToSelectNum).addClass('selected');
        }
        else if(searchingName.length > 0 && !(emptyResults_surnames && searchingName.length > searchingSurNameOld.length) && searchingName != searchingSurNameOld){
            var rxp = new RegExp('[^а-яё]+', 'i');
            if(rxp.exec(searchingName) === null){
                $.post('/ajax.php', {'action' : 'search', 'searching_surname' : $(this).val()}, function(data){
                    var response = eval('(' + data + ')');
                    var results = response.result;
                    if(results.length > 0){
                        emptyResults_surnames = false;
                        var resultsList = '<ul id="ajax_results_list_surnames">';
                        for(var i in results){
                            if(results[i].is_main == 0){
                                var onClick = 'onclick="if(this.href.indexOf(\'#\') == -1) this.href = this.href + \'#' + results[i].name + '\';"';
                            }
                            else var onClick = '';
                            resultsList += '<li><a href="/familiya/' +
                                encodeURIComponent(results[i].main_name) + '" id="search_result_' + i + '" ' + onClick + '>' +
                                results[i].name.replace(new RegExp('(' + searchingName + ')', 'i'),
                                '<span class="search_highlight">$1</span>') +
                                '</a></li>';
                        }
                        resultsList += '</ul>';
                        $('#ajax_search_results_surnames').html(resultsList);
                        $('#ajax_search_results_surnames').css('display', 'block');
                        bindHoverSurNames();
                    }
                    else if(response.error != ''){
                        $('#ajax_search_results_surnames').html(response.error);
                        $('#ajax_search_results_surnames').css('display', 'block');
                    }
                    else{
                        emptyResults_surnames = true;
                        $('#ajax_search_results_surnames').html('');
                        $('#ajax_search_results_surnames').css('display', 'none');
                    }
                });
            }
            else{
                $('#ajax_search_results_surnames').html('Недопустимый символ');
                $('#ajax_search_results_surnames').css('display', 'block');
            }
            searchingSurNameOld = $(this).val();
        }        
    });
});

var searchingNameOld = '';
var searchingSurNameOld = '';
var emptyResults_names = false;
var emptyResults_surnames = false;

function bindHoverNames(){
    $('#ajax_results_list_names li a').hover(
        function(){
            $('#ajax_results_list_names li a.selected').removeClass('selected');
            $(this).addClass('selected');
        },
        function(){
            $(this).removeClass('selected');
        }
    );
}

function bindHoverSurNames(){
    $('#ajax_results_list_surnames li a').hover(
        function(){
            $('#ajax_results_list_surnames li a.selected').removeClass('selected');
            $(this).addClass('selected');
        },
        function(){
            $(this).removeClass('selected');
        }
    );
}

