_FractaCart = function() {
    this.addEvents('added');
    this.addEvents('removed');
    this.addEvents('loaded');
    this.addEvents('updated');
    this._connection = new Ext.data.Connection({url: '/customers/my-cart'});
    this.items = [];
    _FractaCart.superclass.constructor.call(this);
};

Ext.extend(_FractaCart, Ext.util.Observable, {
  /*
   * aggiunge un oggetto al carrello.
   *
   * code è il codice dell'oggetto
   */
  addItemToCart: function(code) {
    this._connection.request({
        method: 'POST',
        params: { action: 'add', item: code },
        success: function(response, options) { this.fireEvent('added'); },
        scope: this
    });
  },
  removeItemFromCart: function(code) {
    this._connection.request({
        method: 'POST',
        params: { action: 'remove', item: code },
        success: function(response, options) { this.fireEvent('removed'); },
        scope: this
    });
  },
  updateItems: function(data) {
    var items = [];
    for(var code in data) {
        items.push(code + ',' + data[code]);
    }
    this._connection.request({
        method: 'POST',
        params: { action: 'update', items: items },
        success: function(response, options) { this.fireEvent('updated'); },
        scope: this
    });
  },
  loadItems: function() {
    this._connection.request({
        method: 'GET',
        success: function(response, options) {
            this.items = Ext.decode(response.responseText);
            this.fireEvent('loaded');
        },
        scope: this
    });
  },
  currency: function() {
    return Ext.state.Manager.get('currency', 'euro');
  },
  currencySymbol: function() {
    switch(this.currency().toLowerCase()) {
        case 'euro':
            return '€';
            break;
        case 'usd':
            return '$';
            break;
        case 'jpy':
            return '¥';
            break;
        default:
            return this.currency().toLowerCase();
            break;
    }
  }
});

var TheCart = new _FractaCart();
