/*
 *
 * coolCart
 *
 * Creates an overview of the cart contents
 * 
 ******************************************** */

(function($){
	$.fn.coolCart = function(){

		var cart = $(this);
		var cartopen=false;
		
		var updateCartContents = function(){
			// dummy, should get cart contents from server
			var contents = cart.find("#articles").children();

			return contents;
		}

		var openCart = function(){
         
			cart.addClass("open");
			
			cart.animate({
				"width" : "500px",
				"height" : (40 + 400) +"px"
			},250,function(){
				cart.find("#close_cart").css("display", "block");
			});
			            
			$("body, #close_cart").click(
				function(event){
					event.stopPropagation();
					closeCart();
				}
			);

            $(".scrollpane").height(400);
            			
			cartopen=true;
		}

		var closeCart = function(){

			cart.find("#close_cart").css("display", "none");
			
            cart.animate({
				"width" : "318px",
				"height" : "40px"
                },250, function() {
                     // animation complete
                   cart.removeAttr("style").removeClass("open");
                }
            );

			$("body").unbind("click");
			
			cartopen=false;
		}

        var updateCart = function(ajaxUrl){



            $.ajax({
                url: ajaxUrl,
                success: function(data) {

                    // Refresh the whole page if elements exists that also need to be updated
                    if ($('.cart').length || $('.minicart').length){
                        location.href = document.location.href
                        return
                    }

                    // render the html in the render container and update the cart from this container
                    var renderContainer = $("#renderContainer")
                    renderContainer.html(data)

                    var cartData = renderContainer.find("#articles").html()
                    var articleAmountData = renderContainer.find("#articles_amount").html()
                    var priceData = renderContainer.find("#price").html()

                    // update cart html
                    cart.find("#articles").html(cartData);
                    cart.find("#articles_amount").html(articleAmountData);
                    cart.find("#price").html(priceData);

                    // reregister functions
                    registerFunctions()

                    // empty render container
                    renderContainer.html("")

                    // refresh cufon and fancybox
                    Cufon.refresh();
                    $(".cart .description a, .related .item a").fancybox(fancyboxMedium);
                }
            });
		}

        $(this).updateCart = updateCart

        var registerFunctions = function(){

            // on delete click
            cart.find(".ajaxLink").click(
                function(event){
                    var ajaxUrl = $(this).attr("href")

                    // show a spinner
                    $(this).parent().html($("#spinner").html())

                    updateCart(ajaxUrl)
                    event.stopPropagation();

                    return false
                }
            );

            // on quantity change
            cart.find(".quantity").change(
                function(event){
                    var quantity = $(this).val()
                    var ajaxUrl = $(this).attr("href") + "&quantity=" + quantity

                    // show a spinner
                    $(this).parent().html($("#spinner").html())

                    updateCart(ajaxUrl)
                }
            );

        }
		
		// enable cart pulldown
		cart.click(
			function(event){

				event.stopPropagation();
				if(!cartopen && cart.find("#articles").length){

					openCart();
				}
			}
		);

        cart.find("#afrekenen").click(
			function(event){
				event.stopPropagation();
				location.href = $(this).attr("href")
			}
		);

        registerFunctions()

        return updateCart
	};
})(jQuery);
