var sessionStatus = 0;

jQuery(function()
{
  jQuery("#cartStatusMessage").hide().css( {opacity: 0.0} );
  jQuery("input[class*=shoppingCartQuantity]").livequery("keyup", function () { shoppingCartMgr.updateQuantity( jQuery(this).attr("class"), jQuery(this).val()); });
});

//SHOPPING CART SWAP IMAGES
var swapImage = function(imageID,imagePath,state)
{
  var ai;
  if (state == 'over'){ai=imagePath+"_over.gif";}else{ai=imagePath+".gif";}
  jQuery('img#'+imageID).attr("src",ai);
}

function CartItem (upc, productLineName, productName, shadeImageName, shoppingCartImageName, itemQuantity)
{
  this.upc                   = upc;
  this.productLineName       = productLineName;
  this.productName           = productName;
  this.shadeImageName        = shadeImageName;
  this.shoppingCartImageName = shoppingCartImageName;
  this.itemQuantity          = itemQuantity;
}



function ShoppingCartMgr ()
{
  this.shoppingCartItems = new Array ();
  this.status            = "";
}


// alreadyInCart
ShoppingCartMgr.prototype.getUpcNdx = function (upc)
{
  var bWorkToDo = true;
  var ndx       = 0;

  if (this.shoppingCartItems.length == 0)
  {
    ndx         = -1;
    bWorkToDo   = false;
  }

  while (bWorkToDo)
  {
    if (this.shoppingCartItems[ndx].upc == upc)
      bWorkToDo = false;
    else
    {
      ndx++;
      if (ndx >= this.shoppingCartItems.length)
      {
        ndx       = -1;
        bWorkToDo = false;
      }
    }
  }
  return (ndx);
}


ShoppingCartMgr.prototype.addItemToCart = function (upc, productLineName, productName, shadeImageName, shoppingCartImageName, itemQuantity, bAddToSession, statusMsgX, statusMsgY)
{
  var numericExpression = /^[0-9]+$/;
  var ndx;
  
  //Tracking function to track the 'add to cart' button clicks
  trackOverlay('addToCart');
  
  // make sure the quantity value is a legit number
  if ((("" + itemQuantity).match(numericExpression) == null) || (itemQuantity.length > 1))
  {
    alert ("Please enter a numeric quantity less than 10.");
    itemQuantity = "";
  }

  if ((itemQuantity == "") || (itemQuantity == "0"))
  {
    this.status = "INVALID_QUANTITY";
    //if (bDisplayStatus)
    //  this.displayStatus();
  }
  else
  {
    // if upc is already in cart, then replace it, otherwise, add a new cartItem on the end of the array
    ndx = this.getUpcNdx(upc);
    if (ndx == -1)
      ndx = this.shoppingCartItems.length;
    this.shoppingCartItems[ndx] = new CartItem (upc, productLineName, productName, shadeImageName, shoppingCartImageName, itemQuantity);

    if (bAddToSession)
    {
      jQuery.post ("/AddItemToCart.do",
                   {
                     upc:                   escape(upc),
                     productLineName:       productLineName,
                     productName:           productName,
                     shadeImageName:        shadeImageName,
                     shoppingCartImageName: shoppingCartImageName,
                     itemQuantity:          itemQuantity
                   },
                   function (status)
                   {
                     shoppingCartMgr.status = status;
                     shoppingCartMgr.displayStatus(statusMsgX, statusMsgY);
                     if ((status == "ADDED") || (status == "UPDATED"))
                     {
                       shoppingCartMgr.displayShoppingCartPane ();
                       shoppingCartMgr.slideCartItemsRight     ();
                       
                       var sessionID = getCookieValue("JSESSIONID");
                       
                       if(!sessionStatus)
                       {
	                       // Google Tracking for adding a Transaction
	                       pageTracker._addTrans(sessionID, "MaxFactor", "", "", "", "");
                    	   sessionStatus = 1;
                       }
                       
                       // Google Tracking for adding an Item
                       pageTracker._addItem(sessionID, upc, productName, productLineName, "1", itemQuantity);
                       
                       // Google Tracking Transaction
                       pageTracker._trackTrans();
                     }
                   }
                 );
    }
  }
}


