/*
Script: add_to_cart.js
	Contains <AddToCart>

Author:
	Alan Roemen
	June 14, 2010

Class: AddToCart
	Ajax add to cart

Options:

*/

var AddToCart = new Class({

  options: {
    parent_skip: 1,
    tooltip_duration: 6,
		gobmg_price: false
  },

  initialize: function(selector, options) {
    this.adding = false;
    this.setOptions(options);
    $$(selector).addEvent('click', this.to_cart.bindWithEvent(this));
  },

  to_cart: function(e) {
    var wrapper, in_cart, q, c, i, target_price;
    if (this.adding) return;
    this.adding = true;

    // stop event
    e = new Event(e);
    e.stop();

    // get wrapper
    wrapper = e.target;
    for (i = 0; i < this.options.parent_skip; i++)
      wrapper = wrapper.getParent();

    // destroy any old clones
    wrapper.getElements('.iclone').each(function(el){el.remove();});

    // setup in_cart
    in_cart = wrapper.getElement('div.total-in-cart');
    in_cart.setStyle('display', 'block');
    
    // increment quantity
    q = in_cart.getElement('span');
    q.setHTML(q.innerHTML.toInt() + 1);
    in_cart.getElement('div')
      .setHTML(in_cart.getElement('div').innerHTML.replace(/\d+/, q.innerHTML.toInt()));
		if(this.options.gobmg_price){
			//e.target.getPrevious().getPrevious().getPrevious().innerHTML.match(/\d+\.\d+/)[0];
			target_price = $('price').innerHTML.match(/\$\d+\.\d+/)[0];
		}else {
			target_price = e.target.getPrevious().innerHTML.match(/\$\d+\.\d+$/)[0];
		}
    this.update_cart(
      q.innerHTML.toInt(),
      e.target.getProperty('href').match(/add\=(.+?)$/)[1],
      target_price
    );

    // do clone
    c = in_cart.clone();
    c.addClass('item-added iclone');
    c.getElement('div').setStyle('display', 'block');
    c.injectAfter(in_cart);
    c.effect('opacity', {duration: (1000 * this.options.tooltip_duration), transition: Fx.Transitions.Quint.easeIn}).start(0);

    new Ajax(e.target.getProperty('href'), {'method': 'get'}).request();

    this.adding = false;
  },

  update_cart: function(total, prod_code, price) {
    var dropdown, el, cart_quantity, updated = false;
		
    dropdown = $('cart-dropdown');
    prod_code = prod_code.toUpperCase()

    // cart quantity
    el = dropdown.getParent().getElement('a');
    cart_quantity = el.innerHTML.match(/\((\d+)\)/)[1].toInt() + 1;
    el.setHTML(el.innerHTML.replace(/\((\d+)\)/, '(' + cart_quantity + ')'));
    el = dropdown.getElement('div#view-cart-list p span');
    el.setHTML(cart_quantity);

    // cart items
    el = dropdown.getElement('div#view-cart-list');
    el.getElements('li.view-product').each(function(li) {
      if (updated) return;
      var check = li.innerHTML.match(prod_code + '\\s\\(');
      if (!check) return;
      li.setHTML(li.innerHTML.replace(/\(.+?\)/, '(' + total + ')'));
      updated = true;
    }.bind(this));
    if (!updated) {
      el = new Element('ul', {'class': 'view-cart-item'});
      new Element('li', {'class': 'view-product'}).setHTML(prod_code + ' (' + total + ')').inject(el);
      new Element('li', {'class': 'view-price'}).setHTML(price).inject(el);
      el.inject(dropdown.getElement('div#view-cart-list'));
    }
  }

});

AddToCart.implement(new Options, new Events)
