var isOverBasketItems = false;
var isOverBasketIcon = false;

$(document).ready(function() {
    var config = {
        interval: 0,
        over: showBasket,
        timeout: 1000,
        out: hideBasket
    }

    $('#basket_image, #basket_text').hoverIntent(config);

    $('#basket_table').hover(function() {
        isOverBasketItems = true;
    }, function() {
        isOverBasketItems = false;
        $('div.user #basket_table').fadeOut('slow');
    });

    $('#search, #search_button').hover(searchButtonHoverEnter, searchButtonHoverLeave);

    addImageButtonListeners($('a.image_button'));

    addButtonListeners($('.button:not(.button_active)'));

    $('[id^="add_to_basket_"]').click(addToBasket);
    $('[id^="basket_table_increase_amount_"]').click(increaseAmountInBasket);
    $('[id^="basket_table_decrease_amount_"]').click(decreaseAmountInBasket);
    $('[id^="basket_table_set_amount_"]').click(setAmountInBasket);
    $('[id^="basket_table_remove_"]').click(removeFromBasket);
});

function showBasket(event) {
    $('div.user #basket_table').fadeIn('slow');
    isOverBasketIcon = true;
}


function hideBasket(event) {
    if (!isOverBasketIcon && !isOverBasketItems ) {
        $('div.user #basket_table').fadeOut('slow');
    }
    isOverBasketIcon = false;
}

function addError(id, message) {
    if (!$('#error_' + id).length) {
        var row = $('<tr />', {
            id: 'error_' + id,
            'class': 'error'
        });

        var cell = $('<td />', {
            colspan: '3'
        }).text(message).appendTo(row);

        $('#' + id + '_row').after($(row));

    //$('#error_' + id).slideDown('slow');
    }
}

function removeErrors(id) {
    //$('#error_' + id).slideUp('slow', function() {
    $('#error_' + id).remove();
//});
}

function searchButtonHoverEnter(event) {
    $('#search').css('border-color', '#ff4500');
    $('#search_button > img').attr('src', '/graphics/search_hover.png');
}

function searchButtonHoverLeave(event) {
    $('#search').css('border-color', 'black');
    $('#search_button > img').attr('src', '/graphics/search_regular.png');
}

function addImageButtonListeners(button) {
    var img = button.children('img');

    $(img).hover(function() {
        $(this).attr('src', changeImageType($(this).attr('src'), 'hover'));
    }, function() {
        $(this).attr('src', changeImageType($(this).attr('src'), 'regular'));
    });

    $(img).mousedown(function() {
        $(this).attr('src', changeImageType($(this).attr('src'), 'active'));
    });

    $(img).mouseup(function() {
        $(this).attr('src', changeImageType($(this).attr('src'), 'hover'));
    });
}

function addButtonListeners(button) {
    $(button).hover(function() {
        var img = $(this).children('img:not([id^="wait_"])');
        if (img.length) {
            $(img).attr('src', changeImageType($(img).attr('src'), 'hover'));
        }
        $(this).addClass('button_hover');
    }, function() {
        var img = $(this).children('img:not([id^="wait_"])');
        if (img.length) {
            $(img).attr('src', changeImageType($(img).attr('src'), 'regular'));
        }
        $(this).removeClass('button_hover');
        $(this).removeClass('button_active');
    });

    $(button).mousedown(function() {
        $(this).addClass('button_active');
    });

    $(button).mouseup(function() {
        $(this).removeClass('button_active');
    });
}

function operationInProgress(location, id) {
    return $('#' + location + '_wait_' + id).length
}

function addWait(location, operation, id) {
    var button = $('#' + location + '_' + operation + '_' + id);

    $(button).parent().children().addClass('hidden');

    $(button).after($('<img />').addClass('wait').attr('id', location + '_wait_' + id).attr('src', '/graphics/wait.gif'));
}

function removeWait(location, id) {
    var wait = $('#' + location + '_wait_' + id);

    $(wait).parent().children().removeClass('hidden');

    $(wait).remove();
}

