﻿jQuery(document).ready(function() {
    Basket.Booking.init();
});


var Basket = {
    Preorder: {
        stepSubmitAttempted: false
    },
    Booking:
    {
        handlers: {
            bookedProductsAmount: '/layouts/bordershop/BookingHandlers/BookedProductAmount.ashx',
            bookProduct: '/layouts/bordershop/BookingHandlers/BookProduct.ashx'
        },
        init: function() {
            if (jQuery('#uiFilledBasket') || jQuery('#uiEmptyBasket')) {
                Basket.Booking.getBasketContent(function(msg) {
                    Basket.Booking.defineBasketLinkState(parseInt(msg));
                    jQuery('#uiBasketProductsCount').get(0).innerHTML = msg;
                });
            }
        },

        defineBasketLinkState: function(productsCount) {
            if (productsCount > 0) {
                jQuery('div[id=uiFilledBasket]').show();
                jQuery('div[id=uiEmptyBasket]').hide();
            }
            else {
                jQuery('div[id=uiFilledBasket]').hide();
                jQuery('div[id=uiEmptyBasket]').show();
            }
            
            //set basket link title
            if (productsCount > 1) {
                jQuery('a[id*=uiLnkPreorderFirstStep]').get(0).innerHTML = SitecoreTranslator.Bordershop.GetBasketMultipleLinkTitle();
            }
            else {
                jQuery('a[id*=uiLnkPreorderFirstStep]').get(0).innerHTML = SitecoreTranslator.Bordershop.GetBasketLinkTitle();
            }
            
            //show basket line, preventing blinking
            jQuery('#mainNavigation .basketContainer').show();
        },

        bookProduct: function(productId, quantity, preorderControl) {

            if (Basket.Booking.validateAmount(quantity)) {
                //show first-time notification
                if (jQuery('#uiEmptyBasket').is(':visible')) {
                    jAlert(SitecoreTranslator.Bordershop.GetBookingFirstNotificationText(),
                        SitecoreTranslator.Bordershop.GetBookingFirstNotificationTitle(),
                        function(r) { Basket.Booking.makeBookingRequest(productId, quantity); Basket.Booking.updateProductPreorderTools(preorderControl); });

                }
                else {
                    Basket.Booking.makeBookingRequest(productId, quantity);
                    Basket.Booking.updateProductPreorderTools(preorderControl);
                }
            }
            else {
                jAlert(SitecoreTranslator.Bordershop.GetBookingIncorrectAmountMessageText(),
                        SitecoreTranslator.Bordershop.GetBookingIncorrectAmountMessageTitle());
            }

        },
        makeBookingRequest: function(productId, quantity) {
            Basket.Booking.sendBookingRequest(productId,
                                            quantity,
                                            function(msg) {
                                                Basket.Booking.updateLink();
                                            },
                                            function() {
                                                jAlert(SitecoreTranslator.Bordershop.GetBookingNotificationErrorText(), SitecoreTranslator.Bordershop.GetBookingNotificationErrorTitle());
                                            });
        },

        updateProductPreorderTools: function(button) {
            var preorderBlock = jQuery(button).parents('.preorder');
            preorderBlock.children('.buttonWrapper').hide();
            preorderBlock.children('input[type="text"]').hide();
            preorderBlock.children('.preorderLink').show();
        },

        updateBasketCount: function() {
            Basket.Booking.getBasketContent(function(msg) {
                Basket.Booking.defineBasketLinkState(parseInt(msg));
                jQuery('#uiBasketProductsCount').get(0).innerHTML = msg;
            });
        },

        updateLink: function() {
            Basket.Booking.getBasketContent(function(msg) {
                Basket.Booking.defineBasketLinkState(parseInt(msg));
                jQuery('#uiBasketProductsCount').get(0).innerHTML = msg;
                /*jAlert(SitecoreTranslator.Bordershop.GetBookingNotificationSucceedText(), SitecoreTranslator.Bordershop.GetBookingNotificationSucceedTitle());*/
            });

        },

        validateAmount: function(amount) {
            return amount.match('^[0-9]{1,3}$');
        },

        getBasketContent: function(succeedCallback, failCallback) {
            jQuery.ajax({
                type: "POST",
                url: Basket.Booking.handlers.bookedProductsAmount,
                data: {},
                dataType: "text",
                success: function(msg) {
                    if (succeedCallback) {
                        succeedCallback(msg);
                    }

                },
                error: function() {
                    if (failCallback) {
                        failCallback();
                    }
                }
            }

                );
        },

        sendBookingRequest: function(productId, quantity, succeedCallback, failCallback) {
            jQuery.ajax({
                type: "POST",
                url: Basket.Booking.handlers.bookProduct,
                data: { offerId: productId,
                    amount: quantity
                },
                contentType: "application/x-www-form-urlencoded; charset=utf-8",
                dataType: "text",
                success: function(msg) {
                    if (succeedCallback) {
                        succeedCallback(msg);
                    }

                },
                error: function() {
                    if (failCallback) {
                        failCallback();
                    }
                }
            });
        }
    }
}