ShoppingCartMgr.prototype.slideCartItemsRight = function ()
{
  var html;

  if (this.shoppingCartItems.length == 1)
    this.displayShoppingCartNav ();
  else
    jQuery("#shoppingCartNavImages").animate( {left: 40}, "slow", function ()
                                                                  {
                                                                    html = '<div id="navCartItemDiv"' + ndx + '" style="position:relative; float:left; width:40px"><img class="png" src="' + shoppingCartMgr.shoppingCartItems[shoppingCartMgr.shoppingCartItems.length-1].shoppingCartImageName + '" width="35" height="35"/></div>';
                                                                    jQuery ("#shoppingCartNavTemp").html(html).fadeTo(500, 1.0, function ()
                                                                                                                                {
                                                                                                                                  jQuery(this).html("");
                                                                                                                                  shoppingCartMgr.displayShoppingCartNav  ();
                                                                                                                                  jQuery(this).attr ( {opacity: 0.0} );
                                                                                                                                 }
                                                                                                                     );
                                                                  }
                                            );
}


ShoppingCartMgr.prototype.displayStatus = function (left, top)
{
  if (this.status == "ADDED")
    jQuery("#cartStatusImage").attr( {src: "/images/shoppingCart/overlay_addedToCart.png"} );
  else
  if (this.status == "UPDATED")
    jQuery("#cartStatusImage").attr( {src: "/images/shoppingCart/overlay_updatedInCart.png"} );

  if ((this.status == "ADDED") || (this.status == "UPDATED"))
  {
    jQuery("#cartStatusMessage").show().css({left: left, top: top}).fadeTo(500, 1.0);
    setTimeout ("shoppingCartMgr.hideStatusMessage()", 2250);
  }
}


ShoppingCartMgr.prototype.hideStatusMessage = function ()
{
  jQuery("#cartStatusMessage").fadeTo(500, 0.0, function(){jQuery(this).hide();});
}


