/* Minification failed. Returning unminified contents.
(177,19-20): run-time error JS1014: Invalid character: `
(177,20-21): run-time error JS1014: Invalid character: #
(177,22-23): run-time error JS1193: Expected ',' or ')': {
(177,44-45): run-time error JS1014: Invalid character: `
(177,45-46): run-time error JS1195: Expected expression: )
(180,25-26): run-time error JS1003: Expected ':': (
(180,28-29): run-time error JS1100: Expected ',': {
(182,13-14): run-time error JS1002: Syntax error: }
(185,50-51): run-time error JS1004: Expected ';': {
(190,5-6): run-time error JS1002: Syntax error: }
(192,31-32): run-time error JS1004: Expected ';': {
(237,6-7): run-time error JS1195: Expected expression: ,
(239,26-27): run-time error JS1004: Expected ';': {
(280,6-7): run-time error JS1195: Expected expression: ,
(282,29-30): run-time error JS1195: Expected expression: )
(282,31-32): run-time error JS1004: Expected ';': {
(285,6-7): run-time error JS1195: Expected expression: ,
(287,33-34): run-time error JS1195: Expected expression: )
(287,35-36): run-time error JS1004: Expected ';': {
(341,6-7): run-time error JS1195: Expected expression: ,
(343,32-33): run-time error JS1195: Expected expression: )
(343,34-35): run-time error JS1004: Expected ';': {
(345,15-16): run-time error JS1014: Invalid character: `
(345,16-17): run-time error JS1014: Invalid character: #
(345,18-19): run-time error JS1193: Expected ',' or ')': {
(345,40-41): run-time error JS1014: Invalid character: `
(345,41-42): run-time error JS1195: Expected expression: )
(352,15-16): run-time error JS1014: Invalid character: `
(352,16-17): run-time error JS1014: Invalid character: #
(352,18-19): run-time error JS1193: Expected ',' or ')': {
(352,41-42): run-time error JS1014: Invalid character: `
(352,42-43): run-time error JS1195: Expected expression: )
(353,10-11): run-time error JS1195: Expected expression: )
(329,9,340,10): run-time error JS1018: 'return' statement outside of function: return {
            'type': 'addBasket',
            'ticketId': ticketId,
            'shippingTypeId': shippingTypeId,
            'quantity': quantity,
            'eventId': eventId,
            'promoId': promoId,
            'currencyId': currencyId,
            'referrer': referrer,
            'isWidget': isWidget,
            'isEmbedTickets': isEmbedTickets
        }
(320,13-19): run-time error JS1018: 'return' statement outside of function: return
(289,13-19): run-time error JS1018: 'return' statement outside of function: return
 */
var selectedTicket = '',
    selectedShipType = '',
    $ticketList,
    $shiptypeList,
    $AddTickets,
    $AddTicketsModal,
    disable = true,
    isWidget = false,
    isEmbedTickets = false,
    ticketInfoSelectorId = '';

var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);

$(document).ready(function () {
    AddTicket.Init();
});

$.fn.radioHandler = function () {
    var selector = $(this).selector;
    $(this).each(function () {
        $(this).click(function (e) { AddTicket.HandleRadioFocus($(this), e, selector); });
    });
};

