Cart = {
	
	showCartDialog : true,
	
	cartContainer : 'cart-container',
	
	cartDiv : 'cart',
	
	checkoutCartDiv : 'checkoutCartContents',
	
	webroot : '',
	
	lastPromoKeyup : null,
	
	showCart : function() {
		Cart.showLoader();
		var cartDiv = Cart.showCartDialog ? Cart.cartDiv : Cart.checkoutCartDiv;
		$('#' + cartDiv).load(Cart.webroot + 'cart/', {}, function() { 
			Cart.hideLoader(); 
			if(Cart.showCartDialog) {
				$('#' + Cart.cartContainer).slideDown('slow');
			}else {
				$('#' + Cart.checkoutCartDiv ).slideDown('slow');
			}
			tb_init('a.thickbox, area.thickbox, input.thickbox');
		});
	},
	
	toggleCart : function() {
		if($('#' + Cart.cartContainer).css('display') == 'block') {
			Cart.hideCart();
		}else {
			Cart.showCart();
		}
	},
	
	updateCart : function() {
		$('#' + Cart.cartContainer).slideUp('slow', function() {
			Cart.showCart();
		});
	},
	
	hideCart : function() {
		if(Cart.showCartDialog) {
			$('#' + Cart.cartContainer).slideUp('slow');
		}else {
			$('#' + Cart.checkoutCartDiv).slideUp('slow');
		}
	},
	
	addToCart : function(product_id) {
        window.scrollTo(0,0);
		Cart.showLoader();
		var cartDiv = Cart.showCartDialog ? Cart.cartDiv : Cart.checkoutCartDiv;
        $('#' + cartDiv).load(Cart.webroot + 'cart/add/'+ product_id, {}, function() { 
            Cart.hideLoader();
            if($('#' + Cart.cartContainer).css('display') == 'none') {
                $('#' + Cart.cartContainer).slideDown('slow');
            }
        });
	},
	
	addCustomToCart : function(e) {
        Cart.showLoader();
        var cartDiv = Cart.showCartDialog ? Cart.cartDiv : Cart.checkoutCartDiv;
        $('#' + cartDiv).load($('#custom-product-form').attr('action'), {
            customSize  : $('#customSize').val(),
            customText  : $('#customText').val(),
            customColor : $('#customColor').val(),
            customFont  : $('#customFont').val()
        }, function() {
            Cart.hideLoader();
            if($('#' + Cart.cartContainer).css('display') == 'none') {
                $('#' + Cart.cartContainer).slideDown('slow');
            }
        });
	},
	
	removeFromCart : function(temporary_id) {
		Cart.showLoader();
		var cartDiv = Cart.showCartDialog ? Cart.cartDiv : Cart.checkoutCartDiv;
        $('#' + cartDiv).load(Cart.webroot + 'cart/delete/'+ temporary_id, {}, function() { 
            Cart.hideLoader();
        });
	},
	
	updateOption : function(element) {
	    Cart.showLoader();
		var temporary_id = element.getAttribute('lineitem');
		var type_id = element.id.substr(5, element.id.length);
		var newValue = element.options[element.selectedIndex].value;
		$.ajax({
			type: "POST",
		    url: Cart.webroot + 'cart/updateOption/' + temporary_id + '/' + type_id + '/' + newValue,
		    success: function(msg) {
		        Cart.hideLoader();
		        if(eval('('+msg+')') !== true) {
		            Cart.hideCart();
		        }
		        
		    }
	    });
	},

	updateQuantity : function(element, lineItemTotalId, lineItemShippingId) {
		var temporary_id = element.getAttribute('lineitem');
		var newValue = element.value;
		if(newValue !== null && newValue !== '') {
			if(newValue === 0) {
				Cart.removeFromCart(temporary_id);
			}else {
                Cart.showLoader();
                var cartDiv = Cart.showCartDialog ? Cart.cartDiv : Cart.checkoutCartDiv;
                $('#' + cartDiv).load(Cart.webroot + 'cart/updateQuantity/' + temporary_id + '/' + newValue, {}, function() { 
                    Cart.hideLoader();
                });
			}
		}
	},
	
	setPickupOrder : function(element) {
	   Cart.showLoader();
	   var cartDiv = Cart.showCartDialog ? Cart.cartDiv : Cart.checkoutCartDiv;
        $('#' + cartDiv).load(Cart.webroot + 'cart/setPickupOrder/'+ $('#pickupOrder')[0].checked, {}, function() { 
            Cart.hideLoader();
        });
	},
	
	setInsurance : function(element) {
	   Cart.showLoader();
	   var cartDiv = Cart.showCartDialog ? Cart.cartDiv : Cart.checkoutCartDiv;
	   $('#' + cartDiv).load(Cart.webroot + 'cart/setInsurance/'+ $('#insurance')[0].checked, {}, function() { 
            Cart.hideLoader();
        });
	},
	
	showLoader : function() {
		$('#loading-image').css({'display':'block','top':$(window).myHeight()/2 - 37, 'left': $(window).width()/2 - 125});
	},
	
	hideLoader : function() {
	   $('#loading-image').hide();
	},
	
	promoCheck : function() {
	   Cart.lastPromoKeyup = new Date().getTime();
	   setTimeout(Cart.updatePromoCode, 1100);
	},
	
	updatePromoCode : function() {
	   var currentTime = new Date().getTime();
	   var difference = currentTime - Cart.lastPromoKeyup;
	   if(difference > 1000) {
	       
           Cart.showLoader();
           var cartDiv = Cart.showCartDialog ? Cart.cartDiv : Cart.checkoutCartDiv;
           $('#' + cartDiv).load(Cart.webroot + 'cart/updatePromoCode/', { promotionalCode : $('#promotionalCode').val() }, function() {
               Cart.hideLoader();
               $('#promotionalCode')[0].focus();
           });
        }
    }
	
};

jQuery.fn.extend({
  scrollTo : function(speed, easing) {
    return this.each(function() {
      var targetOffset = $(this).offset().top;
      $('html,body').animate({scrollTop: targetOffset}, speed, easing);
    });
  }
});

/**
 * Fix for innacurate jQuery height() on window element in firefox
 */
jQuery.fn.myHeight = function(h) {
    var name = "Height";
    return this[0] == window ?
        !jQuery.browser.msie && self["inner" + name] ||
        jQuery.boxModel && document.documentElement["client" + name] ||
        document.body["client" + name] :

        this[0] == document ?
                Math.max( document.body["scroll" + name], document.body["offset" +name] ) :

                h == undefined ?
                        ( this.length ? jQuery.css( this[0], n ) : null ) :
                        this.css( n, h.constructor == String ? h : h + "px" );
};
