var minicartContainer = null;
var minicartURL = null;
var minicartAppCallback = null;
var minicartHTML = "<dl>"
                + "<dd id='minicart-title'>Minicart</dd>"
                + "<dd id='minicart-items-title'>items</dd>"
                + "<dd id='minicart-item-count'></dd>"
                + "<dd id='minicart-total-title'>total</dd>"
                + "<dd id='minicart-total-price'></dd>"
                + "</dl>";

function setCart(params) {
    var parameters = $H(params);

    // set up the minicart in the DOM
    minicartContainer = parameters.unset('minicart');
    minicartURL = parameters.unset('url');
    minicartAppCallback = parameters.unset('callback');

    // request localize labels
    if (minicartContainer) {
        parameters.set('labels', ['minicart','items','total']);
    }

    // set the minicart contents
    updateMinicart("/service/cart", {method:'post', parameters:parameters});
}

function addOrderItem(sku, qty) {
    var uri = "/service/order/item/" + sku;
    updateMinicart(uri, {method:'post', parameters:{qty:qty}});
}

function addAdrItem(sku, qty) {
    var uri = "/service/adr/item/" + sku;
    updateMinicart(uri, {method:'post', parameters:{qty:qty}});
}

function updateMinicart(uri, params) {
    new Ajax.Request(minicartURL + uri, {
        requestHeaders: {Accept:'application/json'},
        method: params.method,
        parameters: params.parameters,

        onSuccess: function(response) {
            var json = response.responseJSON;

            // update the optional html
            if (minicartContainer) {
                minicartContainer.innerHTML = minicartHTML;  //load html for first time and in case of previous error
                try {
                    $A(json.labels.entry).each(function(label) {
                        switch (label.key) {
                            case 'minicart': $('minicart-title').innerHTML = label.value; break;
                            case 'items': $('minicart-items-title').innerHTML = label.value; break;
                            case 'total': $('minicart-total-title').innerHTML = label.value; break;
                        }
                    });
                    minicartHTML = minicartContainer.innerHTML;  // save now with localized tags
                } catch(e) {}
            }

            minicartCallback(json);
        },

        onFailure: function(response) {
            if(minicartContainer) {
                minicartContainer.innerHTML = response.responseText;
            }
        }
    });
}

// this is also called by the shop DwrCart.js when the cart is updated
function minicartCallback(cart) {

    // update the optional html
    if (minicartContainer) {
        minicartContainer.innerHTML = minicartHTML; //load in case of first time or following an error
        $('minicart-item-count').innerHTML = cart.itemCount;
        $('minicart-total-price').innerHTML = cart.priceAndPoints;
    }

    // call optional callback
    if (minicartAppCallback) {
        minicartAppCallback(cart);
    }
}
