/// <reference path="shop.js" />
/// prointernet Grid Shop Basket
/// Version: 2.0.8006.30174

function GridShopBasket(shop) {
    this.shop = shop;
    this.layer = $("#basketLayer");
    this.data = {
        count: 0,
        totalCount: 0,
        items: []
    }

}

GridShopBasket.prototype.init = function () {
    var base = this;

    if (base.data && base.data.count > 0) {

        var create = !document.getElementById("basketLayer");
        if (base.layer.length == 0 || create) {

            if (base.shop.config.useBasketLayer) {
                var basketLayerTarget = base.shop.config.basketLayerTarget;
                base.layer = $("<div id='basketLayer'></div>").appendTo($(basketLayerTarget));
                base.layer.append($("<span class='h2' id='basketLayer-title'>Votre liste de surveillance</span>"));
                base.layer.append($("<div class='items'></div>"));
            }

        }

        var itemContainer = base.layer.find(".items");
        itemContainer.empty();

        $.each(base.data.items, function (idx, data) {

            var item = $("<div class='item' data-id='" + data.id + "'></div>").appendTo(itemContainer);
            var itemImage = $("<div class='img'></div>").appendTo(item);
            if (data.image) {
                itemImage.append($("<img src='" + data.image + "' />"));
            }

            var itemLabel = $("<div class='title'><span class='name'>" + data.label + "</span></div>").appendTo(item);
            if (base.shop.config.listCountBox) {
                itemLabel.prepend($("<span class='count'>" + data.count + "</span>"));
            }

            if (data.description && data.description != "") {
                var itemDescription = $("<div class='desc'>" + data.description + "</div>").appendTo(item);
            }

            var itemRemove = $("<a class='remove'><span>Remove</span></a>").appendTo(item);

            itemRemove.click(function () {
                base.remove(data.id);
            });
        });

        btnCheckout = base.layer.find("a.checkout");
        if (btnCheckout.length == 0) {
            btnCheckout = $("<a href='javascript:;' class='checkout'><span>demande</span></a>").appendTo(base.layer);
            btnCheckout.click(function () {
                base.shop.setState("checkout");
            });
        }

        base.layer.show();
    } else {
        base.layer.hide();
    }

}

GridShopBasket.prototype.show = function (newData) {
    var me = this;

    if (newData) {
        me.data = newData;
    }

    me.init();
    me.focus();

}

GridShopBasket.prototype.focus = function (hover) {

    console.log("focus")
    if ($("#checkoutLayer").is(":visible")) {
        return;
    }



    var base = this;

    clearTimeout(base.focusTimeout);

    if (!hover) {
        base.focusTimeout = setTimeout(function () {
            base.layer.removeClass("open");

        }, 5000);
    }

    base.layer.addClass("highlight");
    setTimeout(function () {
        base.layer.removeClass("highlight");
    }, 500);

    base.markListItems();
}

GridShopBasket.prototype.add = function (dataId, count, callback) {
    var base = this;

    var data = {
        id: dataId,
        dataType: base.shop.config.dataType,
        count: (typeof count == "number" ? count : 1)
    }

    if (typeof count == "object") {
        data = $.extend(data, count);
    }

    base.shop.trigger(GridShopEvents.addToBasket, data);

    var allowToggle = base.shop.config.toggleAddToBasket;
    var exists = base.data.items.some(function (itm) { return itm.id == dataId });

    if (allowToggle && exists) {

        base.remove(dataId, callback);

    }
    else {

        base.shop.query("add", data, function (result) {
            base.data = result.basket;
            base.init();

            if (callback) {
                callback(result);
            }

            base.focus();
        });
    }

}

GridShopBasket.prototype.update = function (dataId, data, callback) {
    var base = this;

    data = $.extend(data, {
        id: dataId,
        dataType: base.shop.config.dataType
    });

    if (typeof count == "number") {
        data.count = data;
    }

    base.shop.query("update", data, function (result) {
        base.data = result.basket;
        base.init();

        if (callback) {
            callback(result);
        }

        base.focus();
    });
}

GridShopBasket.prototype.remove = function (dataId, callback) {
    var base = this;

    base.shop.query("remove", {
        id: dataId
    }, function (result) {
        base.data = result.basket;
        base.init();

        if (callback) {
            callback(result);
        }

        base.focus();
    });
}

GridShopBasket.prototype.markListItems = function () {
    var base = this;

    $("[data-id]").removeClass("selected");

    $.each(this.data.items, function (idx, data) {
        $("[data-id='" + data.id + "']").addClass("selected");
    });
}

GridShopBasket.prototype.load = function (callback) {
    var base = this;

    base.shop.query("getBasket", null, function (result) {
        base.data = result;

        if (callback) {
            callback();
        }
    });
}