ShoppingCartMgr.prototype.displayShoppingCartPane = function ()
{
  var ndx;
  var nItems = this.shoppingCartItems.length;

  if (jQuery('#shoppingCart').size() != 0)
  {
    var html   = '<div class="shoppingPagination" style="position:absolute; width:816px; height:30px; top:4px; left:12px">'
               + '<span style="font-size:12px; font-weight:bold; color:#E1A873">STEP 1: VIEW CART</span><img style="padding-left:6px; padding-right:6px" src="/images/nav/nav_divider.gif" width="2" height="12"/><a href="#MAX_buyOnline" onclick="javascript:carouselMgr.goToPane(\'buyOnline\');"><span style="font-weight:bold">STEP 2: CHOOSE RETAILER</span></a>'
               + '</div>';

        html  += '<div id="cartIntroText" style="position:absolute; top:80px; left:44px; color:#b09985; font-size:13px">'
               + 'Here\'s what you have in your cart so far. Go ahead and MAX it out &mdash; we\'ll keep it organized for you.'
               + '</div>'
               + '<div style="position:absolute; top:112px; left:1px; width:814px; padding-top:8px; padding-bottom:8px; color:white; background-color:#1F1F1F; font-size:13px; font-weight:bold">'
               + '<div style="float:left; width:560px; padding-left:16px">PRODUCT</div>'
               + '<div style="float:left; width:100px">QUANTITY</div>'
               + '<div style="float:left; width:100px">REMOVE</div>'
               + '</div>';

    if (nItems != 0)
    {
      html    += '<div id="cartRows" style="position:absolute; top:160px; left:24px; color:#D39A6A; font-size:13px; width:780px; height:200px; overflow:auto">';
      for (ndx = nItems - 1; ndx >= 0; ndx--)
      {
        html  += '<div id="paneCartItemDiv' + ndx + '" style="float:left; clear:left; width:760px">'
               +  '<div style="float:left; width:72px; padding-bottom:20px"><img class="png" src="' + this.shoppingCartItems[ndx].shoppingCartImageName + '" width="35" height="35"/></div>'
               +  '<div style="float:left; width:460px; padding-right:20px">'
               +  '<div style="float:left; width:460px; font-weight:bold">' + this.shoppingCartItems[ndx].productLineName + " &mdash; " + this.shoppingCartItems[ndx].productName + '</div>'
               +  '<div style="float:left; width:460px; color:#c0c0c0"><img class="png" src="' + this.shoppingCartItems[ndx].shadeImageName + '" width="66" height="6"/></div>'
               +  '</div>'
               +  '<div style="float:left; width:100px"><input type="text" style="width:14px; padding-left:7px" class="shoppingCartQuantity' + ndx + '" value="' + this.shoppingCartItems[ndx].itemQuantity + '"/></div>'
               +  '<div style="float:left; width:100px"><span onmouseout="javascript:shoppingCartMgr.fadeButtonOff(' + ndx + ')" onmouseover="javascript:shoppingCartMgr.fadeButtonOn(' + ndx + ')"><a href="javascript:shoppingCartMgr.remove(' + ndx + ')"><img id="removeButtonImg' + ndx + '" src="/images/shoppingCart/btn_remove.gif" width="20" height="20" alt="REMOVE" title="REMOVE" /></a></span></div>'
               +  '</div>';
      }
      html    += '</div>';
    }
    else
    {
      html     = '<div style="position:absolute; top:112px; left:1px; width:814px; padding-top:8px; padding-bottom:8px; color:white; background-color:#1F1F1F; font-size:13px; font-weight:bold">'
               + '<div style="float:left; width:560px; padding-left:16px">PRODUCT</div>'
               + '<div style="float:left; width:100px">QUANTITY</div>'
               + '<div style="float:left; width:100px">REMOVE</div>'
               + '</div>'
               + '<div style="position:absolute; top:175px; left:44px; color:#b09985; font-size:13px">'
               + 'Your shopping cart is empty. <a style="color:#FFF" href="#MAX_beauty-products" onclick="carouselMgr.goToPane(\'beauty-products\')">Continue shopping</a>.'
               + '</div>';
    }

    html      += '<script type="text/javascript">shoppingCartFade();</script><div style="position:absolute; top:370px; left:24px; color:#e0e0e0; font-weight:bold"><span class="continueShopping"><a href="#MAX_beauty-products" onclick="carouselMgr.goToPane(\'beauty-products\')"><img class="png" src="/images/shoppingCart/btn_continue_shopping.png" width="135" height="24" alt="CONTINUE SHOPPING" title="CONTINUE SHOPPING" /></a><span><a href="#MAX_beauty-products" onclick="carouselMgr.goToPane(\'beauty-products\')"><img class="png" src="/images/shoppingCart/btn_continue_shopping_over.png" width="135" height="24" alt="CONTINUE SHOPPING" title="CONTINUE SHOPPING" /></a></span></span></div>'
    if (nItems != 0)
    {
      html    += '<div style="position:absolute; top:370px; left:180px; color:#e0e0e0; font-weight:bold"><span class="printShoppingList"><img class="png" src="/images/shoppingCart/btn_print_shopping_list.png" width="138" height="24" alt="PRINT SHOPPING LIST" title="PRINT SHOPPING LIST" /><span><a href="printView.jsp" target="_blank"><img class="png" src="/images/shoppingCart/btn_print_shopping_list_over.png" width="138" height="24" alt="PRINT SHOPPING LIST" title="PRINT SHOPPING LIST" /></a></span></span></div>'
               +  '<div style="position:absolute; top:370px; left:570px; color:#e0e0e0; font-weight:bold"><span class="buyOnline"><img class="png" src="/images/shoppingCart/btn_buy_online.png" width="86" height="24" alt="BUY ONLINE" title="BUY ONLINE" /><span><a href="javascript:carouselMgr.goToPane(\'buyOnline\');"><img class="png" src="/images/shoppingCart/btn_buy_online_over.png" width="86" height="24" alt="BUY ONLINE" title="BUY ONLINE" /></a></span></span></div>';
    }

    jQuery ("#shoppingCart").html(html);
  }
}


