Cart = new (function() {
   var _this = this, _data;
   
   _this.constructor = undefined;

   /* TODO: Deprecated. */
   _this.getObject = function() {
      Utils.log('Use of deprecated function Cart.getObject()');
      return _data;
   }
   
   _this.getData = function() {
      return _data;
   }

   _this.activateBox = function(form) {
      Utils.log('Use of deprecated function Cart.activateBox()');
      Box.activate(form);
   }
      
   _this.hasGiftVoucher = function() {
      if ((typeof _data == 'object') && (typeof _data.products == 'object')) {
         var products = _data.products;
         for (var i = 0; i < products.length; i++) {
            if (products[i].ptype == 4)
               return true;
         }
      }
      return false;
   }
      
   _this.redraw = function() {
      $('#cart thead, #cart tbody').empty();
      
      if ((typeof Page == 'object') && (typeof Page.redrawCart == 'function')) {
         Page.redrawCart();
      }
         
      if (_data.products.length == 0) {
         $('#cart thead').append('<tr><td colspan="2" align="left">Kundvagnen är tom</td></tr>');
      }
      
      for (var i = 0; (i < _data.products.length) && (i < 9); i++) {
         var descr, product = _data.products[i];
          
         if (product.ptype == Config.BOX_DUMMY)
            continue; /* Do not show DUMMY boxes */
            
         if (product.descr.length > 11)
            descr = product.descr.substr(0, 11) + '...';
         else
            descr = product.descr;
         
         $('#cart tbody').append(
            '<tr onclick="Content.showProduct(' + product.prodid +'); return false;">' +
            '<td>' + product.qty + 'x ' + descr + '</td>' +
            '<td align="right">' + Utils.formatPrice(product.total) + '</td>' +
            '</tr>');  
      }
      
      $('#cart tfoot tr:nth-child(2) td:last-child').text(parseFloat(_data.total).toFixed(2));
   },
      
   _this.update = function() {
      Utils.request({
         url: '/backend/get_cart.php',
         success: function(data) {
            _data = data;
            
            for(var i = 0; (i < _data.products.length); i++) {
               _data.products[i].price = parseFloat(_data.products[i].price) / 100;
               _data.products[i].total = parseFloat(_data.products[i].total) / 100;
            }
            
            _data.delivery = Math.round(parseFloat(_data.delivery) / 100);
            _data.deli_tot = Math.round(parseFloat(_data.deli_tot) / 100);
            _data.payFee   = Math.round(parseFloat(_data.payFee)   / 100);
            _data.totMoms  = Math.round(parseFloat(_data.totMoms)  / 100);
            _data.exMoms   = Math.round(parseFloat(_data.exMoms)   / 100);
            _data.total    = Math.round(parseFloat(_data.total)    / 100);
            
            _this.redraw();
         }
      });
   }
      
   _this.removeProduct = function(id) {
//      var tx = 'Är du säker på att du vill ta bort denna?\n';
      var html  = '<p>Är du säker att du vill ta bort denna ur din kundvagn?</p>';
      
      Utils.showDialog({
         title: 'Ta bort',

         text: html,
         icon: '/pics/question.png',
         buttons: [ 'Ta bort', 'Avbryt'],
         handler: function(n) {
            if (n == 0) {
               Utils.request({
                  url: '/backend/remove_from_cart.php',
                  type: 'GET',
                  data: { id : id },
                  success: function() {
                     if ((typeof Page == 'object') && (typeof Page.removeFromCart == 'function'))
                        Page.removeFromCart(id);
                      
                     _this.update();
                  }
               });
            } 
         }});
      
   }

   _this.updateProduct = function(id, quantity) {
      Utils.request({
         url: '/backend/update_cart.php',
         type: 'GET',
         data: { id: id, quantity: quantity },
         success: function() {
            _this.update();
         },
         error: function(errno, error) {
            alert(error);
         }
      });
   },
      
   _this.addProduct = function(type) {
      var data;

      switch(type) {
      case 'standard':
         if (arguments.length != 3) {
            return;
         }
         data = { tag: 'standard', id: arguments[1], quantity: arguments[2] }
         break;
            
      case 'voucher':
         if (arguments.length != 3) {
            return;
         }
         data = { tag: 'voucher', value: arguments[1], quantity: arguments[2] }
         break;
            
      case 'ocb':
         if (arguments.length != 3) {
            return;
         }
            
         data = { tag: 'ocb', id: arguments[1], quantity: arguments[2] }
         break;
            
      case 'campaign':
         if (arguments.length < 2) {
            return;
         }
         
         //alert('len:'+ arguments.length +' , qty:'+ arguments[2]);
         if(arguments.length > 2 && arguments[2] > 0)
         {
            var tx = 'Du har redan en rabattkod i din order.\n'+
                     'Eftersom rabattkoder inte kan kombineras\n'+
                     'så kommer den gamla koden att ersättas med\n'+
                     'denna kod. Är detta OK?\n\n'+
                     'Klicka OK för att bekräfta.';
            if(!confirm(tx)) return;
         }
         
         data = { tag: 'campaign', code: arguments[1] }
         break;
           
      default:
         return;
      }
      
      Utils.request({
         url: '/backend/add_to_cart.php',
         data: data,
         type: 'GET',
         success: function(products) {
            Content.showBox('cart');
            //alert('products: '+ Utils.dumpData(products));
            if(products != null) {
               if((typeof Page == 'object') && (typeof Page.addToCart == 'function'))
                  Page.addToCart(products);

               for(var i = 0; i < products.length; i++) {
                  if(products[i].ptype == Config.BOX_CAMP) {
                     Cart.update();
                     return;
                  }
               }
            }
            
            Cart.update();
            
            var html  = '<p>Produkten har lagts till i kundvagnen.</p>' +
                        '<p>Du kan välja att fortsätta eller gå till kundvagnen.</p>' +
                        '<p>Obs! Du ser alltid kundvagnen uppe i högra hörnet.</p>';
            
            Utils.showDialog({
               title: 'Vill du fortsätta handla?',
               text: html,
               icon: '/images/clean.png',
               buttons: [ 'Fortsätt handla', 'Gå till kundvagnen'],
               handler: function(n) {
                  if (n == 1) {
                     Content.load({ url: '/kundvagn' });
                  } 
                  $(this).remove();
               }
            });
         },
         error: function(errno, error) {
            Utils.alert(error);
         }
      });
   }

});

