var productId;
var Cart;
var previousImageURL = '';
var productSizeSelector,productColorSelector,productTrimSelector;
var viewerReset = false;
var image = new Object();
var ProductConfigurator;
//(function($) {
	//----------------------------
	// PRODUCT DETAIL PAGE BEGIN
	//----------------------------
	var ContentExpander = function() {
		return {
			viewAll: function(klass) {
				var ul = $("."+klass);
				ul.find("li:gt(1)").slideToggle(400);
			},
			liveLoad: function() {
				/**
				 * LOKVIK-1828 : liveLoad is called once on doc ready. Using 'liveQuery', any new elements that match
				 * these queries will have their events registered...even after AJAX loading
				 **/

				// For View All / Close Toggle
				// This is repeated in objects.js
				$(".view-all").live("click", function() {
					 $(this).parent().find("ul li.toggle").show();
					 $(this).parent().find("span.current-count").hide();
					 $(this).parent().find("span.full-count").show();
					 $(this).parent().find(".view-close").show();
					 $(this).hide();
					 return false;
					}
				);

				$(".view-close").live("click", function() {
					 $(this).parent().find("ul li.toggle").hide();
					 $(this).parent().find("span.current-count").show();
					 $(this).parent().find("span.full-count").hide();
					 $(this).parent().find(".view-all").show();
					 $(this).hide();
					 return false;
					}
				);
			}
		};
	}();

	window.ProductConfigurator = function() {
		return {
			liveLoad: function() {
				/**
				 * LOKVIK-1828 : liveLoad is called ONLY ONCE on doc ready. Using 'liveQuery', any new elements that match
				 * these queries will have their events registered...even after AJAX loading
				 **/
					// UPDATE 6/3/2020:  The 'liveQuery' comment above is no longer entirely applicable. The site is now using
					// jQuery 3.x, which does not have a .live() method anymore. Those usages have been changed to
					// element.on('event', 'element-sub-selector', handlerFn);
				var root = $('.product-configuration');
				root.on('click', ".product-finish-item:not(.comparison-item)", function () {
					ProductConfigurator.selectedFinish($(this).ident());
				});
				root.on('click', ".product-trim-option-item:not(.comparison-item)", function () {
					ProductConfigurator.selectedTrimOption($(this).ident());
				});
				root.on('click', ".product-knob-handle-finish-item:not(.comparison-item)", function () {
					ProductConfigurator.selectedKnobHandleFinish($(this).ident(), '');
				});
				root.on('click', ".product-gas-type-item:not(.comparison-item)", function () {
					ProductConfigurator.selectedGasType($(this).prev('[type="radio"]').attr('id'));
				});
				root.on('click', ".product-burner-config-item:not(.comparison-item)", function () {
					ProductConfigurator.selectedBurnerConfig($(this).ident());
				});
				root.on('click', ".product-door-style-item:not(.comparison-item)", function () {
					ProductConfigurator.selectedDoorStyle($(this).ident());
				});
				root.on('click', ".product-door-hinge-item:not(.comparison-item)", function () {
					ProductConfigurator.selectedDoorHinge($(this).ident());
				});
				root.on('click', ".product-interior-config-item:not(.comparison-item)", function () {
					ProductConfigurator.selectedInteriorConfig($(this).ident());
				});

				root.on('click', ".alternate-images .alternate-image-item", function() {
					var imageId = $(this).ident();
					var imageAltText = $(this).find('img').attr('alt');
					viewerReset = true;
					SkuFinder.lookupImageById(imageId, function(result) {
						var altHei;
						var altWid;
						var imageURL = result[0];
						if (previousImageURL !== imageURL) {
							if ((imageURL != null) || (imageURL != '')) {
								// get javascript file that contains image properties
								var alternateImage = imageURL;
								var rootDir = S7ConfigClient.isRoot;
								alternateImage = alternateImage.replace(rootDir, '');
								var js = rootDir + alternateImage + "?req=imageprops,javascript";

								// get new width and height and set new image in viewer
							    $.getScript(js, function() {
							    	altHei = image.height;
							    	altWid = image.width;
									alternateImage  = alternateImage + modifiers;
									window.viking.scene7.zoomViewer.setAsset(alternateImage);
							    });
							   $('#scene7AltTag').text(imageAltText);
								previousImageURL = imageURL;
							} else {
								// display the na image if the image is not available
								if (imageURL !==  '/VikingRange/na' + modifiers) {
									imageURL  = '/VikingRange/na' + modifiers;
									window.viking.scene7.zoomViewer = new s7viewers.BasicZoomViewer({
									    "containerId":"s7viewer","params":{
									    "asset":imageURL,
									    "serverurl":S7ConfigClient.isRoot
									}
								    }).init();
									previousImageURL = imageURL;
								   $('#scene7AltTag').text('');
								}
								viewerReset = true;
							}
						}
					});
				});
				
				root.on('click', ".door-panel", function(data) {
					var doorPanelId = $(this).ident();
					$("#doorPanelProductId").val(doorPanelId);
					$.get("/consumer/products/tabs/fragments/ajax_dishwasher_door_panel_finishes.jsp", {productId:doorPanelId}, function(response) {
						$(".door-panel-swatch-container").html(response);
						$(".door-panel-swatch-container").find(".door-panel-finish").first().click();
						/*
						var doorPanelFinishId = $(response).find(".door-panel-finish").first().ident();
						$("#doorPanelFinishId").val(doorPanelFinishId);
						ProductConfigurator.lookupDishwasherSku();
						*/
					});
				});
				root.on('click', ".door-panel-finish", function(data) {
					var finishId = $(this).ident();
					$("#doorPanelFinishId").val(finishId);
					ProductConfigurator.lookupDishwasherSku();
				});
			},
			lookupDishwasherSku: function() {
				var serverOption = $(".serverOption").val();
				var doorPanelId = $("#doorPanelProductId").val();
				var finishId = $("#doorPanelFinishId").val();
				if (finishId == "no-door-panel") {
					// no door panel selected so use the product id of the main dishwasher to display image
					doorPanelId = $(".productId").val();
					finishId = null;
				}
				
				SkuFinder.lookupDoorPanelSku(doorPanelId, finishId, function(result) {
					var imageUrl = result[0];
					var altTag = result[1];
					var skuId = result[2];
					var skuName = result[3];
					var s7Server = result[4];
					var s7RenderOptions = result[5];
					$("#doorPanelSkuId").val(skuId);
					$("#doorPanelModelNumber").html(skuName);
					
					if (s7Server === 'VikingRangeRender') {
						try {
	                    	ProductConfigurator.callExternalImage(imageUrl+"?"+s7RenderOptions, altTag);
	                    	//console.log(result[0] + " :: " + result[1])
	                    } catch(e) {
	                        if (e.name == "TypeError") {
	                            // Try the request again.
	                            setTimeout(function() {
	                            	ProductConfigurator.callExternalImage(imageUrl+"?"+s7RenderOptions, altTag);
	                            }, 200);
	                        }
	                    }
					} else {
						try {
							ProductConfigurator.callExternalImage(imageUrl, altTag);
	                    	//console.log(result[0] + " :: " + result[1])
	                    } catch(e) {
	                        if (e.name == "TypeError") {
	                            // Try the request again.
	                            setTimeout(function() {
	                                ProductConfigurator.callExternalImage(imageUrl, altTag);
	                            }, 200);
	                        }
	                    }
					}
				});
			},
			scan: function() {
				//jQuery 1.3 'live' does NOT implement "change"...so, improvise to keep this event from registering more than once
				if (!productSizeSelector && $(".product-size-selector").length > 0) {
					$(".product-size-selector").change(function() {
						ProductConfigurator.selectedSizeOption($.trim($(this).children(":selected").html()));
					}); productSizeSelector = true;
				}
				if (!productColorSelector && $(".product-color-selector").length > 0) {
					$(".product-color-selector").change(function() {
						ProductConfigurator.selectedColorOption($.trim($(this).children(":selected").html()));
					}); productColorSelector = true;
				}
				if (!productTrimSelector && $(".product-trim-selector").length > 0) {
					$(".product-trim-selector").change(function() {
						ProductConfigurator.selectTrimOption($.trim($(this).children(":selected").html()));
					}); productTrimSelector = true;
				}
				if ($('.product-gas-type-item').length > 0) {
					var options = {cls: 'jquery-radio-01', empty: '/consumer/images/empty.png'};
					$('.product-gas-type-item').checkbox(options).bind('check', function(){
						ProductConfigurator.selectedGasType($(this).ident());
					});

					if ($('.product-fuel-selector').length > 0) {
	                    $(".product-fuel-selector").change(function() {
	                    	ProductConfigurator.selectedFuelOption($.trim($(this).children(":selected").html()));
	                    });
					}
				}
			},
			selectedFinish: function(finishId) {
				$(".finishId").val(finishId);

				if ($(".product-color-selector").length > 0) {
					SkuFinder.lookupNameOfFinish(finishId, function(finishName) {
						if (finishName) {
                            $(".product-color-selector").val(finishName);
							$(".colorOption").val(finishName);
						}
						ProductConfigurator.lookupSku();
					});
				} else {
                    ProductConfigurator.lookupSku();
				}
			},
			selectedTrimOption: function(trimOptionId) {
				$(".trimOptionId").val(trimOptionId);
				if ($(".product-trim-selector").length > 0) {
					SkuFinder.lookupNameOfTrim(trimOptionId, function(trimName) {
						if (trimName) {
							$(".product-trim-selector").val(trimName);
							$(".trimOption").val(trimName);
						}
						ProductConfigurator.lookupSku();
					});
				} else {
					ProductConfigurator.lookupSku();
				}
			},
			selectedGasType: function(gasTypeId) {
				// console.log('selectd gas type and gasTypeId = ' + gasTypeId);
				$(".gasTypeId").val(gasTypeId);
				if ($(".product-fuel-selector").length > 0) {
					var gasTypeDescription = $('#'+gasTypeId).parent().find('label').text();
					$(".product-fuel-selector").val(gasTypeDescription);
					ProductConfigurator.lookupSku();
				} else {
					ProductConfigurator.lookupSku();
				}
			},
			selectedBurnerConfig: function(burnerConfigId) {
				$(".burnerConfigId").val(burnerConfigId);
				ProductConfigurator.lookupSku();
			},
			selectedDoorStyle: function(doorStyleId) {
				$(".doorStyleId").val(doorStyleId);
				ProductConfigurator.lookupSku();
			},
			selectedDoorHinge: function(doorHingeId) {
				$(".doorHingeId").val(doorHingeId);
				ProductConfigurator.lookupSku();
			},
			selectedInteriorConfig: function(interiorConfigId) {
				$(".interiorConfigId").val(interiorConfigId);
				ProductConfigurator.lookupSku();
			},
			selectedKnobHandleFinish: function(knobHandleFinishId, colorPickerHexValue) {
				$(".knobHandleFinishId").val(knobHandleFinishId);
				$(".knobHandleFinishHexValue").val(colorPickerHexValue);
				ProductConfigurator.lookupSku();
			},
			selectedColorOption: function(color) {
				$(".colorOption").val(color);
				color = color.replace(/\s+/g, '');
				$(".finishId").val($(".product-finish-name-"+color).ident());
				ProductConfigurator.lookupSku();
			},
			selectedSizeOption: function(size) {
				$(".sizeOption").val(size);
				ProductConfigurator.lookupSku();
			},
			selectTrimOption: function(trim) {
				trim = trim.replace(/\s+/g, '');
				$(".trimOptionId").val($(".product-trim-name-"+trim).ident());
				ProductConfigurator.lookupSku();
			},
			selectedFuelOption: function(gasTypeDescription) {
				$(".gasTypeId").val(gasTypeDescription);
				var gasTypeId = $('#'+gasTypeId).parent().find('label').text();
				$('.radio-01').each(function(index) {
					var selectData =($.trim($(this).text()));
					if(gasTypeDescription == selectData) {
						var checkInput = $(this).find('input.product-gas-type-item');
						$(checkInput).attr("checked", "checked");
					}
				});
			},
			makeDefaultSelections: function() {
				//only set to a default if the existing finishId is empty, otherwise, it has already been set
				if ($(".finish-list").length > 0 && $(".finishId").length > 0 && $(".finishId").val().length < 1) {
					var defaultFinishId = null;
					if ($(".product-color-selector").length > 0) {
						var color = $.trim($(".product-color-selector option:selected").html());
						defaultFinishId = $(".product-finish-name-" + color.replace(/\s+/g, '')).attr("id");
					} else {
						defaultFinishId = $(".finish-list").find(".product-finish-item:first").attr("id");
					}
					$(".finishId").val(defaultFinishId);
				}

				if ($(".burner-config-list").length > 0 && $('.burnerConfigId').val().length < 1) {
					var burnerConfigListId = $(".burner-config-list").find(".product-burner-config-item:first").attr("id");
					$(".burnerConfigId").val(burnerConfigListId);
				}

				if ($(".trim-option-list").length > 0 && $('.trimOptionId').val().length < 1) {
					var defaultTrimOptionId = $(".trim-option-list").find(".product-trim-option-item:first").attr("id");
					$(".trimOptionId").val(defaultTrimOptionId);
				}

				if ($(".door-style-list").length > 0 && $('.doorStyleId').val().length < 1) {
					var defaultDoorStyleId = $(".door-style-list").find(".product-door-style-item:first").attr("id");
					$(".doorStyleId").val(defaultDoorStyleId);
				}

				if ($(".door-hinge-list").length > 0 && $('.doorHingeId').val().length < 1) {
					var defaultDoorHingeId = $(".door-hinge-list").find(".product-door-hinge-item:first").attr("id");
					$(".doorHingeId").val(defaultDoorHingeId);
				}

				if ($(".interior-config-list").length > 0 && $('.interiorConfigId').val().length < 1) {
					var defaultInteriorConfigId = $(".interior-config-list").find(".product-interior-config-item:first").attr("id");
					$(".interiorConfigId").val(defaultInteriorConfigId);
				}

				if ($(".product-size-selector").length > 0 && $('.sizeOption').val().length < 1) {
					var defaultSize = $.trim($(".product-size-selector").find(":selected").html());
					$(".sizeOption").val(defaultSize);
				}

				if ($(".product-color-selector").length > 0 && $('.colorOption').val().length < 1) {
					var defaultColor = $.trim($(".product-color-selector").find(":selected").html());
					$(".colorOption").val(defaultColor);
				}

				if ($(".gas-type-list").length > 0 && $('.gasTypeId').val().length < 1) {
					var defaultGasTypeId = $(".gas-type-list").find(".product-gas-type-item:first").attr("for");
					$(".gasTypeId").val(defaultGasTypeId);
				}
				
				if ($(".door-panel-list").length > 0 && $('#doorPanelProductId').val().length < 1) {
					var defaultDoorPanelId = $(".door-panel-list").find(".door-panel:first").attr("id");
					$("#doorPanelProductId").val(defaultDoorPanelId);
				}

			},
			lookupSku: function(callback) {
				var productId = $(".productId").val();
				var finishId = $(".finishId").val();
				var trimOptionId = $(".trimOptionId").val();
				var knobHandleFinishId = $(".knobHandleFinishId").val();
				var knobHandleFinishHex = $(".knobHandleFinishHexValue").val();
				var gasTypeId = $(".gasTypeId").val();
				var burnerConfigId = $(".burnerConfigId").val();
				var doorStyleId = $(".doorStyleId").val();
				var doorHingeId = $(".doorHingeId").val();
				var interiorConfigId = $(".interiorConfigId").val();
				var colorOption = $(".colorOption").val();
				var sizeOption = $(".sizeOption").val();
				var serverOption = $(".serverOption").val();
				var finishHexValue = $(".finishHexValue").val();
				var trimHexValue = $(".trimHexValue").val();

				

				SkuFinder.lookupImageForSku(productId, finishId, trimOptionId, knobHandleFinishId, knobHandleFinishHex, gasTypeId, burnerConfigId, doorStyleId, doorHingeId, interiorConfigId, sizeOption, colorOption,
					function(result) {

					if (serverOption === 'VikingRangeRender') {
						try {
							// ProductConfigurator.callExternalImage(result[0]+"?"+burnerConfigId, finishId);
	                    	ProductConfigurator.callExternalImage(result[0]+"?"+result[6], result[1]);
	                    	//console.log(result[0] + " :: " + result[1])
	                    } catch(e) {
	                        if (e.name == "TypeError") {
	                            // Try the request again.
	                            setTimeout(function() {
									//ProductConfigurator.callExternalImage(productId+"?"+burnerConfigId, finishId);
	                                ProductConfigurator.callExternalImage(result[0]+"?"+result[6], result[1]);
	                            }, 200);
	                        }
	                    }
					} else {
						try {
							ProductConfigurator.callExternalImage(result[0], result[1]);
	                    	//console.log(result[0] + " :: " + result[1])
	                    } catch(e) {
	                        if (e.name == "TypeError") {
	                            // Try the request again.
	                            setTimeout(function() {
	                                ProductConfigurator.callExternalImage(result[0], result[1]);
	                            }, 200);
	                        }
	                    }
					}
                    if (result[3]) {
                    	$('input.currentSkuId').val(result[3]);
                    }

					var node = null;
					if ($(".product-size-selector").length > 0) {
						node = $(".product-size-selector").closest("form");
					} else if ($(".product-color-selector").length > 0) {
						node = $(".product-color-selector").closest("form");
					} else if ($(".product-trim-selector").length > 0) {
						node = $(".product-trim-selector").closest("form");
					}
					PriceChanger.changePrice(productId, result[2], result[3], node);

					if (result[4]) {
						$(".product-size-selector").find("option:selected").removeAttr("selected");
						$(".product-size-selector").find("option:[value="+result[4]+"]").attr("selected", "selected");
					}

					if (result[5]) {
						// console.log('howdy model number!!');
						$("#sku-name-div").html(result[5]);
						$("#sku-name-div").triggerHandler("sku-updated");
					}

					if (result[7] == null || result[7] == '') {
						$("#sku-price-div").html('');
						$("#msrp-text").hide();
						$("#sku-price-div").triggerHandler("sku-updated");
					}else{
						$("#sku-price-div").html("*MSRP: $" + result[7]);
						$("#msrp-text").show();
						$("#sku-price-div").triggerHandler("sku-updated");
					}

					if (callback != undefined) {
						callback();
					}
				});
			},
			callExternalImage: function(imageURL, imageAltText) {
				var rootDir = S7ConfigClient.isRoot;
				var altHei;
				var altWid;
				if (imageURL !== previousImageURL) {
					if ((imageURL === null) || (imageURL === '')) {
						rootDir = S7ConfigClient.isRoot;
						previousImageURL = imageURL;
						imageURL  = '/VikingRange/na';
						var js = rootDir + imageURL + "?req=imageprops,javascript";
					    $.getScript(js,
							function() {
					    		altHei = image.height;
					    		altWid = image.width;
					    		imageURL  = imageURL + modifiers;
					    		//s7zoom.setImage(rootDir + imageURL,'true', altWid, altHei);
								window.viking.scene7.zoomViewer.setAsset(imageURL);
							}
						);
						//s7zoom.setMaxZoom(zoomlimit);
						//s7zoom.setZoomStep(zoomsteps);
					    $('#scene7AltTag').text('');
						viewerReset = true;
					} else if ((viewerReset !== true) && (imageURL !== null)) {
						rootDir = rootDir + company + '/';
						previousImageURL = imageURL;
						imageURL = imageURL.replace(rootDir, '');
						var index = imageURL.indexOf('?');
						
						if (index != "-1") {
							imageURL = imageURL.substr(index);
						}						
						console.log("imageURL :: " + imageURL);


						if (imageAltText === null) {
							$('#scene7AltTag').text('');
						} else {
							$('#scene7AltTag').text(imageAltText);
						}
						var serverOption = $(".serverOption").val();
						if(serverOption === 'VikingRangeRender') {
							var asset = imageURL + modifiers;
							window.viking.scene7.zoomViewer.setAsset(asset);
							window.viking.scene7.zoomViewer.params.asset = asset;
						} else {
							window.viking.scene7.zoomViewer.setAsset(company + '/' + imageURL + modifiers);
							window.viking.scene7.zoomViewer.params.asset = company + '/' + imageURL + modifiers;
						}
						//changeImage(imageURL);
					} else {
						var serverOption = $(".serverOption").val();
						if (imageAltText == null) {
							$('#scene7AltTag').text('');
						} else {
							$('#scene7AltTag').text(imageAltText);
						}

						rootDir = S7ConfigClient.isRoot;
						previousImageURL = imageURL;
						imageURL = imageURL.replace(rootDir, '');
						if (serverOption === 'VikingRangeRender') {
							var defaultImageHeight = $(".defaultImageHeight").val();
							var defaultImageWidth = $(".defaultImageWidth").val();
					    	altHei = defaultImageHeight;
					    	altWid = defaultImageWidth;
					    	imageURL  = imageURL + modifiers;
							// console.log(imageURL);
					    	//s7zoom.setImage(rootDir + imageURL,'true', altWid, altHei);
							window.viking.scene7.zoomViewer.setAsset(imageURL);
						} else {
							var js = rootDir + imageURL + "?req=imageprops,javascript";
						    $.getScript(js, function() {
						    	altHei = image.height;
						    	altWid = image.width;
						    	imageURL  = imageURL + modifiers;
						    	//s7zoom.setImage(rootDir + imageURL,'true', altWid, altHei);
								window.viking.scene7.zoomViewer.setAsset(imageURL);
						    });
						}

						viewerReset = false;
					}
				}
			}
		};
	}();
	//----------------------------
	// PRODUCT DETAIL PAGE END
	//----------------------------


	//----------------------------
	// SUBCATEGORY PAGE BEGIN
	//----------------------------
	var SubCategoryImageNav = function() {
		return {
			liveLoad: function() {
				//$(".child-category-image").click(function(i) {
				$(".child-category-image").live("click", function(i) {
					//alert($("#child-cat-anchor-"+$(this).ident()).attr("class"));
					$("#child-cat-anchor-"+$(this).ident()).click();
					return false;
				});
			}
		}
	}();
	//----------------------------
	// SUBCATEGORY PAGE BEGIN
	//----------------------------


	//----------------------------
	// CATEGORY PAGE BEGIN
	//----------------------------
	var QuaternaryNav = function() {
		var loadedQuaternaryTabs = {};
		return {
			quaternaryTabClick: function() {
				$('.quaternary-tabbed-content-item').hide();
				var repoId = $(this).attr("id");
				var quat = null;

				if (loadedQuaternaryTabs[repoId]) {
					quat = $(['#quaternary-content-', repoId].pack());
					quat.show();
				} else {
					$.get("/consumer/products/tabs/category_quaternary_nav_tab.jsp", {categoryId: repoId}, function(data) {
				    	data = Ajax.parse(data);
						quat = $("#quaternary-content-"+repoId);
						quat.html(data).show();
						loadedQuaternaryTabs[repoId] = repoId;
						Pane.buy_online(quat);
				    });
				}
				TabToggler.toggle("category-find-featured-products-"+repoId, false);
				return false;
			},
			load: function(selectedQuaternaryTab) {
				$(".quaternary-nav-tab").unbind("click", QuaternaryNav.quaternaryTabClick).bind("click", QuaternaryNav.quaternaryTabClick);
				if (selectedQuaternaryTab) {
					if (loadedQuaternaryTabs[selectedQuaternaryTab]) {
						$(['#quaternary-content-', selectedQuaternaryTab].pack()).show();
					} else {
						if(typeof ClickTaleExec=='function') {
							ClickTaleExec("$('#'+selectedQuaternaryTab).click()");
						}
						$("#"+selectedQuaternaryTab).click();
					}
				} else {
					if(typeof ClickTaleExec=='function') {
						ClickTaleExec("$('.quaternary-nav-tab:first').click()");
					}
					$(".quaternary-nav-tab:first").click();
				}
			}
		};
	}();

    var ExclusiveFinish = function() {
        var TooltipLayer = function(o) {
            var node = o;
            var layerId = 'swatch-tooltip';
            $(['#', layerId].pack()).remove();
            var tip = $('<div id="swatch-tooltip"><div id="swatch-tooltip-content"></div><div id="swatch-tooltip-bottom">&nbsp;</div></div>').hide();
            $('body').append(tip);
            return {
                show: function(text) {
                    // Non-IE browsers get to see the tooltip all on one line.
                    if (!$.browser.msie) {
                        tip.css({
                            width: 'auto'
                        });
                    }
                    tip.find('div:first').text(text);
                    var offset, top, left, w, h;
                    offset = node.offset();
                    top = offset.top;
                    left = offset.left;
                    setTimeout(function() {
                        tip.show();
                        tip.css({
                            top: top - tip.height() + 6,
                            left: (left + node.width() / 2) - (tip.outerWidth() / 2)
                        });
                        tip.css('z-index', 2001);
                        if ($.browser.msie && $.browser.version < 7) {
                           tip.find('div:last').remove();
                           tip.css({
                               top: node.offset().top - tip.height()
                           });
                        }
                    }, 250);

                },
                destroy: function() {
                    tip.remove();
                }
            };
        };
        return {
            mouseovers: function(parentNav, items) {
                var layer = null;
                var defaultItems = '.featured-product-finish-item, .product-finish-item, .product-trim-option-item, .product-insert-option-item, .product-burner-config-item, .product-door-hinge-item, .product-door-style-item, .product-interior-config-item';
                var targetItems = $(defaultItems);

                if (items && items.length > 0) {
                	targetItems = items;
                } else if (parentNav && parentNav.length > 0) {
                	targetItems = parentNav.find(defaultItems);
                }
                targetItems.filter(':not(.html-tooltip)').bind('mouseenter', function() {
                    var text = $(this).find('span').text();
                    layer = new TooltipLayer($(this));
                    layer.show(text);
                    return false;
                }).bind('mouseleave', function() {
                    if (layer) {
                    	layer.destroy();
                    }
                });
            }
        };
    }();

	var FeaturedProduct = function() {
		var scene7Params = "?fmt=png-alpha&wid=220&hei=210&resmode=sharp2&op_usm=1,1,10,0";
		return {
			liveLoad: function() {
				$(".featured-product-finish-item").live("click", function() {
					var featuredProductId = $(this).parents("ul:first").ident();
					FeaturedProduct.selectedFinish(featuredProductId, $(this).ident());
				});
			},
			selectedFinish: function(featuredProductId, finishId) {
				// only do lookup and reload image if a different finish option was clicked on
				if ($("#finish"+featuredProductId).val() != finishId) {
					$("#finish"+featuredProductId).val(finishId);
					FeaturedProduct.lookupSku(featuredProductId);
				}
			},
			lookupSku: function(featuredProductId) {

				var finishId = $("#finish"+featuredProductId).val();
				var trimOptionId = $("#trimOption"+featuredProductId).val();
				var gasTypeId = $(".gasTypeId").val();
				var burnerConfigId = $("#burnerConfig"+featuredProductId).val();
				var doorStyleId = $("#doorStyle"+featuredProductId).val();
				var doorHingeId = $("#doorHinge"+featuredProductId).val();
				var interiorConfigId = $("#interiorConfig"+featuredProductId).val();
				SkuFinder.lookupImageForSku(featuredProductId, finishId, trimOptionId, '', '', gasTypeId, burnerConfigId, doorStyleId, doorHingeId, interiorConfigId, '', '', function(imageProps) {
					if (imageProps[6]) {
						FeaturedProduct.loadFeaturedProductImage(featuredProductId, imageProps[0]+scene7Params+imageProps[6]);
					} else {
						FeaturedProduct.loadFeaturedProductImage(featuredProductId, imageProps[0]+scene7Params);
					}
				});
			},
			loadFeaturedProductImage: function(featuredProductId, imageURL) {
                var img = new Image();
                img.src = imageURL;

                var featuredProductImage = $("#image"+featuredProductId);
                featuredProductImage.attr("src", imageURL);
				$(featuredProductImage).removeClass("dimensions-non-scene7");
                PNG.fix();
			}
		};
	}();
	//----------------------------
	// CATEGORY PAGE END
	//----------------------------


	var PriceChanger = function() {
		return {
			changePrice: function(productId, sellable, skuId, flyout) {
				if (sellable == "true" && skuId) {
					$.get("/consumer/products/product_price_fragment.jsp", {id: productId, skuId: skuId}, function(stringFromServer) {
                        // If there is a flyout on the page somewhere its price also needs to be updated.
                        if (flyout) {
                            flyout.find('li.price,.priceupdate').html(stringFromServer);
                        }
					});
				}
			}
		};
	}();

	var TabToggler = function() {
		return {
			toggle: function(hash, defaultTab) {
                hash = hash.replace(/-tab$/, '');
                tab = hash;
                new Layer().remove();
				$('#tab-list li').removeClass('active');
				$('#tab-list-2 li').removeClass('active');
				$(".quaternary-nav-tab").removeClass("active");
				if (hash.indexOf("category-find-featured-products") == 0) {
					tab = "category-find-featured-products";
					quaternaryTab = hash.substr(32);
					if (quaternaryTab) {
						$("#"+quaternaryTab).addClass("active");
					}
				}
                $(['#', tab, '-tab'].pack()).addClass('active');
                if (!defaultTab) {
					window.location.hash = hash;
				}

				/*
					Some pages require a vertical divider between two columns within the page. This can only
					be done by using a background image. This will toggle the appropriate background image.
				*/
				if (hash == "product-accs") {
					Nav04BackgroundToggler("nav04-divider-product-accs");
				} else {
					Nav04BackgroundToggler("nav04-divider");
				}
				return false;
			}
		};
	}();

	Cart = function() {
		return {
		    // This function was changed to allow an optional "options" object that can change this function's behavior.
			// Default values are set if the optional parameter is not specified.
			add: function(form, options) {

				if (!options) {
					options = {
						// In the default implementation of this function, the desire is to have the page
						// scroll to the top of the screen. This is not always wanted. By default it is true.
						// If a caller does not want the page to scroll, then it should call `Cart.add(form, { scrollToTopAfterAdd: false });`
						scrollToTopAfterAdd: true,
					}
				}

				var action = form.attr('action');
				try {
					var data = {};
					// Add x/y hidden inputs for input type=image or else ATG won't accept the form
					form.find('input:image, input:submit').each(function(i) {

						var name = $(this).attr('name');
						var x = [name, '.x'].pack();
						var y = [name, '.y'].pack();
						$.each([x, y], function(k, v) {
							var input = $(['<input type="hidden" name="', v, '" value="1" />'].pack());
							form.append(input)
						});
					});

					form.find('input, textarea').each(function(i) {
						var k = $(this).attr('name');
						var v = $(this).attr('value');
						if (k) {
							data[k] = v;
						}

					});

					form.find('select').each(function(i) {
						var k = $(this).attr('name');
						var v = $(this).find('option:selected').val();
						if (k) {
							data[k] = v;
						}
					});


					var post = function(response) {
						var id = $('#product-id').val();
						$.get('/consumer/popups/flyouts/cart/recently_added.jsp', {id: id}, handleRecentlyAddedResponse);
					};

					// This will run after the data has been posted to the server.
					var handleRecentlyAddedResponse = function(response) {

						// If the caller wants the body to scroll, then it should scroll
					    if (!!options.scrollToTopAfterAdd) {
							// Scroll to the top of the page
							$.scrollTo('body:eq(0)', 500, { easing: 'linear'});
						}

						var $response = $(response);
						var cartQuantity = $response.find('#cart-quantity-update').text().trim();
						if (!!cartQuantity) {
							var quantityValue = parseInt(cartQuantity, 10);
							var labelText = quantityValue;
							if (!isNaN(quantityValue)) {
								if (quantityValue > 9) {
									labelText = '9+';
								}

								$('#navigation-top .cart-icon').each(function() {
									var el = $(this);
									el.removeClass('display-none');
									if (!el.hasClass('has-quantity')) {
										el.addClass('has-quantity');
									}
									el.find('.current-quantity').each(function() {
										$(this).text(labelText);
									});
								});
								$('#mobile-cart .cart-icon').each(function() {
									var el = $(this);
									el.removeClass('display-none');
									if (!el.hasClass('has-quantity')) {
										el.addClass('has-quantity');
									}
									el.find('.current-quantity').each(function() {
										$(this).text(labelText);
									});
								});
							}
						}



						// The following commented out material appears not to be relevant anymore.
						// TODO: Validate that this can be removed.
						/*
						// Make the cart icon turn blue.
						//$('#global_cart_opener').css('background-image', 'url(/consumer/images/header/cart-blue.gif)')
						// Hide all other popups.
						$('#nav-utility-wrapper').find('.popped').fadeOut('fast');
						// Build the popup and position it correctly.
						var popup = $(response);
                        $('#cart_dropdown_wrapper').append(popup);
                        var updatedQuantity = $.trim(popup.find('#cart-quantity-update').text());

						popup.css('top', $('#header-nav-wrapper').height());

						// Show the popup and update the quantity displayed on the page.
						popup.fadeIn('fast', function() {
							$(this).addClass('popped');
							$(this).find('.closer').click(function() {
								popup.fadeOut('fast');
							});
							IEOnly.zIndex($(this), 2000000);
							console.log('updatedQuantity:', updatedQuantity);
							$('.current-cart-quantity').text(updatedQuantity);
							$('#global_cart_popup').empty().append(popup.children().clone(true));
                            setTimeout(function() {
                                popup.find('#cart-flyout-other-items').slideDown("fast");
                                setTimeout(function() {
                                    popup.find('#cart-actions').slideDown();
                                }, 500);
                            }, 500);
						});


						// Remove the popup
						var timeout = setTimeout(function() {
							popup.fadeOut('slow', function() {
								//$('#global_cart_opener').css('background-image', 'url(/consumer/images/header/cart-white-transparent.png)')
								popup.remove();
							});
						}, 20000);

						// Halt the scheduled removal of the popup and remove it when the mouse leaves.
						popup.bind('mouseenter', function() {
							clearTimeout(timeout);
							$(this).bind('mouseleave', function() {
								return;
								$(this).fadeOut('fast', function() {
									//$('#global_cart_opener').css('background-image', 'url(/consumer/images/header/cart-white-transparent.png)');
									popup.remove();
								});
							});
						});
						 */
						// End irrelevant code. TODO: Remove this once it's verified.
					};

					// Submit the form in the background.
					$.post(action, data, post);
				} catch (e) {
					Log.error(e);
				}
				// Do not let the form submit on its own.
				return false;
			}
		};
	}();

	var Pane = function() {
		return {
			// Find all the "buy-online" links and attach clicks to them
			// also finds any add to cart forms on the page
			buy_online: function(pane) {

			    pane.on('click', '.add-to-cart :submit', function() {
					$(this).preventDefault();
					var form = $(this).parent('form:first');
					console.log('form: ', form);
                    try {
                        Cart.add($(form));
                        new Layer().fadeOut();
                        return false;
                    } catch(ex) {
                        alert(ex);
                    }
                    return false;
                });
                pane.on('click', 'a.buy-online',
					function(e) {
						var link = $(this);
						var id = $(this).ident().split(':')[1];
						AddToCartFormPicker.chooseAddToCartForm(id,
							function(form) {
								var url = '/consumer/products/ajax/add_to_cart.jsp';
								if (form == 'size') {
									url = '/consumer/products/ajax/add_to_cart_size.jsp';
								} else if (form == 'color') {
									url = '/consumer/products/ajax/add_to_cart_color.jsp';
								} else if (form == 'sizeColor') {
									url = '/consumer/products/ajax/add_to_cart_size_color.jsp';
								} else if (form == 'gasType') {
									url = '/consumer/products/ajax/add_to_cart_gas_type.jsp';
								} else if (form == 'trim') {
									url = '/consumer/products/ajax/add_to_cart_trim.jsp';
								}
								$.get({
									url: url,
									data: {id: id},
                                    dataType: 'html',
									success: function(data) {
										var modalBgHeight = document.body.offsetHeight + 'px';
										var modalBgWidth = document.body.offsetWidth + 'px';
										var html = $(data);
										var layer = new Layer(link);
										layer.addClass('ui-dialog buy-online-flyout')
										layer.addContent(html);
										layer.addCloseButton();
										// layer.moveUpHalfway();
										var elem = layer.getNode();
										// $(elem).append();
										$('body').css('overflow', 'hidden');
										$(elem).after('<div class="ui-widget-overlay ui-front" style="width: ' + modalBgWidth + '; height: ' + modalBgHeight + ';"></div>');
										// these scene 7 parameters come from /consumer/products/ajax/add_to_cart*.jsp files
										// make sure they match
										var buyOnlinePopupScene7Params = "?fmt=jpeg&wid=170&hei=130&resmode=sharp2&op_usm=1,1,10,0";
										// $(window).resize(function(){

										// 	console.log('resizing 1');
										// 	$('#EC2').css({
										// 		position:'absolute',
										// 		left: ($(window).width() - $('#EC2').outerWidth())/2,
										// 		top: ($(window).height() - $('#EC2').outerHeight())/2
										// 	});

										// });


										var vh = $(window).height();
										console.log('vh = ', $(window).height());
										var winScrollY = window.scrollY;
										console.log('window.scrollY: ', window.scrollY);
										var modalHeight = $('#EC2').height();
										console.log('#EC2 height: ', $('#EC2').height());
										var modalMinWin = vh - modalHeight;
										console.log(' modalMinWin: ', modalMinWin);
										// var modalTop = winScrollY + modalMinWin;
										var modalTop = winScrollY + (vh / 2) - (modalHeight / 2);
										console.log('modalTop: ', modalTop);
										$('.overlay-wrapper').css('height', vh).css('top', winScrollY);
										// $('#EC2').css('top', modalTop + 'px');


										$(".product-size-selector").change(function () {
											var size = $.trim($(".product-size-selector").children(":selected").html());
											var color = $.trim($(".product-color-selector").children(":selected").html());
											SkuFinder.lookupImageForSku(id, '', '', '', '', '', '', '', '', '', size, color, function (result) {

												PriceChanger.changePrice(id, result[2], result[3], layer.getNode());

												if (result[0]) {
													$(".buy-online-popup-image").attr("src", result[0] + buyOnlinePopupScene7Params);
													$(".buy-online-popup-image").attr("alt", result[1]);
												}

												if (result[3]) {
													$(".buy-online-link").each(function () {
														var qsp = new QueryStringParser();
														$(this).attr("href", qsp.set($(this).attr("href"), "skuId", result[3]));
													});
												}

												if (result[4]) {
													$(".product-size-selector").find("option:selected").removeAttr("selected");
													$(".product-size-selector").find("option:[value=" + result[4] + "]").attr("selected", "selected");
												}
											});
										});
										$(".product-color-selector").change(function () {
											var size = $.trim($(".product-size-selector").children(":selected").html());
											var color = $.trim($(".product-color-selector").children(":selected").html());
											SkuFinder.lookupImageForSku(id, '', '', '', '', '', '', '', '', '', size, color, function (result) {
												PriceChanger.changePrice(id, result[2], result[3], layer.getNode());

												if (result[6]) {
													if (result[0]) {
														$(".buy-online-popup-image").attr("src", result[0] + buyOnlinePopupScene7Params + result[6]);
														$(".buy-online-popup-image").attr("alt", result[1]);
													}
												} else if (result[0]) {
													$(".buy-online-popup-image").attr("src", result[0] + buyOnlinePopupScene7Params);
													$(".buy-online-popup-image").attr("alt", result[1]);
												}

												if (result[3]) {
													$(".buy-online-link").each(function () {
														var qsp = new QueryStringParser();
														$(this).attr("href", qsp.set($(this).attr("href"), "skuId", result[3]));
													});
												}

												if (result[4]) {
													$(".product-size-selector").find("option:selected").removeAttr("selected");
													$(".product-size-selector").find("option:[value=" + result[4] + "]").attr("selected", "selected");
												}
											});
										});
										$(".product-fuel-selector").change(function () {
											var fuel = $.trim($(this).children(":selected").attr("id"));
											SkuFinder.lookupImageForSku(id, '', '', '', '', fuel, '', '', '', '', '', '', function (result) {
												PriceChanger.changePrice(id, result[2], result[3], layer.getNode());
												if (result[0]) {
													$(".buy-online-popup-image").attr("src", result[0] + buyOnlinePopupScene7Params);
													$(".buy-online-popup-image").attr("alt", result[1]);
												}

												if (result[3]) {
													$(".buy-online-link").each(function () {
														var qsp = new QueryStringParser();
														$(this).attr("href", qsp.set($(this).attr("href"), "skuId", result[3]));
													});
												}

												if (result[4]) {
													$(".product-trim-selector").find("option:selected").removeAttr("selected");
													$(".product-trim-selector").find("option:[value=" + result[4] + "]").attr("selected", "selected");
												}
											});
										});
										$(".product-trim-selector").change(function () {
											var trimOption = $.trim($(this).children(":selected").attr("id"));
											SkuFinder.lookupImageForSku(id, '', trimOption, '', '', '', '', '', '', '', '', '', function (result) {
												PriceChanger.changePrice(id, result[2], result[3], layer.getNode());
												if (result[0]) {
													$(".buy-online-popup-image").attr("src", result[0] + buyOnlinePopupScene7Params);
													$(".buy-online-popup-image").attr("alt", result[1]);
												}

												if (result[3]) {
													$(".buy-online-link").each(function () {
														var qsp = new QueryStringParser();
														$(this).attr("href", qsp.set($(this).attr("href"), "skuId", result[3]));
													});
												}

												if (result[4]) {
													$(".product-trim-selector").find("option:selected").removeAttr("selected");
													$(".product-trim-selector").find("option:[value=" + result[4] + "]").attr("selected", "selected");
												}
											});
										});

										// VIKRNG-2974 The quantity value appears to always be sent as the initial value of the input, which is "1".
										// This listener will update the value to whatever was typed into it.
										$('#ajax-add-to-cart input').keyup(function(e) {
										    var input = $(this)[0];
										    input.setAttribute('value', e.target.value);
										});

										$('#ajax-add-to-cart .submit').click(
											function (e) {
												var $this = $(e.target);
												var form = $(this).parent('form:first');
												// console.log(form);
												try {
													form.submit(
														function (event) {
															console.log('inside form submit');
															event.preventDefault();
															Cart.add($(this));
															console.log('this is ', this);
															new Layer().fadeOut();
															$('body').css('overflow', 'visible');
															$('.ui-widget-overlay, .overlay-wrapper').fadeOut().remove();
															return;
														}
													);
												} catch (ex) {
													alert(ex);
												}
												return;
											}
										);
									}
								});
                                /*
								$.get(url, {id: id},
									function(data) {
										var modalBgHeight = document.body.offsetHeight + 'px';
                                        var modalBgWidth = document.body.offsetWidth + 'px';  
										var html = $(data);
										var layer = new Layer(link);
	    	    		                layer.addClass('ui-dialog buy-online-flyout')
	        	        		        layer.addContent(html);
			            	            layer.addCloseButton();
										// layer.moveUpHalfway();
										var elem = layer.getNode();
										// $(elem).append();
										$('body').css('overflow','hidden');
										$(elem).after('<div class="ui-widget-overlay ui-front" style="width: ' + modalBgWidth + '; height: ' + modalBgHeight + ';"></div>');
		        		                // these scene 7 parameters come from /consumer/products/ajax/add_to_cart*.jsp files
		                		        // make sure they match
			    	                    var buyOnlinePopupScene7Params = "?fmt=jpeg&wid=170&hei=130&resmode=sharp2&op_usm=1,1,10,0";
										// $(window).resize(function(){

										// 	console.log('resizing 1');
										// 	$('#EC2').css({
										// 		position:'absolute',
										// 		left: ($(window).width() - $('#EC2').outerWidth())/2,
										// 		top: ($(window).height() - $('#EC2').outerHeight())/2
										// 	});
										
										// });

										
										var vh = $(window).height();
										console.log('vh = ', $(window).height());
										var winScrollY = window.scrollY;
										console.log('window.scrollY: ', window.scrollY);
										var modalHeight = $('#EC2').height();
										console.log('#EC2 height: ', $('#EC2').height());
										var modalMinWin = vh -  modalHeight;
										console.log(' modalMinWin: ',  modalMinWin);
										// var modalTop = winScrollY + modalMinWin;
										var modalTop = winScrollY + (vh/2) - (modalHeight/2);
										console.log('modalTop: ', modalTop);
										$('.overlay-wrapper').css('height', vh).css('top', winScrollY);
										// $('#EC2').css('top', modalTop + 'px');
										

	                        $(".product-size-selector").change(function() {
	                        	var size = $.trim($(".product-size-selector").children(":selected").html());
	                        	var color = $.trim($(".product-color-selector").children(":selected").html());
	                        	SkuFinder.lookupImageForSku(id, '', '', '', '', '', '', '', '', '', size, color, function(result) {

                        			PriceChanger.changePrice(id, result[2], result[3], layer.getNode());

                        			if (result[0]) {
                        				$(".buy-online-popup-image").attr("src", result[0]+buyOnlinePopupScene7Params);
                        				$(".buy-online-popup-image").attr("alt", result[1]);
                        			}

                        			if (result[3]) {
                        				$(".buy-online-link").each(function() {
                        					var qsp = new QueryStringParser();
                        					$(this).attr("href", qsp.set($(this).attr("href"), "skuId", result[3]));
                        				});
                        			}

                        			if (result[4]) {
                						$(".product-size-selector").find("option:selected").removeAttr("selected");
                						$(".product-size-selector").find("option:[value="+result[4]+"]").attr("selected", "selected");
                					}
	                        	});
	                        });
	                        $(".product-color-selector").change(function() {
	                        	var size = $.trim($(".product-size-selector").children(":selected").html());
	                        	var color = $.trim($(".product-color-selector").children(":selected").html());
	                        	SkuFinder.lookupImageForSku(id, '', '', '', '', '', '', '', '', '', size, color, function(result) {
                        			PriceChanger.changePrice(id, result[2], result[3], layer.getNode());

                        			if (result[6]) {
	                        			if (result[0]) {
	                        				$(".buy-online-popup-image").attr("src", result[0]+buyOnlinePopupScene7Params+result[6]);
	                        				$(".buy-online-popup-image").attr("alt", result[1]);
	                        			}
                        			} else if (result[0]) {
                        				$(".buy-online-popup-image").attr("src", result[0]+buyOnlinePopupScene7Params);
                        				$(".buy-online-popup-image").attr("alt", result[1]);
                        			}

                        			if (result[3]) {
                        				$(".buy-online-link").each(function() {
                        					var qsp = new QueryStringParser();
                        					$(this).attr("href", qsp.set($(this).attr("href"), "skuId", result[3]));
                        				});
                        			}

                        			if (result[4]) {
                						$(".product-size-selector").find("option:selected").removeAttr("selected");
                						$(".product-size-selector").find("option:[value="+result[4]+"]").attr("selected", "selected");
                					}
	                        	});
	                        });
	                        $(".product-fuel-selector").change(function() {
	                        	var fuel = $.trim($(this).children(":selected").attr("id"));
	                        	SkuFinder.lookupImageForSku(id, '', '', '', '', fuel, '', '', '', '', '', '', function(result) {
                        			PriceChanger.changePrice(id, result[2], result[3], layer.getNode());
                        			if (result[0]) {
                        				$(".buy-online-popup-image").attr("src", result[0]+buyOnlinePopupScene7Params);
                        				$(".buy-online-popup-image").attr("alt", result[1]);
                        			}

                        			if (result[3]) {
                        				$(".buy-online-link").each(function() {
                        					var qsp = new QueryStringParser();
                        					$(this).attr("href", qsp.set($(this).attr("href"), "skuId", result[3]));
                        				});
                        			}

                        			if (result[4]) {
                						$(".product-trim-selector").find("option:selected").removeAttr("selected");
                						$(".product-trim-selector").find("option:[value="+result[4]+"]").attr("selected", "selected");
                					}
	                        	});
	                        });
	                        $(".product-trim-selector").change(function() {
	                        	var trimOption = $.trim($(this).children(":selected").attr("id"));
	                        	SkuFinder.lookupImageForSku(id, '', trimOption, '', '', '', '', '', '', '', '', '', function(result) {
                        			PriceChanger.changePrice(id, result[2], result[3], layer.getNode());
                        			if (result[0]) {
                        				$(".buy-online-popup-image").attr("src", result[0]+buyOnlinePopupScene7Params);
                        				$(".buy-online-popup-image").attr("alt", result[1]);
                        			}

                        			if (result[3]) {
                        				$(".buy-online-link").each(function() {
                        					var qsp = new QueryStringParser();
                        					$(this).attr("href", qsp.set($(this).attr("href"), "skuId", result[3]));
                        				});
                        			}

                        			if (result[4]) {
                						$(".product-trim-selector").find("option:selected").removeAttr("selected");
                						$(".product-trim-selector").find("option:[value="+result[4]+"]").attr("selected", "selected");
                					}
	                        	});
	                        });

							$('#ajax-add-to-cart .submit').click(
								function(e) {
									var $this = $(e.target);
									// var viewportOffset = $this.getBoundingClientRect();
									// console.log('viewportOffset: ', viewportOffset);
									// these are relative to the viewport
// 									var top = viewportOffset.top;
// 									var left = viewportOffset.left;
// console.log('viewportOffset.top: ', viewportOffset.top);
// console.log('viewportOffset.left: ', viewportOffset.left);

									// e.preventDefault();
									// console.log(e);
									var form = $(this).parent('form:first');
									// console.log(form);
									try {
										form.submit(
											function(event) {
												console.log('inside form submit');
												event.preventDefault();
												Cart.add($(this));
												console.log('this is ', this);
												new Layer().fadeOut();
												$('body').css('overflow','visible');
												$('.ui-widget-overlay, .overlay-wrapper').fadeOut().remove();
												return;
											}
										);
									} catch(ex) {
										alert(ex);
									}
									return;
								}
							);
						});

                                 */
					});


					return false;
				});

			}
		};
	}();

	var activateTab = function(activeTab,loadedTabs) {
		var tab = activeTab.attr('href').split('#')[1];
		var catId = null;
		var file = null;
		var quaternaryTab = null;
		overviewTabActivated = false;
		if(tab.indexOf("subcategory-child-cat") == 0)
		{
			// A category tab has been selected. Load its graphicHeader if it exists.
			catId = tab.split('-')[3];
			file = tab.substring(0,21).replace(/-/g, '_');

			// add a jsp page that renders the header image snippet.
			// load that content via ajax request
			// IF it is not null replace the div #media-container with this
			// LOKVIK-4728
			imgUrl = "/consumer/products/tabs/subcategory_graphic_header.jsp";

			$.get(imgUrl, {mainCategoryId: productId, subCategoryId: catId} , function(data) {
				if( data.trim().length > 10 ) // Do nothing if there's no content
				{
					$("#media-container").html(data);
				}
			});
		}
		else if (tab.indexOf("category-find-featured-products") == 0)
		{
			quaternaryTab = tab.replace(/-tab$/,'').substr(32);
			tab = "category-find-featured-products";
			file = tab.replace(/-/g, '_');

			// Load category header data when switching from Series to category
			imgUrl = "/consumer/products/tabs/subcategory_graphic_header.jsp";
			$.get(imgUrl, {mainCategoryId: productId, subCategoryId: catId} , function(data) {
				if( data.trim().length > 10 ) // Do nothing if there's no content
				{
					$("#media-container").html(data);
				}
			});
		}
		else
		{
			file = tab.replace(/-/g, '_');

			// Load category header data when switching from Series to category
			imgUrl = "/consumer/products/tabs/subcategory_graphic_header.jsp";
			$.get(imgUrl, {mainCategoryId: productId, subCategoryId: catId} , function(data) {
				if( data.trim().length > 10 ) // Do nothing if there's no content
				{
					$("#media-container").html(data);
				}
			});
		}
		$('#tabbed-content .tabbed-content-item').hide();

		if (loadedTabs[tab]) {
			$(['#', tab, '-tab-content'].pack()).show();
			if (file == 'product_overview') {
				//this allows a Firefox flash reload when 'callInitialExternalImage' is called
				overviewTabActivated = true;
				// if (!$.browser.msie) {
				// 	$("#sku-name-div").html("");
				// }
    		}
            /*LOKVIK2084(); ... replaced with mozillaFlashFix using the overviewTabActivated bool*/
		} else {
			var url = ['/consumer/products/tabs/', file, '_tab.jsp'].join('');
            var pane = $(['#', tab, '-tab-content'].pack());
            pane.show();

            var params = {id: productId, subcat: catId};
            var urlQsp = new QueryStringParser();
    		var quoteItemIdVal = urlQsp.get('quoteItemId');
    		var expandOptionVal = urlQsp.get('expand');
    		if (quoteItemIdVal && quoteItemIdVal.length > 0) {
    			params.quoteItemId = quoteItemIdVal;
    		}
    		if (expandOptionVal && expandOptionVal.length > 0) {
    			params.expand = expandOptionVal;
    		}

			$.get(url, params, function(data) {
                pane.removeClass("loading");
                pane.html(data).show();
				Pane.buy_online(pane);
				loadedTabs[tab] = tab;
				ExclusiveLinks.scan();
	            ProductFinder.find({openRight: false});
	        	FilteredSearch.search();
	        	//ContentExpander.scan();
	        	ProductConfigurator.scan();
	        	if ($('.make-default-selection').length > 0 && $('.make-default-selection').val() == 'true') {
	    			ProductConfigurator.makeDefaultSelections();
	        	}
	        	//FeaturedProduct.scan();
	        	QuaternaryNav.load(quaternaryTab);
                // Paginator.paginate($('#filtered-product-list'));
                // Paginator.scroll($('#filtered-search-results'));
                FilteredSearchFormatter.add_sliders();
                ExclusiveFinish.mouseovers();
                //SubCategoryImageNav.scan();
                ModifyHtmlText('div.specifications-and-documentation a', 'C4 Cookbook', 'Cookbook');
                /*LOKVIK2084(); ... replaced with mozillaFlashFix using the overviewTabActivated bool*/
			});
		}
		TabToggler.toggle(tab, false);
		return false;
	};

    var LOKVIK2084 = function() {
        if ($.browser.mozilla) {
            var cookie = new Cookie();
            var qsp = new QueryStringParser();
            var productId = qsp.get("id"); // This is the id of the product on the current page
            var cookieValue = cookie.get("lastSwatchId"); // This looks like "productId-123456" where 123456 is the numeric id (argh) of the last-clicked color option.
            if (cookieValue) {
                // Check to see if the product id stored in the cookie is the same as the id param in the url.
                var chunks = cookieValue.split("-");
                var storedProductId = chunks[0];
                var storedSwatchId = chunks[1];
                if (storedProductId) {
                    if (productId !== storedProductId) {
                        cookie.expire("lastSwatchId");
                        return false;
                    }
                }
                var li = $(['#', storedSwatchId].pack());
                if (li.length > 0) {
                    ProductConfigurator.selectedFinish(li.ident());
                }
            }
            $('ul.swatch li').click(function() {
                var id = [productId, $(this).ident()].join('-');
                cookie.set("lastSwatchId", id);
            });
        }
    };

	var TabLoader = function() {

		if ((window.rwd === true)) {
			return false;
		}

		var qsp = new QueryStringParser();
		productId = qsp.get('id');
		if (!productId) {
			productId = qsp.get('productId');
		}
		if (!productId) {
			return false;
		}
        if ($('#tab-list').length < 1) {
            return false;
        }

        // Add "loading" images to each .tabbed-content-item
        // It needs a special-looking name because IE6 can't parse multiple class names in CSS
        $('.tabbed-content-item').addClass('loading');


        // Initial page load:

		var loadedTabs = {}; // Stores the tabbed content items that have already been loaded for faster retrieval later

		// Find the id of the tab to show in the window location's hash. For example, if the current URL
		// is http://www.site.com/place.jsp?id=1234#more-info, then div#more-info should be loaded and shown.
		var hash = window.location.hash;
		var tab = null;
		var quaternaryTab = null;
		var url = null;
		var file = null;
		var catId = null; //for use with the subategory pages to handle further categories (i.e. classic & custom)
        var defaultTab = $('#tab-list').find('.default-tab:first').ident();
        var useDefaultTab = false;
		//var defaultTab = "overview"; // The tabbed content item to show if there is no hash present
		if (hash) {
			tab = hash.split('#')[1];
		} else {
			useDefaultTab = true;
			tab = defaultTab;
		}

		if(tab.indexOf("subcategory-child-cat") == 0)
		{
			catId = tab.split('-')[3];
			file = tab.substring(0,21).replace(/-tab$/, '').replace(/-/g, '_');   // Files on the server are separated with underscores, while selector names are separated with hyphens

			imgUrl = "/consumer/products/tabs/subcategory_graphic_header.jsp";

			$.get(imgUrl, {mainCategoryId: productId, subCategoryId: catId} , function(data) {
				$("#media-container").html(data);
			});

		}
		else if (tab.indexOf("category-find-featured-products") == 0)
		{
			quaternaryTab = tab.replace(/-tab$/,'').substr(32);
			tab = "category-find-featured-products";
			file = tab.replace(/-/g, '_');
		}
		else
		{
        	file = tab.replace(/-tab$/, '').replace(/-/g, '_');   // Files on the server are separated with underscores, while selector names are separated with hyphens
		}

		$('#tabbed-content .tabbed-content-item').hide();
		$('#product-detail #tabbed-content #product-overview-tab-content').show();

		url = ['/consumer/products/tabs/', file, '_tab.jsp'].join('');
        tab = tab.replace(/-tab$/, '');
		var pane = $(['#', tab, '-tab-content'].pack());
		//see if there is an existing skuId in the current url that can help narrow this get request
		var urlQsp = new QueryStringParser();
		var skuIdVal = urlQsp.get('skuId');
		var quoteItemIdVal = urlQsp.get('quoteItemId');
 		var expandOptionVal = urlQsp.get('expand');

		var params = {id: productId, subcat: catId};
        //"active-category-name", "active-category-display-name", and "active-category-id"
        //are all populated from the nav-secondary-products.jsp page, showing the current/active category selected.
        //Passing this info on in the request gives more context to the request so things like product comparisons
        //can have required category info to mark compare checkboxes, etc
        var activeCategoryName = $('.active-category-name').val();
        var activeCategoryDisplayName = $('.active-category-display-name').val();
        var activeCatId = $('.active-category-id').val();

        activeCategoryName = (activeCategoryDisplayName != null) ? activeCategoryDisplayName : activeCategoryName;

        var singularActiveCategoryName = activeCategoryName;
        if (activeCategoryName != null && activeCategoryName.length > 0 && activeCategoryName.substring((activeCategoryName.length-1)) == 's') {
            singularActiveCategoryName = activeCategoryName.substring(0, activeCategoryName.length-1);
        }
        if (activeCategoryName && activeCategoryName.length > 0) {
            params.activeCategoryName = activeCategoryName;
        }
        if (singularActiveCategoryName && singularActiveCategoryName.length > 0) {
            params.singularActiveCategoryName = singularActiveCategoryName;
        }
        if (activeCatId && activeCatId.length > 0) {
            params.activeCatId = activeCatId;
        }

        //IE will cache the page unless it thinks the url is new
        //...so, we add a parameter that always changes...time
        if ($.browser.msie) {
            params._ = new Date().getTime();
        }

 		if (skuIdVal && skuIdVal.length > 0) {
 			params.skuId = skuIdVal;
 		}
		if (quoteItemIdVal && quoteItemIdVal.length > 0) {
			params.quoteItemId = quoteItemIdVal;
		}
		if (expandOptionVal && expandOptionVal.length > 0) {
			params.expand = expandOptionVal;
		}
		$.get(url, params, function(data) {
            data = Ajax.parse(data);
            if (tab != 'product-overview') {
        		$('#product-detail #tabbed-content #product-overview-tab-content').hide();
            }
			// Hide all tabbed content items and load the requested one
            pane.removeClass("loading");
			pane.html(data).show();
			loadedTabs[tab] = tab;
			Pane.buy_online(pane);
		    // Update the visuals to indicate the current tab
			TabToggler.toggle(tab, useDefaultTab);
			ExclusiveLinks.scan();
            ProductFinder.find({openRight: false});
        	FilteredSearch.search();
            //ContentExpander.scan();
        	ProductConfigurator.scan();
        	if ($('.make-default-selection').length > 0 && $('.make-default-selection').val() == 'true') {
    			if(typeof ClickTaleExec=='function') {
    				ClickTaleExec("ProductConfigurator.makeDefaultSelections()");
    			}
        		ProductConfigurator.makeDefaultSelections();
        	}
        	//FeaturedProduct.scan();
			if(typeof ClickTaleExec=='function') {
				ClickTaleExec("QuaternaryNav.load(quaternaryTab)");
			}
        	QuaternaryNav.load(quaternaryTab);
            // Paginator.paginate($('#filtered-product-list'));
            // Paginator.scroll($('#filtered-search-results'));
            // FilteredSearchFormatter.add_sliders();
            PNG.fix();
            ExclusiveFinish.mouseovers();
            //SubCategoryImageNav.scan();
            ModifyHtmlText('div.specifications-and-documentation a', 'C4 Cookbook', 'Cookbook');
            /*LOKVIK2084(); ... replaced with mozillaFlashFix using the overviewTabActivated bool*/
            var activateRaqCheck = function() {
            	if (quoteItemIdVal && quoteItemIdVal.length > 0 && $('.request-a-quote-link').length > 0) {
            		$('.request-a-quote-link').click();
                }
            };
            /*if ($('.make-default-selection').length > 0 && $('.make-default-selection').val() == 'true') {
            	ProductConfigurator.lookupSku(activateRaqCheck);
            } else {
            	activateRaqCheck();
            }*/
			if(typeof ClickTaleExec=='function') {
				ClickTaleExec("activateRaqCheck()");
			}
            activateRaqCheck();
		});

		$('#tab-list a').click(function() {
			if(typeof ClickTaleExec=='function') {
				ClickTaleExec("activateTab($(this),loadedTabs)");
			}
			activateTab($(this),loadedTabs);
		});

		$('#tab-list-2 a').click(function() {
			if(typeof ClickTaleExec=='function') {
				ClickTaleExec("activateTab($(this),loadedTabs)");
			}
			activateTab($(this),loadedTabs);
		});

	};

    var Movie = function() {
        var locked = false;
        $('#media-previous, #media-next').click(function() {
            if (!locked) {
                locked = true;
            }
            var a = $(this);
            var effect = 'slide';
            var duration = 400;
            var li = $('#media-current-item');
            if (a.ident().match(/next$/)) {
                var next = li.next();
                if (next.length == 0) {
                    next = li.siblings(':first');
                }
                if (next && next.length > 0) {
                    li.hide(effect, {direction: 'left'}, duration, function() {
                        $(this).removeAttr('id');
                        next.attr('id', 'media-current-item').show(effect, {direction: 'right'}, duration, PNG.fix);
                    });
                }
            } else {
                var prev = li.prev();
                if (prev.length == 0) {
                    prev = li.siblings(':last');
                }
                if (prev && prev.length > 0) {
                    li.hide(effect, {direction: 'right'}, duration, function() {
                        $(this).removeAttr('id');
                        prev.attr('id', 'media-current-item').show(effect, {direction: 'left'}, duration, PNG.fix);
                    });
                }
            }
            return false;
        });

        if ($.browser.msie && $.browser.version < 7) {
            $('#media-previous img, #media-next img').each(function() {
                $(this).attr('src', $(this).attr('src').replace(/png$/, 'gif'));
            });
        }
    };

    //LOKVIK-1908
    function ModifyHtmlText(query, textToFind, modifiedText) {
      if ($(query).length > 0) {
        $(query).each(function(){
          if ($(this).text() == textToFind){
            $(this).text(modifiedText);
          }
        });
      }
    }
    /*var viewContainerParent = null;
    var flashObj = null;
    function fixMozillaFlash(productOverviewWasVisible, productOvervieNowHidden) {
		if (productOverviewWasVisible && productOvervieNowHidden) {
			//if the product overview went from visible to hidden, then remove the flash object
			if ($("object#viewer-container").length > 0) {
				viewContainerParent = $("object#viewer-container").parent();
				flashObj = $("object#viewer-container").remove();
			}
		} else if (!productOverviewWasVisible && !productOvervieNowHidden) {
			//if the product overview went from hidden to visible, then add the flash object back
			$(flashObj).prependTo($(viewContainerParent));
		}
    }*/

    var SideMenu = function() {
        return {
            // Make the <td> surrounding the links in the sidebar look clickable and
            // make it be clickable.
            allowClickingAnywhere: function() {
                $('#content-secondary .nav-secondary-products td').css({cursor: 'pointer'}).click(function() {
                    window.location = $(this).find('a:first').attr('href');
                }).hover(function() {
                    $(this).find('a:first').addClass('hover');
                }, function() {
                    $(this).find('a:first').removeClass('hover');
                });
            }
        };
    }();

    /**
     * called from callInitialExternalImage when the overview tab is activated
     * @return
     */
    var mozillaFlashFix = function() {
		if ($.browser.mozilla) {
        	ProductConfigurator.lookupSku();
	    }
	};

    var ComparisonTooltips = function() {
        var TooltipLayer = function(o, styleOverrides) {
            var node = o;
            var layerId = 'features-tooltip';
            $(['#', layerId].pack()).remove();
            var tip = $('<div id="' + layerId + '"><div id="features-tooltip-content"></div><div id="features-tooltip-bottom">&nbsp;</div></div>').hide();
            $('body').append(tip);
            if (styleOverrides) {
                if (styleOverrides.totalWidth) {
                    $('#' + layerId + " #features-tooltip-content").width(styleOverrides.totalWidth);
                    $('#' + layerId + " #features-tooltip-bottom").width(styleOverrides.totalWidth + 12);
                }
            }
            return {
                show: function(text) {
                    tip.css({
                        width: 'auto'
                    });

                    if (node.hasClass('html-tooltip')) {
                        tip.find('div:first').html(text);
                    } else {
                        tip.find('div:first').text(text);
                    }

                    var offset, top, left, w, h;
                    offset = node.offset();
                    top = offset.top;
                    left = offset.left;
                    setTimeout(function() {
                        tip.show();
                        tip.css({
                            top: top - tip.height() + 6,
                            left: (left + node.width() / 2) - (tip.outerWidth() / 2)
                        });
                        tip.css('z-index', 2001);
                        if ($.browser.msie && $.browser.version < 7) {
                            tip.find('div:last').remove();
                            tip.css({
                                top: node.offset().top - tip.height()
                            });
                        }
                    }, 250);

                },
                destroy: function() {
                    tip.remove();
                }
            };
        };
        return {
            mouseovers: function(items, styleOverrides) {
                var layer = null;
                if (items && items.length > 0) {
                    items.bind('mouseenter', function() {
                        var text = $(this).hasClass('html-tooltip') ? $(this).find('.html-tooltip-content').html() : $(this).find('span').text();
                        layer = styleOverrides ? new TooltipLayer($(this), styleOverrides) : new TooltipLayer($(this));
                        layer.show(text);
                        return false;
                    }).bind('mouseleave', function() {
                        if (layer) {
                            layer.destroy();
                        }
                    });
                }
            }
        };
    }();

	var SideBySide = function() {

		return {

			comparison_limit: 3,
			comparison_side_bar_q: 'form.comparison-sidebar',
			liveLoad: function() {

				//unbind any accidental bindings on the SideBySide checkboxes
				$('.comparison-checkbox-wrapper label').unbind();
				$('#subcategory-find-products-tab-content').on('change', '#filtered-product-list .comparison-checkbox-wrapper [type="checkbox"]',

					function(e){

						var $this = $(this).closest('.comparison-checkbox-wrapper');
						var checked = $('.comparison-checkbox-wrapper').find('[type="checkbox"]:checked');
						var checkedCount = $('.comparison-checkbox-wrapper [type="checkbox"]:checked').length;

						// console.log('pre checkedCount = ' + checkedCount);

						if ((!checked) && (checkedCount < SideBySide.comparison_limit)) {
							// $this.find(':checkbox').addClass('checked').attr("checked", "checked");
							SideBySide.rebuild_side_by_side();
						} else if (checked) {
							// $this.find('[type="checkbox"]').removeAttr("checked");
							SideBySide.rebuild_side_by_side();
						}

						checkedCount = $('.comparison-checkbox-wrapper [type="checkbox"]:checked').length;

						if (checkedCount > 0) {

							// console.log('first if checkedCount = ' + checkedCount);
							$('.comparison-sidebar .clear-all').show();

							if (checkedCount > 1) {
								$('.comparison-sidebar a.compare-selected').removeClass('disabled');
							} else if (checkedCount < 2) {
								$('.comparison-sidebar a.compare-selected').addClass('disabled');
							}

							if (checkedCount == SideBySide.comparison_limit) {
								$('.comparison-checkbox-wrapper [type="checkbox"]:not(:checked)').each(
									function(){
										$(this).closest('.comparison-checkbox-wrapper label').addClass('disabled');
										$(this).attr("disabled", "disabled");
										$(this).next().addClass("disabled");
									}
								);
								$('.comparison-checkbox-wrapper [type="checkbox"]:not(:checked)').addClass('disabled').attr("disabled", "disabled");
							} else {
								$('.comparison-checkbox-wrapper [type="checkbox"]:not(:checked)').each(
									function(){
										$(this).closest('.comparison-checkbox-wrapper label').removeClass('disabled');
										$(this).removeAttr("disabled", "disabled");
										$(this).next().removeClass("disabled");
									}
								);
								$('.comparison-checkbox-wrapper.disabled, .comparison-checkbox-wrapper [type="checkbox"].disabled').removeClass('disabled').removeAttr("disabled");
							}

						} else {
							$('.comparison-sidebar .clear-all').hide();
							$('.comparison-sidebar a.compare-selected').addClass('disabled');
							$('.comparison-checkbox-wrapper.disabled').removeClass('disabled');
						}

					}

				);

				$('.template--body').on('click', '.comparison-sidebar a.clear-all', function(e){
					e.preventDefault();
					SideBySide.clear_all_selected();
					SideBySide.clear_sidebar_content();
					// return false;
				});

				$('.template--body').on('click', '.comparison-sidebar a.compare-selected', function(e){
					e.preventDefault();
					// console.log('comparing!');
					//only trigger submit if NOT disabled
					if (!$(this).hasClass('disabled')) {
						SideBySide.compare_selected();
					}
					return false;
				});

				$('a.compare-this-product').live('click', function(e){
					e.preventDefault();
					SideBySide.compare_this_product();
					// return false;
				});

				$('.template--body').on('click', 'a.back-to-previous-screen', function(e){
					e.preventDefault();
					if ($('.from-page').length > 0 && $('.from-page').val().length > 0) {
						window.location.href = $('.from-page').val();
					} else {
						window.history.back();
					}
					return false;
				});

				$('.comparison-table a.remove-from-comparison').click(function(e){
					e.preventDefault();
					//set the form's hidden input field
					$('.product-comparison-wrapper .submit-product-id-to-remove').val($(this).closest('.product').find('.product-id-to-remove-from-comparison').val());
					$('.product-comparison-wrapper .submit-remove-product').click();
					return false;
				});

				$('.product-comparison-wrapper .link-print a').click(function(e){
					var printContents = document.getElementById('print-compare').outerHTML;
					var originalContents = document.body.innerHTML;

					console.log("printContents ::: " + printContents);

					document.body.innerHTML = printContents;

					window.print();

					document.body.innerHTML = originalContents;

					//window.print();
					return false;
				});

				ExclusiveFinish.mouseovers();
				var styleOverrides = {
					totalWidth: 160
				};
				ComparisonTooltips.mouseovers($('.comparison-table .feature-list .html-tooltip'));
				ComparisonTooltips.mouseovers($('.comparison-table .burner-config-list .html-tooltip'), styleOverrides);
			},
			clear_sidebar_content: function() {
				$(SideBySide.comparison_side_bar_q).find('.product-list').html('');
			},
			clear_all_selected: function() {
				$('#filtered-product-list .comparison-checkbox-wrapper [type="checkbox"]:checked').removeAttr("checked");
				$('.comparison-checkbox-wrapper, .comparison-checkbox-wrapper [type="checkbox"].disabled').removeClass('disabled').removeAttr("disabled");
				$('.comparison-sidebar a.compare-selected').addClass('disabled');
				$('.comparison-sidebar .clear-all').hide();
			},
			rebuild_side_by_side: function() {
				//1. clear existing list
				SideBySide.clear_sidebar_content();
				//2. rebuild list
				$('#filtered-product-list .comparison-checkbox-wrapper [type="checkbox"]:checked').each(
					function(){
						var anchorToCopy = $(this).closest('li').find('figcaption > a');
						var li = "<li><a href='" + anchorToCopy.attr('href') + "'>" + anchorToCopy.html() + "</a></li>";
						$(SideBySide.comparison_side_bar_q).find('.product-list').append(li);
					}
				);
			},
			compare_this_product: function(){
				var catId = $('.active-category-id').val();
				var productId = $('.productId').val();
				var productsToCompare = '{"catId":"' + catId + '", "from-page":"' + window.location.href + '", "products-to-compare":["' + productId + '"]}';
				$('.product-comparison .products-to-compare-json').val(productsToCompare);
				$('.product-comparison .submit-selected-comparisons').click();
			},
			compare_selected: function(){
				var catId = $('#currentCategoryId').data('activeCategoryId');
				var productsToCompare = '{"catId":"' + catId + '", "from-page":"' + window.location.href + '", "products-to-compare":[';
				$('#filtered-product-list .comparison-checkbox-wrapper [type="checkbox"]:checked').each(
					function(i){
						// console.log($(this).attr('id'));
						// console.log($(this).attr('class'));
						// console.log($(this).attr('name'));
						productsToCompare = i === 0 ? productsToCompare + '"' : productsToCompare + ',"';
						productsToCompare +=  $(this).closest('.comparison-checkbox-wrapper').find('.comparison-product-id').val() + '"';
					}
				);
				productsToCompare += ']}';
				// console.log(productsToCompare);
				$('.comparison-sidebar .products-to-compare-json').val(productsToCompare);
				$('.comparison-sidebar .submit-selected-comparisons').click();
			}
		};
	}();

	$(document).ready(function() {
		var functions = [
			TabLoader,
            Movie,
            SideMenu.allowClickingAnywhere,
            ProductConfigurator.liveLoad,
            ContentExpander.liveLoad,
            SubCategoryImageNav.liveLoad,
            FeaturedProduct.liveLoad,
            SideBySide.liveLoad
		];
		$.each(functions, function(i) {
			this();
		});
		
		$('body').on('change', 'form.add-to-cart #qty', function(e) {
		    var input = $(this)[0];
		    input.setAttribute('value', e.target.value);
		});
		
		ModifyHtmlText('div.specifications-and-documentation a', 'C4 Cookbook', 'Cookbook');

		// Add support for the Add to Cart button on the Purchase Accessories page
        $('#product-detail').on('click', 'form.add-to-cart input[type=submit]', function(e) {
			e.preventDefault();
            var form = $(this).closest('form');
            Cart.add(form, {
            	scrollToTopAfterAdd: false
			});
		});
	});


    /**
     * called from product page to get scene7 dhtml presets
     *
     */
	var zoomsteps=2;
	var zoomlimit=99;
	loadImgUrl = "/consumer/images/scene7-viewer/text_loader.png";
    var loadScene7Presets = function() {
		s7zoom.setBackground("0xffffff");
		s7zoom.setFadeTime(.3);
		s7zoom.setMaxZoom(zoomlimit);
		s7zoom.setZoomStep(zoomsteps);
		s7zoom.setFormat("jpeg");
		if (S7ConfigClient.isVersion == "2.7")
			//s7zoom.setCachingModel("");
		s7zoom.addInformation("To Zoom click on the image.\\nTo Pan, click and hold the mouse while dragging.");
		s7zoom.addToPage();
		var s7navigator = new SjZoomNav(null,null,null,'relative');
		s7navigator.setViewer(s7zoom.zviewer);
	    s7zoom.zviewer.setWaitIconURL(loadImgUrl);
		s7zoom.zviewer.setWaitIconTimer(.5,.1);
	};

//})(jQuery);
