
  var _cart = new cart();

  jQuery(document).ready(function(){

    if(jQuery('#checkout_products').length==0) return;
  
	var destinationURL = jQuery('#checkout_products').attr('rel');
  
	jQuery.ajax({
	  dataType: 'jsonp',
	  jsonp: 'jsonp_callback',
	  url: destinationURL,
	  success: function (data) {
      jQuery('#checkout_products').html(data.items);
      try {
        setEqualHeights();
      }catch(err){
        //shh
      }
    }
	});

    jQuery('.product a.cart_add').live("click", function(e){

      e.preventDefault();
      var item = jQuery(this).attr('rel');

      item = jQuery.parseJSON(item);

      _cart.addItem(item.id, item.name, item.price, item.useshipping);

      var domitem = jQuery('#checkout_items .checkout_item[rel="'+item.id+'"]');
      if(domitem.length==0)
      {

        // new item added
        var item = jQuery(
        '<div class="checkout_item"  style="display:none" rel="'+ item.id +
          '"><span class="title">'+ item.name +
          '</span><span class="price">&pound;' + (item.price) +
          '</span><span class="qty">'+ 1 +
          '</span><a class="remove" href="#remove" rel="'+ item.id +
          '">X</a></div>');

        item.appendTo(jQuery('#checkout_items'));

        updateTotal();
        item.fadeIn(750, function(){
          flashItem(item, 2, true);
        });

      }
      else
      {

        // update value
        var qty = domitem.find('.qty');
        qty.html(_cart.getQty(item.id));

        updateTotal();
        flashItem(qty, 4, true);

      }

      jQuery('#checkout .cart_checkout,#checkout .cart_clear').fadeIn();

    });


    jQuery('#checkout_items a.remove').live("click", function(e){

      e.preventDefault();

      var id = jQuery(this).attr('rel');

      _cart.removeItem(id);
      var i =jQuery(this).parent();
      updateTotal();
      i.fadeOut(750, function(){
        i.remove();
      });

      if(_cart.items.length == 0)
        jQuery('#checkout .cart_checkout,#checkout .cart_clear').fadeOut();

    });

	
	
    var tmp = jQuery('#checkout').offset();
    var baskettop = tmp.top;

    jQuery(window).scroll(function(e){

      jQuery('#checkout').stop();

      var cartheight = jQuery('#checkout').height();

      if(jQuery(document).scrollTop() > baskettop)
      {
        jQuery('#checkout').animate({
          'top':(jQuery(document).scrollTop() - baskettop + 30)+'px'
        },1000);
      }
      else
      {
        jQuery('#checkout').animate({
          'top':'0px'
        },1000);
      }


    });

  });

  jQuery('#checkout .cart_checkout').live("click", function(e){

    var orderdata = _cart.serialize();

    jQuery('#cart_order_data').val(orderdata);

    jQuery('#cart_order_form').submit();

    return false;

  });

  jQuery('#checkout .cart_clear').live("click", function(e){
    clearCart();
    return false;
  });

  function clearCart()
  {
    jQuery('#checkout_items').html('');
    _cart.clear();
    updateTotal();
    jQuery('#checkout .cart_checkout,#checkout .cart_clear').fadeOut();
  }

  function flashItem(domitem, flashes, state)
  {

    if(state && flashes>0)
    {
      domitem.css({'color':'#FFF', 'background-color':'#000'});
    }
    else
    {
      domitem.css({'color':'#000', 'background-color':'#FFF'});
    }

    var i = this;

    if(flashes<=0) return

    state = !state;

    setTimeout(function(){
      i.flashItem(domitem, flashes-1, state)
    }, 500);

  }

  function updateTotal()
  {

    var t = _cart.shippingTotal();

    t = currencyformat(t);
    jQuery('#checkout_shipping').html('&pound;'+t);


    var total=_cart.shippingTotal()*100;

    for(var i=0; i < _cart.items.length; i++)
      total += (_cart.items[i].qty * _cart.items[i].price);

    t = (total/100);

    t = currencyformat(t);
    jQuery('#checkout_total').html('&pound;'+t);

  }

  function currencyformat(str)
  {

    str+='';
    if(str.indexOf('.')<0)
      str += '.00';
    else
    {
      var t2 = str.split('.');
      if(t2[1].length == 1)
      {
        str += '0';
      }
    }

    return str;
  }

  function padright(val, ch, num){
      var re = new RegExp("^.{" + num + "}");
      var pad = "";
      if (!ch) ch = " ";
      do {
          pad += ch;
      } while (pad.length < num);
      return re.exec(val + pad)[0];
  }


  /*
   * cart object + methods
   *
   * */

  function cartitem(id, name, price, shipping){
    this.id = id;
    this.name = name;
    this.price = price;
    this.shipping = shipping;
    this.qty = 1;
  }

  function cart(){
    this.items = [];
  };

  cart.prototype.clear = function()
  {
    this.items = [];
  }

  cart.prototype.serialize = function()
  {

    var serialized = [];

    for(var i=0; i<this.items.length; i++)
    {

      serialized.push([
        this.items[i].id,
        this.items[i].price,
        this.items[i].qty
      ]);

    }

    return serialized;

  }

  cart.prototype.getQty = function(id)
  {
    for(var i=0; i<this.items.length; i++)
    {
      if(this.items[i].id == id)
      {
        return this.items[i].qty;
      }
    }

    return 0;
  }


  cart.prototype.addItem = function(id,name,price,shipping)
  {

    var found = false;

    for(var i=0; i<this.items.length; i++)
    {
      if(this.items[i].id == id)
      {
        this.items[i].qty++;
        found = true;
        break;
      }
    }

    if(!found)
    {
      this.items.push(new cartitem(id,name,parseInt(100*price),shipping));
    }

  }

  cart.prototype.shippingTotal = function()
  {

    var tmp = 0;

    for(var i=0; i<this.items.length; i++)
    {
      if(this.items[i].shipping == 1)
      {
        tmp += (this.items[i].price * this.items[i].qty);
      }

    }

    tmp = tmp / 100;

    if(tmp<=0)
    {
      return 0;
    }
    else if(tmp<=10)
    {
      return 2.5;
    }
    else if(tmp<=30)
    {
      return 4.5;
    }
    else
    {
      return 5.5;
    }

  }

  cart.prototype.removeItem = function(id)
  {

    for(var i=0; i<this.items.length; i++)
    {
      if(this.items[i].id == id)
      {
        this.items.splice(i,1);
        break;
      }
    }

  }
