function changeCurrency(evt) {
    var currency = evt.getTarget().value;
    Ext.state.Manager.set('currency', currency);
    updateCart();
    updateGalleryPrices();
}

/*
 * Aggiorna il portlet del carrello
 */
cartItems = [];
function updateCart() {
    var cart = Ext.get('customer-cart');
    cart.load({
        url: '/customers/my-cart?view=html',
        text: 'Loading Cart...'
    });
    var mgr = cart.getUpdateManager();
    mgr.on('update', function(evt) {
      var items = Ext.query('.cart-item', cart.dom);
      cartItems = [];
      for(var ix=0; ix<items.length; ix++) {
          var code = items[ix].id.split('-')[2];
          cartItems.push(code);
          try {
              Ext.fly(code).addClass('selected');
          }
          catch(e) {}
      }
      if(Ext.get('cart-details-button')) {
          Ext.fly('cart-details-button').on('click', function() {
              document.location.href = '/customers/cart-details';
          });
      }
    });
}

var FastShopTemplate = new Ext.Template(
  '<div class="fast-shop">',
  '  <span>{price}</span><img src="/static/img/cart.gif" alt="shopping cart" />',
  '</div>'
);
var SoldOutTemplate = new Ext.Template(
  '<div class="fast-shop">',
  '  <span>Sold out</span>',
  '</div>'
);
var StockInfo = new Ext.Template(
  '<div class="stock-info">',
  '  stock',
  '  <span class="stock-quantity" title="ready to ship">r: {quantity}</span> / ',
  '  <span class="raw-quantity" title="workpieces">w: {raw_quantity}</span> ',
  '</div>'
);

function updateGalleryPrices() {
  var url = document.location.href;
  var argsIx = url.indexOf('?');
  if(argsIx == -1) {
    var pre = url;
    var post = '';
  }
  else {
    var pre = url.substr(0, argsIx);
    var post = url.substr(argsIx);
  }
  if(pre.substr(pre.length - 1, 1) != '/')
    pre += '/';
  url = pre + ';json' + post;
  if(Ext.isIE)
    url = encodeURI(url);
  var store = new Ext.data.Store({
    proxy: new Ext.data.HttpProxy({url: url}),
    reader: new Ext.data.JsonReader({
      totalProperty: "total",
      root: 'items',
      id: 'code'
    }, ['code', 'price', 'quantity', 'raw_prepared', 'raw_noprepared'])
  });
  store.addListener('load', function(store, records, options) {
    var currency = TheCart.currencySymbol();
    var imgHandler = function(evt) {
        var li = Ext.fly(evt.getTarget()).findParent('li');
        Ext.fly(li).addClass('selected');
        TheCart.addItemToCart(this.code);
    }
    for(var ix=0; ix<records.length; ix++) {
      var price = records[ix].data.price;
      var code = records[ix].data.code;
      var quantity = records[ix].data.quantity;
      var raw_prepared = records[ix].data.raw_prepared;
      var raw_noprepared = records[ix].data.raw_noprepared;
      var data = {
        price: currency + ' ' + price
      };
      var previousFS = Ext.select('li#' + code + ' div.fast-shop').item(0);
      if(previousFS) {
        previousFS.remove();
      }
      var anchor = Ext.select('li#' + code + ' a').item(0);
      if(quantity || (!(raw_prepared === null || raw_noprepared === null) && ( raw_prepared + raw_noprepared > 0))) {
        var node = FastShopTemplate.insertAfter(anchor, data, true);
        var image = node.query('img')[0];
        Ext.fly(image).on('click', imgHandler, {code: code});
      }
      else {
        var node = SoldOutTemplate.insertAfter(anchor, {}, true);
      }
      /*
       * raw_prepared o raw_noprepared sono diversi da null solo se l'utente
       * è loggato, quindi non si tratta di un listino pubblic.
       */
      if(!(raw_prepared === null || raw_noprepared === null) && (quantity + raw_prepared + raw_noprepared > 0)) {
          var raw = raw_prepared + raw_noprepared;
          StockInfo.insertAfter(node, {quantity: quantity, raw_quantity: raw});
      }
    }
  });
  store.load();
}

function init() {
  if(!Ext.get('customer-cart'))
    return;
  if(!CookiesEnabled) {
    var message = "<div id=\"no-cookies-alert\">To make an order you have to enable cookies.</div>";
    Ext.fly('no-cookies-alert-placeholder').update(message);
  }
  Ext.select('#currency-box input').on('click', changeCurrency);
  var currency = Ext.state.Manager.get('currency');
  try {
      document.getElementById('currency-'+currency).checked = 1;
  } catch(e) {}

  TheCart.on('added', updateCart);
  TheCart.on('removed', updateCart);
  updateCart();
  updateGalleryPrices();
}

Ext.onReady(init);
