﻿Type.registerNamespace("WantTheLook.Core.Basket.Preview");
Type.registerNamespace("WantTheLook.Core.Basket.Preview.Constructor");

WantTheLook.Core.Basket.Preview.Constructor = $.Class.extend({
    PreviewPlaceholder: null,
    CloseControlArray: null,
    BasketData: null,
    init: function () {
        this.PreviewPlaceholder = arguments[0];
        this.CloseControlArray = arguments[1];
        this.OpenControlArray = arguments[2];

        this.BindEvents(this.OpenControlArray, this.Show);
        this.BindEvents(this.CloseControlArray, this.Hide);
    },
    BindEvents: function (arrControls, event) {
        for (var i = 0; i < arrControls.length; i++) {
            arrControls[i].unbind();
            arrControls[i].bind('click', event.bind(this));
        }
    },
    ToggleUIControls: function (arrControls) {
        for (var i = 0; i < arrControls.length; i++) {
            var tmp = arrControls[i].find('strong');
            switch (tmp.html()) {
                case 'Open':
                    tmp.html('Close');
                    break;
                case 'Close':
                    tmp.html('Open');
                    break;
            }
        }
    },
    Update: function (e) {
        this.RenderItems(e.BasketItems);
        $('#tdPreviewTotal').html(e.BasketTotal);
        $('#tdPreviewSavings').html(e.TotalSavings);
        var FreeDelivery = $('#soFreeDeliveryQual');
        var LoyaltyPoints = $('#soLoyaltyPointsQual');
        var placeholder = $('#dvSpendOver').show();
        var basketPreview = $('.basketPreview');

        placeholder.hide();
        switch (e.AmountTillFreeDelivery) {
            case '':
                placeholder.show();
                FreeDelivery.show();
                FreeDelivery.html('You have qualified for <span>FREE DELIVERY</span>');
                break;
            case 'na':
                FreeDelivery.hide();
                placeholder.hide();
                break;
            default:
                placeholder.show();
                FreeDelivery.show();
                FreeDelivery.html('Spend another ' + e.AmountTillFreeDelivery + ' for <span>FREE DELIVERY</span>');
                break;
        }

        if (e.LoyaltyBonus) {
            placeholder.show();
            if (e.LoyaltyBonus.Outstanding <= 0) {
                LoyaltyPoints.html('You have qualified for <span>' + e.LoyaltyBonus.Name + '</span>');
            } else {
                LoyaltyPoints.html('Spend another ' + e.LoyaltyBonus.FormattedValue + '<br/><span>for ' + e.LoyaltyBonus.Name + '</span>');
            }
            LoyaltyPoints.show();
        } else {
            placeholder.hide();
            LoyaltyPoints.hide();
        }

        // Show/hide placeholder.
        placeholder.show();

        var basketPreviewVisible = basketPreview.is(":visible");

        basketPreview.show();
        var flyouts = $('.flyouts[innerHTML!=""]:visible');

        if (flyouts != undefined && flyouts.length > 0) {
            // Already showing.
        }
        else {
            placeholder.hide();
        }

        if (!basketPreviewVisible) {
            basketPreview.hide();
        }
    },
    Show: function () {
        this.BindEvents(this.OpenControlArray, this.Hide);
        this.ToggleUIControls(this.OpenControlArray);
        this.PreviewPlaceholder.slideDown();
        return false;
    },
    Hide: function () {
        this.BindEvents(this.OpenControlArray, this.Show);
        this.ToggleUIControls(this.OpenControlArray);
        this.PreviewPlaceholder.slideUp();
        return false;
    },
    RenderItems: function (items) {
        var htmlItems = $('#tblBasketSummary > tbody');
        htmlItems.html('');
        for (var i = 0; i < items.length; i++) {
            htmlItems.append(items[i]);
        }


    },
    RemoveItem: function (ID) {
        WantTheLook.Core.Basket.Controller.RemoveFromBasket(ID, this.ItemRemoved.bind(this));
    },
    ItemRemoved: function (e) {
        WantTheLook.Core.Basket.Summary.SetSummaryValues(e);
    }
});
