Cart = new (function() {
   var _this = this
   var _data = {};
   
   _this.constructor = undefined;

   /* TODO: Deprecated. */
   _this.getObject = function() {
      Utils.log('Use of deprecated function Cart.getObject()');
      return _data;
   }
   
   _this.setData = function(obj) {
      _data = obj;
   }
   
   _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.showImage = function(title, url) {
       Utils.info({
         title: title,
         text: '<img src="' + url + '" />',
         width: 380,
         icon: 'no-icon'
       });
   }

   _this.redraw = function() {
      $('#cart thead, #cart tbody').empty();
     
      if ((typeof Page == 'object') && (typeof Page.redrawCart == 'function')) {
         Page.redrawCart();
      }
      
      if (_data.products.length == 0/* && _data.vouchers.length == 0*/) {
         $('#cart thead').append('<tr><td colspan="2" align="left">Kundvagnen är tom</td></tr>');
      }
      
      var num = 0;
      
      for(var i in _data.products)
      {
         var descr, product = _data.products[i];
          
         if (product.ptype == Config.ITEM_TYPE_GENERIC || product.ptype == Config.ITEM_TYPE_EXTENSION)
            continue; /* Do not show DUMMY boxes */
         
         if(num++ > 9) break;
         
         if (product.descr.length > 11)
            descr = product.descr.substr(0, 11) + '...';
         else
            descr = product.descr;
         
         $('#cart tbody').append(
            '<tr>'+
            '<td>'+ product.qty +'x '+ descr +'</td>'+
            '<td align="right">' + parseFloat(product.price).toFixed(2) +'</td>'+
            '</tr>');
      }
      
      /*for(var i in _data.vouchers)
      {
         var descr, product = _data.vouchers[i];
         
         if(num++ > 9) break;
          
         if (product.descr.length > 11)
            descr = product.descr.substr(0, 11) + '...';
         else
            descr = product.descr;
         
         $('#cart tbody').append(
            '<tr>'+
            '<td> 1 x '+ descr +'</td>'+
            '<td align="right">' + parseFloat(product.price).toFixed(2) +'</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;
            //alert('Cart._data '+ Utils.dumpData(_data));
            _this.redraw();
         }
      });
   }
      
   _this.removeProduct = function(id, type) {
      Utils.request({
         url: '/backend/remove_from_cart.php',
         type: 'GET',
         data: { id : id, type : type },
         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;
         }
            
         data = { tag: 'campaign', code: arguments[1] }
         break;
           
      default:
         return;
      }
      
      if(data.id == 191336)
      {
         Utils.showDialog({
            title: 'April april din dumma sill! ',
            text: 'Visst vore det kul att flyga med pingviner men tyvärr så är det omöjligt. Trots sina vingar stannar pingvinerna hellre på marken.<br /><br />Är du sugen på att själv prova eller ge bort en flygupplevelse finns det gott om förslag i kategorin Luft & Flyg.<br /><br />Om du, precis som pingvinerna, föredrar att vara på marken har du mycket att välja på i övriga upplevelsekategorier.',
            icon: '/images/ico/clean.png',
            buttons: [ 'Stäng' ],
            handler: function(n) {
               location.reload(); 
            }
         });        
      }
      else
      {
         Utils.request({
            url: '/backend/add_to_cart.php',
            data: data,
            type: 'GET',
            success: function(products) {
               Content.showBox('cart');
               
               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)
                        return;
                  }
               }
               
               // Sending data to google analytics, won't run if pageTracker is not set
               if(typeof(pageTracker) == 'object')
                  pageTracker._trackPageview('/pre_kundvagn');
               
               Cart.update();
              
               var xstr = '';
               
                  
               if (data.quantity == 1)
                  xstr = 'ett högtidsomslag till din upplevelse';
               else
                  xstr = 'högtidsomslag till dina <b style="color:red">' + data.quantity + '</b> upplevelser';
                 
               var html;
   
               if (_this.hasGiftVoucher()) {
                  html  = '<p>Produkten har lagts till i kundvagnen.</p>' + basket.toSource();
               }
   
               else {
 
                  html  = '<p>Produkten har lagts till i kundvagnen.</p>' +
                          '<p>Nu har du möjlighet att lägga till ' + xstr + '.</p>' + 
                          '<table cellpadding="0" cellspacing="0">' +
                          '<col width="25"/>' +
                          '<col width="120"/>' +
                          '<col width="40"/>' +
                          '<col width="45"/>' +
                          '<tr><td>&nbsp;</td>' +
                          '<td>&nbsp</td><td class="ar">Lägg till</td><td>&nbsp;</td></tr>' +
                          
                          '<tr><td><input type="radio" id="sleeve_1" name="sleeve" value="191529"/></td>' +
                          '<td><label for="sleeve_1">Exklusivt silveromslag</label></td><td class="ar">30 kr</td>' +
                          '<td><img align="right" src="/images/ico/se_bild.gif" class="ico16 clk" alt="info" ' +
                          'onclick="Cart.showImage(\'Exklusivt omslag\', \'/pics/360x230_exklusiv_sleeve_popup.jpg\'); return false;" /></td></tr>' +
                          
                          '<tr><td><input type="radio" id="sleeve_2" name="sleeve" value="190549"/></td>' +
                          '<td><label for="sleeve_2">Bröllopsomslag</label></td><td class="ar">20 kr</td>' +
                          '<td><img align="right" src="/images/ico/se_bild.gif" class="ico16 clk" alt="info" ' +
                          'onclick="Cart.showImage(\'Bröllopsomslag\', \'/pics/360x230_brollop.jpg\'); return false;" /></td></tr>' +
                          
                          '<tr><td><input type="radio" id="sleeve_3" name="sleeve" value="190548"/></td>' +
                          '<td><label for="sleeve_3">Studentomslag</label></td><td class="ar">20 kr</td>' +
                          '<td><img align="right" src="/images/ico/se_bild.gif" class="ico16 clk" alt="info" ' +
                          'onclick="Cart.showImage(\'Studentomslag\', \'/pics/360x230_student.jpg\'); return false;" /></td></tr>' +
                          
                          '<tr><td><input type="radio" id="no_sleeve" name="sleeve" checked="checked" value="0"/></td>' +
                          '<td><label for="no_sleeve">Inget omslag</label></td><td class="ar">0 kr</td><td>&nbsp;</td></tr>' +
                          '</table>';
               } 
   
               Utils.showDialog({
                  title: 'Vill du fortsätta handla?',
                  text: html,
                  icon: '/images/ico/clean.png',
                  buttons: [ 'Fortsätt handla', 'Gå till kundvagnen'],
                  handler: function(n) {
                     var sleeve = $('[name=sleeve]:checked').val();
   
                     if (sleeve > 0) {
                        Utils.request({
                           url: '/backend/add_to_cart.php',
                           data: {  tag: 'generic', id: sleeve, quantity: data.quantity },
                           type: 'GET',
                           async: false,
                           success: function(products) {
                           },
                           error: function(errno, error) {
                              alert(error);
                           }
                        });
                     }
   
                     if (n == 1) {
                        Content.load({ url: '/kundvagn' });
                     } 
                     else {
                        location.reload(); 
                     }
                     $(this).remove();
                  }
               });
            },
            error: function(errno, error) {
               Utils.alert(error);
            }
         });
      }
   }
   
   _this.updateDeliveryCost = function() {
      Utils.request({
         url: '/backend/get_cart.php',
         success: function(data) {
            return data.delivery_new;
         },
         error: function(errno, error) {
            Utils.alert(error);
         }
      });
   }

});


