/// <reference path="jquery-1.6.2.js" />
$(document).ready(
	function () {
		if ($(".pop").length > 0) {
			var $mask = $('<div class="pop_mask" style="z-index:497;position:absolute;top:0;left:0;display:none;"></div>');
			$mask.css({ width: $(window).width(), height: $(document).height() });
			$("BODY").append($mask);
		}
		$(".pop_nav A").click(function () {
			$(this).addClass("show_pop");

			var $pop = $(this).parents(".pop_container").find(".pop");
			$pop.css({ 'z-index': 500, top: ($(this).offset().bottom + 3) + 'px', left: ($(this).offset().left) + 'px' });
			$pop.show();

			if ($pop.hasClass("shadowed")) {
				var $shadow = $('<div class="pop_shadow" style="z-index:498;position:absolute;"></div>');
				$shadow.css({ width: $pop.width(), height: $pop.height(),
					top: ($pop.offset().top + 5) + 'px', left: ($pop.offset().left + 5) + 'px'
				});
				$("body").append($shadow);
			}

			$(".pop_mask").show();
			$mask.click(function () {
				var $nav = $pop.parents(".pop_container").find(".pop_nav A");
				$nav.removeClass("show_pop");
				$pop.hide();
				$('.pop_shadow').hide();
				$('BODY').remove('.pop_shadow');
				$(this).unbind('click');
				$(this).hide();
			});
		});


		// This will trigger a click for the default button on the page when the enter key is pressed.
		$(".enter_as_click").keydown(EnterAsClick);
		// This will trigger a click for the go button when the enter key is pressed in email signup on footer control.	
		$(".emailEnterAsClick").keydown(EmailClick);
		$("#ctl00_Header_smallsearch_tb_search").keydown(SearchEnterAsClick);
		$(".enter_as_tab").keydown(EnterKeyActsLikeTab);
		$("input.skuQuantity").numeric();
		$("input.numeric").numeric();
		$("input.decimal").numeric(".");
		// Check all checkboxes based on a master checkbox.
		$("input[type=checkbox].check_all").click(
			function () {
				var checked = this.checked;
				$("input[type=checkbox]").not(this).each(
					function () {
						this.checked = checked;
					}
				)
			}
		);

		// Height box for flag chooser
		$(".country_flag_chooser_wrap").css({ background: "ffffff" }).hover(
			function () {
				$(this).css({ background: "#efefef" });
			},
			function () {
				$(this).css({ background: "#ffffff" });
			}
		);

		$("a.click_me").click(
			function () {
				// $('#checkout_cart_buffer').localScroll();
				// $('#checkout_cart_buffer').scrollTo('div:eq(checkout_cart_buffer)', 1000);
				var $paneTarget = $(this).parents('#theouterdiv');
				var $target = $('#checkout_cart_buffer');

				var $target = $paneTarget.find('#checkout_cart_buffer');
				// $paneTarget.stop().scrollTo( $target , 800 );
				$paneTarget.scrollTo($target, 800);
				// var something = '';
				// $('#checkout_cart_buffer').scroll();
				// $paneTarget.stop().scrollTo( $target , 800 );
			}
		);

		/* Share Recipe Form */
		$("a.show_form").toggle(
			function () {
				$("div.share_form").slideDown("normal");
				return false;
			},
			function () {
				$("div.share_form").slideUp("normal");
				return false;
			}
		);

		$("a.show_form_open").toggle(
			function () {
				$("div.share_form_open").slideUp("normal");
				return false;
			},
			function () {
				$("div.share_form_open").slideDown("normal");
				return false;
			}
		);

		/************* Product Page Show/Hide Swatch/SKU Functionality *************/
		$('a.page_alternate_sku_control_expand').click(
			function () {
				ExpandProductSkuControl(this);
				return false;
			}
		);

		$("a.page_alternate_sku_control_collapse").click(
			function () {
				CollapseProductSkuControl(this);
				return false;
			}
		);
		/************* END*************/

		/* Recipe CHEFS Best Sellers */
		$("a.show_best_sellers").toggle(
			function () {
				$(".best_seller_wrap").each(
					function () {
						if ($(this).css("display") == "block") {
							$(this).parents(".item_parent").find("a.show_best_sellers").click();
						}
					}
				);
				var best_seller = $(this).parents("td").find(".best_seller_wrap");
				best_seller.slideDown("normal");
				return false;
			},
			function () {
				var best_seller = $(this).parents("td").find(".best_seller_wrap");
				best_seller.slideUp("normal");
				return false;
			}
		);

		$("a.close_related_items").click(
			function () {
				var lnk = $(this).parents(".item_parent").find("a.show_best_sellers");
				lnk.click();
			}
		);

		/* Product Page Receipes */
		$("a.show_more_recipes").toggle(
			function () {
				$(".product_recipe_wrap").each(
					function () {
						if ($(this).css("display") == "block") {
							$(this).parents(".item_parent").find("a.show_more_recipes").click();
						}
					}
				);
				var product_recipe = $(this).parents("div").find(".product_recipe_wrap");
				product_recipe.slideDown("normal");
				$("img#product_recipe_image_arrow").attr({ src: "/img/recipes/icon_arrow_up.png", alt: "Hide Recipes" });
				$("img#product_recipe_image_arrow").attr({ src: "/img/recipes/icon_arrow_up.png", alt: "Hide Recipes" });
				return false;
			},
			function () {
				var product_recipe = $(this).parents("div").find(".product_recipe_wrap");
				product_recipe.slideUp("normal");
				$("img#product_recipe_image_arrow").attr('src', '/img/recipes/icon_arrow_down.png');
				return false;
			}
		);

		/* Registry My Checklist */
		$("a.show_preview").click(
			function () {
				var all_items = $("div.items");
				var all_link = $(this).html("Hide All My Items");
				var per_link = $("div.show_hide_items").children("a");
				if (all_items.is(":hidden")) {
					all_items.slideDown("normal");
					all_link.html("Hide All My Items");
					per_link.html("Hide Items");
					return false;
				} else {
					all_items.slideUp("normal");
					all_link.html("Show All My Items");
					per_link.html("Show Items");
					return false;
				}
			}
		);

		$("a.show_items").click(
			function () {
				var per_item = $(this).parents("div.show_hide_items").parents("div.registry_items").find("div.items");
				var per_link = $(this).html("Hide Item");
				if (per_item.is(":hidden")) {
					per_item.slideDown("normal");
					per_link.html("Hide Items");
					return false;
				} else {
					per_item.slideUp("normal");
					per_link.html("Show Items");
					return false;
				}
			}
		);

		/* Registry Check All Checkboxes */
		/* **** THIS MAY BE EXTRANEOUS - SIMILAR FUNCTION BEGINNING ON LINE 13 ****
		$("[class='check_all']").click(
		function() {
		var x = this.checked;
		$("[class='check_item']").each(
		function() {
		this.checked = x;
		return false;
		}
		);
		$("[class='check_all']").each(
		function() {
		this.checked = x;
		return false;
		}
		);
		}
		);
		*/

		/* Toggle Product Zoom and Rotation */
		$("a.show_concept").toggle(
			function () {
				$("div#display_rotate").show();
				$("div#display_zoom").hide();
				$("div#product_utility li.switch img").attr({ src: "/img/global/btn_view_product_zoom.png", alt: "View Product Zoom" });
				return false;
			},
			function () {
				$("div#display_rotate").hide();
				$("div#display_zoom").show();
				$("div#product_utility li.switch img").attr({ src: "/img/global/btn_view_product_rotate.png", alt: "View Product Rotation" });
				return false;
			}
		);

		$("a.show_cart").click(
			function () {
				this.blur();
				ShowMiniCartFromServer('args', 'cart');
			}
		);

		$("#add_options a.add_cart").click(
			function () {
				this.blur();
				var params = {};
				var skuEventArgsContext = "cart";
				GetSkuArgs(params);
				if (params.SkuArgs == '') {
					if ($("#add_options p.enter_quantity").css("display") == "none") {
						$("#add_options p.enter_quantity").slideDown("fast");
					}
					return false;
				}
				ClearSkuMessages();
				// determine if we are coming from a special function page
				var uicontrol = $(this).parents("div").find("#uicontrol");
				if (uicontrol.attr("name") == "reviewOrder") {
					skuEventArgsContext = "reviewOrder";
				}
				var args = '<SkuEventArgs context="' + skuEventArgsContext + '">' + params.SkuArgs + params.CmArgs + '</SkuEventArgs>';
				if (params.IsOnBackOrder) {
					$("input#skuQuantityArgs").val(args);
					$("p.backorderedSku").html(params.BackOrderMessage[0]);
					var msg = $("p.backorderedSku");
					for (var i = 1; i < params.BackOrderMessage.length; i++) {
						msg = msg.after("<p>" + params.BackOrderMessage[i] + "</p>");
					}
					$("div.confirm_backorder").slideDown("fast");
					CreateBodyOverlay(hidePopUp);
					$("#popup_overlay").css('opacity', '0.6');
					this.blur();
					return false;
				}
				if (skuEventArgsContext == "reviewOrder") {
					$("div#sos_skuhopup").hide();
					$("#spinnerMessage").html("Recalculating Order Totals");
					ShowPleaseWaitLayer();
				} else if (skuEventArgsContext == "cart") {
					CreateBodyOverlay(CloseAddToCartConfirmation);
					$("#popup_overlay").css('opacity', '0.6');
					$("img#addtocart_spinner").attr({ src: "/img/global/spinner3-black.gif" });
				}
				// AddToCartCallback(args, skuEventArgsContext);
				DoPageCallback(args, skuEventArgsContext);
			}
		);

		// This is for adding from the wishlist/registry page.
		$("input.btn_add_to_cart").click(
			function () {
				this.blur();
				var quantity = $(this).siblings("input.skuQuantity").val();
				if (quantity == null) {
					$(this).parents("div.quantity").siblings("div.requested").each(
						function () {
							quantity = $(this).find("input.skuQuantity").val();
							if (quantity != null) {
								return;
							}
						}
					);
				}
				var itemNumber = $(this).siblings("input.itemNumber").val();
				var skuNumber = $(this).siblings("input.skuNumber").val();
				var itemPrice = $(this).siblings("input.itemPrice").val();
				var itemDescription = $(this).siblings("input.itemDescription").val();
				var id = $(this).siblings("input.id").val();
				var enterQuantity = $(this).siblings("p.enter_quantity");

				if (quantity == '') {
					if (enterQuantity.css("display") == "none") {
						enterQuantity.slideDown("fast");
					}
					return false;
				}
				// CreateBodyOverlay();
				CreateBodyOverlay(hidePopUp);
				$("#popup_overlay").css('opacity', '0.6');
				if (enterQuantity.css("display") == "block") {
					enterQuantity.slideUp("fast");
				}
				var args = '<SkuEventArgs context="cart">' +
					       '<items><item itemNumber="' + itemNumber + '" skuNumber="' + skuNumber + '" description="' + escapeForXml(itemDescription) + '" price="' + itemPrice + '" id="' + id + '" quantity="' + quantity + '" inStock="' + $(this).siblings("input.cmInStock").val() + '"/></items>' +
					       '<cmattributes><cmattribute brand="' + $(this).siblings("input.cmBrand").val() + '" rating= "' + $(this).siblings("input.cmRating").val() + '" numreviews="' + $(this).siblings("input.cmNumReviews").val() + '" promoflag="' + $(this).siblings("input.cmPromoFlag").val() + '"/></cmattributes>' +
						   '</SkuEventArgs>';
				throwProductViewTag(itemNumber, EscapeString(itemDescription));
				// AddToCartCallback(args, 'cart');
				DoPageCallback(args, 'cart');
				return false;
			}
		);

		// This button handles the special case of adding a gift card to the cart from the wish list page.
		$("input.btn_add_giftcard_to_cart").click(
			function () {
				this.blur();
				// CreateBodyOverlay();
				CreateBodyOverlay(hidePopUp);
				$("#popup_overlay").css('opacity', '0.6');
				var skuNumber;
				var price;
				var itemNumber;
				var quantity;
				$("input.GiftCardSku").each(
					function () {
						if ($(this).get(0).checked) {
							skuNumber = $(this).val();
							price = Trim($(this).val());
							itemNumber = $(this)[0].getAttribute('itemNumber');
							quantity = $(this)[0].getAttribute('quantity');
							// thisElement = $(this);
							// itemnumber = thisElement[0].getAttribute('itemnumber');
							// quantity = thisElement[0].getAttribute('quantity');
							return false;
						}
					}
				);
				var args = '<SkuEventArgs context="cart">' +
				           '<items><item skuNumber="' + skuNumber + '" itemNumber="' + itemNumber + '" price="' + price + '" quantity="' + quantity + '" /></items>' +
				           '</SkuEventArgs>';
				AddGiftCardToCart(args, 'cart');
				return false;
			}
		);

		$("input.add_cart_confirm").click(
			function () {
				var args = $("input#skuQuantityArgs").val();
				// $("#popup_overlay").remove();
				$("div.popup").each(
					function () {
						if ($(this).css("display") == 'block') {
							$(this).slideUp("fast");
						}
					}
				);

				// AddToCartCallback(args, 'cart');
				DoPageCallback(args, 'cart');
				return false;
			}
		);

		// This is for adding an essential companion item to the cart from the cart page.
		// Instead of using the AJAX minicart, we'll add the item and refresh the page.
		// Confirm first if the item is on backorder.
		$("input.btn_add_essential_to_cart").click(
			function () {
				var skuAvailability = $(this).siblings("input.skuAvailability").val();
				if (skuAvailability != "In Stock") {
					var confirmBackorder = $(this).parents(".essential_items").find(".confirm_backorder");
					confirmBackorder.slideDown("fast");
					CreateBodyOverlay(hidePopUp);
					this.blur();
					return false;
				}
			}
		);

		$("input.add_cart_confirm_nocallback").click(
			function () {
				$("#popup_overlay").remove();
				$("div.popup").each(
					function () {
						if ($(this).css("display") == 'block') {
							$(this).slideUp("fast");
						}
					}
				);
				return true;
			}
		);

		$("input.add_cart_cancel").click(
			function () {
				$("#popup_overlay").remove();
				$("div.popup").each(
					function () {
						if ($(this).css("display") == 'block') {
							$(this).slideUp("fast");
						}
					}
				);
				return false;
			}
		);

		$("#add_options a.add_wishlist").click(
			function () {
				this.blur();
				var params = {};
				GetSkuArgs(params);
				if (params.SkuArgs == '') {
					if ($("#add_options p.enter_quantity").css("display") == "none") {
						$("#add_options p.enter_quantity").slideDown("fast");
					}
					return false;
				}
				ClearSkuMessages();
				var popup = $("div.select_wishlist");
				if (popup.html() == null) {
					var args = '<SkuEventArgs context="wishlist">' +
						        '<wishlist id=""/>' +
							     params.SkuArgs +
								  '</SkuEventArgs>';
					// AddToCartCallback(args, 'wishlist');
					DoPageCallback(args, 'wishlist');
				} else {
					$("input#skuQuantityArgs").val(params.SkuArgs);
					popup.slideDown("fast");
				}
				return false;
			}
		);

		$("input.btn_select_wishlist").click(
			function () {
				$("div#adding_to_wishlist").show();
				CreateBodyOverlay();
				var ddl_wishlist_value = $(this).parents(".message_wrap").find(".wishlist_ddl").first().val();
				var args = '<SkuEventArgs context="wishlist">' +
					   '<wishlist id="' + ddl_wishlist_value + '"/>' +
					   $("input#skuQuantityArgs").val() +
					   '</SkuEventArgs>';
				$("div.popup").each(
					function () {
						if ($(this).css("display") == 'block') {
							$(this).slideUp("fast");
						}
					}
				);
				// AddToCartCallback(args, 'wishlist');
				DoPageCallback(args, 'wishlist');
				return false;
			}
		);

		$("a.preview_email").click(
			function () {
				this.blur();
				var params = {};
				var msg = document.getElementById('ctl00_ContentPlaceHolder1_txtEmailMessage');
				ShowPreviewEmailFromServer(msg.value, 'email');
				return false;
			}
		);

		$("#add_options a.add_registry").click(
			function () {
				this.blur();
				var params = {};
				GetSkuArgs(params);
				if (params.SkuArgs == '') {
					if ($("#add_options p.enter_quantity").css("display") == "none") {
						$("#add_options p.enter_quantity").slideDown("fast");
					}
					return false;
				}

				ClearSkuMessages();
				var popup = $("div.select_registry");
				if (popup.html() == null) {
					var args = '<SkuEventArgs context="registry">' +
						        '<registry id=""/>' +
							     params.SkuArgs +
								  '</SkuEventArgs>';

					// AddToCartCallback(args, 'registry');
					DoPageCallback(args, 'registry');
				} else {
					$("input#skuQuantityArgs").val(params.SkuArgs);
					popup.slideDown("fast");
				}


				return false;
			}
		);

		$("input.btn_select_registry").click(
			function () {
				$("div#adding_to_registry").show();
				CreateBodyOverlay();
				var ddl_registry_value = $(this).parents(".message_wrap").find(".registry_ddl").first().val();
				var args = '<SkuEventArgs context="registry">' +
					   '<registry id="' + ddl_registry_value + '"/>' +
					   $("input#skuQuantityArgs").val() +
					   '</SkuEventArgs>';
				$("div.popup").each(
					function () {
						if ($(this).css("display") == 'block') {
							$(this).slideUp("fast");
						}
					}
				);
				// AddToCartCallback(args, 'registry');
				DoPageCallback(args, 'registry');
				return false;
			}
		);

		// For adding essential items to the cart (from the cart page).
		$("input.btn_add_essential_to_cart").click(
			function () {
			}
		);

		$("a.btnEssentialSku").click(
			function () {
				var parent = $(this).parents("div.essential_items");
				var skuNumber = $(this).parents(".item_wrap").find("input.skuNumber").val();
				var description = $(this).html();
				//var orderStatus = $(this).parents(".item_wrap").find("p.sku_order_status").html();
				var orderStatus = 'Backordered';
				$(this).parents("div.essential_items").find("p.order_status").html(orderStatus);
				var inpCurrentSku = parent.find("input.currentSkuNumber");
				$(".item_wrap").each(
					function () {
						if ($(this).find("input.skuNumber").val() == inpCurrentSku.val()) {
							$(this).show();
						}
						if ($(this).find("input.skuNumber").val() == skuNumber) {
							$(this).hide();
						}
					}
				);
				inpCurrentSku.val(skuNumber);
				$(this).parents("div.essential_items").find("a.color").html(description);
				hideShopPop();
				return false;
			}
		);

		$("a.show_sortbypop").click(
			function () {
				var sortbypop = $(this).parents("div.sort").find("div.sortbypop");
				if (sortbypop != null) {
					sortbypop.slideDown("fast");
					CreateBodyOverlay(hideSortByPop);
					this.blur();
				}
				return false;
			}
		);

		$("a.show_itemsperpagepop").click(
			function () {
				var shoppop = $(this).parents("div.sort").find("div.itemsperpagepop");
				if (shoppop != null) {
					shoppop.slideDown("fast");
					CreateBodyOverlay(hideItemsPerPagePop);
					this.blur();
				}
				return false;
			}
		);

		/* Checkout Product Details Pop Up */
		$("a.show_shoppop").click(
			function () {
				var shoppop = $(this).parents("div.details").find("div.shoppop");
				if (shoppop != null) {
					shoppop.slideDown("fast");
					CreateBodyOverlay(hideShopPop);
					this.blur();
				}
				return false;
			}
		);

			var hideShopPop = function () {
				$("#popup_overlay").remove();
				$("div.shoppop").each(
				function () {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
				return false;
			};

			var hideSortByPop = function () {
				$("#popup_overlay").remove();
				$("div.sortbypop").each(
				function () {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
				return false;
			};

			var hideItemsPerPagePop = function () {
			$("#popup_overlay").remove();
			$("div.itemsperpagepop").each(
				function () {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
			return false;
		};

		var ShopPopClick = function () {
			return false;
		}

		/* Popups on the product detail page. */
		$("a.show_wishlist_select").click(
			function () {
				var popup = $(this).siblings("div.select_wishlist");
				if (popup.html() == null) {
					popup = $(this).parents("div.quantity").find("div.select_wishlist");
				}
				if (popup.html() == null) {
					return false;
				}
				var isValid = false;
				var divQuantity = $(this).parents("div.quantity");
				if ($("td.quantity").html() == null) {
					isValid = (divQuantity.find("input.skuQuantity").val() != '');
				} else {
					$("td.quantity").each(
						function () {
							var skuQuantity = $(this).find("input.skuQuantity").val();
							if (skuQuantity != '') {
								isValid = true;
							}
						}
					);
				}
				if (isValid) {
					$("p.wishlist_msg").html("Please select a wish list for this item.");
					$("select.wishlist_ddl").css("display", "inline");
					$(".btn_continue").css("display", "inline");
				} else {
					$("p.wishlist_msg").html("Please select a quantity.");
					$("select.wishlist_ddl").css("display", "none");
					$(".btn_continue").css("display", "none");
				}
				popup.slideDown("fast");
				CreateBodyOverlay(hideCloserLookPopUp);
				this.blur();
				// Prevent the default postback behavior.
				return false;
			}
		);

		$("a.show_registry_select").click(
			function () {
				var popup = $(this).siblings("div.select_registry");
				if (popup.html() == null) {
					popup = $(this).parents("div.quantity").find("div.select_registry");
				}
				if (popup.html() == null) {
					return false;
				}
				var isValid = false;
				var divQuantity = $(this).parents("div.quantity");
				if ($("td.quantity").html() == null) {
					isValid = (divQuantity.find("input.skuQuantity").val() != '');
				} else {
					$("td.quantity").each(
						function () {
							var skuQuantity = $(this).find("input.skuQuantity").val();
							if (skuQuantity != '') {
								isValid = true;
							}
						}
					);
				}
				if (isValid) {
					$("p.registry_msg").html("Please select a wish list for this item.");
					$("select.registry_ddl").css("display", "inline");
					$(".btn_continue").css("display", "inline");
				} else {
					$("p.registry_msg").html("Please select a quantity.");
					$("select.registry_ddl").css("display", "none");
					$(".btn_continue").css("display", "none");
				}
				popup.slideDown("fast");
				CreateBodyOverlay(hideCloserLookPopUp);
				this.blur();
				// Prevent the default postback behavior.
				return false;
			}
		);

		// Popup for moving wish list items
		$("a.show_wishlist_move").click(
			function () {
				popup = $(this).parents("div.quantity").find("div.move_wishlist_item");
				if (popup.html() == null) {
					return false;
				}
				popup.slideDown("fast");
				CreateBodyOverlay(hidePopUp);
				this.blur();
				// Prevent the default postback behavior.
				return false;
			}
		);

		$("a.hide_popup").click(
			function () {
				$("#popup_overlay").remove();
				$("div.popup").each(
					function () {
						if ($(this).css("display") == 'block') {
							$(this).slideUp("fast");
						}
					}
				);
				return false;
			}
		);

		/* ================= MYACCOUNT FUNCTIONALITY ================= */
		/*** Change UserName ***/
		$("a#change_account_username_link").click(
			function () {
				ResetChangeUserNameControl();
				CreateBodyOverlay()
				$("#popup_overlay").css('opacity', '0.6');
				centerXYCords = GetCenterXYCoordinatesForElement("#account_changeusername");
				$("#account_changeusername").fadeIn(250);
				DragLayer.init(document.getElementById("account_changeusername_title_bar"), centerXYCords.x, centerXYCords.y, document.getElementById("account_changeusername"));
				$("#account_changeusername").fadeIn(250);
				return false;
			}
		);

		$('#account_changeusername_savebutton input[id$="_btnSaveUserId"]').click(
            function () {
            	// This will immediately halt the request if the client side validators didn't validate.
            	if (typeof (WebForm_OnSubmit) == 'function' && !WebForm_OnSubmit()) {
            		return false;
            	} else {
            		CreateBodyOverlay('', 'popup_overlay_disable');
            		$('#account_changeusername_message').html('<img src=\"/img/global/spinner3-black.gif\">');
            		userId = Trim($('#account_changeusername_form_left input[id$="_txtNewUserId"]').val());
            		password = Trim($('#account_changeusername_form_left input[id$="_txtPassword"]').val());
            		args = '<EventArgs newUserId="' + userId + '" password="' + password + '" />';
            		DoChangeUserName(args, '');
            		return false;
            	}
            }
		);

		/*** Close Account ***/
		$("a#close_account_link").click(
			function () {
				CreateBodyOverlay()
				$("#popup_overlay").css('opacity', '0.6');
				centerXYCords = GetCenterXYCoordinatesForElement("#account_closeaccount");
				$("#account_closeaccount").fadeIn(250);
				DragLayer.init(document.getElementById("account_closeaccount_title_bar"), centerXYCords.x, centerXYCords.y, document.getElementById("account_closeaccount"));
				$("#account_closeaccount").fadeIn(250);
				return false;
			}
		);

		$('#account_closeaccount_closebutton input[id$="_btnCloseAccount"]').click(
            function () {
            	CreateBodyOverlay('', 'popup_overlay_disable');
            	$('#account_closeaccount_closebutton').html('<img src=\"/img/global/spinner3-black.gif\">');
            	$('#account_closeaccount_cancelbutton').html('');
            	DoCloseAccount();
            	return false;

            }
		);
		/* ================= END MYACCOUNT FUNCTIONALITY ================= */

		/* ================= CHECKOUT FUNCTIONALITY ================= */
		// Trigger the Gift Options Hopup in CalculateOrder.
		$("A.add_gift_options").click(
			function () {
				// This will immediately halt the request if the client side validators didn't validate.
				if (typeof (WebForm_OnSubmit) == 'function' && !WebForm_OnSubmit()) {
					return false;
				} else {
					ClearGiftOptionsMessages()
					CreateBodyOverlay();
					// ShowPleaseWaitLayer();
					ShowCenteredModalLayer("gift_options_entry_hopup");
					return true;
				}
			}
		);

		// This adds the Gift Message from the Cart during Checkout						
		$("#gift_options_submit_buttons a.apply_gift_options").click(
			function () {
				this.blur();
				var params = {};
				var giftOptionsArgsContext = "cart";
				GetGiftWrapItemParams(params);
				GetGiftMessageEntryArgs(params);
				/*
				if (params.GiftMessage == '') {
				$("#gift_message_entry_message").css("color", "#f00");
				$("#gift_message_entry_message").html("Please enter your gift message");
				$("#gift_message_entry_message").slideDown("fast");
				return false;
				}	
				*/
				ClearGiftOptionsMessages()

				var args = '<GiftOptionsEventArgs context="' + giftOptionsArgsContext + '">' + params.GiftWrapArgs + params.GiftMessageArgs + '</GiftOptionsEventArgs>';

				// var args = '<GiftMessageEntryEventArgs context="' + giftMessageEntryArgsContext +  '">' + params.GiftMessage + '</GiftMessageEntryEventArgs>';
				AddGiftMessageCallback(args, giftOptionsArgsContext);
			}
		);


		// This applies the Source Code from the Cart during Checkout						
		$('.sourcecode_apply').click(
			function () {
				this.blur();
				var params = {};
				var context = "cart";
				var sourceCode = $(this).parents(".promo_code_container").find('input[id$="_txtSourceCode"]').val();
				//var sourceCode = $('#checkout_sourcecode_input input[id$="_txtSourceCode"]').val()
				if (sourceCode == undefined || Trim(sourceCode) == "") {
					// TODO: Add secondardy error trapping?
				} else {
					// ClearGiftOptionsMessages()
					var args = '<SourceCodeEntryEventArgs context="' + context + '"><sourcecode value="' + Trim(sourceCode) + '"></sourcecode></SourceCodeEntryEventArgs>';
					ApplySourceCodeCallback(args, context);
				}
				// prevent the postback
				return false;
			}
		);

		// These Close the Chefs checkout options on the Payment page						
		$('.payment_option input[id$="_rdoPaymentEBillMe"]').click(
			function () {
				// uncheck any BillMeLater promotion
				ToggleBillMeLaterPromotionCheckBox(false);
				$('#checkout_left_options_chefs').slideUp('normal');
			}
		);

		// These Close the Chefs checkout options on the Payment page						
		$('.payment_option input[id$="_rdoPaymentPayPal"]').click(
			function () {
				// uncheck any BillMeLater promotion
				ToggleBillMeLaterPromotionCheckBox(false);
				$('#checkout_left_options_chefs').slideUp('normal');
			}
		);

		// If a Bill Me Later promotion is running, auto check the promotion box when BML is clicked
		$('.payment_option input[id$="_rdoPaymentBillMeLater"]').click(
			function () {
				ToggleBillMeLaterPromotionCheckBox(true);
				$('#checkout_left_options_chefs').slideUp('normal');
			}
		);

		// This scenario is they clicked the Promotional checkbox, we need to select BML and close the CC section
		$('.payment_option input[id$="_chkBillMeLaterPromotion"]').click(
			function () {
				var billMeLaterRadio = $('.payment_option input[id$="_rdoPaymentBillMeLater"]');
				if (billMeLaterRadio.length == 1) {
					$(billMeLaterRadio).attr('checked', 'checked');
					$('#checkout_left_options_chefs').slideUp('normal');
				}
			}
		);


		// This applies Opens the Chefs checkout options on the Payment page						
		$('.payment_option input[id$="_rdoPaymentChefs"]').click(
			function () {
				ToggleBillMeLaterPromotionCheckBox(false);
				$('#checkout_left_options_chefs').slideDown('normal');
			}
		);
		/* ================= CLOSE CHECKOUT FUNCTIONALITY ================= */

		var hidePopUp = function (removeOverlay) {
			if (IsNull(removeOverlay) || ParseBool(removeOverlay)) {
				$("#popup_overlay").remove();
			}
			$("div.popup").each(
				function () {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
			// close AddToCartConfimration
			CloseAddToCartConfirmation()
			return false;
		};

		var hideCloserLookPopUp = function () {
			$("#popup_overlay_wishlist").remove();
			$("#popup_overlay").remove();
			$("div.popup").each(
				function () {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
			$("#closer_look").hide();
			return false;
		};

		// Display the SOS Hopup.
		$("input.show_sos").click(
			function () {
				// This will immediately halt the request if the client side validators didn't validate.
				if (typeof (WebForm_OnSubmit) == 'function' && !WebForm_OnSubmit()) {
					return false;
				} else {
					CreateBodyOverlay();
					// first show the layer so we can get the height & width
					$("#sos_skuhopup").css('display', 'block');
					var layerWidth = $("#sos_skuhopup").width();
					var layerHeight = $("#sos_skuhopup").height();
					// try to figure out where we are on the page in relation to center of the screen
					var windowDimensions = GetWindowDimensions();
					var windowOffests = GetWindowOffsets();
					// Attempt to find XY coodinates for the center of the screen.
					var positionLeft = windowOffests[0] + Math.round(((windowDimensions[0] - layerWidth) / 2));
					var positionTop = windowOffests[1] + Math.round(((windowDimensions[1] - layerHeight) / 2));
					// Display the overlay
					$("#popup_overlay").css('opacity', '0.6');
					// Initalize the Drag funtionality - this is located in draylayer.js : This must be after we've the the closer_look.html
					DragLayer.init(document.getElementById("sos_hopup_title_bar"), positionLeft, positionTop, document.getElementById("sos_skuhopup"));
					//DragLayer.init(document.getElementById("sos_skuhopup"), positionLeft, positionTop);
					$("form").submit(
						function () {
							// Reset the source for the image so the animation will show in IE.
							setTimeout("document.getElementById('sos_skuhopup').innerHTML = document.getElementById('sos_skuhopup').innerHTML", 200);
							return true;
						}
					);
					return false;
				}
			}
		);

		/* Essential Products Animation - Checkout */
		$("a.show_essentials").toggle(
			function () {
				$(this).parents("div.cart_items").find("div.cart_essentials_wrap").slideDown("normal");
				$(this).find("img").attr('src', '/img/btns/companion_products_on.png');
				return false;
			},
			function () {
				$(this).parents("div.cart_items").find("div.cart_essentials_wrap").slideUp("normal");
				$(this).find("img").attr('src', '/img/btns/companion_products.png');
				return false;
			}
		);

		// Display the spinner for any request that might take a while.
		$("input.prepare_order_total").click(
			function () {
				// This will immediately halt the request if the client side validators didn't validate.
				if (typeof (WebForm_OnSubmit) == 'function' && !WebForm_OnSubmit()) {
					return false;
				} else {
					try {
						var node = $(this);
						// validate we have something usable!
						if (node != null && node[0].getAttribute('waitmsg') != null) {
							$("#spinnerMessage").html(node[0].getAttribute('waitmsg'));
						}
					} catch (e) {
						// just bail if we can't find a message
					}
					CreateBodyOverlay();
					ShowPleaseWaitLayer();
					$("form").submit(
						function () {
							// Reset the source for the image so the animation will show in IE.
							setTimeout("document.getElementById('please_wait_wrap').innerHTML = document.getElementById('please_wait_wrap').innerHTML", 200);
							return true;
						}
					);
					return true;
				}
			}
		);
		
				/** 
		Unfortunately we can't simply disable the Place Order buttons upon submission because that halts the form.submit.  To get around this and to ensure
		we don't end up getting duplicate orders by people clicking submit multiple times, create a var to track how many times they click.  After the first
		submission, simply return false which will halt client side validation.  It's not bullet proof, but this in combination with the body overlay should help.
		**/
		submitOrderCount = 0;
		$("input.place_order").click(
			function () {
				// This will immediately halt the request if the client side validators didn't validate or if the place order button has been clicked more than once.
				if ((typeof (WebForm_OnSubmit) == 'function' && !WebForm_OnSubmit()) || submitOrderCount > 0) {
					return false;
				} else {
					submitOrderCount++;
					try {
						var node = $(this);
						// validate we have something usable!
						if (node != null && node[0].getAttribute('waitmsg') != null) {
							$("#spinnerMessage").html(node[0].getAttribute('waitmsg'));
						}
					} catch (e) {
						// just bail if we can't find a message
					}
					CreateBodyOverlay();
					ShowPleaseWaitLayer();
					$("form").submit(
						function () {
							// Reset the source for the image so the animation will show in IE.
							setTimeout("document.getElementById('please_wait_wrap').innerHTML = document.getElementById('please_wait_wrap').innerHTML", 200);
							return true;
						}
					);
					return true;
				}
			}
		);

		// Display the spinner for any request that might take a while.
		$("a.please_wait_msg").click(
			function () {
				// This will immediately halt the request if the client side validators didn't validate.
				if (typeof (WebForm_OnSubmit) == 'function' && !WebForm_OnSubmit()) {
					return false;
				} else {
					try {
						var node = $(this);
						// validate we have something usable!
						if (node != null && node[0].getAttribute('waitmsg') != null) {
							$("#spinnerMessage").html(node[0].getAttribute('waitmsg'));
						}
					} catch (e) {
						// just bail if we can't find a message
					}
					CreateBodyOverlay();
					ShowPleaseWaitLayer();
					$("form").submit(
						function () {
							// Reset the source for the image so the animation will show in IE.
							setTimeout("document.getElementById('please_wait_wrap').innerHTML = document.getElementById('please_wait_wrap').innerHTML", 200);
							return true;
						}
					);
					return true;
				}
			}
		);

		/* Highlight */
		$(".stripe_me tr").mouseover(
			function () {
				$(this).addClass("over");
			}
		)
		.mouseout(
			function () {
				$(this).removeClass("over");
			}
		);

		/* Tabs */
		if ($('#tab_wrap').length > 0) {
			$('#tab_wrap').tabs({ fxFade: true, fxSpeed: 'normal' });
		}

		// Add event listeners for the Quick Pick functionality
		AddQuickPickMouseOverEventListener()
		AddQuickPickClickEventListener();

	}
);

/***** Close Document Ready *****/

 // tabs - jQuery plugin by Klaus Hartl v 1.1
// http://stilbuero.de/tabs/
$.fn.tabs = function(options) {
    // basic stuff
    var ON_CLASS = 'on';
    var OFF_CLASS = 'tabs-hide';
    // options
    var on = options && options.on && (typeof options.on == 'number' && options.on > 0) ? options.on - 1 : 0;
    return this.each(function() {
        var re = /([_\-\w]+$)/i;
        // retrieve active tab from hash in url
        if (location.hash) {
            var hashId = location.hash.replace('#', '');
            $(this).find('>ul>li>a').each(function(i) {
                if (re.exec(this.href)[1] == hashId) {
                    on = i;
                    var unFocus = function() { // required to not scroll to fragment
                        scrollTo(0, 0);
                    }
                    // be nice to IE via Conditional Compilation
                    // this needs to preceed call to unFocus for other browsers
                    /*@cc_on
                    //location.replace('#'); // required to not scroll to fragment
                    setTimeout(unFocus, 150); // IE needs a little timeout here
                    @*/
                    unFocus();
                    setTimeout(unFocus, 100); // be nice to Opera
                }
            });
        }
        $(this).find('>div').not(':eq(' + on + ')').addClass(OFF_CLASS);
        $(this).find('>ul>li:eq(' + on + ')').addClass(ON_CLASS);
        var container = this;
        $(this).find('>ul>li>a').click(function() {
            if (!$(this.parentNode).is('.' + ON_CLASS)) {
                var target = $('#' + re.exec(this.href)[1]);
                if (target.size() > 0) {
                    $(container).find('>div:visible').addClass(OFF_CLASS);
                    target.removeClass(OFF_CLASS);
                    $(container).find('>ul>li').removeClass(ON_CLASS);
                    $(this.parentNode).addClass(ON_CLASS);
                } else {
                    alert('There is no such container.');
                }
            }
            return false;
        });
    });
};





/** ZZZZZ
 * Callback functions
 * These functions are called when an asynchronous function is returned from the server.
 */
function ReceivePreviewEmailData(args, context) {	
	var popup = $("div.preview_registry_email");
	var divContent = document.getElementById('ctl00_ContentPlaceHolder1_PreviewEmail_divContent');
	divContent.innerHTML = args;
	popup.slideDown("fast");
}

function ClosePreviewEmailData() {	
	var popup = $("div.preview_registry_email");
	popup.slideUp("fast");
}
  
/**
* Callback functions
* These functions are called when an asynchronous function is returned from the server.
*/
function ReceiveMiniCartData(args, context) {	
	CreateBodyOverlay(hideMiniCart);
	$("div#minicart_inner").html(args);
	// Set the rollover state for the mini cart buttons.
	$("div#minicart_inner img.imgover").each(
		function() {
			var src = $(this).attr('src');
			var ftype = src.substring(src.lastIndexOf('.'), src.length);
			var hsrc = src.replace(ftype, '_on' + ftype);
			$(this).attr("hsrc", hsrc);
			$(this).mouseover(
				function() {
					var src = $(this).attr('src');
					var hsrc = $(this).attr('hsrc');
					$(this).attr('src', hsrc);
					$(this).attr('hsrc', src);
				}
			);
			$(this).mouseout(
				function() {
					var src = $(this).attr('src');
					var hsrc = $(this).attr('hsrc');
					$(this).attr('src', hsrc);
					$(this).attr('hsrc', src);
				}
			);
		}
	);
	$("div#minicart_inner").slideDown("normal");
	$("a.hide_cart").click(hideMiniCart);
	setTimeout(hideMiniCart, 10000);
	cmLoad();
}

function ReceiveAddToCartConfirmation(args) {
	if ($("#closer_look").css("display") == 'block') {
		$("#closer_look").hide();
	}
	$("img#addtocart_spinner").attr({ src: "/img/global/spacer.gif" });
	$("#addtocart_confirmation").html(args);
	AddQuickPickMouseOverEventListener();
	AddQuickPickClickEventListener();
	ActivateImageRolloversForElement('#addtocart_confirmation');
	position = GetCenterXYCoordinatesForElement('#addtocart_confirmation')
	$("#addtocart_confirmation").fadeIn(250);
	DragLayer.init(document.getElementById("addtocart_confirmation_title_bar"), position.x, position.y, document.getElementById("addtocart_confirmation"));
	// setTimeout(CloseAddToCartConfirmation, 8000);
	RefreshShopRunnerDivs()
	cmLoad();
}

function ReceiveVideoHopupData(args) {
   // If the html contains a window.open, i.e. will open a popup, just put it on the page and get out
   if ( args.toString().indexOf( "window.open" ) > -1 ) {
    	$("body").append('<div id="video_hopup"/>');
 	   $("#video_hopup").html(args);
      return false;
   }
	CreateBodyOverlay();
	$("body").append('<div id="video_hopup"/>');
	// first show the layer so we can get the height & width
	$("#video_hopup").css('display', 'block');
	$("#video_hopup").html(args);
	var layerWidth = $("#video_hopup").width();
	var layerHeight = $("#video_hopup").height();
	// try to figure out where we are on the page in relation to center of the screen
	var windowDimensions = GetWindowDimensions();
	var windowOffests = GetWindowOffsets();
	// Attempt to find XY coodinates for the center of the screen.
	var positionLeft = windowOffests[0] + Math.round(((windowDimensions[0] - layerWidth)/2));
	var positionTop = windowOffests[1] + Math.round(((windowDimensions[1] - layerHeight)/2));
	// Display the overlay
	$("#popup_overlay").css('opacity', '0.6');
	// Initalize the Drag funtionality - this is located in draylayer.js : This must be after we've the the closer_look.html
	DragLayer.init(document.getElementById("video_title_bar"), positionLeft, positionTop, document.getElementById("video_hopup"));
	$("#video_title_bar img.close_video_hopup").click(
		function() {
			CloseVideoHopup();
			return false;
		}
	);
	cmLoad();
	return false;
}

function ReceiveGiftWrapHopupData(args) {
	CreateBodyOverlay();
	$("body").append('<div id="giftwrap_hopup"/>');
	// first show the layer so we can get the height & width
	$("#giftwrap_hopup").css('display', 'block');
	$("#giftwrap_hopup").html(args);
	var layerWidth = $("#giftwrap_hopup").width();
	var layerHeight = $("#giftwrap_hopup").height();
	// try to figure out where we are on the page in relation to center of the screen
	var windowDimensions = GetWindowDimensions();
	var windowOffests = GetWindowOffsets();
	// Attempt to find XY coodinates for the center of the screen.
	var positionLeft = windowOffests[0] + Math.round(((windowDimensions[0] - layerWidth)/2));
	var positionTop = windowOffests[1] + Math.round(((windowDimensions[1] - layerHeight)/2));
	// Display the overlay
	$("#popup_overlay").css('opacity', '0.6');
	// Initalize the Drag funtionality - this is located in draylayer.js : This must be after we've the the closer_look.html
	DragLayer.init(document.getElementById("giftwrap_hopup_title_bar"), positionLeft, positionTop, document.getElementById("giftwrap_hopup"));
	$("#giftwrap_hopup_title_bar img.close_giftwrap_hopup").click(
		function() {
			CloseGiftWrapHopup();
			return false;
		}
	);
	cmLoad();
	return false;
}



// Displays Single Sku data when a swatch is clicked.
function ReceiveSingleSkuEventCallback(args, context) {
	if (args.toString().length > 0) {
		$('tr.' + context + '_single_productsku').html(args);
	}
}

function ReceiveChangeUserNameEventCallback(args, context) {
    $("#popup_overlay_disable").remove();
    ClearChangeUserNameForm();
    responseXml = LoadXmlDocFromString(args);
    $('#account_changeusername_message').html($(responseXml).find('displayMessage').text());
    if ($(responseXml).find('success').text() == 'true') {
        $('.account_changeusername_username').html($(responseXml).find('newUserId').text());
        $('.username').html('Username: <strong>' + $(responseXml).find('newUserId').text() + '</strong>');
    }
}

function ReceiveCloseAccountEventCallback(args, context) {
    $("#popup_overlay_disable").remove();
    responseXml = LoadXmlDocFromString(args);
    $('#account_closeaccount_right').html($(responseXml).find('displayMessage').text());
    ActivateImageRolloversForElement('#account_closeaccount_right');
    if ($(responseXml).find('success').text() == 'true') {
        $('a#account_closeaccount_cancelbutton_link').attr({ href: "javascript:GoToHomePage()" });
    }
}
  
function ReceiveSkuEventCallback(args, context) {
	// if we've added something on the Review Order page, simply refresh the page
	var params = args.split('|');
	var paramLength = params.length;
	if (context == "reviewOrder") {
		//document.location.href = args;
		document.location.href = params[0];
	} else {
		var eventSourcePrefix = "";
		if (params[1] == "Closer") {
			eventSourcePrefix = "closerlook_";	
		}	
		if (context == 'cart') {
			ReceiveCartCallback(args);
			countLoop = 0;
			for (var i = 0; i< paramLength ; i++)
			{
			   
			   if (params[i] != '')
			    {
			        
			       if (params[i].indexOf("SkuEventArgs")> -1)
			       {
			           countLoop++;
			        }
			    }
			}
			
		} else if (context == 'wishlist') 	{
		countLoop = 0;
		for (var i = 0; i< paramLength ; i++)
			{
			   if (params[i] != '')
			    {
			       if (params[i].indexOf("SkuEventArgs")> -1)
			       {
			            countLoop++;
			        }
			    }
			}
		   
			HideSpinner();
			if (params[0] != '') {
				$("#" + eventSourcePrefix + "add_options p.add_wishlist_msg").html(params[0]);
			}
			GetSkuArgs(params);
			$("#" + eventSourcePrefix + "add_options p.add_wishlist_msg").slideDown("fast");
			
		} else if (context == 'registry') {
			HideSpinner();
			if (params[0] != '') {
				$("#" + eventSourcePrefix + "add_options p.add_registry_msg").html(params[0]);
			}
			GetSkuArgs(params);
			countLoop = 0;
			for (var i = 0; i< paramLength ; i++)
			{
			   if (params[i] != '')
			    {
			       if (params[i].indexOf("SkuEventArgs")> -1)
			       {
			            countLoop++;
			        }
			    }
			}
			$("#" + eventSourcePrefix + "add_options p.add_registry_msg").slideDown("fast");
		}
	}
}
  
function ReceiveCartCallback(args) {
	var arrArgs = args.split('|');
	$("span#cart_info").html(arrArgs[0]);
	// ReceiveMiniCartData(arrArgs[1], '');
	ReceiveAddToCartConfirmation(arrArgs[1]);
	/*
	$("a.show_cart").click(
		function() { 
			this.blur();
			ShowMiniCartFromServer('args', '');
		}
	);
	*/	
}

function ReceiveGiftMessageEntryCallback(xmlString, context) {
	// display the message in the hopup
	ClearGiftMessageEntryFormFields();
	$("#gift_message_entry_message").css("color", "#62bd19");
	$("#gift_message_entry_message").html($(LoadXmlDocFromString(xmlString)).find('actionMessage').text());
 	$("#gift_message_entry_message").slideDown("fast");
 	$("#checkout_gift_message_display").html($(LoadXmlDocFromString(xmlString)).find('giftMessage').text());
}

function ReceiveSourceCodeEntryCallback(xmlString, context) {
	var xmlDoc = LoadXmlDocFromString(xmlString);
	var canContinue = $(xmlDoc).find('canContinue').text();
	if (canContinue == 'true') {
		$(".promo_code_container").html($(LoadXmlDocFromString(xmlString)).find('actionMessage').text());
	} else {
		var $error_message = $(".promo_code_container").find(".error_message");
		$error_message.html($(LoadXmlDocFromString(xmlString)).find('actionMessage').text());
		$error_message.slideDown("normal");
	}
}

function DoPageCallback(args, context) {
	// call Coremetrics
	if (context == 'cart') {
		TriggerShopAction5Tag(args);
	}
	// send to server (Just an FYI: AddToCartCallback is really a bad name since it's used for any callback type in the ProductSkuControl)
	AddToCartCallback(args, context);
}

function ClearGiftMessageEntryFormFields() {
	$("#gift_message_entry_content input.message_line").each(
		function() {
			$(this).val('');
		}
	);
}

function hideMiniCart() {
	$("div#minicart_inner").slideUp("normal");
	$("#popup_overlay").remove();
	return false;
}
  
function HideSpinner() {
	$("#adding_to_wishlist").hide();
	$("#adding_to_registry").hide();
	$("#closerlook_adding_to_wishlist").hide();
	$("#closerlook_adding_to_registry").hide();
	$("#popup_overlay").remove();	
}  

function HideVideoHopup() {
	$("#recipe_video_wrap").remove;
	$("#popup_overlay").remove();	
}	

function GetSkuSwatchData(args) {
	var params = args.split('~');
	var swatchItemNum = params[0].toString();
	var swatchShortSku = params[1].toString();
	var swatchSku = params[2].toString();
	var context = params[3].toString();
	var skuEventArgs = '<SkuEventArgs context="changeSwatch"><swatch swatchItemNum=\"' + swatchItemNum + '\" swatchShortSku=\"' + swatchShortSku + '\"></swatch></SkuEventArgs>';
	GetSingleSkuDataCallback(skuEventArgs, context);
	// we only care about this function is we're on 'PAGE', not CloserLook, etc.
	// embedId will not be defined if there Retail Concept did not load, so don't try to change it's image.
	// if (context == 'page' && typeof embedId != "undefined") {
	if (context == 'page') {
		// selectCategoryById(embedId, 'VARIATION', swatchSku);
		var pmr = fluid.application;
		var display = pmr.getPresentation("display:182:" + swatchItemNum + ":Detail");
		display.selectCategory("VARIATION", swatchSku);
	}
	SetCurrentSku(swatchSku);		
}

function ClearChangeUserNameForm() {
    $('#account_changeusername_form_left input[id$="_txtNewUserId"]').val('');
    $('#account_changeusername_form_left input[id$="_txtConfirm"]').val('');
    $('#account_changeusername_form_left input[id$="_txtPassword"]').val('');
}

/*********************************************** CLOSER LOOK *************************************************/
function GetCloserLookLoadingDataAsHtml() {
	var htmlString = '';
	htmlString += '<div id="closerlook_loading_wrap">';
	htmlString += '<div id="closerlook_loading">';
	htmlString += '<div id="spinner">';
	htmlString += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="Wait" width="200" height="150">';
	htmlString += '<param name="movie" value="/swf/pleasewait.swf" />';
	htmlString += '<param name="quality" value="high" />';
	htmlString += '<param name="bgcolor" value="#ffffff" />';
	htmlString += '<param name="allowScriptAccess" value="sameDomain" />';
	htmlString += '<embed src="/swf/pleasewait.swf" quality="high" bgcolor="#ffffff" ';
	htmlString += 'width="200" height="150" name="Wait" align="middle" ';
	htmlString += 'play="true" ';
	htmlString += 'loop="false" ';
	htmlString += 'quality="high" ';
	htmlString += 'allowScriptAccess="sameDomain" ';
	htmlString += 'type="application/x-shockwave-flash">';
	htmlString += '</embed>';
	htmlString += '</object>';
	htmlString += '</div>';
	htmlString += '</div>';
	// <script type="text/javascript">
	// var so = new SWFObject("/swf/pleasewait.swf", "pleaseWaitSpinner", "200", "150", "8", "#ffffff");
	//	so.write("spinner");
	// </script>
	htmlString += '</div>';
	return htmlString;
}

function ShowCloserLookPleaseWait() {
	var divContent;
	if ($('div[id$="_closerlook_pleasewait"]').length > 0) {
		divContent = $('div[id$="_closerlook_pleasewait"]')[0];
	} else {
		divContent = $('div[id$="_closerlook_itemdata"]')[0];
	}
	divContent.innerHTML = GetCloserLookLoadingDataAsHtml();
	$('#closerlook_title_text')[0].innerHTML = 'Please Wait...';
	CreateBodyOverlay(function() { CloseCloserLook(true) });
	$("#popup_overlay").css('opacity', '0.6');
	// Get the dimensions of the layer
	var layerWidth = $("#closer_look").width();
	var layerHeight = $("#closer_look").height();
	// try to figure out where we are on the page in relation to center of the screen
	var windowDimensions = GetWindowDimensions();
	var windowOffests = GetWindowOffsets();
	// attempt to set XY coodinates to center Closer Look
	var positionLeft = windowOffests[0] + Math.round(((windowDimensions[0] - layerWidth) / 2));
	var positionTop = windowOffests[1] + Math.round(((windowDimensions[1] - layerHeight) / 2));
	DragLayer.init(document.getElementById("title_bar"), positionLeft, positionTop, document.getElementById("closer_look"));
	$("#closer_look").show();
}

function AddQuickPickMouseOverEventListener() {
    $(function () {
        $('.search_qp_new').each(function () {
            var distance = 5;
            var time = 100;
            var hideDelay = 100;
            var hideDelayTimer = null;
            var beingShown = false;
            var shown = false;
            var trigger = $('.search_qp_trigger_new', this);
            var image = $('.search_qp_image', this);
            var qp = $('.search_qp_popup_new', this).css('opacity', 0);
            // Remove any handlers currently on the mousover and mouseout events, so the closer look doesn't get
            // added twice
            $([trigger.get(0), qp.get(0)]).unbind("mouseout");
            $([trigger.get(0), qp.get(0)]).unbind("mouseover");
            $([trigger.get(0), qp.get(0)]).mouseover(function () {
                if (hideDelayTimer) {
                    clearTimeout(hideDelayTimer);
                }
                // don't trigger the animation again
                if (beingShown || shown) {
                    return;
                    // reset position of the quick pick image
                } else {
                    beingShown = true;
                    qp.css({
                        top: 100,
                        left: 12,
                        display: 'block'
                    }).animate({
                        top: '-=' + distance + 'px',
                        opacity: 1
                    }, time, 'swing', function () {
                        beingShown = false;
                        shown = true;
                    });
                }
                return false;
            }).mouseout(function () {
                if (hideDelayTimer) {
                    clearTimeout(hideDelayTimer);
                }
                hideDelayTimer = setTimeout(function () {
                    hideDelayTimer = null;
                    qp.animate({
                        top: '-=' + distance + 'px',
                        opacity: 0
                    }, time, 'swing', function () {
                        shown = false;
                    });
                }, hideDelay);
                return false;
            });
        });
    });
}

function AddQuickPickClickEventListener() {
   // Unbind the click event if there's one already attached
   $('.search_qp_popup_new').unbind( "click" );
	$('.search_qp_popup_new').click (
		function() {
			if ($("#addtocart_confirmation").css("display") == "block") {
				CloseAddToCartConfirmation();
			}
			ShowCloserLookPleaseWait();
		}
	);
}

// this is called from CloserLook
function PrepareCloserLookAndShowFromServer(item, context, triggerObj) {
	ShowCloserLookPleaseWait();
	ShowCloserLookFromServer(item, context, triggerObj);
}


function RefreshShopRunnerDivs() {
   // Refresh the ShopRunner divs, but first make sure the page refresh is false.  But save
   // the old value to restore it.
   var save_sr_pageRefreshes = sr_pageRefreshes;
   sr_pageRefreshes = false;
   sr_refreshMessages();
   sr_pageRefreshes = save_sr_pageRefreshes;
}

// Displays Closer Look.
function ReceiveServerData(args, context) {
	// For the recipe detail page, should have no effect on the home page.
	// $("#popup_overlay").remove();
	$("#preparing_closer_look").hide();
	var params = args.split('|');
	$("#closer_look").html(params[2]);
	eval(params[6]);
	var closerLookElement = $('#closer_look');
	var positionLeft = parseInt(closerLookElement.css("left"));
	var positionTop = parseInt(closerLookElement.css("top"));
	DragLayer.init(document.getElementById("title_bar"), positionLeft, positionTop, document.getElementById("closer_look"));
	if ($("#closer_look").css("display") == "none") {
	//	$("#closer_look").fadeIn("slow");
	}

	RefreshShopRunnerDivs();

	$(".enter_as_click").keydown(EnterAsClick);
	$("input.skuQuantity").numeric();
	$("#closerlook_add_options a.add_cart").unbind("click");
	$("#closerlook_add_options a.add_cart").click(	
		function() { 
			this.blur();
			GetSkuArgs(params);
			if (params.SkuArgs == '') {
				if ($("#closerlook_add_options p.enter_quantity").css("display") == "none") {
					$("#closerlook_add_options p.enter_quantity").slideDown("fast");
				}
				return false;
			}
			ClearSkuMessages();
			var args = '<SkuEventArgs context="cart">' + params.SkuArgs + params.CmArgs + '</SkuEventArgs>';
			
			if (params.IsOnBackOrder) {
				$("input#closerlook_skuQuantityArgs").val(args);
				$(".closerlook_confirm_backorder").slideDown("fast");
				return false;
			} else {
				// CloseCloserLook();
				divContent = $('div[id$="closerlook_itemdata"]')[0];
				divContent.innerHTML = GetCloserLookLoadingDataAsHtml();
				$('#closerlook_title_text')[0].innerHTML = 'Please Wait...';
				// AddToCartCallback(args, 'cart');
				DoPageCallback(args, 'cart');
				
			}
		}
	);
		
	$("input.add_cart_confirm").click(
		function() {
			var args = $("input#closerlook_skuQuantityArgs").val();
			$("div.popup").each(
				function() {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
			CloseCloserLook(false);
			// AddToCartCallback(args, 'cart');
			DoPageCallback(args, 'cart');
			return false;
		}
	);
		
	$("input.add_cart_cancel").click(
		function() { 
			$("div.popup").each(
				function() {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
			return false;
		}
	);
			
	$("#closerlook_add_options a.add_wishlist").click(
		function() { 
		
			this.blur();
			var params = {"displayId":"Closer"};
			GetSkuArgs(params);
			if (params.SkuArgs == '') {
				if ($("#closerlook_add_options p.enter_quantity").css("display") == "none") {
					$("#closerlook_add_options p.enter_quantity").slideDown("fast");
				}
				return false;
			}
			ClearSkuMessages(params);
			var popup = $("div.closerlook_select_wishlist");
			if (popup.html() == null) {
				var args = '<SkuEventArgs context="wishlist" displayId="Closer">' +
				           '<wishlist id=""/>' +
				           params.SkuArgs +
				           '</SkuEventArgs>';
				// AddToCartCallback(args, 'wishlist');
				DoPageCallback(args, 'wishlist');
			} else {
				$("input#closerlook_skuQuantityArgs").val(params.SkuArgs);
				popup.slideDown("fast");
			}
			return false;
		}
	);
		
	$('div[id*="ctlCloserLook_ctl00_ctlSelectWishList"] input.btn_select_wishlist').click(
		function() {
			$("div#closerlook_adding_to_wishlist").show();
			ClearSkuMessages();
			var ddl_wishlist_value = $(this).parents(".message_wrap").find(".wishlist_ddl").first().val();
			var args = '<SkuEventArgs context="wishlist" displayId="Closer">' +
				   '<wishlist id="' + ddl_wishlist_value + '"/>' +
					$("input#closerlook_skuQuantityArgs").val() +
					'</SkuEventArgs>';
			$("div.popup").each(
				function() {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
			// AddToCartCallback(args, 'wishlist');
			DoPageCallback(args, 'wishlist');
			return false;
		}
	);
			
	$("#closerlook_add_options a.add_registry").click(
		function() { 
			this.blur();
			var params = {"displayId":"Closer"};
			GetSkuArgs(params);
			if (params.SkuArgs == '') {
				if ($("#closerlook_add_options p.enter_quantity").css("display") == "none") {
					$("#closerlook_add_options p.enter_quantity").slideDown("fast");
				}
				return false;
			}
			ClearSkuMessages(params);
			var popup = $("div.closerlook_select_registry");
			if (popup.html() == null) {
				var args = '<SkuEventArgs context="registry" displayId="Closer">' +
					        '<registry id=""/>' +
						     params.SkuArgs +
							  '</SkuEventArgs>';

				// AddToCartCallback(args, 'registry');
				DoPageCallback(args, 'registry');
			} else {
				$("input#closerlook_skuQuantityArgs").val(params.SkuArgs);
				popup.slideDown("fast");
			}
			return false;
		}
	);
		
	$('div[id*="ctlCloserLook_ctl00_ctlSelectGiftRegistry"] input.btn_select_registry').click(
		function() {
			$("div#closerlook_adding_to_registry").show();
		    ClearSkuMessages();
		    var ddl_registry_value = $(this).parents(".message_wrap").find(".registry_ddl").first().val();
		    var args = '<SkuEventArgs context="registry" displayId="Closer">' +
				   '<registry id="' + ddl_registry_value + '"/>' +
					$("input#closerlook_skuQuantityArgs").val() +
					'</SkuEventArgs>';
			$("div.popup").each(
				function() {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
			// AddToCartCallback(args, 'registry');
			DoPageCallback(args, 'registry');
			return false;
		}
	);
			
	$("a.hide_popup").click(
		function() {
			$("div.popup").each(
				function() {
					if ($(this).css("display") == 'block') {
						$(this).slideUp("fast");
					}
				}
			);
  			return false;
		}
	);
	
	// *** CloserLook Tabbed Content ***
	// Pricing
	$("img#closerlook_pricing_tab").mouseover (
		function() { 
			var src = $(this).attr('src');
			if (src.indexOf('active') == -1) {
				$(this).attr({src:"/img/tabs/pricing_on.gif"});
			}
		}
	);
	$("img#closerlook_pricing_tab").mouseout (
		function() { 
			var src = $(this).attr('src');
			if (src.indexOf('active') == -1) {
				$(this).attr({src:"/img/tabs/pricing.gif"});
			}
		}
	);
	$("img#closerlook_pricing_tab").click(
		function() {
			ActivateCloserLookPricingTab();
			DeactivateCloserLookDescriptionTab();
			DeactivateCloserLookReviewsTab();
  			return false;
		}
	);
	// Description
	$("img#closerlook_description_tab").mouseover (
		function() { 
			var src = $(this).attr('src');
			if (src.indexOf('active') == -1) {
				$(this).attr({src:"/img/tabs/description_on.gif"});
			}
		}
	);
	$("img#closerlook_description_tab").mouseout (
		function() { 
			var src = $(this).attr('src');
			if (src.indexOf('active') == -1) {
				$(this).attr({src:"/img/tabs/description.gif"});
			}
		}
	);
	$("img#closerlook_description_tab").click(
		function() {
			DeactivateCloserLookPricingTab();
			ActivateCloserLookDescriptionTab();
			DeactivateCloserLookReviewsTab();
  			return false;
		}
	);
	// Reviews
	$("img#closerlook_reviews_tab").mouseover (
		function() { 
			var src = $(this).attr('src');
			if (src.indexOf('active') == -1) {
				$(this).attr({src:"/img/tabs/reviews_on.gif"});
			}
		}
	);
	$("img#closerlook_reviews_tab").mouseout (
		function() { 
			var src = $(this).attr('src');
			if (src.indexOf('active') == -1) {
				$(this).attr({src:"/img/tabs/reviews.gif"});
			}
		}
	);
	$("img#closerlook_reviews_tab").click(
		function() {
			DeactivateCloserLookPricingTab();
			DeactivateCloserLookDescriptionTab();
			ActivateCloserLookReviewsTab();
  			return false;
		}
	);
	
	// Tab Support functions
		function ActivateCloserLookPricingTab() {
		// only throw an element tag if the tab is not active
		if ($("img#closerlook_pricing_tab").attr('src') == '/img/tabs/pricing_on.gif' || $("img#closerlook_pricing_tab").attr('src') == '/img/tabs/pricing.gif') {
			cmCreateElementTag('Pricing Tab','Quick Look',getElementAttributeString());
		}
		$("img#closerlook_pricing_tab").attr({src:"/img/tabs/pricing_active.gif"});	
		$("div#closerlook_tab_pricing_content").css("display", "block");
		$("div#closerlook_tab_pricing_content").css("clear", "both");
	}
	
	function DeactivateCloserLookPricingTab() {
		$("img#closerlook_pricing_tab").attr({src:"/img/tabs/pricing.gif"});	
		$("div#closerlook_tab_pricing_content").css("display", "none");
	}

	function ActivateCloserLookDescriptionTab() {
		if ($("img#closerlook_description_tab").attr('src') == '/img/tabs/description_on.gif' || $("img#closerlook_description_tab").attr('src') == '/img/tabs/description.gif') {
			cmCreateElementTag('Description Tab', 'Quick Look', getElementAttributeString());
		}
		$("img#closerlook_description_tab").attr({src:"/img/tabs/description_active.gif"});	
		$("div#closerlook_tab_description_content").css("display", "block");
		$("div#closerlook_tab_description_content").css("clear", "both");
	}
	
	function DeactivateCloserLookDescriptionTab() {
		$("img#closerlook_description_tab").attr({src:"/img/tabs/description.gif"});	
		$("div#closerlook_tab_description_content").css("display", "none");
	}

	function ActivateCloserLookReviewsTab() {
		if ($("img#closerlook_reviews_tab").attr('src') == '/img/tabs/reviews_on.gif' || $("img#closerlook_reviews_tab").attr('src') == '/img/tabs/reviews.gif') {
			cmCreateElementTag('Reviews Tab', 'Quick Look', getElementAttributeString());
		}
		$("img#closerlook_reviews_tab").attr({src:"/img/tabs/reviews_active.gif"});	
		$("div#closerlook_tab_reviews_content").css("display", "block");
		$("div#closerlook_tab_reviews_content").css("clear", "both");
	}
	
	function DeactivateCloserLookReviewsTab() {
		$("img#closerlook_reviews_tab").attr({src:"/img/tabs/reviews.gif"});	
		$("div#closerlook_tab_reviews_content").css("display", "none");
	}
		
	var hideCloserLookPopUp = function() {
		$("div.popup").each(
			function() {
				if ($(this).css("display") == 'block') {
					$(this).slideUp("fast");
				}
			}
		);
   	return false;
	};
	
	// embed code for Concept Display
	var baseURL = params[4]; 
	var productId = params[0];
	// This tells us if Concept Display is available or not.
	if (params[1] == 1) {
		var id = "display:182:" + productId + ":Closer";
		var zoomId = "zoom:182:" + productId + ":Closer";

		var div = $('#concept_display_sml').get(0);
		var innerHtml = "<div class=\"fluid-display\" id=\"" + id + "\" style=\"position:relative; float:left; width: 185px; height: 185px;\"></div>";
		innerHtml += "<div class=\"fluid-zoom\" id=\"" + zoomId + "\" style=\"position:absolute; top: -1px; left:185px; width: 370px; height: 185px; \"></div>";
		div.innerHTML = innerHtml;
	
		fluid.defineConfiguration(id, { preloaderFgColor: '#CCCCCC', preloaderBgColor: '#666666'	});
		fluid.defineConfiguration(zoomId, { wmode: 'window' });

		fluid.application.processFluidDiv(document.getElementById(id), true);
		fluid.application.processFluidDiv(document.getElementById(zoomId), true);
	} else {
		$('#concept_display_sml').html('<img src="' + params[3] + '" height="185" width="185"/>');
	}
	
	$('a.closerlook_alternate_sku_control_expand').click(
		function() {
			ExpandProductSkuControl(this);
			return false;
		}
	);
		
	$("a.closerlook_alternate_sku_control_collapse").click(
		function() { 
			CollapseProductSkuControl(this);
			return false;
		}
	);
	cmLoad(); 
}
/*********************************************** END CLOSER LOOK *************************************************/

/***** SKU ARGS *****/	
function GetSkuArgs(params) {
	var eventSourcePrefix = "";
	if (params.displayId != null && params.displayId == "Closer" || params.length >= 6 && params[5] == "Closer") {
		eventSourcePrefix = "closerlook_";
	}
	var itemNumber = $("#" + eventSourcePrefix + "product_sku_item").html();
	var args = '';
	var cmargs = '';
	var delim = '';
	var isOnBackOrder = false;
	var backOrderMessage = [];
	var backOrderMessageCount = 0;
	// var itemDescription =  $(this).find("#" + eventSourcePrefix + "order_form input.itemDescription").val();
	$("#" + eventSourcePrefix + "order_form td.quantity").each(
		function() {
			var skuQuantity = $(this).find("input.skuQuantity").val();
			if (skuQuantity == '0') {
				skuQuantity = '';
			}
			if (skuQuantity != '') {
				var skuAvailability = $(this).find("input.skuItemAvailability").val();
				if (skuAvailability != 'In Stock') {
					isOnBackOrder = true;
					var skuDescription = $(this).find("input.skuDescription").val();
					backOrderMessage[backOrderMessageCount++] = skuDescription + ": " + skuAvailability;
				}
				var skuPrice = $(this).find("input.skuPrice").val();
				var itemDescription = $(this).find("input.itemDescription").val();
				cmargs += '<cmattribute brand="' + $(this).find("input.cmBrand").val() + '" rating= "' + $(this).find("input.cmRating").val() + '" numreviews="' + $(this).find("input.cmNumReviews").val() + '" promoflag="' + $(this).find("input.cmPromoFlag").val() + '"/>';
				args += '<item itemNumber="' + itemNumber + '" skuNumber="' + $(this).find("input.skuNumber").val() + '" description="' + escapeForXml(itemDescription) + '" quantity="' + skuQuantity + '" price="' + skuPrice + '" inStock="' + !isOnBackOrder + '" />';
			}
		}
	);

	if (Trim(cmargs).length > 0) {
		cmargs = '<cmattributes>' + cmargs + '</cmattributes>';
	}
	
	if (Trim(args).length > 0) {
		args = '<items>' + args + '</items>';
	}

	params.CmArgs = cmargs;
	params.SkuArgs = args;
	params.IsOnBackOrder = isOnBackOrder;
	params.BackOrderMessage = backOrderMessage;
}
/***** END SKU ARGS *****/	


/***** GIFT WRAP ITEM PARAMS *****/	
function GetGiftWrapItemParams(params) {
	var itemArgs = '';
	var args = '';
	$("td.gift_options_items_information").each(
		function() {
			var checkBox = $(this).find('input[id$="_chkAddGiftWrap"]');
			if (checkBox.length == 1) {
				var isWrapped = 'false';
				if (checkBox.get(0).checked) {
					isWrapped = 'true';
				}
				itemArgs += '<item itemId="' + $(this).find('.giftOptionsItemId').val() + '" isWrapped="' + isWrapped + '" />';
			}
		}
	);
	args += '<GiftWrapArgs><items>' + itemArgs + '</items></GiftWrapArgs>';
	params.GiftWrapArgs = args;
}
/***** END GIFT WRAP ITEM PARAMS *****/

/***** GIFT MESSAGE ENTRY ARGS *****/	
function GetGiftMessageEntryArgs(params) {
	var args = '';
	$("#gift_options_gift_message input[class='message_line']").each(
		function() {
			var lineMessage = $(this).val();
			if (lineMessage == undefined) {
				lineMessage = '';
			}
			if (lineMessage != '') {
				args += '<line message="' + lineMessage + '" />';
			}
		}
	);
	if (args != '') {
		args = '<GiftMessageArgs><messages>' + args + '</messages></GiftMessageArgs>';
	}
	params.GiftMessageArgs = args;
}
/***** END GIFT MESSAGE ENTRY ARGS *****/	

function ClearSkuMessages(args) {	
	var eventSourcePrefix = "";
	if (args != null && args.displayId != null && args.displayId == "Closer") {
		eventSourcePrefix = "closerlook_";
	}
	if ($("#" + eventSourcePrefix + "add_options p.enter_quantity").css("display") == "block") {
		$("#" + eventSourcePrefix + "add_options p.enter_quantity").slideUp("fast");
	}
	if ($("#" + eventSourcePrefix + "add_options p.add_wishlist_msg").css("display") == "block") {
		$("#" + eventSourcePrefix + "add_options p.add_wishlist_msg").slideUp("fast");
	}
	if ($("#" + eventSourcePrefix + "add_options p.add_registry_msg").css("display") == "block") {
		$("#" + eventSourcePrefix + "add_options p.add_registry_msg").slideUp("fast");
	}
}

function ClearGiftOptionsMessages() {
	if ($("#gift_message_entry_message").css("display") == "block") {
		$("#gift_message_entry_message").slideUp("fast");
	}
	$("#gift_message_entry_message").html('');
}

function CloseCloserLook(removeOverlay) {
	// to preserve legacy functionality, if removeOverlay is null then it's true;
	if ((IsNull(removeOverlay) || ParseBool(removeOverlay)) && $("#popup_overlay").css("display") == "block") {
		$("#popup_overlay").remove();
	}
	// this needs to be called in the event they add from a CloserLook
	if ($("#addtocart_confirmation").css("display") == "block") {
		CloseAddToCartConfirmation();
	}
	$("#closer_look").hide();
	return false;
}

function CloseAddToCartConfirmation() {
	if ($("#popup_overlay").css("display") == "block") {
		$("#popup_overlay").remove();
	}
	$("#addtocart_confirmation").hide();
	return false;
}

function CloseHopup(elementToHide, toExecute) {
	$("#popup_overlay").remove();
	$('#' + elementToHide + '').hide();
}

function ResetChangeUserNameControl() {
    ClearChangeUserNameForm();
    $('#account_changeusername_message').html('');
}

function CloseSosHopup() {
	$("#popup_overlay").remove();
	$("#sos_skuhopup").hide();
	return false;
}

function CloseVideoHopup() {
	$("#video_hopup").remove();
	$("#popup_overlay").remove();	
}	

function CloseGiftWrapHopup() {
	$("#giftwrap_hopup").remove();
	$("#popup_overlay").remove();	
}	

function CloseGiftMessageEntry() {
	$("#popup_overlay").remove();
	$("#closer_look").hide();
	return false;
}

function CloseModalHopUp(layerToHide) {
	if (layerToHide == 'gift_message_entry_hopup') {
		ClearGiftOptionsMessages();
		ClearGiftMessageEntryFormFields();
	}
	$("#popup_overlay").remove();
	$("#" + layerToHide).hide();
	return false;
}

function CreateBodyOverlay(onClickFunction, tagName) {
	tagName = tagName || 'popup_overlay';
	$("body").append('<div id="' + tagName + '"/>');
	$("#" + tagName).click(onClickFunction);

	// This handles if the page extends below the window.
	if (window.innerHeight && window.scrollMaxY) {  
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		yScroll = document.body.offsetHeight;
	}    
	$("#" + tagName).css("height",yScroll +"px");
}

function ShowCenteredModalLayer(layerName) {
	// first show the layer so we can get the height & width
	$("#" + layerName).css('display', 'block');
	var layerWidth = $("#" + layerName).width();
	var layerHeight = $("#" +layerName).height();
	// try to figure out where we are on the page in relation to center of the screen
	var windowDimensions = GetWindowDimensions();
	var windowOffests = GetWindowOffsets();
	// Attempt to find XY coodinates for the center of the screen.
	var positionLeft = windowOffests[0] + Math.round(((windowDimensions[0] - layerWidth)/2));
	var positionTop = windowOffests[1] + Math.round(((windowDimensions[1] - layerHeight)/2));
	// Display the overlay
	$("#popup_overlay").css('opacity', '0.6');
	$("#" + layerName).css('top', positionTop);
	$("#" + layerName).css('left', positionLeft);
	// TODO: DE-HARDCODE THIS!
	DragLayer.init(document.getElementById("gift_options_entry_title_bar"), positionLeft, positionTop, document.getElementById("gift_options_entry_hopup"));
	
}

function ShowPleaseWaitLayer() {
	// first show the layer so we can get the height & width
	$("#please_wait_wrap").css('display', 'block');
	var layerWidth = $("#please_wait_wrap").width();
	var layerHeight = $("#please_wait_wrap").height();
	// try to figure out where we are on the page in relation to center of the screen
	var windowDimensions = GetWindowDimensions();
	var windowOffests = GetWindowOffsets();
	// Attempt to find XY coodinates for the center of the screen.
	var positionLeft = windowOffests[0] + Math.round(((windowDimensions[0] - layerWidth)/2));
	var positionTop = windowOffests[1] + Math.round(((windowDimensions[1] - layerHeight)/2));
	// Display the overlay
	$("#popup_overlay").css('opacity', '0.6');
	// Because the please_wait_wrap is display:none when the page loaded, it's positioning is always wrong.
	// The AJAX AlwaysVisibleExtender can't seem to calculate the right location, so we set some XY Coridnates.
	$("#processingSpinner").css('top', positionTop);
	$("#processingSpinner").css('left', positionLeft);
	$("#please_wait_wrap").css('z-index', '600');
}

function EnterKeyActsLikeTab( event ) {
  if (event.keyCode == 13) {
     event.keyCode = 9;
    }
}
    
function SetShippingEnabled(disabled) {
	$(".shipping").each(
		function() {
			$(this).get(0).disabled = disabled;
		}
	);
}
    
function EnterAsClick (e) {
	var btn = $("input.default_button");
	var lnk = $("a.default_button");
	if (e.keyCode == 13) {
		if (btn.html() != null) {
  	 		e.preventDefault();
  	 		btn.get(0).click();
  	 	} else if (lnk.html() != null) {
  	 		e.preventDefault();
  	 		lnk.click();
		}
	}
}

function SearchEnterAsClick (e) {
	var btn = $("input.btn_search");
	var lnk = $("a.btn_search");
	if (e.keyCode == 13) {
		if (btn.html() != null) {
  	 		e.preventDefault();
  	 		btn.get(0).click();
  	 	} else if (lnk.html() != null) {
  	 		e.preventDefault();
  	 		lnk.click();
		}
	}
}	
	
//this is specifically for the email signup box/btn
function EmailClick (e) {
	var btn = $("input.btn_go");
	var lnk = $("a.btn_go");
	if (e.keyCode == 13) {
		$(".emailEnterAsClick").blur();
		if (btn.html() != null) {
			e.preventDefault();    	 		
			btn.get(0).click();
		} else if (lnk.html() != null) {
			e.preventDefault();
			lnk.click();
		}
		return false;
	}
}

function ExpandProductSkuControl(domObject) {
	var controllocation = $(domObject).find('#btnShowSkus').attr("controllocation");
	if (controllocation != undefined && controllocation.toString().length > 0) {
		$('#' + controllocation + '_alternate_multi_sku_controls_wrap').slideUp("slow");
		$('tr.' + controllocation + '_single_productsku').hide();
		$('tr.' + controllocation + '_multi_productsku').each(
		function() {
			// this check is required since IE does not support table-row and FF mangles the TR if block is used
			if (navigator.appName == "Microsoft Internet Explorer") {
				$('tr.' + controllocation + '_multi_productsku').css('display', 'block');
			} else { 
				$('tr.' + controllocation + '_multi_productsku').css('display', 'table-row');
			}
			$('input.skuQuantity').val('');
		}
	);
	$('#' + controllocation + '_alternate_single_sku_controls_wrap').slideDown('slow');
	}
}

function CollapseProductSkuControl(domObject) {
	var controllocation = $(domObject).find('#btnHideSkus').attr("controllocation");
	if (controllocation != undefined && controllocation.toString().length > 0) {
		$('#' + controllocation + '_alternate_single_sku_controls_wrap').slideUp('slow');
		$('tr.' + controllocation + '_multi_productsku').each(
			function() {
				var $skuRow = $(this);
				$skuRow.hide();
			}
		);
		if (navigator.appName == "Microsoft Internet Explorer") {
			$('tr.' + controllocation +'_single_productsku').css('display', 'block');
		} else { 
			$('tr.' + controllocation + '_single_productsku').css('display', 'table-row');
		}
		$('input.skuQuantity').val('');
		$('#' + controllocation + '_alternate_multi_sku_controls_wrap').slideDown('slow');
	}
}

/* ================ CHECKOUT FUNCTIONS ================ */
function ToggleBillMeLaterPromotionCheckBox(toggleState) {
	var checkBox = $('#checkout_left_options_alternate_radio input[id$="_chkBillMeLaterPromotion"]');
	if (checkBox.length == 1 && $(checkBox).get(0).disabled == false) { 
	// if (checkBox.length == 1) { 
		if (toggleState == true) {
			$(checkBox).attr('checked', 'checked');
		} else if (toggleState == false) {
			$(checkBox).removeAttr('checked');
		}
	}
}

/* ================ COREMETRICS FUNCTIONS ================ */
function TriggerShopAction5Tag(args) {
	if (window.ActiveXObject || document.implementation && document.implementation.createDocument) {
		itemNodes = GetNodeFromArgs(args, '/SkuEventArgs/items/item', 'item');
		cmNodes = GetNodeFromArgs(args, '/SkuEventArgs/cmattributes/cmattribute', 'cmattribute');
		if (itemNodes != undefined && cmNodes != undefined) {
			for (var i = 0; i < itemNodes.length; i++) {
				cmCreateShopAction5Tag(itemNodes[i].getAttribute('itemNumber'),
					itemNodes[i].getAttribute('description'),
					itemNodes[i].getAttribute('quantity'),
					itemNodes[i].getAttribute('price').replace('$', ''),
					null,
					cmParams.country + '-_-' +
					cmParams.currency + '-_-' +
					cmParams.sourcecode + '-_-' +
					cmParams.itemtype + '-_-' +
					cmNodes[i].getAttribute('brand') + '-_-' +
					cmNodes[i].getAttribute('rating') + '-_-' +
					cmNodes[i].getAttribute('numreviews') + '-_-' +
					cmNodes[i].getAttribute('promoflag') + '-_-' +
					itemNodes[i].getAttribute('skuNumber').replace('$', '') + '-_-' +
					itemNodes[i].getAttribute('price').replace('$', '') + '-_-' +
					GetStockStatus(itemNodes[i].getAttribute('inStock')) + '-_-' +
					cmParams.userstatus + '-_-' +
					'-_-' +
					cmParams.selectedTestGroupsReportingIdentifiers
					);
			}
			cmDisplayShop5s();
		}
	}
}

function GetStockStatus(toParse) {
	return (ParseBool(toParse) == true) ? 'In Stock' : 'Backordered';
}

function GetNodeFromArgs(args, xPath, tagName) {
	if (window.ActiveXObject) {
		var xmldoc;
		xmldoc = new ActiveXObject("Msxml2.DOMDocument.3.0");
		xmldoc.loadXML(args);
		var sXPath = xPath;
		nodes = xmldoc.selectNodes(sXPath);
	} else {
		var domParser = new DOMParser();
		var xmlDocument = domParser.parseFromString(args, 'application/xml');
		nodes = xmlDocument.getElementsByTagName(tagName);
	}
	return nodes;
}

function getElementAttributeString() {
	return cmParams.country + '-_-' + cmParams.currency + '-_-' + cmParams.sourcecode + '-_-' + cmParams.itemtype;
}

function throwProductViewTag(itemNumber, itemDescription) {
	cmCreateProductviewTag(itemNumber,
		itemDescription,
		cmParams.pageCategoryId, 
		cmParams.country + '-_-' +
		cmParams.currency + '-_-' +
		cmParams.sourcecode + '-_-' +
		cmParams.itemtype + '-_-' +
		'Client side ProductView Tag: Brand attribute not implemented' + '-_-' +
		'Client side ProductView Tag: Rating attribute not implemented' + '-_-' +
		'Client side ProductView Tag: # Reviews attribute not implemented' + '-_-' +
		'Client side ProductView Tag: PromoFlag attribute not implemented' + '-_-' +
		'-_-' +
		'-_-' +
		'-_-' +
		'-_-' +
		'-_-' +
		cmParams.selectedTestGroupsReportingIdentifiers
		, null)
}

/* ================ END COREMETRICS FUNCTIONS ================ */

/* ================ UTILITY FUNCTIONS ================ */
// Use this to determine if a value is in an Array

function IsString() {
   if (typeof arguments[0] == 'string') {
      return true;
   }
   if (typeof arguments[0] == 'object') {  
      var criterion = arguments[0].constructor.toString().match(/string/i); 
      return (criterion != null);  
   }
   return false;
}

function ObjectConverter(inputArray) {
  var o = {};
  for(var i = 0; i < inputArray.length; i++) {
    o[inputArray[i]] = '';
  }
  return o;
}

function GetXmlDocElement(xml, elementToGet) { 
 return $(elementToGet, xml);
}

function CreateXmlDocRoot(docRoot) {
	try {
		// for IE
		xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
		var root = xmlDoc.createElement(docRoot);
		xmlDoc.documentElement = root;
	} catch(e) {
		// for FF, Mozilla, etc.
		xmlDoc = document.implementation.createDocument('', docRoot, null);
	}
	return xmlDoc;
}

function AddXmlDocElement(xmlDoc, elementName, attrs) {
	// attrs is expected to be an array - IE: myArray['attribute'] = 'attributeValue'
	if (attrs != undefined) {
		var theElement = xmlDoc.createElement(elementName);
		for (var i in attrs) {
			theElement.setAttribute(i, attrs[i]);
		}
		xmlDoc.documentElement.appendChild(theElement);
	}
	return xmlDoc;
}

function LoadXmlDocFromString(xmlAsString) {
	var xmlDoc;
	try { //Internet Explorer
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(xmlAsString);
		result = xmlDoc; 
	} catch(e) {
		try { //Firefox, Mozilla, Opera, etc.
			parser = new DOMParser();
			xmlDoc=parser.parseFromString(xmlAsString, "text/xml");
			result = xmlDoc;
		} catch(e) {
			// just swallow this error
		}
	}
	return xmlDoc;
}

function GetWindowDimensions() {
	var theWidth = 0;
	var theHeight = 0;
	if(typeof(window.innerWidth) == 'number') {
		//Non-IE
		theWidth = window.innerWidth;
		theHeight = window.innerHeight;
	} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
		//IE 6+ in 'standards compliant mode'
		theWidth = document.documentElement.clientWidth;
		theHeight = document.documentElement.clientHeight;
	} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
		//IE 4 compatible
		theWidth = document.body.clientWidth;
		theHeight = document.body.clientHeight;
	}
	return [theWidth, theHeight];
}

function GetWindowOffsets() {
	var xScroll = 0;
	var yScroll = 0;
	if(typeof(window.pageYOffset) == 'number') {
		//Netscape compliant
		yScroll = window.pageYOffset;
		xScroll = window.pageXOffset;
	} else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
		//DOM compliant
		yScroll = document.body.scrollTop;
		yScroll = document.body.scrollLeft;
	} else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
		//IE6 standards compliant mode
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	}
	return [xScroll, yScroll];
}

function Trim(toTrim) {
	return toTrim.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function openNewWindow(newPageURL) {
	window.open(newPageURL, "_blank","height=270px width=773px resizable=yes scrollbars=yes menubar=no location=no status=no");
}

function ScrollToElementId(elementId){
	$.scrollTo('#' + elementId, { speed:500 } );
}

String.prototype.EndsWith = function(stringToCompare) {
	var reg = new RegExp(stringToCompare + "$");  
	return reg.test(this);
}

String.prototype.StartsWith = function(stringToCompare) {
	var reg = new RegExp("^" + stringToCompare);
	return reg.test(this);
}

function EscapeString(toEscape) {
	return toEscape.replace("\r", "\\r").replace("\n", "\\n").replace("'", "\\'").replace("\"", "\\\"");
}  



/* String Builder(like) Class */
function StringBuilder(value) {
	this.strings = new Array("");
	this.append(value);
}
// Appends the given value to the end of this instance.
StringBuilder.prototype.append = function (value) {
	if (value) {
		this.strings.push(value);
	}
}
// Clears the string buffer
StringBuilder.prototype.clear = function () {
	this.strings.length = 1;
}
// Converts this instance to a String.
StringBuilder.prototype.toString = function () {
	return this.strings.join("");
}
/* End String Builder(like) Class */

function GetCenterXYCoordinatesForElement(elementToCenter) {
	xyCords = new Array();
	windowDimensions = GetWindowDimensions();
	windowOffests = GetWindowOffsets();
	// Attempt to find XY coodinates for the center of the screen.
	layerWidth = $(elementToCenter).width();
	layerHeight = $(elementToCenter).height();
	xyCords.x = windowOffests[0] + Math.round(((windowDimensions[0] - layerWidth)/2));
	xyCords.y = windowOffests[1] + Math.round(((windowDimensions[1] - layerHeight)/2));
	return xyCords;
}

function ActivateImageRolloversForElement(elementToActivate) {
$(elementToActivate + " img.imgover").each(
		function() {
			var src = $(this).attr('src');
			var ftype = src.substring(src.lastIndexOf('.'), src.length);
			var hsrc = src.replace(ftype, '_on' + ftype);
			$(this).attr("hsrc", hsrc);
			$(this).mouseover(
				function() {
					var src = $(this).attr('src');
					var hsrc = $(this).attr('hsrc');
					$(this).attr('src', hsrc);
					$(this).attr('hsrc', src);
				}
			);
			$(this).mouseout(
				function() {
					var src = $(this).attr('src');
					var hsrc = $(this).attr('hsrc');
					$(this).attr('src', hsrc);
					$(this).attr('hsrc', src);
				}
			);
		}
	);
	}

function IsNull(toTest) {
	result = (toTest == null || toTest == undefined);
	return result;
}

function ParseBool(toTest) {
	var result = false;
	// initialization of Boolean with a string "false" results in true.  So intercept it here.
	if ((toTest != undefined) && (toTest.toString().toLowerCase() == 'false')) {
		toTest = false;
	}
	if (new Boolean(toTest) == true){
		result = true;
	}
	return result;
}

function escapeForXml(toEscape) {
	if (!IsNull(toEscape) && Trim(toEscape).length > 0) {
		// first remove any HTML
		toEscape = toEscape.replace(/&amp;/g, '&');
		toEscape = toEscape.replace(/&lt;/g, '<');
		toEscape = toEscape.replace(/&gt;/g, '>');
		toEscape = toEscape.replace(/&quot;/g, '"');
		toEscape = toEscape.replace(/&apos;/, '\'');
		// now replace each instance with the XML encoded value
		toEscape = toEscape.replace(/&/g, '&amp;');
		toEscape = toEscape.replace(/</g, 'lt;');
		toEscape = toEscape.replace(/>/g, '&gt;');
		toEscape = toEscape.replace(/"/g, '&quot;');
		toEscape = toEscape.replace(/\'/g, '&apos;');
	}
	return toEscape;
}

function GoToHomePage() {
    // window.location = "http://www.chefscatalog.com/";
	window.location = "/";
}

function GoToPage(page) {
	window.location = page;
}

function createCookie(name, value, minutes) {
	if (minutes) {
		var date = new Date();
		date.setTime(date.getTime() + (minutes * 60 * 1000));
		var expires = "; expires=" + date.toGMTString();
	}
	else var expires = "";
	document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for (var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0) == ' ') c = c.substring(1, c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
}


/* ================ END UTILITY FUNCTIONS ================ */

/* ================ CHECKOUT PANEL SUPPORT FUNCTIONS ================ */
function ClosePromoCode() {
	CloseSectionPanel($(".promo_code.section.open"), function () { OpenPromoCode(); });
}

function OpenPromoCode() {
	ClosePaymentMethods();
	OpenSectionPanel($(".promo_code.section.closed"), function () { ClosePromoCode(); });
}

function CloseShippingInfo() {
	CloseSectionPanel($(".calculate_shipping.section.open"), function () { OpenShippingInfo(); });
}

function OpenShippingInfo() {
	ClosePaymentMethods();
	OpenSectionPanel($(".calculate_shipping.section.closed"), function () { CloseShippingInfo(); });
}

function ClosePaymentMethods() {
	CloseSectionPanel($(".payment_method.section.open"), function () { OpenPaymentMethods(); });
}
		
function OpenPaymentMethods() {
	CloseShippingInfo();
	ClosePromoCode();
	OpenSectionPanel($(".payment_method.section.closed"), function () { ClosePaymentMethods(); });
}

function OpenSectionPanel(closedSectionPanel, replacementClickFunction) {
	closedSectionPanel.children(".header").unbind('click').click(replacementClickFunction);
	closedSectionPanel.children(".contents").slideDown("normal");
	closedSectionPanel.removeClass("closed").removeClass("inactive").addClass("open");
}

function CloseSectionPanel(openSectionPanel, replacementClickFunction) {
	openSectionPanel.children(".header").unbind('click').click(replacementClickFunction);
	openSectionPanel.children(".contents").slideUp("normal");
	openSectionPanel.removeClass("open").removeClass("inactive").addClass("closed");
}

function ClearSourceCodeEntry() {
	if ($("#checkout_sourcecode_error_message").css("display") == "block") {
		$("#checkout_sourcecode_error_message").slideUp("fast");
		$("#checkout_sourcecode_error_message").html("");
	}
	$('#checkout_sourcecode_input input[id$="_txtSourceCode"]').val("");
}

function ProcessCheckoutPanelState(xmlString) {
	var responseXml = LoadXmlDocFromString(xmlString);
	if ($(responseXml).find('pageState').text() == 'postback'){
		if ($(responseXml).find('startPanel').text() == '3') {
			CloseSectionPanel($(".calculate_shipping.section"), function () { OpenShippingInfo(); })
			CloseSectionPanel($(".promo_code.section"), function () { OpenPromoCode(); })
			OpenSectionPanel($(".payment_method.section"), function () { ClosePaymentMethods(); });
		} else {
			// this should never happen!
		}
	} else {
		if ($(responseXml).find('startPanel').text() == '2') {
			OpenSectionPanel($(".calculate_shipping.section"), function () { CloseShippingInfo(); })
			OpenSectionPanel($(".promo_code.section"), function () { ClosePromoCode(); })
			if ($(responseXml).find('errorMessage').text().length > 0) {
				$("#checkout_postback_error_message").html($(responseXml).find('errorMessage').text());
				$("#checkout_postback_error_message").slideDown("normal");
			}
		}
	}
	// Position broswer
	if ($(responseXml).find('positionBrowserToElementId').text().length > 0) {
		ScrollToElementId($(responseXml).find('positionBrowserToElementId').text());
	}
}




/* ================ END CHECKOUT PANEL SUPPORT FUNCTIONS ================ */


