var _nav_to_nouns = false; // флаг для особого поведения при переходе в "Словарные слова"
var typing_timeout;

$().ready(function () {
    build_categories(0);
    
    reset_nav_filters();
       
    // обработчики событий на изменение значений из селектов
    $('#tld').change(function() {reset_nav_filters(); build_categories(0, $(this).val()); serialize_form_to_hash()});
    $('#only_avail').change(function() {reset_nav_filters(); serialize_form_to_hash()});
    $('#word_count, #max_chars').change(serialize_form_to_hash);
    bind_cat_selected(true);
    
    $('#search_by_name')
     .bind('input', search_by_name_changed)
     .keyup(search_by_name_changed)
     .keypress(function(event) {
        if(event.which == 13)
        event.preventDefault(); // перехватываем сабмит формы при нажатии Enter
     })
     .focus();
    
    // Вешаем обработчик кликов на кнопки работы с корзиной
    $('#names').click(function (e) {
        var target = $(e.target);
        if ( target.is('a') ) {
            var domain = target.parent().siblings('td.domain').text();
            if( target.hasClass('add-to-cart') ) {
                // добавить пункт в корзину
                add_to_cart( domain, target );
                
                e.preventDefault();
                return false;
            }
            else if( target.hasClass('remove-from-cart') ) {
                // удалить из корзины
                remove_from_cart( domain, target );
                
                e.preventDefault();
                return false;
            }
        }
    });
    
    $('#clear_cart').click(clear_cart);
    $('#register_cart').click(register_cart);
    
    load_cart_state();
    
    // по умолчанию выбираем случайную "горячую" категорию и только доступные
    if ( window.location.hash.length == 0 ) {
        var default_cats = [
            // Ключевые запросы-Бизнес-Недвижимость
            'cat0=%D0%9A%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5+%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B&cat1=%D0%91%D0%B8%D0%B7%D0%BD%D0%B5%D1%81&cat2=%D0%9D%D0%B5%D0%B4%D0%B2%D0%B8%D0%B6%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D1%8C',

            // Ключевые запросы-Бизнес-Деловые услуги
            'cat0=%D0%9A%D0%BB%D1%8E%D1%87%D0%B5%D0%B2%D1%8B%D0%B5+%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81%D1%8B&cat1=%D0%91%D0%B8%D0%B7%D0%BD%D0%B5%D1%81&cat2=%D0%94%D0%B5%D0%BB%D0%BE%D0%B2%D1%8B%D0%B5+%D1%83%D1%81%D0%BB%D1%83%D0%B3%D0%B8',

            'cat0=Ключевые+запросы&cat1=Бизнес&cat2=Маркетинг+и+реклама',
            
            'cat0=Ключевые+запросы&cat1=Бизнес&cat2=Потребительские+товары+и+услуги',

            'cat0=Ключевые+запросы&cat1=Бизнес&cat2=Работа',

            'cat0=Ключевые+запросы&cat1=Бизнес&cat2=Строительство',

            'cat0=Ключевые+запросы&cat1=Авто&cat2=Продажа+автомобилей'
        ];
        window.location.hash = '#tld=%D1%80%D1%84&' + default_cats[ Math.floor( ( Math.random() - 0.001 ) * default_cats.length) ] + '&page=0&first=&order=asc';
        $('#only_avail').attr('checked', 'checked');
        reset_favicon(); // Возвращает favicon после изменения url hash
    }
     
    // отслеживаем изменения в адресной строке (для кнопок назад и вперед)
    $(window).bind( 'hashchange', function(e) {
        // десериализуем значения фильтров
        var hash = $.deparam.fragment();
        
        // задаём значения фильтров из url hash
        $('#categories_form :input').each(function () {
            var val = hash[$(this).attr('name')];
                
            if ( val != $(this).val())
                $(this).val(val);
        });
        
        var current_rubric;
        // выбираем новую текущую рубрику
        if (hash.cat0) {
            current_rubric = $('#rubrics > a')
             .filter(function() { return $(this).text() == hash.cat0 })
             .eq(0);
        }
        else {
            current_rubric  = $('#rubrics > a').eq(0); // по умолчанию выбираем первую рубрику
            serialize_form_to_hash(); // задаём начальный url hash
        }
        
        reset_favicon(); // Возвращает favicon после изменения url hash
            
        bind_cat_selected(false); // временно снимаем обработчик выбора подкатегории
        set_rubric_as_current(current_rubric);
        bind_cat_selected(true); // возвращаем обработчик выбора категории

        search_show_hide_rubrics(); // задаём состояние видимости блока рубрик     
        search(); // запускаем поиск
    }).trigger('hashchange');
});

