BAMM.cart = {
	
	cart_selector: 'a[href$="cartbroke"], a[href$="cartbroke/"]',
	wishlist_selector: 'a[href$="wishlistbroke"], a[href$="wishlistbroke/"]',
	
	/**
	 * Cart Init
	 *
	 * @access public
	 * @param NULL
	 * @return boolean
	 */
	cartInit:function()
	{	
		if ( $('utility') != null) {
			var cart_header = $('more-cart'); 
			cart_header.href = "#";
			cart_header.observe('click', BAMM.cart._clickCart.bindAsEventListener(BAMM.cart, 'cart'));
			var wishlist_header = $('more-wishlist'); 
			wishlist_header.href = "#";
			wishlist_header.observe('click', BAMM.cart._clickCart.bindAsEventListener(BAMM.cart, 'wish-list'));
			
			/* create down arrows */
			var more_link = new Element('a', {href:'#', className:'more', title:'Expand'});
			more_link.appendChild(document.createTextNode(''));
		
			var cart_link = more_link.cloneNode(true);
			cart_link.href = '#';
			cart_link.addClassName('more-cart');
			cart_link.observe('click', BAMM.cart._clickCart.bindAsEventListener(BAMM.cart, 'cart'));
			cart_link.observe('mouseover', function(event){
  cart_link.className = 'more-cart-over';
 });
			cart_link.observe('mouseout', function(event){
  cart_link.className = 'more-cart';
 });
		
			var wishlist_link = more_link.cloneNode(true);
			wishlist_link.href = '#';
			wishlist_link.addClassName('more-wishlist');
			wishlist_link.observe('click', BAMM.cart._clickCart.bindAsEventListener(BAMM.cart, 'wish-list'));
			wishlist_link.observe('mouseover', function(event){
  wishlist_link.className = 'more-wishlist-over';
 });
			wishlist_link.observe('mouseout', function(event){
  wishlist_link.className = 'more-wishlist';
 });
		
			$('utility').insert(cart_link);
			$('utility').insert(wishlist_link);

			/* observe clicks */
			$$(this.cart_selector).each(function(link)
			{
				link.observe('click', BAMM.cart._clickCart.bindAsEventListener(BAMM.cart, 'cart'));
			});
			
			$$(this.wishlist_selector).each(function(link)
			{
				link.observe('click', BAMM.cart._clickCart.bindAsEventListener(BAMM.cart, 'wish-list'));
			});

		}
			
		return true;
	},
	
	/**
	 * Click Cart
	 *
	 * @access private
	 * @param NULL
	 * @return NULL
	 */
	_clickCart:function(e, pane)
	{
		if($(document.body).hasClassName(pane))
		{
			BAMM.cart._animateCloseCart();
		}
		else
		{
			BAMM._fetch(
			{
				content: pane,
				bind: BAMM.cart,
				pre: BAMM.cart._setLoader.bindAsEventListener(BAMM.cart, pane),
				post: BAMM.cart._insertContent.bindAsEventListener(BAMM.cart, pane)
			});
		}
		
		Event.stop(e);
	},
	
	/**
	 * Set Loader
	 *
	 * @access private
	 * @param NULL
	 * @return NULL
	 */
	_setLoader:function(e, pane)
	{
		var img = document.createElement('img');
		img.src = 'http://images.booksamillion.com/images/widgets/ajax-loader.gif';
		img.alt = 'Loading';
		img.id = 'spinner';
		
		switch(pane)
		{
			case 'wish-list':
				$(document.body).removeClassName('cart');
				$(document.body).addClassName('wish-list');
				$$('#wishlist-summary h3').first().insert({before: img});
				break;
			
			default:
				$(document.body).removeClassName('wish-list');
				$(document.body).addClassName('cart');
				$$('#cart-summary h3').first().insert({before: img});
				
		}
	},
	
	/**
	 * Insert Content
	 *
	 * @access private
	 * @param NULL
	 * @return NULL
	 */
	_insertContent:function(request)
	{
		var cart = $('cart');
		var cart_exists = cart?true:false;

		var resp = request.responseText.replace(/[\"']cart[\"']/, '"cart-loading"');
		$('utility').insert({bottom:resp});
		
		var cart_loading = $('cart-loading');

		cart_loading.setStyle({ position:'absolute' });
		var target_height = cart_loading.offsetHeight;
		
		var initial_height = (cart_exists)?cart.offsetHeight:0;
		
		cart_loading.setStyle({ height:initial_height+'px', position:'static', marginBottom:0 });
		cart_loading.setStyle({ visibility:'visible' });
		
		
		if(cart_exists)
		{
			cart.setStyle({ position:'absolute', top:'25px', left:0 });
			
			new Effect.Opacity(cart, {from:1, to:0, duration:.4, afterFinish:function(effect)
			{
				effect.element.remove();
			}});
		}
		
		new Effect.Morph(cart_loading, {style:{height:target_height+'px'}, afterFinish:function(effect)
		{
			effect.element.id = 'cart';
			effect.element.setStyle({ height:'auto' });
			
			$('spinner').remove();
		}});
	},
	
	/**
	 * Close Cart
	 *
	 * @access private
	 * @param NULL
	 * @return NULL
	 */
	_animateCloseCart:function()
	{
		var cart = $('cart');
		if(cart)
		{
			cart.setStyle({ height:cart.offsetHeight+'px' });
			
			new Effect.Morph(cart, {style:{ height:'0px' }, afterFinish:function(effect)
			{
				$(document.body).removeClassName('cart');
				$(document.body).removeClassName('wish-list');
				
				effect.element.remove();
			}});
		}
	}
	
}
