
/**
*
* Quick Cart
*
* Quick cart allows the end user to a better expeience out of the cart and wish list.
*
**/

	/** setup **/
	var bookWidth = 146;
	var shownBooks = 0;
	var cartCarouselWidth = 0;
	var cartOpen = wishOpen = false;

	$(document).ready( function() {

		/** attach events to the tiles **/
		$("#quickcart a.mycart").click(function() {
			if( cartOpen ) {
				slideShutCart();
			} else {
				slideOpenCart();
			}
			return false;
		});

		$("#quickcart a.mywish").click(function() {
			if( wishOpen ) {
				slideShutWish();
			} else {
				slideOpenWish();
			}
			return false;
		});

		$("#quickcart a.close").click(function() {
			slideShutCart();
			slideShutWish();
			return false;
		});


		/** calc width based on screen size and init carousels **/
		setQuickCartWidth();
		$(window).resize(setQuickCartWidth);

		/** attach actions to carousel controls **/
		$('#cartdisplay .cartnext').click( function() { nextQuickScreen(true); return false; });
		$('#cartdisplay .cartprev').click( function() { prevQuickScreen(true); return false; });

		$('#wishlistdisplay .cartnext').click( function() { nextQuickScreen(false); return false; });
		$('#wishlistdisplay .cartprev').click( function() { prevQuickScreen(false); return false; });


		/** set the notifications **/
		var quickcartitems = parseInt($('#quickcart_qty').text());
		var quickwishitems = parseInt($('#quickwish_qty').text());
		if(quickcartitems > 0) $('#quickcart .controls .mycart').append('<span>' + quickcartitems + '</span>');
		if(quickwishitems > 0) $('#quickcart .controls .mywish').append('<span>' + quickwishitems + '</span>');


	});


	/** calc width based on screen size and init carousels **/
	function setQuickCartWidth() {
		$("#quickcart").width('100%');
		$("#cartdisplay, #wishlistdisplay").show();
	
		var containWidth = parseInt( $('#cartdisplay .cartcontainer').width() );
		shownBooks = Math.floor( containWidth / bookWidth );
		cartCarouselWidth = shownBooks * bookWidth;
		$('.cartcarousel').width( cartCarouselWidth );
		$('.cartnext').css('left', (cartCarouselWidth+8)+'px');	
		$("#quickcart").width('auto');
		$("#cartdisplay, #wishlistdisplay").hide();
	}

	/** distinguish between cart and wish list **/
	function carouselID(cart) {
		var carousel = (cart) ? '#cartdisplay' : '#wishlistdisplay';
		carousel = carousel + ' .cartcarousel ul';
		return carousel;
	}

	function cartinfoID(cart) {
		var cartinfo = (cart) ? '#cartdisplay' : '#wishlistdisplay';
		cartinfo = cartinfo + ' .cartinfo';
		return cartinfo;
	}


	/** Control quick cart visibility/motion **/
	function slideOpenCart() {
		$("#quickcart").width('100%');
		$("#wishlistdisplay").animate({left:'-100%'}, 800, 'swing');
		wishOpen = false;
		$("#cartdisplay").show().animate({left:'0%'}, 800, 'swing');
		cartOpen = true;
	}

	function slideShutCart() {
		$("#cartdisplay").animate({left:'-100%'}, 800, 'swing', resetQuickCart);
		cartOpen = false;
	}

	function slideOpenWish() {
		$("#quickcart").width('100%');
		$("#cartdisplay").animate({left:'-100%'}, 800, 'swing', resetQuickCart);
		cartOpen = false;
		$("#wishlistdisplay").show().animate({left:'0%'}, 800, 'swing');
		wishOpen = true;
	}

	function slideShutWish() {
		$("#wishlistdisplay").animate({left:'-100%'}, 800, 'swing', resetQuickCart);
		wishOpen = false;
	}

	function resetQuickCart() {
		if(!cartOpen && !wishOpen) {
			$("#quickcart").width('auto');
			$("#cartdisplay, #wishlistdisplay").hide();
		}
	}


	/** Control quickcart carousels **/
	function nextQuickScreen(cart) {
		var carousel = carouselID(cart);
		slideQuick(carousel, 1);
	}

	function prevQuickScreen(cart) {
		var carousel = carouselID(cart);
		slideQuick(carousel, -1);
	}

	function firstQuickScreen(cart) {
		var carousel = carouselID(cart);
		doSlideQuick(carousel, 0);
		$(carousel).parent().siblings('.cartprev').addClass('off');
		$(carousel).parent().siblings('.cartnext').removeClass('off');
	}

	function lastQuickScreen(cart) {
		var carousel = carouselID(cart);
		doSlideQuick(carousel, maxQuickIndex(carousel) * cartCarouselWidth);
		$(carousel).parent().siblings('.cartprev').removeClass('off');
		$(carousel).parent().siblings('.cartnext').addClass('off');
	}

	function slideQuick(carousel, direction) {
		var index = currentQuickIndex(carousel);
		var max = maxQuickIndex(carousel);

		if( index+direction < 0 ) {
			return;
		} else if( index+direction == 0 ) {
			$(carousel).parent().siblings('.cartprev').addClass('off');
		} else {
			$(carousel).parent().siblings('.cartprev').removeClass('off');
		}

		if( index+direction > max ) {
			return;
		} else if( index+direction == max ) {
			$(carousel).parent().siblings('.cartnext').addClass('off');
		} else {
			$(carousel).parent().siblings('.cartnext').removeClass('off');
		}

		var position = -1 * parseInt( $(carousel).css('left') );
		doSlideQuick(carousel, position + (direction * cartCarouselWidth));
	}

	function doSlideQuick(carousel, val) {
		val = -1 * val;
		$(carousel).stop().animate(
			{ left: val + 'px' },
			750,
			'swing');
	}

	function currentQuickIndex(carousel) {
		var index = 0;
		var left = parseInt( $(carousel).css('left') );
		if( !isNaN(left) && left != 0 ) {
			index = -1 * parseInt( left / cartCarouselWidth );
		}
		return index;
	}

	function maxQuickIndex(carousel) {
		var pagecount = Math.floor( $(carousel).children('li').length / shownBooks );
		if(  $(carousel).children('li').length % shownBooks > 0 ) pagecount++;
		var max = ( pagecount ) - 1;
		return max;
	}


	/** INSERT into quick cart **/
	function addQuickCartItem( o, qty, amt, cart ) {

		// slide open the correct list
		if(cart) slideOpenCart();
		else slideOpenWish();

		var carousel = carouselID(cart);
		var cartinfo = cartinfoID(cart);

		// append <li> to the carousel
		$(carousel).append( generateQuickCartLI(o.index, o.item, o.art, o.title, o.author, o.type, o.style, qty, amt, cart) );

		// update cart totals & notification count
		var currentTotal = parseFloat( $(cartinfo).find('span.total').html() );
		var currentQty = parseInt( $(cartinfo).find('span.quantity').html() );
		$(cartinfo).find('span.total').html( (currentTotal + amt).toFixed(2) );
		$(cartinfo).find('span.quantity').html( currentQty + qty ); 

		var $tile = $("#quickcart").children('.controls').find((cart) ? '.mycart' : '.mywish');
		if($tile.children('span').length) $tile.children('span').html( currentQty + qty );
		else $tile.append('<span>' + (qty) + '</span>');

		// scroll carousel to the end
		lastQuickScreen(cart);

	}

	function generateQuickCartLI( index, item, art, title, author, type, style, qty, amt, cart ) {
		return '<li id="quick' + ( (cart) ? 'cart' : 'wish' ) + '_' + index + '">' +
						'<div class="book"><div class="shadow"><img alt="' + title + '" src="' + art + '"' + style + ' />' + 
						'<a href="javascript:removeFrom' + ( (cart) ? 'Cart' : 'Wishlist' ) + '(\'' + type + '\', \'' + index + '\', 0);" class="del" title="' + qty + '|' + amt + '">[X]</a>' + '</div></div>' + 
						'<div class="title"><strong>' + title + '</strong><br />' + author + '</div>' + 
					'</li>';
	}


	/** DELETE from quick cart  **/
	function removeQuickCartItem(item, cart) {
		var c = (cart) ? 'cart' : 'wish';
		var carousel = carouselID(cart);
		var cartinfo = cartinfoID(cart);

		var data = $("li#quick" + c + "_" + item).find('.del').attr('title').split('|');
		var qty = data[0];
		var amt = data[1];

		// update cart totals & notification count
		var currentTotal = parseFloat( str_replace(",", "", $(cartinfo).find('span.total').html()) );
		var currentQty = parseInt( $(cartinfo).find('span.quantity').html() );
		$(cartinfo).find('span.total').html( (currentTotal - amt).toFixed(2) );
		$(cartinfo).find('span.quantity').html( currentQty - qty ); 

		var $tile = $("#quickcart").children('.controls').find((cart) ? '.mycart' : '.mywish');
		if( (currentQty - qty) == 0 || isNaN(currentQty - qty)) $tile.children('span').remove();
		else $tile.children('span').html( currentQty - qty );

		// slide carousel if necessary
		if($(carousel).children('li').length % shownBooks == 1) { 
			if($(carousel).children('li').last().attr('id') == "quick" + c + "_" + item) {
				prevQuickScreen(cart);
			}
		}

		// remove <li> from carousel 
		$("li#quick" + c + "_" + item).remove();

	}

	function refreshQuickCart() { return; }