function reset_nav_filters() {
    $('#page').val(0);
    $('#first').val('');
    $('#order').val('asc');
}

// задает или снимает обработчик сигнала о смене подкатегории
function bind_cat_selected(to_bind) {
    if (to_bind)
        $(window).bind('cat_selected', function() {reset_nav_filters(); serialize_form_to_hash()});
    else
        $(window).unbind('cat_selected');
}

function serialize_form_to_hash() {
    $.bbq.pushState( $('#categories_form').serialize(), 2 ); // задаём url hash значениями из полей формы после изменения полей
}

// Переключает состояние элемента в таблице в зависимости от его принадлежности к корзине (например после его добавления)
function toggle_cart_state_for(el) {
    if( el.hasClass('add-to-cart') ) {
        el.removeClass('add-to-cart').addClass('remove-from-cart')
        .attr('title', get_text('remove_domain_from_cart'))
        .text( get_text( 'remove_domain_from_cart_short' ) )
        .parent().parent().addClass('in-cart');
    }
    else if( el.hasClass('remove-from-cart') ) {
        el.removeClass('remove-from-cart').addClass('add-to-cart')
        .attr('title', get_text('add_domain_to_cart'))
        .text( get_text( 'add_domain_to_cart_short' ) )
        .parent().parent().removeClass('in-cart');
    }
}