function changeImageType(src, type) {
    return src.substr(0, src.lastIndexOf('_')) + '_' + type + '.png';
}

function addToBasket(event) {
    event.preventDefault();

    if (!$(this).children('.wait').length) {
       
        var ean = getEANFromID($(this).attr('id'));
        var amount = $('#amount_' + ean).val();

        var img = $(this).children('img');

        $(img).css('display', 'none');

        $(img).after($('<img />').addClass('wait').attr('id', 'wait_' + ean).attr('src', '/graphics/wait.gif'));

        $(this).addClass('button_wait');
   
        $.getJSON('/kosik/?do=pridat', {
            ean: ean,
            amount: amount
        }).success(basketChangeSuccess);
    }
}

function increaseAmountInBasket(event) {
    event.preventDefault();

    $(this).parent('td').children('a').css('display', 'none');

    var ean = getEANFromID($(this).attr('id'));

    $(this).after($('<img />').addClass('wait').attr('id', 'basket_table_wait_' + ean).attr('src', '/graphics/wait.gif'))

    var amount = new Number($('#basket_table_amount_' + ean).text()) + 1;

    $.getJSON('/kosik/?do=zmenitMnozstvi', {
        ean: ean,
        amount: amount
    }).success(basketChangeSuccess);
}

function decreaseAmountInBasket(event) {
    event.preventDefault();

    $(this).parent('td').children('a').css('display', 'none');

    var ean = getEANFromID($(this).attr('id'));

    $(this).after($('<img />').addClass('wait').attr('id', 'basket_table_wait_' + ean).attr('src', '/graphics/wait.gif'))

    var amount = new Number($('#basket_table_amount_' + ean).text()) - 1;

    $.getJSON('/kosik/?do=zmenitMnozstvi', {
        ean: ean,
        amount: amount
    }).success(basketChangeSuccess);
}

function setAmountInBasket(event)
{
    var ean = getEANFromID($(this).attr('id'));

    var amount = prompt('Nastavit množství zboží: ', $('#basket_table_amount_' + ean).text());

    if (amount != null)
    {
        if (amount.match(/^[0-9]{1,5}$/)) {

            $(this).css('display', 'none');

            $(this).after($('<img />').addClass('wait').attr('id', 'basket_table_wait_' + ean).attr('src', '/graphics/wait.gif'));

            $.getJSON('/kosik/?do=zmenitMnozstvi', {
                ean: ean,
                amount: amount
            }).success(basketChangeSuccess);

        } else {
            alert('Množství musí být číslo.');
        }
    }
}

function removeFromBasket(event) {
    event.preventDefault();

    var ean = getEANFromID($(this).attr('id'));

    $(this).css('display', 'none');

    $(this).after($('<img />').addClass('wait').attr('id', 'wait_' + ean).attr('src', '/graphics/wait.gif'));

    $.getJSON('/kosik/?do=odstranit', {
        ean: ean
    }).success(basketChangeSuccess);
}

function basketChangeSuccess(data) {
    switch (data['operation_type']) {
        case 'item_added':
            if ($('#basket_table_sum_row').length < 1 ) {
                clearBasketTable();
                addBasketTableHeaderRow();
                addBasketTableSumRow();
                changeBasketImage('full');
            }
            addBasketTableRow(data);
            setBasketTableSum(data['sum']);
            addToBasketButton(data['item']['ean']);
            break;

        case 'item_amount_changed':
            changeBasketTableAmount(data);
            setBasketTableSum(data['sum']);
            addToBasketButton(data['item']['ean']);
            break;

        case 'item_removed':
            removeBasketTableRow(data['item']['ean']);
            setBasketTableSum(data['sum']);
            if ($('#basket_table tr').length < 3) {    
                clearBasketTable();
                addBasketTableEmtpyRow();
                changeBasketImage('empty');
            }
            break;
    }
}

