/*
*  Javascript to add a tooltip object to the page
*		- Must have an element within the page as a template
*/
var TOOLTIP_TEMPLATE = "<div class='tooltip-template'><div class='tooltip-top'> </div><table cellspacing= '0' cellpadding='0' ><tr><td class='top-left'></td><td class='top'></td><td class='top-right'></td></tr><tr><td class='left'><div style='width:35px;'></div></td><td class='content'><p>content</p>                  </td><td class='right'><div style='width:35px;'></div></td></tr><tr><td class='bottom-left'></td><td class='bottom'></td><td class='bottom-right'></td></tr></table><div class='tooltip-bottom'></div></div>";
var Tooltip = function(el, options) {
	var $options = $.extend({
		template: null,
		html: null,
		eventless: false,
		showEffect: 'none',
		hideEffect: 'none',
		arrowPosition: 'bottom', //can be top, right, bottom, left
		width: 'auto',
		cls: 'tooltip',
		showCloseBtn: false
	}, options);
	$el = $(el);
	if ($options.eventless) {
		var $hiddenEl = $("<span class='hidden-tip-handler'></span>");
		$el.append($hiddenEl);
		$el = $hiddenEl;
	}
	var $template = $($options.template || TOOLTIP_TEMPLATE);
	$template.find("table").width($options.width);
	$template.find(".content").html($options.html);
	$template.find("td." + $options.arrowPosition).addClass($options.arrowPosition).append("<div class='arrow-" + $options.arrowPosition + "'></div>");
	//needed for
	var $tip = $el.simpletip($.extend($options, {
		content: $template.html(),
		onBeforeShow: function() {
			if ($.browser.msie && $.browser.version < 7) {
				$("select:not(#select-product-size,#select-upc)").css({ visibility: "hidden" }).hide();
			}
		},
		onBeforeHide: function() {
			if ($.browser.msie && $.browser.version < 7) {
				$("select:not(#select-product-size,#select-upc)").css({ visibility: "visible" }).show();
			}
		}
	}));
	
	if ($tip.length > 0) {
		var simpletip = $tip.eq(0).simpletip();
	}
	else {
		var simpletip = $tip;
//		alert("tip is null");
	}
	var $tooltip = $(simpletip.getTooltip());
	//add class and setup png fix
	$tooltip.addClass($options.cls).pngFix();
	if ($options.showCloseBtn) {
		var $closeBtn = $("<a class='close-btn'></a>");
		$closeBtn.pngFix();
		$closeBtn.click(function(ev) {
			simpletip.hide();
		});
		$tooltip.prepend($closeBtn);
	}
	$tip = $($tip);
	$tip.data("simpletip", simpletip);
	return $tip;
}

/*
*	  Javascript object for neckline functionality
*/
var NecklineThumbnail = function(el, thumbContainer) {
    var $thumb = $(el);
    var $parent = $thumb.parent();
    var title = $thumb.attr("target") || "";
    var $productImage = $("#product-details img.product-image");
    var $full = $(window["img_" + title.split(" ").join("").toLowerCase().replace(/[^a-zA-Z0-9\_\-]/i, "")]);

    var init = function() {
        bindEvents();
    }
    var bindEvents = function() {
        $thumb.hover(onMouseOver, onMouseOut);
    }

    var onMouseOver = function() {
        $("#ZoomIcon").hide();
        $parent.find("li.hovered").removeClass("hovered");
        thumbContainer.find("li.hover").removeClass("hover");

        if ($full) { $productImage.attr("src", $full.attr("src")); }
        $thumb.addClass("hovered");
    }
    var onMouseOut = function() { }

    init();
    return $thumb;
}
/*
*   Javascript object for image thumbnails
*/
var Thumbnail = function(el, necklineContainer, zoomImage, zoomOpac) {
    var $thumb = $(el);
    var $objParent = $thumb.parent();
    var title = $thumb.attr("index") || "";
    var $image = $thumb.find("img");
    var $productImage = $("#product-details img.product-image");

    var $text = $thumb.find("p");
    //take title and get preloaded image (img_main, img_...X...)
    var $full = $(window["img_" + title.split(" ").join("").toLowerCase().replace(/[^a-zA-Z0-9\_\-]/i, "")]);

    //Grabbing the full image zoom
    var strImageName = "img_" + $thumb.attr("imgvalue");
    var $zoom = $(window[strImageName]);

    //check if the image exists and grab the source
    var zoomSrc = $zoom.size() > 0 ? $zoom.attr("src") : "";
    var blnHasZoom = $thumb.attr("haszoom").toLowerCase() == "true" ? true : false;

    var init = function() {
        bindEvents();
    }
    //public methods				
    //private methods
    var bindEvents = function() {
        $thumb.hover(onMouseOver, onMouseOut);
    }
    //Event Handler
    var onMouseOver = function() {
        $objParent.find("li.hover").removeClass("hover");
        necklineContainer.find("li.hovered").removeClass("hovered");

        if ($full.size() > 0) {
            $productImage.attr("src", $full.attr("src"));
        }

        if (typeof zoomSrc != "undefined" && zoomSrc.length > 0) {
            zoomImage.attr("src", zoomSrc);
            zoomOpac.attr("src", $full.attr("src"));
        }

        if (title.toLowerCase() == "main" || blnHasZoom) {
            $("#ZoomIcon").fadeIn();
        } else {
            $("#ZoomIcon").fadeOut();
        }
        $thumb.addClass("hover");
        $text.css("visibility", "visible");
    }
    var onMouseOut = function() { }

    init();
    return $thumb;
}