// Создаёт / заполняет элемент выбора (под)категорий level уровня вложенности
function build_categories(level, tld_val) {
    var selects = $('#categories_form > div.categories select:[name^=cat]');
    var cats_div = $('#categories_form > div.categories');
    
    var arbitrary_text = get_text('arbitrary');
       
    // ищем подкатегорию в каталоге
    var subcats = categories;  // в переменной categories должно находиться оглавление
       
    var selected_val;
    for ( var i = 0 ; i < level; i++ ) {
        var select = selects.eq(i);
        
        selected_val = select ? select.val() : null; 
        
        if ( selected_val && selected_val != 'all' && selected_val != arbitrary_text ) {
            var found_cat;
            for ( var j in subcats ) {
                if ( subcats[j].name == selected_val ) {
                    found_cat = subcats[j];
                    break;
                }
            }
    
            subcats = found_cat ? found_cat.subcats : null;
        }
        else {
            subcats = null;
            break; // нет большей уровней вложенности, ничего не делаем
        }
    };
    
    // десериализуем выбранные значения из url hash
    var hash = $.deparam.fragment();
    
    // Получаем выбранный tld
    if (!tld_val) {
        tld_val = hash.tld;
    }
    
    // удаляет текущий и все "дочерние" селекты
    selects.slice(level).remove();
       
    if ( ! subcats ) { // все селекты созданы
        
        if ( level < 2 )
            cats_div.children('label').slideUp('fast');
        else
            cats_div.children('label').slideDown( 'fast', function() { $(this).css('display', 'inline'); } );

        $('#pattern_selector').remove();
        if (selected_val == arbitrary_text) {
            var cat = $('#categories_form > div.categories select:[name=cat0]').val();
            var symbol_count = parseInt(cat.substring(0, 1));    
            var only_letters = cat.match('буквенные')
            compose_pattern_selector(tld_val, symbol_count, only_letters)
             .insertAfter(cats_div).slideDown('fast'); // вызываем создание элементов выбора маски
        }

       $(window).trigger('cat_selected'); // даём сигнал о выборе подкатегории
        
        return;
    }
    
    // создаёт селект level уровня
    var select = $('<select class="double_border"></select>').attr('name', 'cat' + level);
   
    if ( level > 0 ) // для подкатегорий добавляем в начало "все"
        $('<option></option>')
        .text(get_text('all'))
        .val('all')
        .appendTo(select);
        
    if ( hash.only_avail ) {
        $('#only_avail').attr('checked', 'checked');
    }
    
    //  заполняет наш селект    
    for ( var i in subcats ) {
        $('<option></option>')
        .text(subcats[i].name)
        .val(subcats[i].name)
        .appendTo(select);
    }

    // для определённых подкатегорий добавляем "Произвольные"
    if ( level == 1 && selected_val.match('^(3-х символьные|3-х буквенные|4-х символьные|4-х буквенные)$') )
        $('<option></option>')
        .text(arbitrary_text)
        .val(arbitrary_text)
        .appendTo(select);

    // пытаемся выбрать подкатегорию из url hash
    var hash_url_val = hash['cat' + level];

    if ( _nav_to_nouns && hash.cat0 && hash.cat0 == 'Словарные слова' ) { // для этой категории нужно по-умолчанию показывать особые подкатегории...
        if (level == 1)
            hash_url_val = 'Существительные';
        else if (level == 2) {
            hash_url_val = 'В единственном числе';
            _nav_to_nouns = false;
        }
    }

    if (hash_url_val)
        select.val(hash_url_val);
    
    if ( 0 == level )
        select.hide();
    
    select.appendTo(cats_div);

    // селект нулевого уровня делаем скрытым, вместо него отображаем список со ссылками
    if ( 0 == level ) {
        var rubrics = $('#rubrics');
        rubrics.html('');
        
        select.children().each(function () {
            var cat_name = $(this).text();
            
            // не показываем двухсимвольники в занятых зонах
            if (       tld_val != 'orgcyr'
                    && tld_val != 'su'
                    && tld_val != 'sucyr'
                    && cat_name.match('^(2-х символьные|2-х буквенные)$')
            ) {
                return;
            }

            // не показываем цифры в ORG -- т.к. не знаем статус их доступности
            if ( tld_val == 'orgcyr' && cat_name.match('^Цифры') )
                return;
            
            $('<a href="#" />')
            .click( function() {
                var cat = $(this).text();
                $('#categories_form > div.categories select:[name=cat0]').val(cat);

                // активируем флажок особого поведения..
                if ( 'Словарные слова' == cat ) 
                    _nav_to_nouns = true;

                 // сбрасываем подкатегорию первого уровня на "Все" 
                $('#categories_form > div.categories select:[name=cat1]').val('all');
                reset_nav_filters();
                serialize_form_to_hash();
                
                return false; 
             })
            .text( cat_name )
            .attr( 'title', get_text('show_rubric_variants') )
            .appendTo(rubrics);
            
            $('<div class="div"> </div>') // разделитель
            .appendTo(rubrics);
        });
        
        // Временно добавляем ссылку на старый сервис премиум доменов
        //$('<a href="/newdomain/short_domains">4-х символьные</a>')
        //.attr( 'title', 'Четырёхсимвольные премиум-домены (в зоне RU / SU)' )
        //.add('<div class="div"> </div>') // разделитель
        //.appendTo(rubrics);
    }
   
    select.change(function () { build_categories( level + 1) }).change();
}

// Устанавливает переданную ссылку на рубрику как выбранную
function set_rubric_as_current(el) {
    el.siblings('div.current').remove(); // убираем старый текущий
    el.siblings('a').show(); // показываем скрытую ссылку
    
    $('<div class="current"></div>')
     .insertBefore( el.hide() ) // вставляем текущий элемент в виде текста
     .text( el.text() );
          
     $('#categories_form > div.categories select:[name=cat0]').change();
}