function addToBasketButton(ean) {
    var wait = $('#wait_' + ean);

    if ($(wait).length) {
        $(wait).remove();
        var button = $('#add_to_basket_' + ean);

        $(button).children('img').css('display', 'inline');

        $(button).removeClass('button_wait');

        addButtonListeners(button);

        $('#amount_' + ean).val(1);
    }
}

function clearBasketTable() {
    if (window.location.toString().match(/\/kosik\//)) {
        $('div.content > *').remove();

    } else {
        $('#basket_table > *').remove();
    }
}

function addBasketTableEmtpyRow() {
    if (window.location.toString().match(/\/kosik\//)) {
        var div = $('<div />').addClass('message');
        $('<p />').text('Váš košík je prázdný.').appendTo(div);
        $('div.content').append(div);
    } else {
        var row = $('<tr />');

        $('<td />').text('Váš košík je prázdný.').appendTo(row);

        $('#basket_table').append(row);
    }
}

function addBasketTableHeaderRow() {
    var headerRow = $('<tr />');

    $('<th />').text('Název').appendTo(headerRow);
    $('<th />').text('Cena/ks').appendTo(headerRow);
    $('<th />').text('Ks').appendTo(headerRow);
    $('<th />').text('Cena').appendTo(headerRow);
    $('<th />').appendTo(headerRow);

    $('#basket_table').append(headerRow);
}

function addBasketTableSumRow() {
    var sumRow = $('<tr />').attr('id', 'basket_table_sum_row');

    $('<td />').addClass('sum').attr('colspan', '3').text('Celkem: ').appendTo(sumRow);
    $('<td />').addClass('sum').attr('id', 'basket_table_sum').appendTo(sumRow);
    $('<td />').appendTo(sumRow);

    $('#basket_table').append(sumRow);
}

function setBasketTableSum(sum) {
    $('#basket_table_sum').text(czechCurrency(sum));
}

function addBasketTableRow(data) {
    row = $('<tr />').attr('id', 'basket_table_row_' + data['item']['ean']);

    var name = $('<td />').appendTo(row);

    $('<a />').attr('href', '/' + data['item']['ean'] + '-' + data['item']['name_for_url']).text(data['item']['name']).appendTo(name);

    $('<td />').addClass('number').text(czechCurrency(data['item']['price'])).appendTo(row);

    $('<td />').addClass('number').attr('id', 'basket_table_amount_' + data['item']['ean']).text(data['amount']).appendTo(row);

    $('<td />').addClass('number').attr('id', 'basket_table_price_' + data['item']['ean']).text(czechCurrency(data['price'])).appendTo(row);

    var removeCell = $('<td />').appendTo(row);

    var removeButton = $('<a />').addClass('image_button').attr('id', 'basket_table_remove_' + data['item']['ean']).attr('title', 'Odstranit zboží z košíku').appendTo(removeCell);

    $('<img />').attr('src', '/graphics/remove_regular.png').attr('alt', 'Odstranit zboží z košíku').appendTo(removeButton);

    addImageButtonListeners(removeButton);
    $(removeButton).click(removeFromBasket);

    $('#basket_table_sum_row').before(row);
    
}

function changeBasketTableAmount(data) {
    $('#basket_table_amount_' + data['item']['ean']).text(data['amount']);
    $('#basket_table_price_' + data['item']['ean']).text(czechCurrency(data['price']));

    $('#basket_table_wait_' + data['item']['ean']).remove();
    
    $('#basket_table_increase_amount_' + data['item']['ean']).css('display', 'inline');
    $('#basket_table_decrease_amount_' + data['item']['ean']).css('display', 'block');
    
    $('#basket_table_set_amount_' + data['item']['ean']).css('display', 'inline');
}

function removeBasketTableRow(ean) {
    $('#basket_table_row_' + ean).remove();
}

function getEANFromID(id) {
    return id.substr(id.lastIndexOf('_') + 1);
}


function changeBasketImage(state) {
    $('#basket_image').attr('src', '/graphics/basket_' + state + '.png');
}

function czechCurrency(number) {
    return $.formatNumber(number, {
        format: '##,##0.00 Kč',
        locale: 'cz'
    });
}