ShoppingCartMgr.prototype.displayShoppingCartNav = function ()
{
  var nItems = this.shoppingCartItems.length;
  var htmlLeft  = "";
  var html      = "";
  var htmlRight = "";

  this.displayCartNavItemCount ();
  this.displayCartNavOptions   ();

  // set up images and image scroller if needed
  if (nItems != 0)
  {
    // first, determine if a scroller is needed
    if (this.shoppingCartItems.length > 3)
      htmlLeft  = '<div style="position:relative; float:left; background-color:black; width:10px"><img src="/images/shoppingCart/btn_scroll_left.gif" id="btn_scroll_left" class="cartThumbnailsPrev" alt="right" title="Previous" width="9" height="8" onmouseover="swapImage(\'btn_scroll_left\',\'/images/shoppingCart/btn_scroll_left\',\'over\')" onmouseout="swapImage(\'btn_scroll_left\',\'/images/shoppingCart/btn_scroll_left\',\'off\')" /></div>';

    html    = '<div id="shoppingCartNavImages" style="position:relative; float:left; width:120px; height:35px"><ul style="clear:left">';
    for (ndx = this.shoppingCartItems.length - 1; ndx >= 0 ; ndx--)
      html += '<li style="margin:0; padding:0" id="navCartItemDiv' + ndx + '"><img class="png" src="' + this.shoppingCartItems[ndx].shoppingCartImageName + '" width="35" height="35" alt="'+this.shoppingCartItems[ndx].productName+'" title="'+this.shoppingCartItems[ndx].productName+'" /></li>';
    html   += '</ul></div>';

    if (this.shoppingCartItems.length > 3)
      htmlRight = '<div style="position:relative; float:left; background-color:black; width:10px"><img src="/images/shoppingCart/btn_scroll_right.gif" alt="next" id="btn_scroll_right" class="cartThumbnailsNext" title="Next" width="9" height="8" onmouseover="swapImage(\'btn_scroll_right\',\'/images/shoppingCart/btn_scroll_right\',\'over\')" onmouseout="swapImage(\'btn_scroll_right\',\'/images/shoppingCart/btn_scroll_right\',\'off\')" /></div>';

    jQuery ("#shoppingCartNav").css ("backgroundColor", "black" );
  }

  jQuery ("#shoppingCartNavLeft")    .html(htmlLeft );
  jQuery ("#shoppingCartNavScroller").html(html     );
  jQuery ("#shoppingCartNavRight")   .html(htmlRight);

  if (this.shoppingCartItems.length > 3)
  {
    jQuery("#shoppingCartNavImages").jCarouselLite({
      btnNext: ".cartThumbnailsNext",
      btnPrev: ".cartThumbnailsPrev",
      scollerHeight: 35,
      entireScollerWidth: this.shoppingCartItems.length * 40,
      visible: 3,
      circular: false,
      singleLiWidth: 35
    });
  }
}


ShoppingCartMgr.prototype.displayCartNavItemCount = function ()
{
  var nItems = this.shoppingCartItems.length;
  var html   = "";

  if (nItems != 0)
  {
    nTotalCartItems = this.getTotalCartItems ();
    if (nTotalCartItems == 1)
      html = '<div style="position:relative; float:right; width:90px; text-align:right; font-size:10px"><div style="margin-top:-.10em; margin-left:7px; margin-top:-1px; color:#999; font-weight:bold; text-align:right; width:12px">' + nTotalCartItems + '</div><img src="/images/shoppingCart/lbl_itemsInCart.gif" alt="ITEM(S) IN CART" title="ITEM(S) IN CART" width="65" height="9" /></div>';
    else
      html = '<div style="position:relative; float:right; width:90px; text-align:right; font-size:10px"><div style="margin-top:-.10em;  margin-left:7px; margin-top:-1px; color:#999; font-weight:bold; text-align:right; width:12px;">' + nTotalCartItems + '</div><img src="/images/shoppingCart/lbl_itemsInCart.gif" alt="ITEM(S) IN CART" title="ITEM(S) IN CART" width="65" height="9" /></div>';
  }
  jQuery ("#shoppingCartNavCount").html(html);
}