// Запрос списка доменных имен к серверу и обработка полученных данных
function search() {
    $('#searching').show();

    var _search_req = $('#categories_form').serialize();
    
    $.getJSON( '/api/regru2/domain/get_premium_variants', _search_req, function(json) {
        
        if ( $('#categories_form').serialize() != _search_req )
            return; // anti race conditions
        
        var data = json.answer;
        
        var names_div = $('#names').empty();
        
        if (data && data.domains && data.domains.length ) {
            
            // будем ли показывать описание?
            var is_abbr = $('#categories_form > div.categories select:[name=cat0]').val() == 'Аббревиатуры';

            // тут идёт слегка запутанная логика генерации таблицы, 
            // TODO надо бы применить какой-нибудь JS шаблонизатор...

            var max_cols = 6; // суммарное кол-во столбцов в таблице в режиме РФ
            
            var not_avail_tip = ' title="' + get_text('domain_not_avail') + '"';
            var not_avail_img = '<div class="not-avail"><img src="/i/style/first/glamor/not-avail.png" alt="" /></div>';
            
            var divisor = '<tr class="divisor"><td class="l" /><td colspan="'
             + ( max_cols - 3 )
             +  '" /><td class="r" /></tr>';

            var tbody = divisor;
            
            for ( var i in data.domains ) {
                var not_avail_html = '<td class="reg inner not-avail"' + not_avail_tip + '>'
                                        + '<table border="0" cellpadding="0" cellspacing="0" style="margin:0 auto;"><tr><td>'
                                        + not_avail_img
                                        + '</td><td style="padding-left:6px;">'
                                        + '<a href="' + get_lang_for_url() + '/newdomain/choose_result?reqtype=PhilRequest&name='
                                        + data.domains[i].dname + '" title="' + get_text('search_another_domain_title') + '">' + get_text('search_another_domain')
                                        + '</a></td></tr></table></td>';

                tbody += '<tr class="' + ( data.domains[i].avail ? 'avail' : 'not-avail' ) + '">'  // '<tr class="' + ( i % 2 ? 'even' : 'odd' ) + '2">'
                 + '<td class="l" /><td class="domain inner">' 
                 + ( is_abbr ? '<abbr>' : '' ) + data.domains[i].name + ( is_abbr ? '</abbr>' : '' ) + '</td>'
                 + '<td class="price inner">' + data.domains[i].price + '</td>'
                 + ( data.domains[i].avail ? 
                            '<td class="inner"><a class="add-to-cart inner" href="#" title="' + get_text('add_domain_to_cart') + '">'
                                + get_text('add_domain_to_cart_short') + '</a></td>'
                            : not_avail_html
                   )
                 + '<td class="r" /></tr>'
                 + divisor;
            }
            
            var list = $('\
<table class="grey_border" id="names_table">\
    <thead>\
        <tr>\
            <th class="lt">&nbsp;</td>\
            <th class="t domain"><a href="#" '
             + ( data.order == 'desc' ? 'class="desc"' : '' ) 
             + ' title="' + get_text('change_sort_order') + '">' 
             + get_text('domain_name') + '</a></th>\
            <th class="t">' + get_text('price') + '</th>'
             + '<th class="t reg">&nbsp;</th>'
             + '\
            <th class="rt">&nbsp;</td>\
        </tr>\
    </thead>\
    <tbody>' + tbody + '\
        <tr>\
            <td class="lb">&nbsp;</td>\
            <td colspan="' + ( max_cols - 3 ) +  ' " class="b inner">&nbsp;</td>\
            <td class="rb">&nbsp;</td>\
        </tr>\
    </tbody>\
</table>')   .appendTo(names_div);

             list.find('thead > tr > th.domain > a').click(change_sort_order);

            // Добавляем навигацию
            if(data.current_row != null) {
                var paginator = compose_paginator(data).insertBefore(list);
                
                if(data.domains.length > 15)
                    paginator.clone().insertAfter(list);
            }
            
            select_in_cart_items();
            
            // тултипы на аббревиатуры с гугла
            if (is_abbr)
                names_div.find('td.domain > abbr')
                .attr('rel', 'http://ajax.googleapis.com/ajax/services/search/web')
                .each(function () {
                    var item = $(this);
                    
                    var domain = item.text().split('.');
                    
                    item.attr('title', '');
                    
                    item.cluetip({
                        showTitle: false,
                        ajaxSettings: {   
                            dataType: 'jsonp',
                            data: { 
                                v: '1.0',
                                q: domain[0]
                            }
                        },
                        // process data retrieved via xhr before it's displayed
                        ajaxProcess: function(data) {
                            if ( ! data.responseData || !data.responseData.results )
                                return get_text('no_description_found');
                            
                            var html = '';
                            
                            $(data.responseData.results).each(function() {
                                html += '<h3>' + this.title + '</h3><p>' + this.content + '</p>';
                                return false; // берем только первый результат
                            });
                            
                            return html;
                        }
                    });
                });
        }
        else {
            var text_id = 'not_found';
            if ( json && json.error_params && json.error_params.error_detail ) {
                text_id = json.error_params.error_detail;
            }
            
            $('<p id="error_text"></p>').html(get_text(text_id)).appendTo(names_div);
        }

        if ( data && data.alpha_index && data.alpha_index.length ) {
            compose_alpha_index(data.first, data.alpha_index).prependTo(names_div);
        }
        
        $('#searching').hide();
        
        if ( data && data.tld == 'рф' )
            $('#rf_notes').show();
        else
            $('#rf_notes').hide();
    });
}