/*
*  Javascript object for a swatch
*/
var Swatch = function(el, isCloseout, productImage, thumbContainer, neckLineContainer, $toolTip, StyleNo) {
	var $swatch = $(el);
	var $hoverOverlay = $swatch.find("img.swatch-hover-overlay");
	var $selectedOverlay = $swatch.find("img.swatch-selected-overlay");
	var color = $swatch.find("input.color").val();
	var $colorForm = $("input[name='color_" + StyleNo + "']");
	var $tooltipHtml = $swatch.siblings(".swatch-tooltip");
	var $tooltip;
	var $selects = $("#div-control-container select");
	var $altColorImage = $(window["img_" + color.toLowerCase().replace(/[^a-zA-Z0-9\_]/i, "")]);
	var _strLargeSwatch = "";
	var $imgCover = $swatch.find("img.img-swatch-cover");
	var $imgSwatch = $swatch.find("img.img-swatch:first");
	var $tdContent = $toolTip.find("td.content");
	var $select = $("select:not(#select-product-size,#select-upc)");
	var _blnSafari = $.browser.safari;
	var _blnIE6 = ($.browser.msie && $.browser.version.substring(0, 1) == "6");
	var $zoomIcon = $(productImage).parent().find("#ZoomIcon");

	var init = function() {
		bindEvents();
		//generateTooltip();
		//if value is set check selected swatch
		if (color == $colorForm.val()) {
			//select();
		}
	}

	//public methods				
	var select = function() {
		//if not already selected		
		if (!isSelected()) {
			$swatch.addClass("selected");
			$selectedOverlay.show();
			$hoverOverlay.hide();
			$swatch.parent().siblings().find("a").removeClass("selected").find("img.swatch-selected-overlay").hide();
			$colorForm.val(color);
		} else {//Remove if you don't want unselect functionality
			unselect();
		}
	}

	var unselect = function() {
		$swatch.removeClass("selected");
		$selectedOverlay.hide();
		$hoverOverlay.hide();
		$colorForm.val("");
	}

	//private methods
	var isSelected = function() {
		return $swatch.hasClass("selected");
	}
	var bindEvents = function() {
		var uagent = navigator.userAgent.toLowerCase();
		(function(a) { jQuery.browser.mobile = /android|avantgo|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(a) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i.test(a.substr(0, 4)) })(navigator.userAgent || navigator.vendor || window.opera)
		isMobile = jQuery.browser.mobile || uagent.search("ipad") > -1;
		if (!isMobile) {
			$swatch.hover(onMouseOver, onMouseOut);
		}
		$swatch.click(onClick);
		//$imgOverlay.hover(onCoverOver, onCoverOut);
	}

	var onCoverOver = function() {
		/*$swatch.trigger("mouseenter").css({zIndex: 102});
		$imgOverlay.css({zIndex: 103});*/
	}

	var onCoverOut = function() {
		/*$swatch.trigger("mouseleave").css({zIndex:1});
		$imgOverlay.css({zIndex:3});*/
	}

	//Event Handlers
	var onMouseOver = function() {
		if (!isSelected() && !isCloseout) { $hoverOverlay.show(); }

		var position = $swatch.position();
		var left = _blnSafari ? 116 : 121;

		if ($altColorImage.size() > 0) {
			if (typeof $altColorImage.attr("src") != "undefined") {
				$zoomIcon.hide();
				productImage.attr("src", $altColorImage.attr("src"));
				thumbContainer.find("li.hover").removeClass("hover");
				neckLineContainer.find("li.hovered").removeClass("hovered");
			}
		}

		$swatch.addClass("small-swatch-hover");

		if (_blnIE6) { $select.hide(); }

		//$tooltip.data("simpletip").show();
		$tdContent.html($tooltipHtml.html())
		$toolTip.css({ left: position.left - left, top: position.top + 20 }).show();
	}

	var onMouseOut = function() {
		//UnTip();
		if (!isSelected() && !isCloseout) {
			$hoverOverlay.hide();
		}

		$swatch.removeClass("small-swatch-hover");
		//$tooltip.data("simpletip").hide();
		if (_blnIE6) { $select.show(); }
		$toolTip.hide();
	}
	var onClick = function(ev) {
		ev.preventDefault();
		if (!isCloseout) {
			$toolTip.hide();
			//$tooltip.data("simpletip").hide();
			//select();			
		}
	}

	var removeEvents = function() {
		$swatch.unbind("mouseenter mouseleave").unbind("click");
		//$tooltip.remove();
	}

	var addSwatchCover = function() {
		//var position = $swatch.offset();
		var $toolTipImg = $tooltipHtml.find("img");

		if ($toolTipImg.length > 0) {
			_strLargeSwatch = $toolTipImg.attr("src");
			if (img_color_not_avail) {
				$toolTipImg.attr("src", img_color_not_avail.src);
			}
		}
		$swatch.unbind("select click");
		$imgSwatch.hide();
		$imgCover.show().animate({ opacity: 1 }, 800);
	}

	var removeSwatchCover = function() {
		var $toolTipImg = $tooltipHtml.find("img");

		if ($toolTipImg.length > 0 && _strLargeSwatch != "") { $toolTipImg.attr("src", _strLargeSwatch); }

		$swatch.bind("select", select).click(onClick);

		$imgCover
			.animate({ opacity: 0 }, 500, function() {
				$imgCover.hide();
				$imgSwatch.show();
			});
	}

	init();
	//bind events
	$swatch.bind("select", select);
	$swatch.bind("unselect", unselect);
	$swatch.data("color", color);
	$swatch.bind("addSwatchCover", addSwatchCover);
	$swatch.bind("removeSwatchCover", removeSwatchCover);
	return $swatch;
}
/* javascript object to handle product zoom */
var Zoomer = function(thumbContainer, necklineContainer) {
    var $image = $("img#MainImage");
    var imageWidth;
    var imageHeight;
    var imagePosition;
    var imageOffset;
    var currentX = 0;
    var currentY = 0;
    var minChangeRequirement = 3;
    var $zoomBox = $("#zoom4");
    var $zoomBoxImage = $("#zoom5");
    var $zoomArea = $("#zoom2");
    var $zoomAreaShadow = $("#zoom2a");
    var $zoomAreaImage = $("#zoom3");
    var $zoomIcon = $("#ZoomIcon");
    var $zoomOpac = $("#h2x");
    var $zoomImage = $("#h2");
    var $swatchList = $("#swatch-list");
    var zoomBoxWidth;
    var zoomBoxHeight;
    var zoomBoxOffset;
    var timeout;
    var blnOnImage = false;

    var boundaries;
    var settings = {
        startLeft: 305,
        startTop: 80,
        startWidth: 0,
        startHeight: 0,
        endLeft: 313,
        endTop: 60,
        endWidth: 400,
        endHeight: 265,
        interval: 200
    }

    //contstructor
    var init = function() {
        setupDimensions();
        setBoundaries();
        bindEvents();
    }
    //public methods
    var zoomIn = function() {
        if (blnOnImage) {
            var $li = thumbContainer.find("li.hover");

            if ($li.size() == 0 || ($li.size() == 1 && $li.attr("haszoom").toLowerCase() == "false")) {
                $li.removeClass("hover");
                thumbContainer.find("li:first").addClass("hover");
                $image.attr("src", img_1.src);
                $zoomOpac.attr("src", img_1.src);
                $zoomImage.attr("src", img_h2.src);
            }
            necklineContainer.find("li.hovered").removeClass("hovered");

            //set product image
            //$image.attr('src', img_main.src);			
            //set opacity
            if ($.browser.msie && $.browser.version < 7) {
                $image.addClass("faded").removeClass("unfaded");
                $("select").css("visibility", "hidden");
            } else {
                $image.fadeTo(settings.interval, .5);
            }
            $zoomIcon.hide(); //$zoomIcon.fadeOut();
            //zoom in	
            $zoomArea.css({
                visibility: "visible",
                display: "block",
                left: settings.startLeft,
                top: settings.startTop
            }).animate({
                left: settings.endLeft,
                top: settings.endTop,
                width: settings.endWidth,
                height: settings.endHeight
            }, settings.interval);
            //show shadow
            $zoomAreaShadow.css({
                width: 0,
                height: 0,
                left: settings.startLeft,
                top: settings.startTop,
                visibility: "visible",
                display: "block"
            }).animate({
                left: settings.endLeft + 5,
                top: settings.endTop + 5,
                width: settings.endWidth,
                height: settings.endHeight,
                opacity: .5
            }, settings.interval);
        }
    }
    var zoomOut = function() {
        //$image.attr('src', img_main.src);	
        //set opacity
        if ($.browser.msie && $.browser.version < 7) {
            $image.addClass("unfaded").removeClass("faded");
            $("select").css("visibility", "visible");
        } else {
            $image.fadeTo(settings.interval, 1);
        }
        //zoom out	
        $zoomIcon.fadeIn();
        $image.fadeTo(settings.interval, 1);
        $zoomArea.add($zoomAreaShadow).animate({
            left: settings.startLeft,
            top: settings.startTop,
            width: settings.startWidth,
            height: settings.startHeight
        }, settings.interval, function() {
            $(this).css({
                visibility: "hidden",
                display: "none"
            });
        });
    }

    var moveZoomBox = function(relX, relY) {
        if (Math.abs(relX - currentX) < minChangeRequirement && Math.abs(relY - currentY) < minChangeRequirement) {
            return;
        }
        //Set current values for x,y to check against minChangeRequirement
        currentX = relX;
        currentY = relY;
        var offset = {
            left: getLeftPosition(relX),
            top: getTopPosition(relY)
        }
        $zoomBox.css(offset);
        $zoomBoxImage.css({
            left: 0,
            top: 0
        });
        var zoomAreaOffset = {
            left: (offset.left - 10 - (zoomBoxWidth / 2)) * -3,
            top: (offset.top - 20 - (zoomBoxHeight / 2)) * -3
        }
        if (zoomAreaOffset.left >= 0) { zoomAreaOffset.left = 0; }
        if (zoomAreaOffset.left <= (settings.endWidth - imageWidth * 3)) {
            zoomAreaOffset.left = (settings.endWidth - imageWidth * 3);
        }
        if (zoomAreaOffset.top >= 0) { zoomAreaOffset.top = 0; }
        if (zoomAreaOffset.top <= (settings.endHeight - imageHeight * 3)) {
            zoomAreaOffset.top = (settings.endHeight - imageHeight * 3);
        }
        $zoomAreaImage.css(zoomAreaOffset);
        var zoomBoxImageOffset = {
            left: -1 * (offset.left - zoomBoxOffset.left),
            top: -1 * (offset.top - zoomBoxOffset.top)
        }
        $zoomBoxImage.css(zoomBoxImageOffset);
    }
    //private methods
    var setBoundaries = function() {
        //get image boundaries for product image
        boundaries = {
            top: imagePosition.top,
            left: imagePosition.left,
            bottom: imagePosition.top + imageHeight,
            right: imagePosition.left + imageWidth
        }
    }
    var setupDimensions = function() {
        var containerOffset = $("#body1").offset();
        imageHeight = $image.height();
        imageWidth = $image.width();
        imagePosition = $image.position();
        imageOffset = $image.offset();
        zoomAreaHeight = $zoomArea.height();
        zoomAreaWidth = $zoomArea.width();
        zoomBoxWidth = $zoomBox.width();
        zoomBoxHeight = $zoomBox.height();
        zoomBoxOffset = {
            left: imageOffset.left - containerOffset.left,
            top: imageOffset.top - containerOffset.top
        }
        $zoomBox.css(zoomBoxOffset);
    }
    //check boundaries of image and get left position
    var getLeftPosition = function(left) {
        var pos;
        if (left - (zoomBoxWidth / 2) < boundaries.left) {
            pos = boundaries.left + zoomBoxOffset.left;
        } else if (left + (zoomBoxWidth / 2) > boundaries.right) {
            pos = boundaries.right + zoomBoxOffset.left - zoomBoxWidth;
        } else {
            pos = left - (zoomBoxWidth / 2) + zoomBoxOffset.left;
        }
        return pos;
    }
    //check boundaries of image and get top position
    var getTopPosition = function(top) {
        var pos;
        if (top - (zoomBoxHeight / 2) < boundaries.top) {
            pos = boundaries.top + zoomBoxOffset.top;
        } else if (top + (zoomBoxHeight / 2) > boundaries.bottom) {
            pos = boundaries.bottom + zoomBoxOffset.top - zoomBoxHeight;
        } else {
            pos = top - (zoomBoxHeight / 2) + zoomBoxOffset.top;
        }
        return pos;
    }

    var bindEvents = function() {
        if ($zoomIcon.size() > 0) {
            $image.hover(onMouseOver, onMouseOut);
            $image.mousemove(onMouseMove);
            $zoomIcon.hover(function() {
                $(this).hide();
            }, function() { }).show();
        }
    }
    //event handlers
    var onMouseOver = function(ev) {
        $zoomBox.css({
            zIndex: 2, visibility: "visible", display: "block"
        }).css(zoomBoxOffset);
        blnOnImage = true;

        timeout = setTimeout(zoomIn, 250);
    }
    var onMouseOut = function(ev) {
        blnOnImage = false;
        zoomOut();
        clearTimeout(timeout);
    }

    var onMouseMove = function(ev) {
        var xPos = ev.pageX;
        var yPos = ev.pageY;
        var offset = $(this).offset();
        var relXPos = xPos - offset.left;
        var relYPos = yPos - offset.top;
        moveZoomBox(relXPos, relYPos);
    }
    init();
    return { zoomIn: zoomIn, zoomOut: zoomOut, moveZoomBox: moveZoomBox }
}

