// JavaScript for Web-UI-library

GST = 0.15;         // Also specified in init.inc -- make sure to update that too.

Events['.cart-item'] = function() {
  var inc = this.$('.increment');
  var dec = this.$('.decrement');
  var addbtn = this.$('.add-button');
  if (inc) inc.addEvent('click', incitem);
  if (dec) dec.addEvent('click', decitem);
  if (addbtn) addbtn.addEvent('click', addbutton);
};

Events['.num'] = function() {
  this.addEvent('focus', function(e) {
    if (!this.value) {
      this.value = 1;
      this.select();
      if (e.preventDefault) e.preventDefault();
      else e.returnValue = false;
    }
  });
  this.addEvent('mouseup', function(e) {
    if (e.preventDefault) e.preventDefault();
    else e.returnValue = false;
  });
}

function update_pnp(data) {
  var self = this;
  var do_update = function(data) {
    if ('freight' in data) {
      $('#review-costs .pnp').innerHTML = '$'+data['freight'];
      if (self.id == 'psuburb' && /^ *(RD)? *[0-9]+ *$/i.test(self.value)) {
        var span = self.nextSibling;
        if (!span) {
          span = document.createElement('span');
          span.innerHTML = 'Note: rural deliveries incur extra fee';
          span.className = 'input-tip';
          self.parentNode.appendChild(span);
        }
      }
    } else {
      $('#review-costs .pnp').innerHTML = 'TBD';
    }
    $('#review-costs .total').innerHTML = '$'+data['totaldiscounted'];
  }
  ajax(BASEURL + 'freight-cost?format=json', {'suburb': $('#psuburb').value, 'island': $('#pisland').value}, do_update);
}

Events['#psuburb'] = function() {
  this.addEvent('change', update_pnp);
  this.addEvent('keyup', update_pnp);
};

Events['#pisland'] = function() {
  this.addEvent('change', update_pnp);
  this.addEvent('keyup', update_pnp);
};

/* === Shopping cart === */

function addbutton() {
  var item = this.ancestor('.cart-item');
  var qtychanger = item.$('.quantity');
  var itemid = item.id.substr(5);
  var numincart = parseInt(qtychanger.getAttribute('val'), 10);
  qtychanger.style.display = 'block';
  this.style.display = 'none';
  item.addClass('disabled');
  this.disabled = true;
  qtychanger.ajaxseq = ajax(BASEURL + 'cart-add-single?format=json', {'item': itemid, 'num': numincart + 1}, itemhandler);
}

function incitem() {
  var item = this.ancestor('.cart-item');
  var qtychanger = item.$('.quantity');
  var bulk = qtychanger.getAttribute('bulk') ? 1 : '';
  var numincart = parseInt(qtychanger.getAttribute('val'), 10);
  var itemid = item.id.substr(5);
  item.addClass('disabled');
  this.disabled = true;
  qtychanger.ajaxseq = ajax(BASEURL + 'cart-add-single?format=json',
                            {'item': itemid, 'num': numincart + 1, 'bulk': bulk},
                            itemhandler);
}

function decitem() {
  var item = this.ancestor('.cart-item');
  var qtychanger = item.$('.quantity');
  var bulk = qtychanger.getAttribute('bulk') ? 1 : '';
  var numincart = parseInt(qtychanger.getAttribute('val'), 10);
  var itemid = item.id.substr(5);
  item.addClass('disabled');
  this.disabled = true;
  qtychanger.ajaxseq = ajax(BASEURL + 'cart-add-single?format=json',
                            {'item': itemid, 'num': numincart - 1, 'bulk': bulk},
                            itemhandler);
}

Cartdata = {
  'numtotal': null,
  'basediscounted': null,
  'totaldiscounted': null,
  'pnp': null
};

function itemhandler(data, stat, req, ajaxseq_) {
  var item = $('#item-' + data['item']);
  var qtychanger = item.$('.quantity');
  if (ajaxseq_ != qtychanger.ajaxseq) return;
  qtychanger.setAttribute('val', data['num']);
  item.removeClass('disabled');
  var inc = item.$('.increment');
  var dec = item.$('.decrement');
  inc.disabled = false;
  dec.disabled = false;
  qtychanger.fireEvent('change');
  Cartdata = data;
  updatecartinfo();
}

function updatecartdata() {
  var req = ajax(BASEURL + 'cart?format=json');
  Cartdata = req[0];
}

function updatecartinfo() {
  var toupdate = $$("#cart-info-items, #cart-info-price, #cart-table-price");
  for (var i=0; i<toupdate.length; i++) {
    toupdate[i].updatevalue();
  }
}

function numincart() {
  return Cartdata['numtotal'];
}

function cartbasediscounted() {
  /* Total price in cart, including P&P and GST
   */
  return Cartdata['basediscounted'];
}

function carttotaldiscounted() {
  /* Total price in cart, including P&P and GST
   */
  return Cartdata['totaldiscounted'];
}

function pnpincart() {
  return Cartdata['pnp'];
}