function change_sort_order() {
    var order = $('#order');
    
    if(order.size()) {
        order.val( order.val() == 'asc' ? 'desc' : 'asc');
        $('#page').val(0);
        
        // загружаем данные
        serialize_form_to_hash();
    }

    return false;
}

function navigate(to_page) {
    var page = $('#page');
    
    if(page.size()) {
        page.val(to_page);
        
        // загружаем данные
        serialize_form_to_hash();
    }

    return false;
}

// создаёт блок навигации по страницам, возвращает jQuery объект
function compose_paginator(data) {
    var paginator = $('<div class="paginator"></div>');
    
    var html = '';
    
    var names_per_page = data.rows_per_page;
    var current_page = parseInt( data.current_row / names_per_page );
      
    var last_page = parseInt( data.total_rows / names_per_page ) + ( data.total_rows % names_per_page ? 0 : -1 );
       
    var pages_visible = 6; // максимальное кол-во отображаемых ссылок на предыдущие и следующие страницы
    var skip_pages = 1; // кол-во страниц пропускаемых при нажатии на "..."

    var first_visible = current_page - pages_visible;
    if ( first_visible < 0 )
        first_visible = 0;
        
    var last_visible = current_page + pages_visible;
    if ( last_visible > last_page )
        last_visible = last_page;
        
    if ( current_page > 0 ) {
        // Есть предыдущие
        html += '<a href="#" class="first" title="' + get_text('show_first_page') + '" onclick="return navigate(0);"></a>'
             +  '<a href="#" class="prev" title="' + get_text('show_prev_page') + '" onclick="return navigate(' + ( current_page - 1 ) +');"></a>';
    }

    if ( first_visible > 0) {
        var move_to_page_left = first_visible - skip_pages;
        if (move_to_page_left < 0)
            move_to_page_left = 0;
            
        html += '<a href="#" title="' + get_text('show_prev_pages') + '" onclick="return navigate(' + move_to_page_left  + ');">...</a>';
    }
        
    if ( first_visible != last_visible ) {
        for ( var i = first_visible ; i <= last_visible ; i++ ) {
            var page = i + 1;
            
            html += i == current_page ? 
                    '<span class="current">' + page + '</span>'
                    : '<a href="#" title="" onclick="return navigate(' + i + ');">' + page + '</a>';
        }
    }

    if ( last_visible < last_page) {
        
        var move_to_page_right = last_visible + skip_pages;
        if (move_to_page_right > last_page)
            move_to_page_right = last_page;

        html += '<a href="#" title="' + get_text('show_next_pages') + '" onclick="return navigate(' + move_to_page_right  + ');">...</a>';
    }
    
    if ( current_page < last_page ) {
        // Есть следующие
        html += '<a href="#" class="next" title="' + get_text('show_next_page') + '" onclick="return navigate(' + ( current_page + 1 ) +');"></a>'
             +  '<a href="#" class="last" title="' + get_text('show_last_page') + '" onclick="return navigate(' + last_page + ');"></a>';
    }

    if(html.length) {
        $('<span class="pages_text">' + get_text('pages_text') + ':</span>' + html).appendTo(paginator);
    }
    
    return paginator;
}

// создаёт алфавитный индекс, возвращает jQuery объект
function compose_alpha_index(current, index) {
    var alpha_index = current != '' ? '<a href="#" title="' + get_text('show_any_first_letter') + '">' + get_text('all') + '</a> '
     : '<span class="current">' + get_text('all') + '</span> ';

    for ( var i in index ) {
        var letter = index[i].toUpperCase();
        alpha_index += current != letter ? '<a href="#" title="' + get_text('show_this_first_letter') + '">' + letter + '</a> '
         : '<span class="current">' + letter + '</span> ';
    }
    
    var div = $('<div class="alpha_index">' + alpha_index + '</div>');
    
    div.children('a').click( function () { return navigate_to_letter( $(this).text() ); } );
    
    return div;
}