/* 
*	Javascript object for a product
*/
var Product = function(strStyleNumber, opts) {
	var $container = $("#product-details");
	var $swatchContainer = $container.find("ul#swatch-list_" + strStyleNumber);
	var $imageThumbContainer = $container.find("ul.product-image-thumbnails");
	var $videoThumbContainer = $container.find("ul.product-video-thumbnails");
	var $necklineThumbContainer = $container.find("#ulImageMap");
	var $productImage = $container.find("img.product-image");
	var $form = $container.find("form");
	var $zoomImage = $("#h2");
	var $zoomOpac = $("#h2x");
	var $ddlSize = $("#select-product-size_" + strStyleNumber);
	var $ddlUpc = $("#select-upc_" + strStyleNumber);
	var $selectedSwatch = $("#selected-swatch_" + strStyleNumber);
	var $checkoutTooltip;
	var zoomer;
	var $divLargeSwatch = $("#div-large-swatch");
	var $divMainImage = $("#MainImageDiv");
	var $aWheresSize = $("#a-wheres-size");
	var $tomimasTipLink = $("a#tomimas-tip-link");
	var $inputColor = $("input#color_" + strStyleNumber);
	//get whether product is closeout;
	var isCloseout = parseInt($("input[name='closeout_" + strStyleNumber + "']").val()) == -1;
	var swatches = [];
	var thumbs = [];
	var necklineThumbs = [];
	var Items = StyleItems[strStyleNumber]; //The available items for a particular Style Number
	var $hdnPrice = $("#hdnStylePrice_" + strStyleNumber);
	var _decOrigPrice = $hdnPrice.val();
	var _decPrice = _decOrigPrice;

	//Initialize product helper
	var init = function() {
		
		
	
		var _blnIE6 = ($.browser.msie && $.browser.version.substring(0, 1) == "6");
		//override form submission
		//$form.submit(onSubmit);
		//only setup swatch functionality if product is not a closeout
		generateSwatches(isCloseout);

		generateThumbnails();
		generateNecklineThumbnails();
		resizeMainImageHolder();
		generateDetailContainers();
		generateVideoContent();
		setStepSizeControlWidth();
		setupSizingChartLink();
		setUpiframeLinks();
		setupHighslideLinks();
		//setupAvailableSizes();

		_intDetailsHeight = $container.height();

		//wait for image to load
		setTimeout(resizeMainImageHolder, 500);

		//loadVideoPage();
		bindEvents();
		checkSizeSalePrices();
		if (isCloseout) { $("input[name='color_" + strStyleNumber + "']").remove(); }

		//set height of overview container
		$("div.product-overview-container").height($("div.product-image-container").height() - 16);
		setTimeout(function() {
			zoomer = new Zoomer($imageThumbContainer, $necklineThumbContainer);
		}, 500);

		//business rule
		var $arrLi = $swatchContainer.find('li');
		if ($arrLi.length == 1) { $arrLi.find('a').click(); }
		$.extend(options, opts);
	}

	var setUpiframeLinks = function() {
		$("iframe.iframe-prod-det").load(function() { $obj = $(this).contents(); $obj.find("a").attr("target", "_top"); });
	}

	//Validate current form
	var validateOrder = function() {
		var message = "";
		var errors = [];

		//add error - single word or phrase
		var addError = function(errMsg) {
			errors.push(errMsg);
			//format message
			message = "Please select a " + errors.join(", ");
			//replace last occurrence of , with " and"
			message = message.replace(/,(?![^,]+,)/i, " and");
		}
		var getMessage = function() {
			return message;
		}
		//validate size
		var $sizeForm = $form.find("select[name='size_" + strStyleNumber + "']");
		if ($sizeForm.size() > 0 && $sizeForm.val() == "") {
			addError("size");
			$sizeForm.parents(".product-checkout-step #step-1").removeClass("checked");
		} else {
			$sizeForm.parents(".product-checkout-step #step-1").addClass("checked");
		}

		//validate color
		var $colorForm = $form.find("input[name='color_" + strStyleNumber + "']");
		if ($colorForm.size() > 0 && $colorForm.val().length == 0) {
			addError("color");
			$colorForm.parents(".product-checkout-step #step-2").removeClass("checked");
		} else {
			$colorForm.parents(".product-checkout-step #step-2").addClass("checked");
		}
		//validate UPC
		var $upcForm = $form.find("select[name='UPC_" + strStyleNumber + "']");
		if ($upcForm.size() > 0 && $upcForm.val().length == 0) {
			addError("size");
			addError("color");
			$upcForm.parents(".product-checkout-step #step-1").removeClass("checked");
		} else {
			$upcForm.parents(".product-checkout-step #step-1").addClass("checked");
		}

		//validate quantity
		var $qtyForm = $form.find("select[name='qty']");
		if ($qtyForm.size() > 0 && $qtyForm.val() == "0") {
			addError("quantity");
			if ($(".number").size() == 3) {
				$qtyForm.parents(".product-checkout-step #step-2").removeClass("checked");
			}
			else {
				$qtyForm.parents(".product-checkout-step #step-3").removeClass("checked");
			}
		} else {
			if (message.length == 0) {
				$qtyForm.parents(".product-checkout-step #step 3").addClass("checked");
			}
		}

		return {
			valid: message.length == 0,
			getMessage: getMessage
		}
	}

	//Private Methods
	var loadVideoPage = function() {
		$videoThumbContainer.find("div#video-modal .video-container").load($videoThumbContainer.find("li > a").attr("href"));
	}
	//resize main image container (needed because image is position:absolute)
	var resizeMainImageHolder = function() {
		$("#MainImageDiv,#product-image-container").height($("#MainImageDiv img").height());
	}

	//Go through html and create swatch objects
	var generateSwatches = function(isCloseoutOrder) {
		$divLargeSwatch.pngFix();
		var count = $swatchContainer.find("li a").size();
		$swatchContainer.find("li a").each(function() {
			var swatch = new Swatch(this, isCloseoutOrder, $productImage, $imageThumbContainer, $necklineThumbContainer, $divLargeSwatch, strStyleNumber);
			if (!isCloseout && count > 1) {
				swatch.click(onSwatchClickNoSize);
			}
			$(swatch).hover(blurSizeDropdown, function() { });
			swatches.push(swatch);
		});
	}

	var blurSizeDropdown = function() { $ddlSize.blur(); $ddlUpc.blur(); }

	//go through html and create thumbnail objects
	var generateThumbnails = function() {
		$imageThumbContainer.find("li").each(function() {
			var thumb = new Thumbnail(this, $necklineThumbContainer, $zoomImage, $zoomOpac);
			thumbs.push(thumb);
		});
	}
	//go through html and create neckline thumbnail objects							
	var generateNecklineThumbnails = function() {


		$necklineThumbContainer.find("li").each(function() {
			var thumb = new NecklineThumbnail(this, $imageThumbContainer);
			necklineThumbs.push(thumb);
		});

	}
	//Bind all events on page
	var bindEvents = function() {
		$ddlSize.change(onProductSizeChange).change();
		$("select#select-product-quantity").change(onProductQuantityChange).focus(onProductQuantityFocus);
		$ddlUpc.change(onUPCChange).change();
		$("a#sizing-chart-link").click(onSizingChartClick);
		$("#a-thermo-guide").click(onThermoGuideClick);
		$aWheresSize.click(openWhereSize);
		$tomimasTipLink.click(openTomimasTip);
		if (swatches.length == 1) { swatches[0].click(onSwatchClick); }
		$divMainImage.hover(blurSizeDropdown, function() { });

		if ($ddlUpc.find("option").size() == 2 && isCloseout) {
			$ddlUpc.find("option").eq(1).attr("selected", "selected");
			$ddlUpc.change();
		}

		if ($ddlSize.find("option").size() == 2) { $ddlSize.find("option").eq(1).attr("selected", "selected"); $ddlSize.change(); }
	}

	/* setup content for highslide links */
	var setupHighslideLinks = function() {
		/*setup tomimas tip highslide*/
		if ($tomimasTipLink.size() > 0) {
			var url = $tomimasTipLink.attr("href");
			var containerHTML = [
                "<div id='highslide-html-tomimas-tip' class='highslide-html-content'>",
                    "<div class='clearfix hs-close-wrapper'><img src='images/close_icon.gif' width='21' height='21' border='0' onclick='javascript: return hs.close(this)' class='highslide-close-button' /></div>",
                    "<div class='hs-content'></div>",
                "</div>"
            ].join("");
			var $tomimasTipContainer = $(containerHTML);
			var $tomimasTipContent = $tomimasTipContainer.find(".hs-content");
			$tomimasTipContainer.appendTo("body");
			$tomimasTipContent.load(url, function() {
				$(this).find("button").click(function(ev) {
					ev.preventDefault();
					hs.close($tomimasTipContainer[0]);
				});
			});
		}
	}
	/*open highslide window for tomimas tip*/
	var openTomimasTip = function(ev) {
		if (ev) ev.preventDefault();
		hs.htmlExpand(this, { contentId: "highslide-html-tomimas-tip", objectWidth: 375, objectHeight: 500 });
	}


	var openWhereSize = function(evt) {
		evt.preventDefault();
		var href = $(this).attr("href");
		var $this = this;
		var $simItemTab = $("a:contains('Similar Items')");
		var $iframe = $("#frame-where-size");
		var $btnClose = $("#btn-where-size-close");
		var $tabs = $("#div-product-detail-tabs");
		var $body = $("html,body");
		var top = $tabs.offset().top;

		if (!$iframe.attr("src")) {
			$iframe
				.attr("src", href)
				.load(function() {
					var $aSimItem = $iframe.contents().find("a.a-see-simliar");
					$aSimItem.click(function(evt) {
						evt.preventDefault();
						$btnClose.click();
						$body.animate({ scrollTop: top }, 1500);
						$simItemTab.click();
					});

				});
		}

		hs.htmlExpand(this, { contentId: 'highslide-html-2', objectWidth: 500, objectHeight: 200 });
	}

	//Reset the form values
	var resetForm = function() {
		//reset check marks
		$form.find(".checked").removeClass("checked");
		//reset all selects
		$form.find("select").filter(function() {
			var $this = $(this);
			//filter out size dropdown for noncloseout items
			//if is not closeout item and is set to be ignored then don't reset checked
			if (!isCloseout && $this.is(".ignore-reset")) {
				$this.parents(".product-checkout-step div").addClass("checked");
				return false;
			}
			return true;
		}).each(function() {
			this.selectedIndex = 0;
			$(this).change()
			$(this).parents(".checked").removeClass("checked"); ;
		});

		//reset color
		if (swatches.length > 1) {
			$inputColor.val("");
			//set choose a color val
			//$selectedSwatch.html("Please Select a Size First");
			//unselect all swatches
			$.each(swatches, function() {
				var $obj = $(this);
				if ($obj.hasClass(".selected")) { /*Remove the selected swatch*/
					$(this).trigger("unselect")
				}
			});
		} else if (swatches.length == 1) {
			$form.find("#step-2").eq(0).addClass("checked");
		}


	}
	//event Handlers
	//On Main Image Loaded
	var onMainImageLoaded = function() {
		resizeMainImageHolder();
		zoomer = new Zoomer($imageThumbContainer, $necklineThumbContainer);

	}
	//Size chart clicked (show HS)
	var onSizingChartClick = function(ev) {
		ev.preventDefault();
		var modal = hs.htmlExpand(this, { isUnobtrusive: true, contentId: 'highslide-html', objectType: 'iframe', objectWidth: 500, objectHeight: 475 });
		modal.onAfterExpand = function() {
			$container.find("select").hide();
		}
		modal.onAfterClose = function() {
			$container.find("select").show();
		}
	}

	//On Swatch Click
	var onSwatchClick = function() {
		var $swatch = $(this);
		var intIndex, intLength
		var $options;
		var $colorForm = $inputColor;

		enableSizeOptions();

		$swatch.trigger("select");
		if ($swatch.hasClass("selected")) {
			//check step 1
			$("#step-2").addClass("checked");
			$("#selected-swatch").html($swatch.parent().find(".swatch-tooltip p").html());
		} else {
			//uncheck step 1 (if needed)
			$("#step-2").removeClass("checked");
			if ($ddlSize.val() != "") {
				$selectedSwatch.html("Choose A Color");
			} else {
				$selectedSwatch.html("Please Select a Size First");
			}
		}
		//AvailableItem posted within the AvailableItem.aspx page
		if ($colorForm.val() != "") {
			var color = $swatch.find("input.color").val();
			$options = $ddlSize.find("option");
			$options.each(function() {
				var $option = $(this);
				if ($option.val() != "" && !isSizeAvailableInColor(color, $option.val())) {
					disableSizeOption($option);
				}
				changePrices($ddlSize.val());
			});

		}
	}

	var onSwatchClickNoSize = function() {
		var $swatch = $(this);
		if (!$swatch.hasClass("selected")) {
			alert("Please Select a Size First");
		}
	}

	var onUPCChange = function() {
		var $obj = $(this);
		var value = $obj.val();
		var $selected = $obj.find("option:selected");
		var colorCode = $selected.attr("colorcode");
		var size = $selected.attr("upcsize") ? $selected.attr("upcsize") : "";
		var intLength = swatches.length - 1;
		var intIndex = 0;
		//var anchor = $swatchContainer.find("li a[colorcode='" + colorCode + "']");

		$swatchContainer.find("a.selected").removeClass("selected");
		for (intIndex = intLength; intIndex >= 0; intIndex--) {
			if (swatches[intIndex].find("input.color").val() == colorCode) {
				swatches[intIndex].trigger("select");
				break;
			}
		}
		$.each(swatches, function(intIndex, $crntSwatch) {
			$crntSwatch.unbind("click");
		});

		if (value.length > 0) {
			$("#step-1").addClass("checked");

		} else {
			$("#step-1").removeClass("checked");
		}

		changePrices(size);
	}
	var getSiteName = function() {

		var url = window.location.href;
		url = url.substr(0,url.lastIndexOf("/"));
		return(url);

	}
	//on Product Size Change
	var onProductSizeChange = function() {
		var value = $(this).val();
		var $spanSalePrice = $(this).siblings().find("span.sale");
		var intSize = swatches.length - 1;
		var intIndex = 0;
		var salePrice = 0;
		var crntSalePrice = 0;
		var blnCover = false;

		if (value != "") {
			//$(this).parents(".product-checkout-step").addClass("product-checkout-step-checked");
			$("#step-1").addClass("checked");
			$.each(swatches, function(intIndex, $crntSwatch) {
				var color = $crntSwatch.find("input.color").val().toLowerCase();
				var $divSalePrice = $crntSwatch.siblings("div.div-sale-price");

				if (isSizeAvailableInColor(color, value)) {
					$crntSwatch.trigger("removeSwatchCover");
					getSiteName();
					$crntSwatch.find(".swatch-hover-overlay").attr("src", getSiteName()+"/images/product-details/swatch-hover.gif");
					$crntSwatch.unbind("click");
					$crntSwatch.click(onSwatchClick);
				} else {
					$crntSwatch.trigger("addSwatchCover");
					$crntSwatch.find(".swatch-hover-overlay").attr("src", getSiteName()+"/images/product-details/swatch-hover-r.gif");
					$crntSwatch.unbind("click");
					blnCover = true;
				}

				if (AvailableItem[value]) { if (AvailableItem[value][color]) { salePrice = parseFloat(AvailableItem[value][color]).toFixed(2); } }

				//alert(blnCover);
				if (!blnCover && salePrice != 0) { $divSalePrice.show().html("$" + salePrice); } else { $divSalePrice.hide().html(""); }

				salePrice = 0;
				blnCover = false;

				if (!$crntSwatch.data("hasClick")) {
					$crntSwatch.data("hasClick", true);
				}
			});

			if ($swatchContainer.find(".selected").size() == 0) { $selectedSwatch.html("Choose A Color"); }

		} else {
			$.each(swatches, function(intIndex, $swatch) {
				var $imgOverlay = $swatch.find("img.img-swatch-cover").css({ opacity: 0 });
				$imgOverlay.hide().removeAttr("title");
				if ($swatch.data("hasClick")) {
					$swatch
						.data("hasClick", false)
						.removeClass("selected")
						.trigger("removeSwatchCover")
						.trigger("unselect")
						.unbind("click")
						.siblings("div.div-sale-price")
						.html("");
					$("#step-2").removeClass("checked");
					if ($swatchContainer.find(".selected").size() == 0) { enableSizeOptions(); }
				}
				if (!isCloseout && swatches.length > 1) {
					$swatch.click(onSwatchClickNoSize);
				}
			});

			$selectedSwatch.html("Please Select a Size First");
			//$(this).parents(".product-checkout-step").removeClass("product-checkout-step-checked");
			$("#step-1").removeClass("checked");
			checkSizeSalePrices();
		}

		if (typeof value != "undefined") {
			changePrices(value);
		}
	}

	var changePrices = function(value) {
		var objItem = StyleItems[strStyleNumber];
		if ($swatchContainer.find(".selected").size() > 0 && value != "") {
			var selectedColor = "";
			var intLength = swatches.length - 1;
			var intIndex;

			for (intIndex = intLength; intIndex >= 0; intIndex--) {
				if (swatches[intIndex].hasClass("selected")) {
					selectedColor = swatches[intIndex].find("input.color").val().toLowerCase();
					break;
				}
			}

			//See if there's a sale price
			if (objItem[value][selectedColor]) {
				_decPrice = parseFloat(objItem[value][selectedColor]).toFixed(2);
			} else {
				_decPrice = parseFloat(_decOrigPrice).toFixed(2);
			}

			if ($.isFunction(opts.onPriceChange)) { opts.onPriceChange(); } else {
				alert(typeof opts.onPriceChage);
			}
		}
	}

	//on Product Quantity Change
	var onProductQuantityChange = function() {
		var value = $(this).val();
		if (value != "0") {
			if (this.selectedIndex == 0) { return; }
			if ($(".number").size() == 3) {
				$("#step-2").addClass("checked");
			}
			else {
				$("#step-3").addClass("checked");
			}
		} else {
			if ($(".number").length == 3) {
				$("#step-2").removeClass("checked");
			}
			else {
				$("#step-3").removeClass("checked");
			}
		}
	}

	var onProductQuantityFocus = function() {
		if ($(".number").size() == 3) {
			$("#step-2").addClass("checked");
		}
		else {
			$("#step-3").addClass("checked");
		}
	}

	var generateDetailContainers = function() {
		$(".a-details-expand,.a-close-details, #a-underwins").click(function(evt) {
			evt.preventDefault();
			var $obj = $(this).attr("id") == "a-underwins" ? $('#div-undies-winner-container') : getParentContainer($(this)); //grabbing the div container
			var id = $obj.attr("id");

			if (id == "a-underwins") {
				$obj.addClass("div-details-parent").find(".div-details-child,.a-close-details").show();
				$(".a-details-expand").hide();
			} else {
				$obj.toggleClass("div-details-parent").find(".div-details-child,.a-details-expand,.a-close-details").toggle()
			}
		});
	}

	var getParentContainer = function($obj) {
		var $objCrnt = $obj;
		var blnNoMatch = true;
		var intMatch = 0;

		while (blnNoMatch && intMatch < 4) {
			$objCrnt = $objCrnt.parent();
			if ($objCrnt.hasClass("div-details-container")) {
				blnNoMatch = false;
			} else {
				//Shouldn't be over four for this particular item
				intMatch++;
			}
		}

		return $objCrnt;
	}

	var generateVideoContent = function() {
		var $aVideo = $("#a-video-menu");
		var $divVideos = $("div.product-video-thumbnails-container");
		var $videoThumb = $aVideo.find("img.video-thumbnail")
		var $anchors = $("a.a-video-player");
		var blnIE6 = ($.browser.msie && $.browser.version.substring(0, 1) == "6");

		var $ulVideos = $("#ul-product-videos");
		var position = $videoThumb.position();
		var $divVideoMenu = $("#div-product-videos");

		if ($aVideo.size() > 0) {

			//Anchors need a click function before it's appended to the tooltip
			$anchors.attr("highslide", "true");

			var toolTip = new Tooltip($aVideo, {
				arrowPosition: "top",
				showCloseBtn: false,
				html: $divVideoMenu.show(),
				persistent: false,
				width: 400,
				fixed: true,
				focus: true,
				onShow: function() {
					var $thisTip = this.getTooltip();
					var left = -20;
					var top = position.top + $videoThumb.height();
					$thisTip.css({ top: top + "px", left: left + "px" });
				},
				onHide: function() { $ulVideos.show(); }
			});

			$anchors = $("a[highslide]");

			var tip = toolTip.data("simpletip");
			var arrow = $("div.product-video-thumbnails-container div.tooltip div.arrow-top");

			$aVideo.hover(function() {
				if (!blnIE6) {
					arrow.removeClass("arrow-top").addClass("arrow-left-top");
				} else {
					arrow.parent().attr("align", "left").css("text-align", "left");
				}
				ss.smoothscroll;
				tip.show();
			}, function() {
				tip.hide();
			}).click(function(evt) { evt.preventDefault(); });

			$anchors.each(function(intIndex) {
				$(this).click(function(evt) {
					evt.preventDefault();
					var $anchor = $(this);
					var url = $anchor.attr("href");
					var strVideoModalId = "video-modal-" + intIndex
					var $divModalContainer = $("#" + strVideoModalId);
					var $divVideo = $divModalContainer.find("div.video-container");
					var $close = $("#img-video-close-" + intIndex);
					var height = $anchor.attr("highslideheight");
					var width = $anchor.attr("highslidewidth");
					var hsHeight = parseInt(height) + 14;

					$divVideo.html("<iframe id='iframe-video' frameborder='no' scrolling='no' height='" + height + "' width='" + width + "' src='" + url + "'></iframe>");

					$close.show();
					$divVideo.show();
					blnExpand = hs.htmlExpand($anchor[0], { height: hsHeight, width: width, contentId: strVideoModalId });

					hs.runBeforeClose = function() {
						$divVideo.hide().html('');
						$close.hide();
						$divVideo.remove("iframe");
					}

					$close.click(function() {
						return hs.close($close[0]);
					});

					return blnExpand;
				});
			});

		}
	}

	var setStepSizeControlWidth = function() {
		if ($.browser.msie && $.browser.version < 7) {
			var $div = $("div.div-step-controls");
			var intWidth = $div.width();

			$div.css({
				width: intWidth + "px"
			});
		}
	}

	var setupSizingChartLink = function() {
		if ($.browser.msie == true && $.browser.version == "6") {
			var $anchor = $("a.sizing-chart-link");
			var $close = $("img.highslide-close");
			$anchor.click(function() {
				//$("select").css("visibility", "hidden").hide();
			});

			$close.click(function() {
				//$("select").css("visibility", "visible").show();
			});
		}
	}

	var onThermoGuideClick = function() {
		return hs.htmlExpand(this, { contentId: 'div-thermo-guide', objectType: 'iframe', objectWidth: 480, objectHeight: 410, allowSizeReduction: false })
	}

	/*var setupAvailableSizes = function(){
		
	}*/

	var isSizeAvailableInColor = function(strColor, strValue) {
		var arrSizes = Items[strColor.toLowerCase()];
		if (typeof arrSizes != "undefined") {
			if ($.inArray(strValue, arrSizes) > -1) { return true; }
		}

		return false;
	}

	var disableSizeOption = function($option) {
		if ($.browser.msie) {
			$option.before("<optgroup label='" + $option.val() + "' style='color: #cccccc; font-style: normal;' value='" + $option.val() + "'>" + $option.val() + "</optgroup>");
			$option.remove();
		} else {
			$option.attr("disabled", true).addClass("option-disabled");
		}
	}

	var enableSizeOptions = function() {
		var $options = $.browser.msie ? $ddlSize.find("optgroup") : $ddlSize.find("option");

		if ($.browser.msie) {
			$options.each(function() {
				var $obj = $(this);
				$obj.before("<option value='" + $obj.attr("value") + "'>" + $obj.attr("value") + "</option>");
				$obj.remove();
			});
		} else {
			$options.removeAttr("disabled").removeClass("option-disabled");
		}
	}

	var checkSizeSalePrices = function() {
		var $options = $ddlSize.find("option");
		var intSizes = 0;
		var sizesSalePrice = 0;

		if (!isCloseout) {
			//Checking if all the colors for a particular size are on sale with the same price.
			$.each($options, function() {
				var $option = $(this);
				var intIndex = 0;
				var intCnt = 0;
				var salePrice = 0;
				var lastPrice = 0;
				var intNotAvail = 0;

				for (intIndex = 0; intIndex <= swatches.length - 1; intIndex++) {
					var color = swatches[intIndex].data("color").toLowerCase();
					if (isSizeAvailableInColor(color, $option.val())) {
						if (Items[$option.val()] && Items[$option.val()][color]) {
							salePrice = Items[$option.val()][color];
							if (intCnt == 0) { lastPrice = salePrice; }
							if (salePrice != lastPrice) { break; } else { intCnt += 1; }
						}
					} else {
						intNotAvail += 1;
					}
				}

				if ((intCnt + intNotAvail) == swatches.length && lastPrice > 0) { $option.text($option.val() + " - $" + salePrice.toFixed(2)); }
			});

			//If a particular swatch is on sale in all sizes then display the sale price
			$.each(swatches, function() {
				var intCnt = 0;
				var salePrice = 0;
				var crntPrice = 0;
				var $obj = $(this);
				var color = $obj.data("color").toLowerCase();
				var intNotAvail = 0;

				//First Option does not have a size value
				$.each($options, function() {
					var size = $(this).val();

					if (isSizeAvailableInColor(color, size)) {
						if (Items[size][color]) {
							salePrice = Items[size][color];
							if (intCnt == 0) { crntPrice = salePrice; }
							if (crntPrice == salePrice) { intCnt += 1; }
						}
					} else {
						intNotAvail += 1;
					}

				});

				if (intCnt > 0 && crntPrice > 0) {
					if ((intCnt + intNotAvail) == $options.length) {
						$obj.parent().find("div.div-sale-price").show().html("$" + crntPrice.toFixed(2));
					}
				}
			});
		} else {
			$.each(swatches, function() {
				var $obj = $(this);
				var $div = $obj.parent().find("div.div-sale-price");
				var color = $obj.data("color").toLowerCase();
				var size = AvailableItem[color][0]; /* This will get us the first size for a particular color */
				var onSaleCount = $options.find("[onSale='true'][colorcode='" + color + "']").size();
				var colorCodeCount = $options.find("[colorcode='" + color + "']").size();
				var salePrice, crntSalePrice;

				crntSalePrice = 0;

				/*Need to check if the sale prices may differ*/
				if (onSaleCount == colorCodeCount) {
					var intSize = Items[color].length - 1;
					var blnSamePrice = true;
					var strSize, intCnt;

					for (intCnt = intSize; intCnt >= 0; intCnt--) {
						strSize = Items[color][intCnt];
						salePrice = Items[strSize][color];
						if (crntSalePrice == 0) { crntSalePrice = salePrice; }

						if (crntSalePrice != salePrice) {
							salePrice = 0;
							break;
						}
					}

					if (typeof salePrice != "undefined" && salePrice != 0) {
						$div.html("$" + salePrice.toFixed(2));
					}
				}
			});
		}
	}

	var getCurrentPrice = function() {
		return _decPrice;
	}

	var options = {
		onPriceChance: null //Allows the caller to do something when the price changes for a particular selection
	}

	//initialize Product Helper
	return {
		swatches: swatches,
		validateOrder: validateOrder,
		resetForm: resetForm,
		getCurrentPrice: getCurrentPrice,
		init: init
	}
}