var AddTicket = {
    Init: function () {

        $AddTickets = $('#AddTickets');
        $ResaleEnabledMessage = $('#resaleMessage');
        $ResalePromoterInfo = $('#promoter-resale-info');

        if (isSafari) {
            $('#add_button_sticky .but').addClass('safari');
        }

        isWidget = $AddTickets.data('iswidget');
        isEmbedTickets = $AddTickets.data('isembedtickets');

        $ticketList = $('#tickets input[type=radio]');
        $ticketList.radioHandler();

        $shiptypeList = $('#type input[type=radio]');
        $shiptypeList.radioHandler();

        // auto select when single ticket is displayed
        $ticketList.first().trigger('click');

        $AddTicketsModal = $('#AddTicketsModal');

        $('#addToBasket').click(function (e) {
            AddTicket.AddToBasket(e);
        });

        $('#buynow').click(function (e) {
            AddTicket.BuyNow(e);
        });

        $('#checkout').click(function (e) {
            AddTicket.BuyNow(e);
        });

        $('#buynowSticky').click(function (e) {
            $AddTickets.show();
            $AddTicketsModal.modal('open');
        });

        $('#AddTicketsModal .modal-close').click(function (e) {
            $AddTickets.hide();
            $AddTicketsModal.modal('close');
            $('#item-added').text("");
            $('#checkout-button').hide();
            if ($('.info-hover-div').css('visibility') === 'visible')
                $('.info-hover-div').css('visibility', 'hidden');
        });

        AddTicket.ToggleTicketStatus();
        disable = false;
        AddTicket.SetQuantityDropDownListItemCount();

        if ($ResaleEnabledMessage.length) {
            if ($ResaleEnabledMessage.val().length > 0) {
                $ResalePromoterInfo.html("<a href=\"/tickets/resale\"> " + $ResaleEnabledMessage.val() + "</a>");
            }
        }
    },

    HandleRadioFocus: function ($sender, e, selector) {
        if (selector.indexOf('tickets') !== -1) {
            // stop multiple clicks on same ticket type after selected
            if ($sender.attr('id') === selectedTicket) {
                return;
            }

            AddTicket.ResetLoading();
            AddTicket.SetQuantityDropDownListItemCount();

            // reset ship types to disabled
            $shiptypeList.attr('disabled', 'disabled').prop('checked', false);

            selectedTicket = $sender.attr('id');

            $.each($sender.data('shiptype'), function (i, item) {
                $('#shiptype' + item.sid).removeAttr('disabled').val(item.sid);

                // retain selected ship type between selection of ticket
                if (item.sid === selectedShipType) {
                    $('#shiptype' + selectedShipType).trigger('click');
                }
            });

            // auto select first ship type if selection is empty
            if (!$('#type input[type=radio]:checked').length) {
                $('#type input:not([disabled])').first().trigger('click');
            }
        } else {
            selectedShipType = $sender.val();
        }
    },

    SetQuantityDropDownListItemCount: function () {
        var zeroPriced = $('#tickets input:checked').closest('li').data('zeropriced');

        if (zeroPriced === 1) {
            $('#quantity .dropdown').addClass('disabled');
            for (var i = 1; i <= 6; i++) {
                $('#quantity li[data-id=' + i + ']').hide();
            }

            $('#quantity li').removeClass('selected');
            $('#quantity li[data-id=1]').addClass('selected');
            $('#quantity div > span').text(1);

            AddTicket.disableDropDownForZeroPriceTickets($('#quantity > div'));
        } else {
            var maxTicketsAvailable = $('#tickets input:checked').closest('li').data('max-tickets-available');
            var maxTicketsForParent = $('#tickets input:checked').closest('li').data('parent-max-tickets');

            for (var j = 0; j <= maxTicketsForParent; j++) {
                $('#quantity li[data-id=' + j + ']').hide();
            }

            for (var k = 0; k <= maxTicketsAvailable; k++) {
                $('#quantity li[data-id=' + k + ']').show();
            }

            AddTicket.reenableDropDownForZeroPriceTickets($('#quantity > div'));
            $('#quantity .dropdown').removeClass('disabled');
        }
    },

    disableDropDownForZeroPriceTickets: function (e) {
        e.removeClass('arrow-down');
        e.removeClass('disabled');
        e.removeClass('dropdown');
        e.removeClass('but');
        e.addClass('zeroPriceTicket');
    },

    reenableDropDownForZeroPriceTickets: function (e) {
        e.addClass('arrow-down');
        e.addClass('disabled');
        e.addClass('dropdown');
        e.addClass('but');
        e.removeClass('zeroPriceTicket');
    },

    ToggleTicketStatus: function () {
        AddTicket.ResetTicketInfo();
        setBuyOrGetTicketText('.ticket-list-selector input:checked');

        $('.ticket-list-selector li').hover(
            function (e) {
                ticketInfoSelectorId = $(e.target).closest('ul').data('ticket-info-selector-id');

                var saleInfo = $(e.target).closest('li').data('info');

                $(`#${ticketInfoSelectorId}`).html(saleInfo);

                setBuyOrGetTicketText(e.target);
            }, function () {
                AddTicket.ResetTicketInfo();
            }
        );

        function setBuyOrGetTicketText(selector) {
            $('#buynow').text(($(selector).closest('li').data('zeropriced') === 1)
                ? $AddTickets.data('gettickets')
                : $AddTickets.data('buytickets'));
        }
    },

    AddToBasket: function (e) {
        e.preventDefault();

        $('#addToBasket').addClass('loading');

        var payload = AddTicket.BuildPostMessage();

        $.ajax({
            type: 'POST',
            url: '/Output/baskethandler.ashx',
            data: payload,
            dataType: 'json'
        })
            .done(function (data) {
                if (data.status) {
                    if (!payload.isWidget) {
                        // added to basket - see usernav.js
                        selectedControl = control.BASKET;
                        Basket.LoadOnState();

                        if ($('#checkout-button').length > 0 && window.innerWidth < 664) {
                            $('#item-added').text(data.count + " ticket" + (data.count > 1 ? "s" : "") + " in basket");
                            $('#checkout-button').show();
                        }
                    } else {
                        if (location.search) {
                            window.location.replace('/widget/details/login-using-ra' + location.search + '&eventId=' + payload.eventId);
                        }
                        else {
                            window.location.replace('/widget/details/login-using-ra' + location.search + '?eventId=' + payload.eventId);
                        }
                    }
                } else {
                    // display error
                }

                disable = false;
            })
            .fail(function (data) {
                // display fail message
            });

        AddTicket.ResetLoading();

        $('body, html').animate({ scrollTop: 0 }, 100);
    },

    BuyNow: function (e) {
        e.preventDefault();

        $('#buynow').addClass('loading');

        var payload = AddTicket.BuildPostMessage();

        $.ajax({
            type: 'POST',
            url: '/Output/baskethandler.ashx',
            data: payload,
            dataType: 'json'
        })
            .done(function (data) {
                if (payload.isWidget) {
                    if (data.status === 0) {
                        window.location.replace('/widget/payment/error?eventId=' + payload.eventId);
                        return;
                    } else {
                        window.location.replace('/widget/details/login-using-ra?eventId=' + payload.eventId);
                    }
                }
                else if (data.status) {
                    if (payload.isEmbedTickets) {
                        window.top.location.href = '/shop/details';
                    }
                    window.location.href = '/shop/details';
                } else {
                    if (payload.isEmbedTickets) {
                        window.top.location.href = '/shop/basket.aspx';
                    }
                    window.location.href = '/shop/basket.aspx';
                }

                disable = false;
            })
            .fail(function (data) {
                // display fail message
            });

        AddTicket.ResetLoading();
    },

    ResetLoading: function () {
        $('#addToBasket').removeClass('loading');
        $('#buynow').removeClass('loading');
    },

    BuildPostMessage: function () {
        if (disable || $('#tickets input[type=radio]:checked').length === 0) {
            return;
        }

        disable = true;

        var selectedTicket = $('#tickets input:checked');

        var ticketId = parseInt(selectedTicket.val());
        var eventId = selectedTicket.data('eventid');

        if (!eventId)
            eventId = $AddTickets.data('eventid');

        var shippingTypeId = parseInt($('#type input:checked').val());

        var isZeroPriced = $('#quantity > .zeroPriceTicket');

        var quantity;

        if (isZeroPriced.length > 0) {
            quantity = 1;
        } else {
            quantity = parseInt($('#AddTickets .dropdown li.selected').data('id'));
        }

        var promoId = $AddTickets.data('promoid');
        var currencyId = $AddTickets.data('currencyid');

        if (ticketId === 0 || isNaN(ticketId)
            || shippingTypeId === 0 || isNaN(shippingTypeId)) {
            disable = false;
            return;
        }

        var referrer = '';

        if (document.referrer !== undefined && document.referrer !== null) {
            referrer = document.referrer;
        }

        return {
            'type': 'addBasket',
            'ticketId': ticketId,
            'shippingTypeId': shippingTypeId,
            'quantity': quantity,
            'eventId': eventId,
            'promoId': promoId,
            'currencyId': currencyId,
            'referrer': referrer,
            'isWidget': isWidget,
            'isEmbedTickets': isEmbedTickets
        };
    },

    ResetTicketInfo: function () {
        $('.ticket-list-selector').each(function () {
            $(`#${ticketInfoSelectorId}`).html('&nbsp;');
            ticketInfoSelectorId = '';
            var selectedTicket = $(this).find('input:checked').closest('li');

            var info = selectedTicket.data('info');
            var closestInfoSelectorId = selectedTicket.closest('ul').data('ticket-info-selector-id');

            $(`#${closestInfoSelectorId}`).html(info);
        });
    }
};;
