var ajaxCart = {

    overrideButtonsInThePage : function(){

        $('.ajax_add_to_cart_button').unbind('click').click(function(event){
            event.preventDefault();

            var slug = $(this).parent().parent().find('input[name=productname]').attr('value');
            var token = $(this).parent().parent().find('input[name=csrfmiddlewaretoken]').attr('value');
            var qyt = $(this).parent().parent().find('input[name=quantity]').attr('value');
            var add_url = $(this).parent().parent().attr('action');

			if ($(this).attr('disabled') != 'disabled')
				ajaxCart.add(slug, qyt, token, add_url, this);
			return false;
		});
        $('#cart_block_list .ajax_cart_block_remove_link').unbind('click').click(function(event){
            event.preventDefault();
            var ids = $(this).attr('id').split('_');
            if (typeof(ids[3]) == 'undefined'){
                return false;
            }
            var token = $('input[name=csrfmiddlewaretoken]').attr('value');
            var remove_url = $(this).attr('href');
            ajaxCart.remove(ids[3], token, remove_url);
        });
    },
    add : function(productName, quantity, token, add_url, productDom){
        $.ajax({
            type: 'POST',
            url: add_url,
            async: true,
            cache: false,
            dataType : "json",
            data: 'productname='+ productName +'&quantity=' + quantity +'&csrfmiddlewaretoken='+ token,
            success: function(jsonData) {
                if (jsonData['results'] == "Success")
                    ajaxCart.updateAdd(jsonData);

            },
            error: function() {alert('ERROR: unable to delete the product');}
        });
    },

    processAdd: function(jsondata){
        return function(data){
                $('#cart_block_details').html(data);
                var num_items = parseInt($('#ajax-qty').text());
            
                ajaxCart.updateEverywhere(num_items);
/*
// Old version -- remains for reference
                var num_items = parseInt($('#cart_block_summary').find('.ajax_cart_quantity').text());
                ajaxCart.updateEverywhere(parseInt(jsondata['cart_count']));
*/
                $.notification(jsondata["item_qty"]+ " - "+ jsondata['name']+ " was successfully added to the cart", {
						duration: 3000,
						freezeOnHover: true,
						hideSpeed: 250,
						position: 'top-right',
						showSpeed: 250
					});
                ajaxCart.overrideButtonsInThePage();
            }
    },

    updateAdd: function(jsonData){
        // check if cart_block_no_products has class hidden if not add
        if(! $('#cart_block_no_products').hasClass('hidden'))
            $('#cart_block_no_products').addClass('hidden');

        $.ajax({
            type: 'GET',
            url: '/cart/ajax_cart_refresh/',
            async: true,
            cache: false,
            success : ajaxCart.processAdd(jsonData)
        })
    },
    updateEverywhere : function(cart_count){

            if(cart_count > 0)
            {
                $('.ajax_cart_no_product').hide();
                $('.ajax_cart_quantity').text(cart_count.toString());
                $('.ajax_cart_quantity').fadeIn('slow');
                $('.ajax_cart_total').fadeIn('slow');
                if(cart_count > 1)
                {
                    $('.ajax_cart_product_txt').each( function () {
                        $(this).hide();
                    });

                    $('.ajax_cart_product_txt_s').each( function () {
                        $(this).show();
                    });

                }
                else
                {
                    $('.ajax_cart_product_txt').each( function () {
                        $(this).show();
                    });

                    $('.ajax_cart_product_txt_s').each( function () {
                        $(this).hide();
                    });
                }
            }
            else
            {
                $('.ajax_cart_quantity, .ajax_cart_product_txt_s, .ajax_cart_product_txt, .ajax_cart_total').each( function () {
                        $(this).hide();
                    });
                $('.ajax_cart_no_product').show('slow');
            }
    },
	expand : function(){
		if ($('#cart_block #cart_block_list').hasClass('collapsed'))
		{
			$('#cart_block #cart_block_summary').slideUp(200, function(){
				$(this).addClass('collapsed').removeClass('expanded');
				$('#cart_block #cart_block_list').slideDown({
					duration: 600,
					complete: function(){$(this).addClass('expanded').removeClass('collapsed');}
				});
			});
	// toogle the button expand/collapse button
			$('#cart_block h4 span#block_cart_expand').fadeOut('slow', function(){
				$('#cart_block h4 span#block_cart_collapse').fadeIn('fast');
			});
		}
	},

// try to collapse the cart
	collapse : function(){
		if ($('#cart_block #cart_block_list').hasClass('expanded'))
		{
			$('#cart_block #cart_block_list').slideUp('slow', function(){
				$(this).addClass('collapsed').removeClass('expanded');
				$('#cart_block #cart_block_summary').slideDown(700, function(){
					$(this).addClass('expanded').removeClass('collapsed');
				});
			});
			$('#cart_block h4 span#block_cart_collapse').fadeOut('slow', function(){
				$('#cart_block h4 span#block_cart_expand').fadeIn('fast');
			});
		}
	},
    clearOldProducts: function(jsondata){
        return function(data,textStatus){

            $('#cart_block_total').text(jsondata['cart_total']);
            var cart_count = parseInt(jsondata['cart_count']);
            ajaxCart.updateEverywhere(cart_count);

            $('#cart_item_id_'+jsondata['item_id']).parent().parent().remove();
            if (cart_count == 0){
                $('#cart_block_no_products').removeClass('hidden');
            }

        }
    },

    update : function(jsonData){

        var trash = $('#cart_item_id_'+jsonData['item_id']).parent().parent();
        var qty_html = '';
        trash.slideUp('slow',ajaxCart.clearOldProducts(jsonData));
    },

    remove : function(productId, token, remove_url){

    //send the ajax request to the server
        $.ajax({
            type: 'POST',
            url: remove_url,
            async: true,
            cache: false,
            dataType : "json",
            data: 'cartitem='+productId+'&csrfmiddlewaretoken='+ token,
            success: function(jsonData) {
                ajaxCart.update(jsonData);

            },
            error: function() {alert('ERROR: unable to delete the product');}
        });
    }

} 