//Used as a tabs extension
var ProductTabs = function() {
    //variables
    var $tabs;
    var tabsPositionTop;
    var $body;

    //public methods
    //open similar items tab(will need to be changed if text changes)
    var openSimilarItemsTab = function() {
        var $tab = $tabs.find("li a:contains('Similar')").not(":hidden");
        $tab.click();
        window.location.hash = parseInt($tab.attr("href").replace(/[^0-9]*/gi, ""));
        return false;
    }

    var openFittersCommentsTab = function() {
        var $tab = $tabs.find("li a:contains('Fitter\'s')").not(":hidden");
        $tab.click();
        window.location.hash = parseInt($tab.attr("href").replace(/[^0-9]*/gi, ""));
        return false;
    }

    var openReviewsTab = function() {
        var $tab = $tabs.find("li a:contains('Customer Reviews')").not(":hidden");
        $tab.click();
        window.location.hash = parseInt($tab.attr("href").replace(/[^0-9]*/gi, ""));
        return false;
    }

    var smoothScroll = function() {
        $body.animate({ scrollTop: tabsPositionTop }, 1500);
    };

    //private methods
    var init = function() {
        $tabs = $("#div-product-detail-tabs").tabs().show();
        tabsPositionTop = $("#ul-tabs").offset().top;
        $body = $("html,body");
    }
    init();
    $.extend($tabs, {
        openSimilarItemsTab: openSimilarItemsTab,
        openFittersCommentsTab: openFittersCommentsTab,
        openReviewsTab: openReviewsTab,
        smoothScroll: smoothScroll
    });
    return $tabs;
}