// создаёт элемент выбора маски, возвращает jQuery объект
function compose_pattern_selector( tld, symbol_count, only_letters ) {   
    var alpha_str = tld == 'рф' || tld == 'sucyr' || tld == 'orgcyr' ? 
     '* а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я'
     : '* a b c d e f g h i j k l m n o p q r s t u v w x y z';
    
    if ( ! only_letters )
        alpha_str += ' 0 1 2 3 4 5 6 7 8 9 -';
    
    var alpha = alpha_str.split(' ');
    
    var select = '';
    for( var i in alpha ) {
        select += '<option val="' + alpha[i] + '">' +  alpha[i] + '</option>'
    }
    
    var html = '';
    for ( var i = 0; i < symbol_count; i++ ) {
        html += '<select name="pattern' + i + '">' + select + '</select>';
    }
    
    var div = $('<div id="pattern_selector" class="filter"><label>' + get_text('domain_pattern') + '</label> ' + html + '</div>');
    
    div.find('select')
    .attr('title', get_text('pattern_hint'))
    .change(function() {reset_nav_filters(); serialize_form_to_hash()})
    .slice( 0, symbol_count - 2 ).val(alpha[1]);

    var hash = $.deparam.fragment();
    
    for ( var i = 0; i < symbol_count; i++ ) {
        // пытаемся выбрать символ из url hash
        var hash_url_val = hash['pattern' + i];
        if (hash_url_val)
            div.find('select').eq(i).val(hash_url_val);
    }
    
    return div;    
}

function navigate_to_letter(letter) {
    
    if ( letter == get_text('all') )
        letter = '';
    
    $('#page').val(0);
    $('#first').val(letter);
    
    // загружаем данные
    serialize_form_to_hash();

    return false;
}

// Обработчик изменения слова для поиска по всем категориям
function search_by_name_changed() {
    search_show_hide_rubrics();
    
    // Ждём небольшое время пока пользователь пишет ещё символы
    if(!typing_timeout)
        typing_timeout = setTimeout(function() {search_by_name()}, 700);

    return false;
}

// скрывает или показывает рубрики в зависимости от наличия слова для поиска
function search_show_hide_rubrics() {
    var name = $('#search_by_name').val();

    var divs = $('#rubrics').add($('#rubrics').next());

    if (name.length) {
        divs.slideUp();
        $('#search_by_name_show_rubrics_div').show();
    }
    else {
        $('#search_by_name_show_rubrics_div').hide();
        divs.slideDown();
    }
}

function search_by_name() {
    typing_timeout = null;

    var name = $('#search_by_name').val();
    if (!name.length || name.length > 2) {
        reset_nav_filters();
        serialize_form_to_hash();
    }
}

function add_to_cart(domain, el) {
   $('#total-domains-in-cart').text('+');

   $.post( "/shopcart/preorder_cart_add", {
       shopcart_id: 'choose',
       domain_name: domain
   },
   function(data) {
        var cart = data.split(';');
        $('#total-domains-in-cart').text(cart[0]);
        $('#total-summ-in-cart').text(cart[1]);
        
        toggle_cart_state_for(el);
    });

    return false;
}

function remove_from_cart(domain, el) {
   $('#total-domains-in-cart').text('-');

   $.post( "/shopcart/preorder_cart_remove", {
        shopcart_id: 'choose',
        domain_name: domain
   },
   function(data) {
        var cart = data.split(';');
        $('#total-domains-in-cart').text(cart[0]);
        $('#total-summ-in-cart').text(cart[1]);
        
        toggle_cart_state_for(el);
    });

   return false;
}

function clear_cart() {
    $.post("/shopcart/preorder_cart_clear", {
        shopcart_id: 'choose'
    },
    function(data) {
        $('#names a.remove-from-cart').each(function () { toggle_cart_state_for($(this)) });

        $('#total-domains-in-cart').text('0');
        $('#total-summ-in-cart').text('0');
    });

    return false;
}

// Получаем текущее состояние корзины
function load_cart_state() {
    $.post(
        '/shopcart/preorder_cart_summary',
        {
            shopcart_id: 'choose'
        },
        function (data){
            var cart = data.split(';');
            $('#total-domains-in-cart').text(cart[0]);
            $('#total-summ-in-cart').text(cart[1]);
        }
    );
}

// Отмечаем домены уже находящиеся в корзине
function select_in_cart_items() {
    $.getJSON(
        '/shopcart/preorder_cart_view_dump', {
            shopcart_id: 'choose',
            json: 1
        },
        function(data) {
            for ( domain in data ) {
                $('#names a.add-to-cart').each( function() {
                    var el = $(this);
                    
                    if ( el.parent().siblings('td.domain').text() == domain )
                        toggle_cart_state_for(el);
                 });
            }
        }
    );
}

