/*
 *  Javascript to add a tooltip object to the page
 *		- Must have an element within the page as a template
 */
 var Tooltip = function(el, options){ 
	var $options = $.extend({
		template: '.tooltip-template',
		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).clone();	
	$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").css({visibility : "hidden"}).hide();
			}
		},
		onBeforeHide: function(){
			if($.browser.msie && $.browser.version < 7){
				$("select").css({visibility : "visible"}).show();
			}
		}
	}));	
	var simpletip = $tip.eq(0).simpletip();
	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.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){
	var $thumb = $(el);
	var $objParent = $thumb.parent();
	var title = $thumb.attr("title") || "";
	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,"")]);
	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(title.toLowerCase() == "main"){ 
			$("#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){
	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']");
	var $tooltipHtml = $swatch.siblings(".swatch-tooltip");
	var $tooltip;	
	var $selects = $("#div-control-container select");
	
	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(){
		$swatch.hover(onMouseOver, onMouseOut);
		$swatch.click(onClick);
	}
	
	var generateTooltip = function(){
		var position = $swatch.position();		
		
		if($tooltipHtml.size() > 0){
			$tooltip =  new Tooltip($swatch.parent(), {
				html: $tooltipHtml.html(),
				arrowPosition: "top",
				position:[(position.left - 120), (position.top + 20)],
				onShow: function(){
					var position = $tooltip.position();
					if($(".div-details-parent").size() > 0){
						var intTop = position.top + 20;
						this.getTooltip().css({top: intTop + "px"});
					}
				}
			});
		}
	}
	
	//Event Handlers
	var onMouseOver = function(){								
		if(!isSelected() && !isCloseout){
			$hoverOverlay.show();
		}
		$swatch.addClass("small-swatch-hover");
	}
	
	var onMouseOut = function(){
		//UnTip();
		if(!isSelected() && !isCloseout){
			$hoverOverlay.hide();
		}
		
		$swatch.removeClass("small-swatch-hover");
		$tooltip.data("simpletip").hide();
	}
	var onClick = function(ev){
		ev.preventDefault();
		if(!isCloseout){
			$tooltip.data("simpletip").hide();
			//select();			
		}		
	}
	
	init();
	//bind events
	$swatch.bind("select", select);
	$swatch.bind("unselect", unselect);
	$swatch.data("color", color);			
	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 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){
			thumbContainer.find("li.hover").removeClass("hover");
			thumbContainer.find("li:first").addClass("hover");
			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(){
	var $container = $("#product-details");
	var $swatchContainer = $container.find("ul#swatch-list");
	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 $spnCount = $("#span-bag-count");
	var $checkoutTooltip;	
	var zoomer;
	
	
	//get whether product is closeout;
	var isCloseout = parseInt($("input[name='closeout']").val()) == -1;	
	var swatches = [];
	var thumbs = [];
	var necklineThumbs = [];
	var detailContainers = [];
	
	//Initialize product helper
	var init = function(){
		//override form submission
		$form.submit(onSubmit);
		//only setup swatch functionality if product is not a closeout
		generateSwatches(isCloseout);
		generateCheckoutTooltip();
		generateThumbnails();
		generateNecklineThumbnails();
		resizeMainImageHolder();
		generateDetailContainers();
		generateVideoContent();
		setStepSizeControlWidth();
		setupSizingChartLink();
		
		_intDetailsHeight = $container.height();
		
		//wait for image to load
		setTimeout(resizeMainImageHolder,500);
		//loadVideoPage();
		bindEvents();
		if(isCloseout){
			$("input[name='color']").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();}
	}						
	//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 color
		var $colorForm  = $form.find("input[name='color']");
		if($colorForm.size() > 0 && $colorForm.val().length == 0){
			addError("color");
			$colorForm.parents(".product-checkout-step").removeClass("product-checkout-step-checked");
		}else{
			$colorForm.parents(".product-checkout-step").addClass("product-checkout-step-checked");
		}
		//validate UPC
		var $upcForm  = $form.find("select[name='UPC']");
		if($upcForm.size() > 0 && $upcForm.val().length == 0){
			addError("size");
			addError("color");
			$upcForm.parents(".product-checkout-step").removeClass("product-checkout-step-checked");
		}else{
			$upcForm.parents(".product-checkout-step").addClass("product-checkout-step-checked");
		}
		
		//validate size
		var $sizeForm  = $form.find("select[name='size']");
		if($sizeForm.size() > 0 && $sizeForm.val() == ""){
			addError("size");
			$sizeForm.parents(".product-checkout-step").removeClass("product-checkout-step-checked");
		}else{
			$sizeForm.parents(".product-checkout-step").addClass("product-checkout-step-checked");
		}
		
		//validate quantity
		var $qtyForm  = $form.find("select[name='qty']");
		if($qtyForm.size() > 0 && $qtyForm.val() ==  "0"){
			addError("quantity");
			$qtyForm.parents(".product-checkout-step").removeClass("product-checkout-step-checked");
		}else{
			if(message.length == 0){
				$qtyForm.parents(".product-checkout-step").addClass("product-checkout-step-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());
	}
	//generate tooltip area for checkout display
	var generateCheckoutTooltip = function(){
		var $step = $("#add-to-cart-button").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 $btnCart = $("#add-to-cart-button")
					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 zIndex;
					if(blnModal == false){$thisTip.jqm({
						toTop: true,
						onHide: function(){
							$("div.jqmOverlay").hide();
							$thisTip.hide();
							$("select").css("visibility","visible").show();
							if($aAvailableItems.size() == 0){
								resetForm();
							}else{
								$("#div-shopping-control-container > div:last").removeClass("product-checkout-step-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){
						$aAvailableItems.click(function(){
							var $obj = $(this);
							var id = $obj.attr("highslideid");
							var $divHolder = $("#" + id).show();
							$thisTip.jqmHide();
							$obj.trigger("onBeforeExpand");
							hs.runBeforeClose = function(){
								$("select").css("visibility", "visible").show();
								$("#div-shopping-control-container > div:last").removeClass("product-checkout-step-checked");
							} 
							return hs.htmlExpand($obj[0], {contentId: id, objectWidth: $divHolder.width(), objectHeight: $divHolder.height()});
						}).bind("onBeforeExpand", function(){
							if($.browser.msie && $.browser.version < 7){
								$("select").css("visibility", "hidden").hide();
							}
						});
					}else{
						resetForm();
					}
				}
			});	
		}	
	}
	
	//Go through html and create swatch objects
	var generateSwatches = function(isCloseoutOrder){
		$swatchContainer.find("li a").each(function(){
			var swatch = new Swatch(this, isCloseoutOrder);
			if(!isCloseout){
					swatch.click(onSwatchClick);
			}
			swatches.push(swatch);
		});
	}
	//go through html and create thumbnail objects
	var generateThumbnails = function(){
		$imageThumbContainer.find("li").each(function(){
			var thumb = new Thumbnail(this, $necklineThumbContainer);
			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(){
		$("select#select-product-size").change(onProductSizeChange).change();
		$("select#select-product-quantity").change(onProductQuantityChange).focus(onProductQuantityFocus);
		$("select[name='UPC']").change(onUPCChange).change();	
		$("a#sizing-chart-link").click(onSizingChartClick);
		$("#a-thermo-guide").click(onThermoGuideClick);
		
	}
	//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;
		});
		return values;		
	}
	var resetForm = function(){
		//reset check marks
		$form.find(".product-checkout-step-checked").removeClass("product-checkout-step-checked");
		
		//reset all selects
		$form.find("select").each(function(){		
			this.selectedIndex = 0;
			$(this).change();
		});
		
		//reset color
		if(swatches.length > 1){
			$("input#color").val("");
			//set choose a color val
			$("#selected-swatch").html("Click to Choose");
			//unselect all swatches
			$.each(swatches, function(){
				$(this).trigger("unselect");
			});		
		}else if(swatches.length == 1){
			$form.find(".product-checkout-step").eq(0).addClass("product-checkout-step-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 Form Submit
	var onSubmit = function(){		
		var validation = validateOrder();
		
		if(validation.valid){
			$("#add-to-cart-button").parents(".product-checkout-step").addClass("product-checkout-step-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(validation.getMessage());
		}
		
		return false;
	}
	var onSubmitError = function(xhr, status, error){
		$form.find(".product-checkout-loading").hide();
		$("#add-to-cart-button").parents(".product-checkout-step").removeClass("product-checkout-step-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();
		});
	}
	
	//On Swatch Click
	var onSwatchClick = function(){
		var $swatch = $(this);
		$swatch.trigger("select");
		
		if($swatch.hasClass("selected")){
			//check step 1
			$("#step-1").addClass("product-checkout-step-checked");			
			$("#selected-swatch").html($swatch.parent().find(".swatch-tooltip p").html());
		}else{
			//uncheck step 1 (if needed)
			$("#step-1").removeClass("product-checkout-step-checked");
			$("#selected-swatch").html("Choose A Color");
		}
	}
	
	var onUPCChange = function(){		
		var $obj = $(this);
		var value = $obj.val();	
		var colorCode = $obj.find("option:selected").attr("colorcode");
		var swatchContainer = $("#swatch-list");
		var anchor = swatchContainer.find("li a[colorcode='" + colorCode + "']");
		
		swatchContainer.find("img.swatch-selected-overlay").hide();
		anchor.find("img.swatch-selected-overlay").show();
		
		if(value.length > 0){
			$(this).parents(".product-checkout-step").addClass("product-checkout-step-checked");
		}else{
			$(this).parents(".product-checkout-step").removeClass("product-checkout-step-checked");
		}
	}
	
	//on Product Size Change
	var onProductSizeChange = function(){		
		var value = $(this).val();
		if(value != ""){
			$(this).parents(".product-checkout-step").addClass("product-checkout-step-checked");
		}else{
			$(this).parents(".product-checkout-step").removeClass("product-checkout-step-checked");
		}
	}
	//on Product Quantity Change
	var onProductQuantityChange = function(){
		var value = $(this).val();
		if(value != "0"){
			if(this.selectedIndex == 0){ return; }
			$(this).parents(".product-checkout-step").addClass("product-checkout-step-checked");
		}else{
			$(this).parents(".product-checkout-step").removeClass("product-checkout-step-checked");
		}
	}
	
	var onProductQuantityFocus = function(){
		$(this).parents(".product-checkout-step").addClass("product-checkout-step-checked");
	}
	
	var generateDetailContainers = function(){
		$(".a-details-expand,.a-close-details, #a-underwins").click(function(){
			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 $ulVideos = $("#ul-product-videos");
			var position = $videoThumb.position();
			var $divVideoMenu = $("#div-product-videos");
			
			//Anchors need a click function before it's appended to the tooltip
			$anchors.attr("highslide", "true");
			
			var toolTip = new Tooltip($divVideos,{
				arrowPosition: "top",
				showCloseBtn: true,
				html: $divVideoMenu.show(),
				persistent: true,
				width: 400,
				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]");
			
			$aVideo.click(function(evt){
				evt.preventDefault();
				if($anchors.size() == 1){
					$anchors.eq(0).click();
				}else{
					var tip = toolTip.data("simpletip");
					var arrow = $("div.product-video-thumbnails-container div.tooltip div.arrow-top");
					
					if(arrow.length >= 1){
						if($.browser.msie == false && $.browser.version.substring(0,1) != "6"){
							arrow.removeClass("arrow-top").addClass("arrow-left-top");
						}else{
							arrow.parent().attr("align","left").css("text-align", "left");
						}
					}
					ss.smoothscroll;
					tip.show();
				}
			});
		
		$anchors.each(function(intIndex){
			$(this).click(function(evt){
				evt.preventDefault();
				var $anchor = $(this);
				var url = $anchor.attr("href");	
				var $divVideo = $("div.video-container");
				var $close = $("#img-video-close-" + intIndex);	
				var strVideoModalId = "video-modal-" + intIndex
				
				$divVideo.html("<iframe id='iframe-video' frameborder='no' scrolling='no' height='276' width='390' src='" + url + "'></iframe>");
				
				$close.show();
				$divVideo.show();
				blnExpand = hs.htmlExpand($anchor[0], { height:300 , width: 390, contentId: strVideoModalId} );
						
				hs.runBeforeClose = function(){
					$divVideo.hide().html('');
					$close.hide();
				}
				
				$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} )
	}
	
	//initialize Product Helper
	init();
	return {
		swatches: swatches
	}
}

//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;
$(function(){
	$tabs = new ProductTabs(); //object above
	var $myRev = $("#MyRev");
	var $divQuestion = $("#div-detail-7");
	
	$('#ul-tabs a').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(){ /*On click select the particular tab */
			$tabs.tabs('select',intIndex); 
		});
	});
	
	$('#' + _strNarativeAnchor).click(function(){$tabs.tabs('select',4);}).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(){
		$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();});
	}
	
	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();
			}
		}
	});
	
	$("#a-submit-review").css("cursor", "pointer").click(function(){return hs.htmlExpand(this, { contentId: 'div-review', objectWidth: 525, objectHeight: 575,allowSizeReduction: false});});
	
	$("#a-email-a-friend").click(function(evt){evt.preventDefault();return hs.htmlExpand(this, {contentId: 'friend', objectWidth: 425, objectHeight: 650, allowSizeReduction: false});});
	
});