$(function()
{
	$(document).click(function(e)
	{
		var $dropdown = $('.cartDisplaySection').find('*').add($('a.shoppingcart.dropdown-trigger'));
		if($.inArray(e.target, $dropdown.toArray()) == -1)
			$('.cartDisplaySection').removeClass('shown visible');
	});
	
	var regex = new RegExp('^(http://[^/]+)/');
	var rootFolder = regex.exec(window.location.href)[1];
	
	$('.dropdownItem').data('trigger', $('a.shoppingcart.dropdown-trigger'));
	
	$('a.shoppingcart.dropdown-trigger').click(function(e)
	{
		e.preventDefault();
		
		$('.shoppingcartdisplay-box').toggleClass('visible shown');
	});
	$('.dropdownItem').bind('dropdowntoggle', function(e, direction)
	{
		var $dropdownItem = $(this);
		var $trigger      = $dropdownItem.data('trigger');
		
		// Ensure direction.
		if(isNaN(direction)) direction = $dropdownItem.hasClass('shown') ? -1 : 1;
		
		// Disable trigger.
		//$trigger.addClass('disabled');
		
		// Set states.
		$trigger.toggleClass('maximise');
		$trigger.toggleClass('minimise');
		
		$dropdownItem.toggleClass('hidden', direction == -1);
		$dropdownItem.toggleClass('shown', direction == 1);
		$dropdownItem.toggleClass('visible', direction == 1);
		
		// Calculate new position.
		//var currPosition = $dropdownItem.css('top').replace(/([a-z]+)/, '') * 1
		var currPosition = direction == 1 ? $dropdownItem.height() * -1 : 0;
		var displacement = $dropdownItem.height();//$dropdownItem.data('naturalHeight');
		
		var newPosition = currPosition + displacement * direction;
		
		// Toggle drop down item.
		/*$dropdownItem.css(
		{
			display: 'block', 
			top: currPosition
		}).animate(
		{
			top: newPosition
		}, 400, function()
		{
			$trigger.removeClass('disabled');
		});*/
	});
	
	// Display functions.
	
	$('.cartSummarySection').bind('updateshoppingcartsummary', function()
	{
		var $this = $(this);
		$.ajax(
		{
			url: rootFolder + '/ajax/getShoppingCartSummary.asp', 
			type: 'GET', 
			dataType: 'html', 
			
			success: function(html)
			{
				var $html = $(html);
				$this.find('.items').html($html.find('.items').html());
				$this.find('.subtotal').html($html.find('.subtotal').html());
			}
		});
	});
	
	$('.cartDisplaySection').bind('updateshoppingcartdisplay', function()
	{
		var $this = $(this);
		$.ajax(
		{
			url: rootFolder + '/ajax/getShoppingCartDisplay.asp', 
			type: 'GET', 
			dataType: 'html', 
			
			success: function(html)
			{
				var $html = $(html);
				$this.find('.c').html($html.find('.c').html());
				$this.find('.shoppingCartDisplayFooter').html($html.find('.shoppingCartDisplayFooter').html());
			}
		});
	});
	
	$('.cartDiscountSection').bind('updateshoppingcartdiscount', function()
	{
		var $this = $(this);
		
		// Get values.
		var freeDeliveryTotal = 150;
		
		var subTotal = $('#shoppingcart #cartRowTotal .subTotalPrice').text().replace(/[^0-9\.]/g, '');
		if(isNaN(subTotal))
			subTotal = 0;
		subTotal = parseFloat(subTotal);
		
		// Get difference.
		var difference = freeDeliveryTotal - subTotal;
		
		// Set difference in message.
		if($this.find('.successMessages .value').size() > 0)
			$this.find('.successMessages .value').text('$' + difference.toFixed(2));
		
		// Display message if sub total is up to $30 different.
		var showDiscountSection = (difference <= 30 && difference >= 0);
		
		// See if message exists, if not, then load it in through ajax.
		if(showDiscountSection && $this.find('.successMessages').size() == 0)
		{
			$.ajax(
			{
				url: rootFolder + '/ajax/getShoppingCartDiscount.asp', 
				type: 'GET', 
				dataType: 'html', 
				
				success: function(html)
				{
					var $html = $(html);
					
					// Hide message first, then fade it in.
					$this.html($html.css('display', 'none'));
					$this.find('.successMessages').fadeIn();
				}
			});
		}
		// Toggle cart discount section as needed.
		else if(showDiscountSection && !$this.find('.successMessages').is(':visible'))
			$this.find('.successMessages').fadeIn();
		else if(!showDiscountSection && $this.find('.successMessages').is(':visible'))
			$this.find('.successMessages').fadeOut();
	});
	
	// Actions.
	
	$('.cartDisplaySection a.remove').live('click', function(e)
	{
		e.preventDefault();
		
		var $trigger = $(this);
		var $item    = $trigger.parents('.cartItem');
		
		// Add confirmation?
		
		// Trigger delete action.
		$item.trigger('deletecartitem');
	});
	
	// deletecartitem event.
	$('.cartItem').live('deletecartitem', function()
	{
		var $item      = $(this);
		var cartItemID = $item.find('input[name=id]').val();
		
		// Perform delete.
		$.ajax(
		{
			url: rootFolder + '/ajax/deleteShoppingCartItem.asp', 
			type: 'GET', 
			dataType: 'html', 
			
			data: 
			{
				id: cartItemID
			}, 
			
			success: function()
			{
				$('.cartSummarySection').trigger('updateshoppingcartsummary');
				$('.cartDisplaySection').trigger('updateshoppingcartdisplay');
				$('.cartDiscountSection').trigger('updateshoppingcartdiscount');
			}
		});
	});
});
