/* Script to make Ajax requests to add to the basket */

var newBasket;
var messageLoader = new Image();
messageLoader.src = '/images/basket-message-loader.gif';

var basket = Class.create();
basket.prototype = {
	
	initialize: function() {
		
		var th = this;
		
		if( $$('ul.basket') ) $$('ul.basket').first().observe('click',th.go_to_basket.bindAsEventListener());
			
		$$('a.add_to_basket').each(function(elm,v){
			Element.observe(elm,'click',th.add.bindAsEventListener(th,true,false));
		});
		
		if( $('shopping_cart') ) {
		  
		  th.init_basket(th);
		  
		}
		
	},
	
	add: function(e,show_checkout_links,add_tracking) {
		
		var elm = Event.element(e);
		var buttonId = elm.id;
		var skuId = buttonId.replace('add_to_basket_','');
		
		if( add_tracking ) new CSEventTracker('add-to-basket',undefined);
		
		var th = this;
		
		//th.show_basket_loader(skuId);
		var parameters = {
			'add': 1,
			'mv_order_item': $('sku_'+skuId).getValue(),
			'sku': $('sku_'+skuId).getValue(),
			'mv_order_quantity': $('quantity_'+skuId).getValue(),
			'mv_item_option' : 'displayname',
			'mv_order_displayname': $('displayname_'+skuId).getValue(),
			'mv_session_id': $('session_id').getValue(),
			'mv_action': 'refresh',
			'leaveintact': 1
		};
		
		this.loading_message(skuId);
		
		new Ajax.Request('/ord/basket_ajax.html',{
			method: 'post',
			parameters: parameters,
			onComplete: function(t) {
				
				var result = t.responseText.evalJSON();
				
				th.stock_message(result.added,show_checkout_links);
				
				th.update_qty_in_basket(result.items_in_basket);
				th.init_basket(th);
				
			}
		});
		
		Event.stop(e);
		
	},
	
	stock_message: function(item,show_checkout_links) {

		var msg = item.qty + ' in your basket';
		
		var stock_message_elm = $('stock_message_'+item.id);
		var basket_qty_elm = $('basket_qty_'+item.id);
		var basket_links = $('basket_link_'+item.id);
		
		if( basket_qty_elm ) {
		  
		  if( item.qty > 0 ) {
  			basket_qty_elm.removeClassName('adding_loader');
  			basket_qty_elm.removeClassName('in_stock');
  			basket_qty_elm.update(msg);
			  
        if( show_checkout_links && basket_links.hasClassName('hide') ) {
          basket_links.setStyle({ 'display': 'none' });
          basket_links.removeClassName('hide');
          new Effect.BlindDown(basket_links,{ 'duration': 0.3 });
        }
  			
  			basket_qty_elm.addClassName('highlighter');
  			Element.removeClassName.delay(0.4,basket_qty_elm,'highlighter');
  			
			} else {
			  
			  basket_qty_elm.addClassName('hide');
			  if( stock_message_elm ) stock_message_elm.removeClassName('hide');
			  
			  new Effect.BlindUp(basket_links,{ 'duration': 0.2, afterFinish: function() { basket_links.addClassName('hide'); } });
			  
			}
			
		}
	
		return true;
		
	},
	
	loading_message: function(id,update) {
	  
		var loader = $('basket_qty_'+id);
		
		if( loader ) {
		  
		  loader.addClassName('adding_loader');
		
		  var msg = update ? 'Updating basket .. ' : 'Adding to basket .. ';
		  loader.update( msg );
		  loader.insert(messageLoader);
		
		  if( loader.hasClassName('hide') ) {
  		  if( $('stock_message_'+id) ) $('stock_message_'+id).addClassName('hide');
  		  loader.removeClassName('hide');
  		}
  		
		}
		
	},
	
	adjust_quantity: function(e,sku,item) {
	  
	  var th = this;
	  
	  var item_id = e.target.name ? e.target.name.replace(/quantity/,'') : item;
	  var exp = /[\W\-]/g;
	  var skuId = sku.replace(exp,'');
	  
	  var updated_item = item ? item : item_id;
	  var is_finalize_page = $('basket_page_list') ? 0 : 1;
	  
	  if( th.more_quantity_check(th,e.target,item) ) return;
	  
	  th.show_basket_loader(sku);
	  
	  var parameters = {
			'update': 1,
			'mv_action': 'refresh',
			'mv_session_id': $('basket_session_id').getValue(),
			'updated_item': updated_item
		};
		
		if( item ) parameters['deleted'] = sku;
		parameters['is_finalize_page'] = is_finalize_page;
		
		var wants_more = undefined;
		
		$$('select.basket_qty').each(function(elm){
		  var id = elm.name.replace(/quantity/,'');
		  var qty = ( item && (item == id) ) ? 0 : elm.getValue();
		  if( qty == 'more' ) qty = elm.next().getValue();
		  parameters[elm.name] = qty;
		});
		
		th.loading_message(skuId,true);
		
	  new Ajax.Request('/ord/basket_ajax.html',{
			method: 'post',
			parameters: parameters,
			onComplete: function(t) {
				
				var result = t.responseText.evalJSON();
				
				if( $('basket_page_list') ) $('basket_page_list').update(result.main_basket);
				if( $('shopping_cart') ) $('shopping_cart').update(result.main_basket);
				
				th.update_qty_in_basket(result.items_in_basket);
				th.stock_message(result.updated,false);
				th.init_basket(th);
				
			}	
		});
	  
	},
	
	show_basket_loader: function(sku) {
	  
	  var remove_img = $$('img.'+sku).first();
	  remove_img.src = '/images/basket_update_loader.gif';
	  
	},
	
	init_basket: function(e) {
	  
	  var th = this;
	  
	  $$('select.basket_qty').each(function(elm){	   
	    var classes = $w(elm.className);
	    elm.observe('change',th.adjust_quantity.bindAsEventListener(th,classes[1]));
	  })
	  
	  $$('input.more_quantity_value').each(function(elm){
	    var classes = $w(elm.className);
	    elm.observe('blur',th.adjust_quantity.bindAsEventListener(th,classes[1]));
	    elm.observe('keypress',function(e){
	      
	      // checking if return key is pressed
	      if( e.keyCode == 13 ) {
	        Event.stop(e);
	        th.adjust_quantity(e,classes[1]);
	      } 
	      // checking if up key is pressed
	      else if ( e.keyCode == 38 ) {
	        var qty = e.target.getValue();
	        var new_qty = parseInt(qty) + 1;
	        e.target.setValue(new_qty);
	        th.adjust_quantity(e,classes[1]);
	      } 
	      // checking if down key is pressed
	      else if ( e.keyCode == 40 ) {
	        var qty = e.target.getValue();
	        var new_qty = parseInt(qty) - 1;
	        e.target.setValue(new_qty);
	        th.adjust_quantity(e,classes[1]);
	      }
	      
	    });
	  });
	  
	  $$('.basket_delete').each(function(elm){
	    var classes = $w(elm.className);
	    elm.observe('click',th.adjust_quantity.bindAsEventListener(th,classes[2],classes[1]));
	  });
	
	},
	
	update_qty_in_basket: function(qty) {
	  
	  var items_in_basket = (qty == 1) ? qty+' item' : qty+' items';
	  var header_basket = $('items_in_basket');
	  
	  header_basket.update(items_in_basket);
	  
	  (qty > 0  ) ? header_basket.addClassName('has_items') : header_basket.removeClassName('has_items');
	  header_basket.addClassName('highlight');
		Element.removeClassName.delay(0.4,header_basket,'highlight');
	  
	},
	
	more_quantity_check: function(th,updated_item,delete_item) {

    var is_more_quantity = false;
    
    if( !delete_item ) {
      
	    var qty = updated_item.getValue();
	    
	    if( qty == 'more' && updated_item.hasClassName('basket_qty') ) {
	      updated_item.addClassName('hidden');
	      updated_item.next().removeClassName('hidden');	  
	      is_more_quantity = true;    
	    }
	    
	  }
	  
	  return is_more_quantity;
	  
	},
	
	go_to_basket: function() {

    var url = $('basket_url').getValue();
    window.location = url;

  }
	
};

function initBasket() { newBasket = new basket(); }
document.observe('dom:loaded',initBasket);