var bottomSelected = 0;
var $tabs;

var PageTabs = function() {
    $tabs = new ProductTabs(); //object above
    var $myRev = $("#MyRev");
    var $divQuestion = $("#div-detail-7");
    var $divContainer = $("#div-product-detail-content-holder");

    $("#ul-tabs a:not(.chicklet)").each(function(intIndex) {/*Keeping the unorder list of tabs in focus*/
        var $obj = $(this);
        var objClone = $obj.clone(); /*Clone the tab*/
        objClone.attr("href", "#" + (intIndex + 1));

        $obj.after(objClone).hide(); /* Hide this particular anchor as it's needed for the tabs */
        objClone.click(function(evt) { /*On click select the particular tab */
            evt.preventDefault();
            $tabs.tabs('select', intIndex);
        });

        $tabs.bind("tabsselect", function(evt, ui) {
            var href = $(ui.tab).attr("url");
            var $iframe = $(ui.panel).find("iframe");
            if ($iframe && href) {
                if ($iframe.attr("src") == "") { $iframe.attr("src", href); }
            }
        });

    });

    $('#' + _strNarativeAnchor).click(function() { $tabs.tabs('select', 3); }).addClass("detail-collection");

    var position = $('#div-interested-products a.a-interested-product').parent().position();
    var $divDetails = $("#product-details");
    var intInitalHeight = $divDetails.height();
    var $tabsPanel = $("#div-product-detail-content-holder > div.ui-tabs-panel");

    $('#div-interested-products a.a-interested-product').each(function() {
        var position = $(this).position();
        var $anchor = $(this).find("img");

        var tooltip = new Tooltip($(this), {
            html: ["<div style='text-align:left;height:150px;width:200px;'>",
					"<span style='font-size: 12px; font-weight: bold; text-decoration: none;'>",
					 $anchor.attr("prodname"), "</span><br />", "Price: ", $anchor.attr("price"),
					 "<br /><br /><img src='", $anchor.attr("rating"), "' /><br /><a style='text-decoration: underline;' href='", $anchor.attr("url"), "'>See ", $anchor.attr("prodname"), "</a>", "</div>"].join(""),
            arrowPosition: "right",
            width: 300,
            position: [position.left - 278, position.top - 50],
            onShow: function() {
                var intCurrentHeight = $divDetails.height();
                var intHeightDiff = intCurrentHeight - intInitalHeight;
                if (intHeightDiff > 0) {
                    var top = tooltip.position().top - 50;
                    this.getTooltip().css({ top: top });
                }
                $myRev.css({ visibility: "hidden" });
                //$tabsPanel.css({"overflow-y" : "hidden"});
            },
            onHide: function() {
                $myRev.css({ visibility: "visible" });
                //$tabsPanel.css({"overflow-y": "scroll"});
            }
        });

        tooltip.find("div.tooltip-top, div.tooltip-bottom").hover(function() {
            tooltip.find("div.tooltip").hide();
            $myRev.css({ visibility: "visible" });
        }, function() {
            tooltip.find("div.tooltip").hide();
            $myRev.css({ visibility: "visible" });
        });

    });

    $("#a-container-reviews,#a-reviews-order-area").click(function() {
        $tabs.openReviewsTab();
        $tabs.smoothScroll();
    }).css({ cursor: 'pointer' });

    $('#a-read-more-reviews').click(function() {
        var strURL = $("#hdnURLReview").attr('value');
        if (strURL != null && $.trim(strURL).length > 0) {
            $.get(strURL, function(strHTML) {
                $('#div-detail-2 p:last').after(strHTML);
            });
            $(this).remove();
        }
    }).css({ cursor: 'pointer' });

    $("#a-no-stock-similar-items").click(function(evt) {
        evt.preventDefault();
        $tabs.smoothScroll();
        $tabs.openSimilarItemsTab();
    });

    var hash = window.location.hash;

    if (hash) {
        var intIndex = hash.replace("#", "");
        if (isNaN(intIndex)) {
            if (intIndex == "frmReview" || intIndex == "info") {
                intIndex = 2;
            }
        } else {
            intIndex = parseInt(intIndex.replace("#", ""));
        }
        $tabs.tabs('select', intIndex - 1);
        $(window).load(function() { $tabs.smoothScroll(); });
    }

    var blnReviewScroll = $("#hdnReview").val() == "true" ? true : false;
    if (blnReviewScroll) {
        $tabs.tabs("select", 1);
        $(window).load(function() { $tabs.smoothScroll(); });
    }

    if ($divQuestion.size() == 0) {//The product is inactive
        $tabs.openSimilarItemsTab();
    }

    $.historyInit(function(url) {
        if (!isNaN(url) && url.length > 0) {
            $tabs.tabs('select', url - 1);
        } else {
            if (url == "info" || url == "frmReview") {
                $tabs.tabs('select', 1);
                $tabs.smoothScroll();
            }
        }
    });

    var $iframeReview = $("#frame-review-form");

    $("#a-submit-review").css("cursor", "pointer").click(function(evt) {
        evt.preventDefault();
        var href = $(this).attr("href");
        if ($iframeReview.attr("src") == "") {
            $iframeReview.attr("src", href);
        }
        return hs.htmlExpand(this, { contentId: 'div-review', objectWidth: 525, objectHeight: 575, allowSizeReduction: false });
    });

    var $iframeEmailFriend = $("#frame-email-friend");

    $("#a-share-this-email").click(function(evt) {
        evt.preventDefault();
        var href = $(this).attr("href");
        if (!$iframeEmailFriend.attr("src")) {
            $iframeEmailFriend.attr("src", href);
        }
        return hs.htmlExpand(this, { contentId: 'friend', objectWidth: 425, objectHeight: 650, allowSizeReduction: false });
    }
	);
};

