var timerId = null;
var timeout = 2000;
var sel_count = 0;
var sel_price = 0;
var sel_array = [];
var alyarms = ['',
               'Неверный HTTP-запрос.',
               'Поле IdEvent отсутствует или пусто.',
               'Мероприятие с указанным идентификатором отсутствует в БД Системы.',
               'Значение поля Places пусто.',
               'Превышен лимит выбранных мест для разовой блокировки.',
               'Продажа билетов на мероприятие заблокирована.',
               'Истек срок продажи билетов на данное мероприятие.',
               '',
               '',
               'Пакет данных пуст.',
               '',
               '',
               '',
               '',
               'Место, отсутствующее в указанном мероприятии.',
               'Место выбрано другим пользователем. Работа с ним невозможна.',
               'Извините, но это место уже было продано. Пожалуйста, выберите другое.',
               'Превышен лимит на выброр мест.'
              ];

function basketShow(layer)
{
    var myLayer=document.getElementById(layer);
    if(timerId != null) clearTimeout(timerId);
    myLayer.style.display = "block";
}

function hide_()
{
    var myLayer=document.getElementById('basketLayer');
    myLayer.style.display = "none";
}

function basketHide(layer)
{
    if(timerId != null) clearTimeout(timerId);
    timerId = setTimeout("hide_()", timeout);
}

function cost(price)
{
    if(price % 1 == 0) return price + ' руб.';
    else return parseInt(price) + ' руб. ' + (price % 1).toFixed(2).slice(2) + ' коп.';
}

Event.observe(window, 'load', function() {
    Event.observe($('basketKey'), 'mouseover', function(event) {
        Event.stop(event);
        if(sel_count > 0) {
            tableRender();
            basketShow('basketLayer');
        }
    });
    Event.observe($('basketKey'), 'mouseout', function(event) {
        Event.stop(event);
        basketHide('basketLayer');
    });
    Event.observe($('basketLayer'), 'mouseover', function(event) {
        Event.stop(event);
        basketShow('basketLayer');
    });
    Event.observe($('basketLayer'), 'mouseout', function(event) {
        Event.stop(event);
        basketHide('basketLayer');
    });

    Event.observe($('basketClear'), 'click', function(event) {
        if(sel_count > 0)
            basketClear();
    });

    Event.observe($('basketOrder'), 'click', function(event) {
        if(sel_count > 0)
            window.location = '/order/prepare/';
    });

    var chair = $$('div.free');
    for(var i = 0; i < chair.length; i++) {
        Event.observe(chair[i], 'click', function(event) {
            select_deselect_place(this);
        });
    }

    tableRender();
});


function select_deselect_place(obj) {
    Event.stopObserving(obj, 'click');
    if($(obj).hasClassName('selected')) {
        $(obj).removeClassName('selected');
        $(obj).addClassName('del_process');
        new Ajax.Request('/basket/delete/', {
            parameters: {
                event_id: event_id,
                id: $(obj).readAttribute('rel')
            },
            onComplete: function(t) {
                try{
                    var json = t.responseText.evalJSON();
                    basketRender(json);
                    Event.observe(obj, 'click', function(event) {
                        select_deselect_place(this);
                    });
                }
                catch(e) { }
            }
        });
    }
    else {
        $(obj).addClassName('query');
        new Ajax.Request('/basket/add/', {
            parameters: {
                event_id: event_id,
                id: $(obj).readAttribute('rel')
            },
            onComplete: function(t) {
                try{
                    var json = t.responseText.evalJSON();
                    basketRender(json);
                    Event.observe(obj, 'click', function(event) {
                        select_deselect_place(this);
                    });
                }
                catch(e) { }
            }
        });
    }

    var str = '';
    $('basketLayer').innerHTML = str;
}

function tableRender()
{
    new Ajax.Request('/basket/view/', {
        parameters: {
            event_id: event_id
        },
        onComplete: function(t) {
            try{
                var json = t.responseText.evalJSON();
                sel_count = 0;
                sel_price = 0;
                var str = '';
                str = '<table cellspacing=0><tr><th style="width: 30px;">#</th><th>Место</th><th class="ar">Стоимость</th></tr>';
                json.each(function(n) {
                    if(n.sect_name.empty()) {sect_name = '';} else {sect_name = n.sect_name + ', ';}
                    sel_count++;
                    sel_price += n.price;
                    str += '<tr>';
                    str += '<td style="width: 30px;">' + sel_count + '</td>' +
                           '<td class="nobr">' + sect_name + n.tn + ' ' +n.tl + ' ' + n.pn + ' ' + n.pl + '</td>' +
                           '<td class="ar">' + n.price + ' руб.</td>';
                    str += '</tr>';
                    try{
                        $('p' + n.place_id).addClassName('selected');
                        Event.stopObserving($('p' + n.place_id), 'click');
                        Event.observe($('p' + n.place_id), 'click', function(event) {
                            select_deselect_place(this);
                        });
                    }
                    catch(e) { }
                });

                //
                if(typeof marginprc !== 'undefined' && sel_count != 0) {
                    str += '<tr><td style="width: 30px;"> </td><td>Сервисный сбор</td><td class="ar">' + marginprc + '%</td></tr>';
                    sel_price += sel_price * marginprc / 100;
                }

                str += '<tr><th style="width: 30px;"> </th><th>Итого:</th><th class="ar">' + cost(sel_price) + '</th></tr>';
                str += '</table>';
                $('basketLayer').innerHTML = str;
            }
            catch(e) { }
            $('basketCount').innerHTML = sel_count;
            $('basketPrice').innerHTML = cost(sel_price);
        }
    });
}

function basketRender(json)
{
    if(json.action == 'delete' && json.status == 0) {
        $('p' + json.place_id).removeClassName('del_process');
        $('p' + json.place_id).removeClassName('sold');
        $('p' + json.place_id).addClassName('free');
        sel_count--;
        p_price = parseInt($('p' + json.place_id).readAttribute('price'));
        if(typeof marginprc !== 'undefined') p_price += p_price * marginprc / 100;
        sel_price -= p_price;
        sel_price = sel_price.toFixed(2) * 1;
    }
    else if(json.action == 'delete' && json.status != 0) {
    }
    else if(json.action == 'add' && json.status == 0) {
        $('p' + json.place_id).removeClassName('query');
        $('p' + json.place_id).addClassName('selected');
        sel_count++;
        p_price = parseInt($('p' + json.place_id).readAttribute('price'));
        if(typeof marginprc !== 'undefined') p_price += p_price * marginprc / 100;
        sel_price += p_price;
        sel_price = sel_price.toFixed(2) * 1;
    }
    else if(json.action == 'add' && json.status != 0) {
        $('p' + json.place_id).removeClassName('query');
        if(json.status == 17) {
            $('p' + json.place_id).removeClassName('free');
            $('p' + json.place_id).addClassName('sold');
        }
        alert(alyarms[json.status]);
    }

    $('basketCount').innerHTML = sel_count;
    $('basketPrice').innerHTML = cost(sel_price);
}

function basketClear() {
    $$('.selected').each(function(item, index) {
        item.removeClassName('selected');
        item.removeClassName('sold');
        item.addClassName('free');
    });
    new Ajax.Request('/basket/clear/', {
        parameters: {
            event_id: event_id
        },
        onComplete: function(t) {
            var json = t.responseText.evalJSON();
            tableRender();
        }
    });
}

