﻿var Basket = function(button, cart, customerid) {
    this.setButton(jQuery('#' + button));
    this.setCart(jQuery('#' + cart));
    this.setCustomerId(customerid);

    var instance = this;
    jQuery.getJSON("http://online2.citybreak.com/Search/Xml/Basket/Basket.aspx?callback=?",
                {
                    onlineid: this.customerid,
                    format: 'json'
                }, function(data) {
                    instance.handleJson(data);
                });
}

function handleJson(data) {
    $(".totalprice").text(data.Price + " " + (data.Currency || "SEK"));

    var categories = {}
    if (data && data.Groups) {
        // Create better structure. Group on category.
        for (var i = 0; i < data.Groups.length; ++i) {
            var group = data.Groups[i];
            for (var j = 0; j < group.Products.length; ++j) {
                var product = group.Products[j];
                if (categories[product.CategoryId] == null) {
                    categories[product.CategoryId] = {}
                }
                var category = categories[product.CategoryId];
                if (category[group.Id] == null) {
                    category[group.Id] = { id: group.Id, name: group.Name, products: [] };
                }
                category[group.Id].products.push(product);
            }
        }
    }
    var html = "";
    for (var categoryId in categories) {
        var category = categories[categoryId];
        html += '<div class="category">' + Basket.staticCategories[categoryId] + '</div>';
        for (var groupId in category) {
            var group = category[groupId];
            html += '<div class="group">' + group.name + '</div>';
            html += '<table><body><tr class="hide"><th class="hide"></th></tr>';
            for (var i = 0; i < group.products.length; ++i) {
                var product = group.products[i];
                //product.Start innehåller tex "/Date(1302818400000)".
                var startDate = new Date(Number(product.Start.substr(6, product.Start.length - 8)));
                var endDate = new Date(Number(product.End.substr(6, product.End.length - 8)));
                var strDateSpan = this.formatBasketDate(startDate, endDate);

                html += '<tr>';
                html += '<td>' + product.Name + ' ' + strDateSpan + '</td>';
                html += '<td class="price">' + (this.totalPrice(product)) + ' ' + product.Currency + '</td>';
                html += '</tr>';
            }
            html += '</tbody></table>';
        }
    }

    this.cart.children(".loading").hide();
    this.cart.children(".basketdata").html(html).show();
    this.loaded = true;
}

// These may be overridden from codebehind with values directly from visit
Basket.staticCategories = {
    1: "Bo",
    2: "Evenemang",
    3: "Transport",
    4: "Göra",
    5: "Övrigt",
    6: "Golf",
    7: "System",
    8: "Produkter"
};

Basket.prototype =
{
    mapIdx: 0,
    button: null,
    setButton: function(b) {
        var o = this;
        this.button = b;
        this.button.children('a').eq(0).click(function(e) { e.preventDefault(); o.toggle(); });
    },
    cart: null,
    setCart: function(c) { this.cart = c; },
    customerid: null,
    setCustomerId: function(id) { this.customerid = id; },
    loaded: false,
    toggle: function() {
        if (this.cart.is(":hidden") && this.loaded == false) {

            this.cart.children(".loading").show();
            this.cart.children(".basketdata").hide();
        }
        this.cart.toggle();
    },
    handleJson: function(data) {
        this.cart.find(".totalprice").text(data.Price + " " + (data.Currency || "SEK"));
        $('#cartlink span:last').text(data.Price + " " + (data.Currency || "SEK"));
        var categories = {}
        if (data && data.Groups) {
            // Create better structure. Group on category.
            for (var i = 0; i < data.Groups.length; ++i) {
                var group = data.Groups[i];
                for (var j = 0; j < group.Products.length; ++j) {
                    var product = group.Products[j];
                    if (categories[product.CategoryId] == null) {
                        categories[product.CategoryId] = {}
                    }
                    var category = categories[product.CategoryId];
                    if (category[group.Id] == null) {
                        category[group.Id] = { id: group.Id, name: group.Name, products: [] };
                    }
                    category[group.Id].products.push(product);
                }
            }
        }
        var html = "";
        for (var categoryId in categories) {
            var category = categories[categoryId];
            html += '<div class="category">' + Basket.staticCategories[categoryId] + '</div>';
            for (var groupId in category) {
                var group = category[groupId];
                html += '<div class="group">' + group.name + '</div>';
                html += '<table><body><tr class="hide"><th class="hide"></th></tr>';
                for (var i = 0; i < group.products.length; ++i) {
                    var product = group.products[i];
                    //product.Start innehåller tex "/Date(1302818400000)".
                    var startDate = new Date(Number(product.Start.substr(6, product.Start.length - 8)));
                    var endDate = new Date(Number(product.End.substr(6, product.End.length - 8)));
                    var strDateSpan = this.formatBasketDate(startDate, endDate);

                    html += '<tr>';
                    html += '<td>' + product.Name + ' ' + strDateSpan + '</td>';
                    html += '<td class="price">' + (this.totalPrice(product)) + ' ' + product.Currency + '</td>';
                    html += '</tr>';
                }
                html += '</tbody></table>';
            }
        }

        this.cart.children(".loading").hide();
        this.cart.children(".basketdata").html(html).show();
        this.loaded = true;
    },
    totalPrice: function(product) {
        var price = product.Price;
        if (product.Subproducts != null) {
            for (var i = 0, l = product.Subproducts.length; i < l; ++i)
                if (!product.Subproducts[i].PriceIsIncludedInTotal)
                price += product.Subproducts[i].Price;
        }
        return price;
    },
    formatBasketDate: function(dateStart, dateEnd) {
        var basketDates;
        if (dateStart.getMonth() == dateEnd.getMonth()) {
            basketDates = dateStart.getDate() + " - " + dateEnd.getDate() + " " + this.getMonthAbbr(dateStart.getMonth());
        }
        else {
            basketDates = dateStart.getDate() + " " + this.getMonthAbbr(dateStart.getMonth()) + " - " + dateEnd.getDate() + " " + this.getMonthAbbr(dateEnd.getMonth());
        }
        return basketDates;
    },
    getMonthAbbr: function(mon) {
        var month = new Array(12);
        month[0] = "jan";
        month[1] = "feb";
        month[2] = "mar";
        month[3] = "apr";
        month[4] = "maj";
        month[5] = "jun";
        month[6] = "jul";
        month[7] = "aug";
        month[8] = "sep";
        month[9] = "okt";
        month[10] = "nov";
        month[11] = "dec";

        return month[mon];
    }

}