ShoppingCartMgr.prototype.displayCartNavOptions = function ()
{
  var nItems = this.shoppingCartItems.length;
  var html   = "";
  var url;

  if (nItems != 0)
    if (carouselMgr == null)
    html  = '<div style="position:relative; float:right; width:90px; text-align:right; padding-top:5px"><a href="/makeup.do#MAX_shoppingCart"><img src="/images/shoppingCart/btn_checkoutNow.gif" id="btn_checkoutNow" alt="CHECK OUT NOW" title="CHECK OUT NOW" width="74" height="9" onmouseover="javascript:if((navBrain.navItem.shoppingCart.status==\'off\')&&(navBrain.navItem.shoppingCart.page==\'off\')){swapImage(\'btn_checkoutNow\',\'/images/shoppingCart/btn_checkoutNow\',\'over\');navBrain.navItem.shoppingCart.status = \'on\';}" onmouseout="if((navBrain.navItem.shoppingCart.status==\'on\')&&(navBrain.navItem.shoppingCart.page==\'off\')){swapImage(\'btn_checkoutNow\',\'/images/shoppingCart/btn_checkoutNow\',\'off\');navBrain.navItem.shoppingCart.status = \'off\';}" /></a></div>'
  else
    html  = '<div style="position:relative; float:right; width:90px; text-align:right; padding-top:5px"><a href="javascript:carouselMgr.goToPane(\'shoppingCart\');"><img src="/images/shoppingCart/btn_checkoutNow.gif" id="btn_checkoutNow" alt="CHECK OUT NOW" title="CHECK OUT NOW" width="74" height="9" onmouseover="javascript:if((navBrain.navItem.shoppingCart.status==\'off\')&&(navBrain.navItem.shoppingCart.page==\'off\')){swapImage(\'btn_checkoutNow\',\'/images/shoppingCart/btn_checkoutNow\',\'over\');navBrain.navItem.shoppingCart.status = \'on\';}" onmouseout="if((navBrain.navItem.shoppingCart.status==\'on\')&&(navBrain.navItem.shoppingCart.page==\'off\')){swapImage(\'btn_checkoutNow\',\'/images/shoppingCart/btn_checkoutNow\',\'off\');navBrain.navItem.shoppingCart.status = \'off\';}" /></a></div>'

  jQuery ("#shoppingCartNavOptions").html(html);

}


// getCIstring
// built string should look like cistring=0 46200 01129 3|1,0 46200 01133 0|4
ShoppingCartMgr.prototype.getCIstring = function()
{
  var nItems    = this.shoppingCartItems.length;
  var upcString = "";
  var ndx;

  if (nItems != 0)
  {
    for (ndx = nItems - 1; ndx >= 0; ndx--)
    {
      upcString   += this.shoppingCartItems[ndx].upc + "|" + this.shoppingCartItems[ndx].itemQuantity;
      if (ndx > 0)
        upcString += ",";
    }
  }

  return (upcString);
}


ShoppingCartMgr.prototype.getTotalCartItems = function ()
{
  var nItems = 0;
  var ndx;

  for (ndx = 0; ndx < this.shoppingCartItems.length; ndx++)
    nItems += parseInt(this.shoppingCartItems[ndx].itemQuantity);

  return (nItems);
}


ShoppingCartMgr.prototype.remove = function (ndx)
{
  // remove that line item from session
  jQuery.post ("/RemoveItemFromCart.do", {upc: escape(this.shoppingCartItems[ndx].upc) });

  // remove line item from the shopping cart array
  this.shoppingCartItems = jQuery.grep (this.shoppingCartItems, function(a,i){ return (i != ndx); });

  // remove item from the display
  jQuery ("#paneCartItemDiv" + ndx).fadeTo(400, 0.0,
                                           function ()
                                           {
                                             jQuery(this).slideUp(400,
                                                                  function () 
                                                                  {
                                                                    
                                                                    if (shoppingCartMgr.shoppingCartItems.length != 0)
                                                                    {
                                                                      shoppingCartMgr.displayShoppingCartPane ();
                                                                      jQuery ("#shoppingCartNavImages").fadeTo(400, 0.0,
                                                                                                               function ()
                                                                                                               {
                                                                                                                 shoppingCartMgr.displayShoppingCartNav  ();
                                                                                                                 jQuery ("#shoppingCartNavImages").fadeTo(400, 1.0);
                                                                                                               }
                                                                                                              );
                                                                    }
                                                                    else
                                                                    {
                                                                      jQuery ("#shoppingCart").fadeTo(400, 0.0,
                                                                                                             function ()
                                                                                                             {
                                                                                                               shoppingCartMgr.displayShoppingCartPane ();
                                                                                                               jQuery ("#shoppingCart").fadeTo(400, 1.0);
                                                                                                               shoppingCartMgr.displayShoppingCartNav  ();
                                                                                                             }
                                                                                                             
                                                                                                            );}
                                                                  }
                                                                 );
                                           }
                                          );

  // remove the lipfinity check out now button if all items from cart have been removed
  this.showHideLipfinityCheckoutNow (false);
}