var formContainer = function() {
	var productHelper; var tabHelper;
	var $container = $("#product-details");
	var $form = $container.find("form");
	var $hdnStyle = $("#hdnStyleNos");
	var $btnCart = $("#add-to-cart-button");
	var $spnCount = $("#span-bag-count");
	var arrStyle = $hdnStyle.size() > 0 ? $hdnStyle.val().split(",") : $("#hdnMainStyleNo").val();
	var $spnPrice = $("p.price span");
	var products = [];

	var init = function() {
		LoadImages();
		generateProducts();
		generateCheckoutTooltip();
		$form.submit(onSubmit);
		tabHelper = new PageTabs();
	}

	var onPriceChange = function() {
		var strPrice;
		var decPrice;
		decPrice = 0;
		$.each(products, function(intIndex) { decPrice += parseFloat(products[intIndex].getCurrentPrice()); });
		strPrice = decPrice.toString().indexOf(".00") == -1 ? decPrice : decPrice.toFixed(2).toString();
		//$spnPrice.html("$" + strPrice);
	}

	var generateProducts = function() {
		$.each(arrStyle, function(intIndex) {
			var styleNo = arrStyle[intIndex];
			var productHelper = new Product(styleNo, {
				onPriceChange: onPriceChange
			});
			products.push(productHelper);
		});

		$.each(products, function(intIndex) {
			products[intIndex].init();
			//products[intIndex] = products[intIndex];
		});
	}

	//On Form Submit
	var onSubmit = function() {
		//var validation = validateOrder();
		var errors = [];

		$.each(products, function(intIndex) {
			var objProduct = products[intIndex];
			var validation = objProduct.validateOrder();
			if (!validation.valid) {
				errors.push(validation.getMessage());
			}
		});

		if (errors.length == 0) {
			$("#step-4").addClass("checked");
			$form.find(".product-checkout-loading").show();
			var data = getFormData();
			$.ajax({
				type: "POST",
				url: $form.attr("action"),
				success: onSubmitSuccess,
				error: onSubmitError,
				data: data
			});
		} else {
			alert(errors.join("\n"));
		}

		return false;
	}

    //Gather necessary form values and put into object	
    var getFormData = function() {
        var values = {};
        $form.find("input[type='text'], input[type='hidden'], select").each(function() {
            var $item = $(this);
            var name = $item.attr("name");
            var value = $item.val();
            values[name] = value;
	    });
        values['ajax'] = true;
        return values;
    }

	var onSubmitError = function(xhr, status, error) {
		$form.find(".product-checkout-loading").hide();
		$("#step-4").removeClass("checked");
		//get simpletip object
		var tip = $checkoutTooltip.eq(0).simpletip();
		//place HTML in simple tip
		$(tip.getTooltip()).find(".content").html("<p class='error'>.An error occurred</p>");
		tip.show();
	}

	var onSubmitSuccess = function(html, txtStatus) {
		$form.find(".product-checkout-loading").hide();
		//get simpletip object
		var tip = $checkoutTooltip.data("simpletip")
		var $tooltip = $(tip.getTooltip());
		//place HTML in simple tip
		$tooltip.find(".content").html(html);
		tip.show();
		var itemCount = $("#div-cart-item-count").text();
		$spnCount.text(itemCount); //.addClass("span-item-added");
		$tooltip.find("input.btn-close-tooltip").click(function() {
			tip.hide();
		});
	}

	//generate tooltip area for checkout display
	var generateCheckoutTooltip = function() {
		var $step = $btnCart.parent();
		var position = $step.position();
		var $selects = $("#div-control-container select");
		var blnModal = false;

		//Need to make sure the product is active, otherwise there is no checkout button
		if ($step.size() > 0) {
			$checkoutTooltip = new Tooltip($step, {
				arrowPosition: "top",
				persistent: true,
				position: [position.left + ($step.width() / 2) - 95, position.top + 35],
				eventless: true,
				showCloseBtn: true,
				width: 350,
				focus: true,
				onHide: function() {
					var $thisTip = this.getTooltip();
					$selects.show();
					$thisTip.jqmHide();
				},
				onShow: function() {
					var $win = $(window);
					var winHeight = $win.height() + $win.scrollTop();
					var intHeight = 0;
					var position = $checkoutTooltip.position();
					var $thisTip = this.getTooltip();
					var intToolHeight = $thisTip.height() + $btnCart.height() + $btnCart.offset().top;
					var $div, $td;
					var intTop
					var decRatio = $thisTip.width() / $btnCart.width();
					var intLeft = ($btnCart.offset().left + ($btnCart.width() / 2)) - ($thisTip.width() / 2);
					var $Modal = $("div.jqmOverlay");
					var $aAvailableItems = $("#a-available-colors,#a-available-sizes");
					var $continueBtn = $(".cont-btn");
					$continueBtn.click(function(ev) {
						$thisTip.jqmHide();
					});
					var zIndex;
					if (blnModal == false) {
						$thisTip.jqm({
							toTop: true,
							onHide: function() {
								$("div.jqmOverlay").hide();
								$thisTip.hide();
                                $("select").remove("#no-js-color").css("visibility", "visible").show();
								if ($aAvailableItems.size() == 0) {
									resetForm();
								} else {
									$("#step-4").removeClass("checked");
								}
							}
						});
					}
					$thisTip.jqmShow();
					if (intToolHeight <= winHeight) {
						//Display the tooltip under the button
						$div = $thisTip.find("div.arrow-bottom").remove();
						$td = $thisTip.find("td.top").html("<div class='arrow-top'>&nbsp;</div>");

						//$(".div-details-parent").each(function(){intHeight += $(this).height();});
						intTop = $btnCart.offset().top + $btnCart.height();

					} else {
						//Display it above the button
						intTop = $btnCart.offset().top - $thisTip.height();
						$div = $thisTip.find("div.arrow-top").remove();
						$td = $thisTip.find("td.bottom").html("<div class='arrow-bottom'>&nbsp;</div>");
						if ($.browser.msie && $.browser.version < 7) { $selects.hide(); }
					}

					$thisTip.css({ top: intTop, left: intLeft }).pngFix();

					var cartid = $("#hdnCartID").val();
					$("a:contains('Women\'s Lingerie'),a:contains('Men\'s Underwear')").each(function() {
						var $anchor = $(this);
						var $anchors = $anchor.siblings().find("a");

						setCartURL($anchor, cartid);
						$anchors.each(function() { setCartURL($(this), cartid); });
					});

					if ($aAvailableItems.size() > 0) {

					} else {
						resetForm();
					}
				}

			});

		}
	}

	//Reset the form values for all of the products
	var resetForm = function() {
		$.each(products, function(intIndex) {
			products[intIndex].resetForm();
		});
	}

	init();
}



