(function(context,$) { "use strict"; context.JK = context.JK || {}; context.JK.ShoppingCartScreen = function(app) { var logger = context.JK.logger; var jamTrackUtils = context.JK.JamTrackUtils; var $screen = null; var $content = null; function beforeShow(data) { loadShoppingCarts(); } function afterShow(data) { } function afterHide() { jamTrackUtils.checkShoppingCart(); } function events() { $screen.find("a.remove-cart").on('click', removeCart); $screen.find("a.proceed-checkout").on('click', proceedCheckout); } function proceedCheckout(e) { e.preventDefault(); if (!context.JK.currentUserId) { window.location = '/client#/checkoutSignin'; } else { app.user().done(function(user) { if(user.reuse_card) { window.location = '/client#/checkoutOrder'; } else { window.location = '/client#/checkoutPayment'; } }) } } function removeCart(e) { e.preventDefault(); var options = {}; options.id = $(e.target).attr("cart-id"); rest.removeShoppingCart(options) .done(loadShoppingCarts) .fail(app.ajaxError); } function clearContent() { $content.empty(); } function loadShoppingCarts() { clearContent(); rest.getShoppingCarts() .done(renderShoppingCarts) .fail(app.ajaxError); } function renderShoppingCarts(carts) { var data = {}; var latest_cart = carts[carts.length - 1]; var $latestCartHtml = ""; if (latest_cart) { $latestCartHtml = $( context._.template( $('#template-shopping-cart-header').html(), latest_cart, {variable: 'data'} ) ); } var sub_total = 0; $.each(carts, function(index, cart) { sub_total += parseFloat(cart.product_info.price) * parseFloat(cart.quantity); }); data.sub_total = sub_total.toFixed(2); data.carts = carts; var $cartsHtml = $( context._.template( $('#template-shopping-cart-body').html(), data, {variable: 'data'} ) ); $content.append($latestCartHtml).append($cartsHtml); events(); } function initialize() { var screenBindings = { 'beforeShow': beforeShow, 'afterShow': afterShow, 'afterHide' : afterHide }; app.bindScreen('shoppingCart', screenBindings); $screen = $("#shoppingCartScreen"); $content = $screen.find(".shopping-cart-content"); if($screen.length == 0) throw "$screen must be specified"; if($content.length == 0) throw "$content must be specified"; } this.initialize = initialize; return this; } })(window,jQuery);