ShoppingCartMgr.prototype.updateQuantity = function (ndxString, val)
{
  var ndx = ndxString.substring ("shoppingCartQuantity".length);
  this.shoppingCartItems[ndx].itemQuantity = val;

  // update cart item's quantity in session via ajax function
  jQuery.post ("/UpdateCartItemQuantity.do", {upc: escape(this.shoppingCartItems[ndx].upc), quantity: val });


  jQuery ("#shoppingCartNavCount").fadeTo(500, 0.0, function ()
                                                    {
                                                      shoppingCartMgr.displayCartNavItemCount ();
                                                      jQuery(this).fadeTo(500, 1.0);
                                                    }
                                         );
  
}


ShoppingCartMgr.prototype.fadeButtonOn = function(removeImage)
{
  var newRemoveID = "#removeButtonImg" + removeImage;
  var overRemoveImage = "/images/shoppingCart/btn_remove_over.gif";
  
  jQuery(newRemoveID).attr({src: overRemoveImage});
}


ShoppingCartMgr.prototype.fadeButtonOff = function(removeImage)
{
  var newRemoveID = "#removeButtonImg" + removeImage;
  var overRemoveImageOff = "/images/shoppingCart/btn_remove.gif";
  
  jQuery(newRemoveID).attr({src: overRemoveImageOff});
}


ShoppingCartMgr.prototype.showHideLipfinityCheckoutNow = function(lipfinityDisplayed)
{
  // if nothing in cart, then don't display the checkoutnow button
  if (this.shoppingCartItems.length == 0)
    jQuery ("#lipfinityCheckoutNow").css({opacity: 0.0, display: "none"});
  else
  {
    if (lipfinityDisplayed)
    {
      // if overlay is dsped, then determine if the button is already dsped - if so, do nothing - not dsped, then dsp it
      if (jQuery ("#lipfinityCheckoutNow").css("display") != "block")
        jQuery ("#lipfinityCheckoutNow").css({opacity: 0.0, display: "block"}).fadeTo(2000, 1.0);
    }
    else
    {
      jQuery ("#lipfinityCheckoutNow").css({opacity: 1.0, display: "block"});
    }
  }
}


ShoppingCartMgr.prototype.showCheckoutNow = function(id)
{
  if (jQuery ("#" + id).css("display") != "block")
  {
    jQuery ("#" + id).css({opacity: 0.0, display: "block"}).fadeTo(2000, 1.0);
    this.showHideLipfinityCheckoutNow (false);
  }
}


ShoppingCartMgr.prototype.showHideCheckoutNow = function(id)
{
  if (this.shoppingCartItems.length == 0)
    jQuery ("#" + id).css({opacity: 0.0, display: "none"});
  else
    jQuery ("#" + id).css({opacity: 1.0, display: "block"});
}


ShoppingCartMgr.prototype.showHideGalleryCheckoutNow = function()
{
  if (this.shoppingCartItems.length == 1)
  {
    jQuery("#galleryOptionCheckOutNow").animate({height:            "36px"});
    jQuery("#galleryOptionFooter")     .animate({backgroundPosition:"0px 0px"}, "normal", function()
    {
      jQuery (".galleryOptionCheckOutNowButton").css({opacity: 0.0, display: "block"}).fadeTo(2000, 1.0);
    });
  }
}