/*begin social plugins*/
var embedSocialPlugins = function() {
	var container1 = $('#like1');
	var container2 = $('#like2');
	var container3 = $('#like3')
	var currentUrl = encodeURIComponent(document.location.href);

	var htmlFB = '<iframe src="http://www.facebook.com/plugins/like.php?href=' + currentUrl + '&amp;layout=button_count&amp;show_faces=false&amp;width=90&amp;action=like&amp;font&amp;colorscheme=light&amp;height=21&amp;ref=9588" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:90px; height:21px;" allowTransparency="true"></iframe>';
	//var htmlFB1 = '<iframe src="http://www.facebook.com/plugins/like.php?href=' + currentUrl + '&amp;layout=box_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font&amp;colorscheme=light&amp;height=60&amp;ref=9588" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:52px; height:62px;" allowTransparency="true"></iframe>';

	//console.log(htmlFB);

	container1.html(htmlFB);
	container2.html(htmlFB);
	container3.html(htmlFB);

	


	container1.append('<g:plusone size="medium"></g:plusone>');
	//container3.append('<g:plusone size="medium"></g:plusone>');
	
	var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
	po.src = 'https://apis.google.com/js/plusone.js';
	var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);



}
$(window).load(embedSocialPlugins);   //wait until everything has downloaded.
/*end social plugins*/

/*detect if javascript is running and adjust form accordingly*/
$(window).load(function() {
	$("ul.swatch-list").show();
	$("select#no-js-color").hide();
});