// Оформить заказ
function register_cart() {
    $.post('/shopcart/preorder_cart_reglist', {
        shopcart_id: 'choose'
    },
    function(data) {
        if ( data == 'empty' )
            alert( get_text('cart_empty') );
        else
            $("#regform").submit();
    });

    return false;
}

// Возвращает язык для генерации правильного УРЛ
function get_lang_for_url() {
    return lang == 'ru' ? '' : "/" + lang;
}

// Возвращает текстовое описание по идентификатору на языке, определяемом глобальной переменной lang
function get_text(id) {
    return texts[id][lang];
}

var texts = {
    all: {
        ru: 'Все',
        en: 'All'
    },
    remove_domain_from_cart: {
        ru: 'Убрать домен из корзины',
        en: 'Remove domain from cart'
    },
    remove_domain_from_cart_short: {
        ru: 'Убрать из корзины',
        en: 'Remove from cart'
    },
    add_domain_to_cart: {
        ru: 'Добавить домен в корзину',
        en: 'Add domain to cart'
    },
    add_domain_to_cart_short: {
        ru: 'Добавить в корзину',
        en: 'To cart'
    },
    cart_empty: {
        ru: 'Корзина пуста!',
        en: 'Cart is empty!'
    },
    select_subcategory: {
        ru: 'Выберите подкатегорию',
        en: 'Select subcategory'
    },
    show_rubric_variants: {
        ru: 'Показать варианты в этой рубрике',
        en: 'Show variants of this rubric'
    },
    domain_not_avail: {
        ru: 'Домен занят',
        en: 'Domain is not available for registration'
    },
    not_found: {
        ru: 'Вариантов не найдено.',
        en: 'No variants found.'
    },
    show_first_page: {
        ru: 'Показать первую страницу',
        en: 'Show first page'
    },
    show_prev_page: {
        ru: 'Показать предыдущую страницу',
        en: 'Show previous page'
    },
    show_prev_pages: {
        ru: 'Показать предыдущие страницы',
        en: 'Show previous pages'
    },
    show_next_pages: {
        ru: 'Показать следующие страницы',
        en: 'Show next pages'
    },
    show_next_page: {
        ru: 'Показать следующую страницу',
        en: 'Show next page'
    },
    show_last_page: {
        ru: 'Показать последнюю страницу',
        en: 'Show last page'
    },
    pages_text: {
        ru: 'Страницы',
        en: 'Pages'
    },
    reg_avail: {
        ru: 'Подать заявку',
        en: 'Send order'
    },
    domain_name: {
        ru: 'Имя домена',
        en: 'Domain name'
    },
    price: {
        ru: 'Цена в руб.',
        en: 'Price (roubles)'
    },
    priority_reg: {
        ru: 'Приоритетная регистрация',
        en: 'Priority registration'
    },
    open_reg: {
        ru: 'Открытая регистрация',
        en: 'Open registration'
    },
    change_sort_order : {
        ru: 'Изменить порядок сортировки',
        en: 'Change sort order'
    },
    show_any_first_letter  : {
        ru: 'Показать варианты, начинающиеся на любую букву или цифру',
        en: 'Show variants starting with any symbol'
    },
    show_this_first_letter  : {
        ru: 'Показать варианты, начинающиеся на этот символ',
        en: 'Show variants starting with this symbol'
    },
    search_another_domain  : {
        ru: 'Другие варианты',
        en: 'Another variants'
    },
    search_another_domain_title  : {
        ru: 'Домен занят. Подобрать другой домен',
        en: 'Domain is not available. Search another domain'
    },
    no_description_found : {
        ru: 'Описание не найдено',
        en: 'No description found'
    },
    arbitrary : {
        ru: 'Произвольные',
        en: 'Arbitrary'
    },
    too_complex_pattern_error : {
        ru: 'Максимальное количество звёздочек в маске &mdash; 2',
        en: 'The maximum quantity of asterisks &mdash; 2'
    },
    domain_pattern : {
        ru: 'Маска имени:',
        en: 'Domain pattern:'
    },
    pattern_hint : {
        ru: 'Выберите символ маски; звёздочка - любой символ в этой позиции',
        en: 'Select pattern symbol; asterisk - any symbol in this position'
    }
};

