var minicart = {
	state: "closed",
	closeTimeout: false,
	CHANGETIME: 1500,
	OPENTIME: 2000,
	DELAYTIME: 1000
};

/**
 * Sets up initial minicart display and connects mouse events
**/
minicart.load = function()
{
	// connect items
	jQuery("#miniCartSection").mouseover(minicart.onOpenCart);
	jQuery("#miniCartSection").mouseout(minicart.onCheckMouse);

	// hide items
	var itemNodes = document.getElementsByName("minicart_item");
	if(itemNodes.length > 0) {
		// roll-out only if cart has items
		minicart.onQuickView();
	}
};

/**
 * rolls down and rolls back up the mini cart after a specified amount of time
 **/
minicart.onQuickView = function()
{
	if(minicart.state == "closed") {
		minicart.state = "toggling";

		jQuery("#miniCartContent").pause(minicart.OPENTIME).slideDown(minicart.CHANGETIME).pause(minicart.DELAYTIME).slideUp(minicart.CHANGETIME, minicart.onUpdateState);
	}
}

minicart.onOpenCart = function()
{
	if(minicart.closeTimeout) {
		minicart.closeTimeout = false;
	}
	if(minicart.state == "closed") {
		minicart.onUpdateState();
		jQuery("#miniCartContent").slideDown(500, minicart.onUpdateState);
    }
};

minicart.onCloseCart = function()
{
	if(minicart.state == "open" && minicart.closeTimeout) {
        minicart.onUpdateState();
        minicart.closeTimeout = false;
        jQuery("#miniCartContent").slideUp(500, minicart.onUpdateState);
    }
};

minicart.onCheckMouse = function(e)
{
	if (!e) {
		var e = window.event;
	}
	var tg = (window.event) ? e.srcElement : e.target;
	var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
	while (reltg && reltg.id != "miniCartSection" && reltg.nodeName != 'BODY') {
		reltg = reltg.parentNode;
	}
	if (reltg && reltg.id == "miniCartSection") {
		return;
	}
	minicart.closeTimeout = true;
	setTimeout(function() { minicart.onCloseCart();}, 500);
}

// move to the next state of the cart
minicart.onUpdateState = function()
{
	if(minicart.state == "closed")
		minicart.state = "opening";
	else if(minicart.state == "opening")
		minicart.state = "open";
	else if(minicart.state == "open")
		minicart.state = "closing";
	else if(minicart.state == "closing")
		minicart.state = "closed";
	else if(minicart.state == "toggling")
		minicart.state = "closed";
};

minicart.removeCartItem = function(primaryCartItemId, cartItemId, isPaired)
{
	if(minicart.confirmCartItemRemoval(isPaired)) {
		shoppingCartAjaxController.removeMiniCartItem(primaryCartItemId, cartItemId, document.addSkuToCartForm.curCShoppingCartKey.value, {callback:updateProductViewPageAfterMiniCartUpdate});
	}
};

minicart.removeTrialPackCartItem = function(primaryCartItemId, cartItemId)
{
	if(minicart.confirmCartItemRemoval(false)) {
		shoppingCartAjaxController.removeMiniCartItem(primaryCartItemId, cartItemId, document.addSkuToCartForm.curCShoppingCartKey.value, {callback:minicart.removeTrialPackCallback});
	}
};

minicart.removeTrialPackCallback = function(ccDynamicCartBean)
{
	updateProductViewPageAfterMiniCartUpdate(ccDynamicCartBean);
	if (trialpackMinicart) {
		trialpackMinicart.removeBundleCallback();
	}
};

minicart.confirmCartItemRemoval = function(isPaired)
{
	var okayToRemove = false;

	if(isPaired) {
		okayToRemove = confirm('You are about to permanently remove a pair of products. To remove only one item from the pair, go back and select edit instead of remove.  Proceed?');
	} else {
		okayToRemove = confirm('You are about to permanently remove this product from your cart.  Proceed?');
	}

	return okayToRemove;
};

// set the minicart to initialize when document finishes loading
jQuery(document).ready(minicart.load);
