/*
 * belk.shop.js
 * Belk.com - Shop javascript
 * Copyright Belk, Inc.
 */
belk.web.shop={
	init:function(){
		// show add 2 bag button
		$('body.details button.add2bag').css('visibility','visible');
		
		var S=belk.web.shop;
		S._setupTabs();
		S._setupBreadcrumbDropdown();
		S._setupProdResultsClear();
		S._sortSizeDropdown();
		var product_options = window.product_options || null;
		S._setupSizeSelectors(null,product_options);
		S._setupColorSelectors(null,product_options);
		S._setupSizingGuide(); 
		S._setupFindInStore();
		S._setupMPV();
		S._setupAddToBagModal();
		S._setupAddToRegistryModal();
		S._setupAddToWishlistModal();
		S._setupQuickViews();
		S._setupGiftPanel();
		S._setupPatternCollapsibles();
		S._setupModalFindInStore();
		S._setupModalWebsiteFindInStore();
		S._setupCatLandingTips();
		S._setupZipEnter();
		S._setupZoomViewer();
		S._setupQuickSets();
		S._setRecentlyViewedCookie($('body.details'));
		
		//shopping_bag page
		belk.web.config.ajax_methods.updateShoppingBag.handlers.onComplete=function(){
			ezAjax.init([belk.web.config.ajax_methods.updateShoppingBag]);
			ezAjax.init([belk.web.config.ajax_methods.getShoppingBagQuickEdit]);
			ezAjax.init([belk.web.config.ajax_methods.getPromoQuickView]);
			belk.web.shop.init();
			belk.web.common.setupMaxChars();
			belk.web.common.fixIE6Buttons($('#content'));
			belk.web.config.ajax_methods.getCurrentBag.output.cachedResp=null;
			belk.web.config.ajax_methods.getCurrentBag.handlers.onComplete=function(){/*nothing*/ };
			ezAjax.trigger("getCurrentBag");
		};
		
		//inline add to wishlist modal
		var $wlModal = $('#modal_add_to_wishlist_inline');
		if($wlModal.length>0){
			$wlModal.modal({
				close:false,
				closeClass:'close',
				containerId:'modal_added_container'
			});
		}
		
		belk.web.shop.inited=true;
		
	},
	inited:false,
	recentProductsCookieName: 'Belk_Recent_Products',
	recentProductsMaxSize: 4,
	selectTab:function(tabText){
		$('#prod_detail_tabs li:contains('+tabText+')').click();
	},
	bvNoReviews:function(){
		$('#customer_reviews_tab').html($('#BVCustomerRatings').clone(true));
	},
	//private methods
	_setupTabs:function($container){
		$('div.tab_content:not(.active)',$container).hide();
		$('ul.tabs_nav li',$container).click(function(ev){
			var $this=$(this).blur();
			var $tabDiv=$this.parent();
			while(!$tabDiv.is('.tabs')){
				$tabDiv=$tabDiv.parent();
			}
			if (!$this.is('.active')){
				var $a = $('a', $this);
				$('li.active',$this.parent()).removeClass('active');
				$this.addClass('active');
				$('div.tab_content.active',$tabDiv).removeClass('active').hide();
				var aSel=$a.attr('href');
				if(aSel.charAt(0)!='#'){ // for IE in modal quickview case
					aSel=aSel.substr(aSel.indexOf('#'));
				}
				$(aSel).show().addClass('active');
			}
			ev.preventDefault();
		});
		$($('ul.tabs_nav li.active > a',$container).attr('href')).addClass('active');
	},
	_setupSizeSelectors:function($container,product_options){
		$('div.sel_size',$container).each(function(){
			var $div=$(this);
			
			$('select',$div).change(function(){
			//$('ul.sel_size_js li',$div).unbind().click(function(){
				//$('ul.sel_size_js li.current',$div).removeClass('current');
				//var $this=$(this);
				//$this.blur().removeClass('hover').addClass('current');
				//var txt=$('a',$this).attr('title');
				var txt = $('option:selected',$(this)).text();
				//$('select',$div).val($('select option:textEquals("'+txt+'")',$div).val());
				$('span.current',$div).html(txt);
				
				// find unavailable colors and mark
				if(product_options && product_options.length>0){
					jQuery.each(product_options,function(i,options){
						if($div.attr('id') === $(options.sizeContainer).attr('id')){
							var theSize=belk.web.shop._getSizeByDescr(options.sizes,txt);
							var availableColorIDs=[];
							if(theSize && options.details && options.details.length>0){
								var skus=options.details;
								var l=skus.length;
								for(var i=0;i<l;i++){
									if(skus[i].size===theSize.id && (skus[i].online||skus[i].instore)){
										availableColorIDs.push(skus[i].color);
									}
								}
								
								var colors=options.colors;
								l=colors.length;
								var availableColorDescr=[];
								for(var i=0;i<l;i++){
									if(belk.util.arrayContains(availableColorIDs,colors[i].id)){
										availableColorDescr.push(colors[i].description);
									}
								}
								
								$('ul.sel_color_js li',$(options.colorContainer)).each(function(){
									var $this=$(this);
									var txt=$('a',$this).attr('title');
									if(belk.util.arrayContains(availableColorDescr,txt)){
										$this.removeClass('unavailable');
									}
									else{
										$this.addClass('unavailable');
										if($this.is('.current')){
											$('select',$(options.colorContainer)).val('-1');
											$this.removeClass('current');
										}
									}
								});
							}
						}
					});
				}
				
				// resetup color selectors
				belk.web.shop._setupColorSelectors($div.parent(),product_options);
				
				return false;
			}).hover(
				function(){
					var $this=$(this);
					if(!$this.is('.current')){
						$this.addClass('hover');
					}
				},
				function(){
					$(this).removeClass('hover');
				}
			);
			
			// check if value is selected
			/*
			var txt=$('select option:selected',$div).html();
			if(txt && txt!==''){
				var $li=$('ul.sel_size_js li > a[title="'+txt+'"]',$div).parent();
				$li.addClass('current');
				$li.click();
			}
			*/
			$('select',$div).change();
		});
	},
	_getSizeByDescr:function(sizes,descr){
		var l=sizes.length;
		var theSize=null;
		for(var i=0;i<l;i++){
			if(sizes[i].description==descr){
				theSize=sizes[i];
				break;
			}
		}
		return theSize;
	},
	_getSizeByName:function(sizes,name){
		var l=sizes.length;
		var theSize=null;
		for(var i=0;i<l;i++){
			if(sizes[i].name==name){
				theSize=sizes[i];
				break;
			}
		}
		return theSize;
	},
	_getColorByDescr:function(colors,descr){
		var l=colors.length;
		var theColor=null;
		for(var i=0;i<l;i++){
			if(colors[i].description===descr){
				theColor=colors[i];
				break;
			}
		}
		return theColor;
	},
	_getColorByName:function(colors,name){
		var l=colors.length;
		var theColor=null;
		for(var i=0;i<l;i++){
			if(colors[i].name==name){
				theColor=colors[i];
				break;
			}
		}
		return theColor;
	},
	/*
	_getPromoById:function(promos,id){
		var l=promos.length;
		var thePromo=null;
		for(var i=0;i<l;i++){
			if(promos[i].id==id){
				thePromo=promos[i];
				break;
			}
		}
		return thePromo;
	},
	*/
	_setupColorSelectors:function($container,product_options){
		$('div.sel_color',$container).each(function(){
			var $div=$(this);
			var hoverTimer=null;
			
			$('ul.sel_color_js li',$div).unbind().click(function(ev){
				ev.preventDefault();
				var $this=$(this).blur();
				if(!$this.is('.unavailable')){
					$('ul.sel_color_js li.current',$div).removeClass('current');
					$this.addClass('current');
					var txt=$('a',$this).attr('title');
					$('select',$div).val($('select option:textEquals("'+txt+'")',$div).val());
					$('span.current',$div).html(txt);
					
					// update prod image
					if (product_options && product_options.length > 0) {
						jQuery.each(product_options, function(i, options){
							var $colorDiv=$('div.sel_color',$div.parent());
							if ($colorDiv.attr('id') === $(options.colorContainer).attr('id')) {
								var colorVal=$('select',$colorDiv).val();
								var theColor=belk.web.shop._getColorByName(options.colors,colorVal);
								if(theColor && theColor.imageURL && theColor.imageURL.length>0 && theColor.imageURL[0]) {
									var imgUrl = theColor.imageURL[0];
									$('#prod_preview div.image_wrap img:first').attr('src',imgUrl);
									$('#modal_quickview div.img > img').attr('src',imgUrl.replace('$P_PROD$', '$P_MODAL$'));
								}
							}
						});
					}
					belk.web.shop._updatePriceAndAvailability($div.parent(),product_options);
				}
				
				return false;
			}).hover(
				function(){
					var $this=$(this);
					if(/*!$this.is('.current') &&*/ !$this.is('.unavailable')){
						hoverTimer=setTimeout(
							function(){
								//$this.addClass('hover');
								var $img = $('img', $this);
								var color = $img.attr('alt');
								var url = $img.attr('src').replace('$P_SWATCH$', '$P_BSWATCH$');
								var html = '<div class="swatch"><img src="' + url + '" alt="' + color + '" /><p>' + color + '</p></div><div class="arrow">&nbsp;</div>';
								var offset = $this.offset();
								var $swatch = $('#swatch_hover').html(html);
								if ($.browser.msie&&$.browser.version=='6.0') {
									$swatch.append('<iframe></iframe>');
								}
								$swatch.css({
									'top':offset.top-$swatch.height(),
									'left':offset.left,
									'position':'absolute',
									'z-index':'1001'
								}).show();
								
								
								hoverTimer=null;
							},
							200
						);
						
					}
				},
				function(){
					if(hoverTimer){
						clearTimeout(hoverTimer);
					}
					$('#swatch_hover').hide();
				}
			);
			if ($('#swatch_hover').length < 1) {
				$('body').append('<div id="swatch_hover" class="swatch_hover" style="display:none;"></div>');
			}
			
			var txt=$('select option:selected',$div).html();
			$('span.current',$div).html(txt);
			if(txt && txt!==''){
				var $li=$('ul.sel_color_js li > a[title="'+txt+'"]',$div).parent();
				$li.addClass('current');
			}
			belk.web.shop._updatePriceAndAvailability($div.parent(),product_options);
		});
	},
	_updatePriceAndAvailability:function($container,product_options){
		var $colorDiv=$('div.sel_color',$container);
		var colorVal=$('select',$colorDiv).val();
		var sizeVal=$('div.sel_size select',$container).val();
		
		var $temp=$('div.add_to_bag',$container).css('opacity','1');
		if ($temp) {
			$('button:disabled, select:disabled', $temp).removeAttr('disabled');
		}
		
		if($('#fis_limited_or_no_avail').length<1){
			$('div.find_in_store', $container).append('<br /><span style="display:none;" id="fis_limited_or_no_avail">Limited or no availability in stores</span>');
			$('div#find_in_store_tab').append('<br /><span style="display:none;" id="fis_limited_or_no_avail">Limited or no availability in stores</span>');
		}
		$temp=$('div.find_in_store', $container).css('opacity','1');
		var $fisTemp=$('div#find_in_store_tab').css('opacity','1');
		if ($temp||$fisTemp) {
			$('button:disabled, input:disabled', $temp).removeAttr('disabled');
			$('#fis_limited_or_no_avail').hide();
		}
		
		if(colorVal&&colorVal!='' && sizeVal&&sizeVal!=''){
			if (product_options && product_options.length > 0) {
				jQuery.each(product_options, function(i, options){
					if ($colorDiv.attr('id') === $(options.colorContainer).attr('id')) {
						var theColor=belk.web.shop._getColorByName(options.colors,colorVal);
						var theSize=belk.web.shop._getSizeByName(options.sizes,sizeVal);
						var skus=options.details;
						var l=skus.length;
						if (theSize && theColor) {
							for (var i = 0; i < l; i++) {
								if (skus[i].size === theSize.id && skus[i].color === theColor.id) {
									//update price
									var $priceDiv = $(options.priceContainer);
									$('span.list_price', $priceDiv).html(skus[i].list_price);
									if (skus[i].on_sale || skus[i].on_clearance) {
										if  (skus[i].on_clearance)	{			
											$('span.lbl_sale_clearance', $priceDiv).html(skus[i].on_clearanceValue);
										} else {
											$('span.lbl_sale_clearance', $priceDiv).html(skus[i].on_saleValue);
										}
										$('span.sale_price', $priceDiv).html(skus[i].sale_price);
										$('span.save_amount', $priceDiv).html(skus[i].save_amount);
										$('span.save_percent', $priceDiv).html(skus[i].save_percent);
										$('p.sale_price,span.sale_price',$priceDiv).removeClass('hidden');
									}else {
										$('p.sale_price,span.sale_price',$priceDiv).addClass('hidden');
									}
									
									//update availability
									if(!skus[i].online){
										if($("body.bridal").length > 0) {
											$('body.bridal button.add2bag').attr('disabled', 'disabled');
										} else {
											var $temp=$('div.add_to_bag',$container).css('opacity','0.5');
											if ($temp) {
												$('button, select', $temp).attr('disabled', 'disabled');
											}
										}
									}
									if(!skus[i].instore){
										var $temp=$('div.find_in_store',$container).css('opacity','0.5');
										$('div#find_in_store_tab').css('opacity','0.5');
										if ($temp) {
											$('button, input', $temp).attr('disabled', 'disabled');
											$('#fis_limited_or_no_avail').show();
										}
									}
									
									//update promo
									var promoHtml='';
									var $promoDiv = $(options.promoContainer);
									if(skus[i].promo){
										promoHtml=skus[i].promo;
									}
									$('span.summary',$promoDiv).html(promoHtml);
									if(promoHtml==''){
										$promoDiv.addClass('hidden');
									}
									else {
										$promoDiv.removeClass('hidden');
									}
									break;
								}
							}
						}
					}
				});
			}
		} else if(colorVal && colorVal!='' && $('div.sel_size select',$container).length<1){
			// no size selectors
			if (product_options && product_options.length > 0) {
				jQuery.each(product_options, function(i, options){
					if ($colorDiv.attr('id') === $(options.colorContainer).attr('id')) {
						var theColor=belk.web.shop._getColorByName(options.colors,colorVal);
						var skus=options.details;
						var l=skus.length;
						if (theColor) {
							for (var i = 0; i < l; i++) {
								if (skus[i].color === theColor.id) {
									//update price
									var $priceDiv = $(options.priceContainer);
									$('span.list_price', $priceDiv).html(skus[i].list_price);
									if (skus[i].on_sale || skus[i].on_clearance) {
										if  (skus[i].on_clearance)	{			
											$('span.SPrice', $priceDiv).html(skus[i].on_clearanceValue);
										} else {
											$('span.SPrice', $priceDiv).html(skus[i].on_saleValue);
										}
										$('span.sale_price', $priceDiv).html(skus[i].sale_price);
										$('span.save_amount', $priceDiv).html(skus[i].save_amount);
										$('span.save_percent', $priceDiv).html(skus[i].save_percent);
										$('p.sale_price,span.sale_price',$priceDiv).removeClass('hidden');
									}else {
										$('p.sale_price,span.sale_price',$priceDiv).addClass('hidden');
									}
									
									//update promo
									var promoHtml='';
									var $promoDiv = $(options.promoContainer);
									if(skus[i].promo){
										promoHtml=skus[i].promo;
									}
									$('span.summary',$promoDiv).html(promoHtml);
									if(promoHtml==''){
										$promoDiv.addClass('hidden');
									}
									else {
										$promoDiv.removeClass('hidden');
									}
									
									break;
								}
							}
						}
					}
				});
			}
			
		}
	},
	_disableSizeSelectors:function($container){
		$('div.sel_size',$container).each(function(){
			var $div=$(this);
			$('ul.sel_size_js li',$div).unbind().addClass('unavailable');
		});
	},
	_disableColorSelectors:function($container){
		$('div.sel_color',$container).each(function(){
			var $div=$(this);
			$('ul.sel_color_js li',$div).unbind().addClass('unavailable');
		});
	},
	_enableSizeSelectors:function($container){
		$('div.sel_size',$container).each(function(){
			var $div=$(this);
			$('ul.sel_size_js li',$div).removeClass('unavailable');
		});
	},
	_enableColorSelectors:function($container){
		$('div.sel_color',$container).each(function(){
			var $div=$(this);
			$('ul.sel_color_js li',$div).removeClass('unavailable');
		});
	},
	_setupFindInStore:function(){
		/*// clicking enter needs to trigger go click
		$('#txt_zip_code').keydown(function(ev){
			if (ev.keyCode == 13) {
				ev.preventDefault();
				$('button.btn_find_in_store_top').click();
				return false;
			}
		});
		$('#find_in_store_tab input[name="STORE_SEARCH<>zipcode"]').keydown(function(ev){
			if (ev.keyCode == 13) {
				ev.preventDefault();
				$('button.btn_find_in_store').click();
				return false;
			}
		});
		$('#find_in_store_tab input[name="STORE_SEARCH<>city"]').keydown(function(ev){
			if (ev.keyCode == 13) {
				ev.preventDefault();
				$('button.btn_find_in_store').click();
				return false;
			}
		});
		*/
		
		
		belk.web.config.ajax_methods.findInStore.handlers.onComplete = function(resp){
			if(resp.success)
			{
				$('div.find_in_store_container div.search_output li.details').css({float:'right',width:'50px'});
				$('#modal_fis_container').css({position:'absolute',top:'100px'});
				window.scrollTo(10,10);
				$('div.find_in_store_container div.search_output button.fis_print').click(function(){
					$("#modal_find_in_store div.ajaxContent div.find_in_store_container").printArea();
				});
				$('button.fis_close_btn').click(function(){
					$('a.fis_close').click();
				});
				belk.web.shop._setupFISGmap();
				belk.web.common.fixIE6Buttons($('div#modal_find_in_store'));
			}
		};
		
		
		/* top find a store search */
		/*belk.web.config.ajax_methods.findInStoreTop.handlers.onPreAjax=function(){
			var retVal=false;
			var zip=$('#txt_zip_code').val();
			//TODO : validate zip code?
			if(zip && zip!='' && zip!='zip code'){
				belk.web.shop.selectTab('Find in a Store');
				window.location.hash='find_in_store';
				retVal=true;
			}
			else{
				belk.util.alert('Please enter a zip code', 'Zip Code Required')
			}
			return retVal;
		};
		belk.web.config.ajax_methods.findInStoreTop.handlers.onComplete=function(){
			window.location.hash='find_in_store';
		};*/
		
		// focus on zip code when opening tab
		$('#prod_detail_tabs li:contains(Find in a Store)').click(function(){
			$('input[name="STORE_SEARCH<>zipcode"]').focus();
		});
		
	},
	_setupFISGmap:function(){
		$('body.details a.gmapLink').click(function(ev){
			  var i = $(this).attr('id');
			  var url = $(this).attr('href');
				ev.preventDefault();
				 $('div#modal_find_in_store div.search_output ol.results li.result').hide();
				$('div#modal_find_in_store div.search_output ol.results li.result:eq('+i+')').show();
				//Hidden modal
				$('div#modal_find_in_store_hidden div.search_output ol.results li.result').hide();
				$('div#modal_find_in_store_hidden div.search_output ol.results li.result:eq('+i+')').show();
				$('div#modal_find_in_store_hidden div.search_output ol.results li.show_gmap').empty();
				//end here
				//$('div#modal_find_in_store div.search_output ol.results').css({_height:'80px'});
				//$('div#modal_find_in_store div.search_output div.show_gmap').empty();
				$('div#modal_find_in_store div.search_output ol.results li.show_gmap').empty();
				$('<iframe width="550" height="300" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" id="showmapiframe" src="'+url+'&amp;output=embed"></iframe>').appendTo('li.show_gmap');
				
				$('div.fis_buttons button.backToResults').remove();
				$('<button type="button" class="backToResults"><div class="l"></div><div class="r"></div><div>Back To Results</div></button>').insertAfter('div.fis_buttons button.fis_print');
				
				belk.web.common.fixIE6Buttons($('div#modal_find_in_store'));
				
				$('button.backToResults').click(function(){
					//$('div#modal_find_in_store div.search_output div.show_gmap').empty();
					$('div#modal_find_in_store div.search_output ol.results li.show_gmap').empty();
					$('div#modal_find_in_store div.search_output div.fis_buttons button.backToResults').remove();
					//Hidden modal
					$('div#modal_find_in_store_hidden div.search_output ol.results li.show_gmap').empty();
					$('div#modal_find_in_store_hidden div.search_output div.fis_buttons button.backToResults').remove();
					//ends here.
					//$('div#modal_find_in_store div.search_output ol.results').css('_height','211px');
					$('div.search_output li.result').show();
				});
			});

			
		
	},
	_setupMPV:function(){
		var expand=function(ev){
			var $this=$(this);
			$this.removeClass('min').addClass('max');
			$('div.sel_sz_and_clr',$this).one('click',collapse);
			ev.stopPropagation();
			
			//TODO : animation
		};
		var collapse=function(ev){
			var $li=$(this).parent().parent();
			$li.removeClass('max').addClass('min');
			$li.one('click',expand);
			ev.stopPropagation();
			
			//TODO : animation
		};
		$('#multi_prod li.min').one('click',expand);
		$('#multi_prod li.max div.sel_sz_and_clr').one('click',collapse);
	},
	_setupAddToBagModal:function(){
		// add the container div for the modal to the dom 
		if (!belk.web.shop.inited) {
			$('<div id="modal_add_to_bag" class="modal_added" style="display:none;"></div>').appendTo('#page');
			belk.web.config.ajax_methods.addToBagMultiProduct.handlers.onComplete=
			belk.web.config.ajax_methods.addToBag.handlers.onComplete=function(resp){
				if (resp.success) {
					$('#modal_quickview').fadeOut();
					$('#modal_add_to_bag').modal({
						close:false,
						closeClass:'close',
						persist:true,
						containerId:'modal_added_container'
					});
					belk.web.config.ajax_methods.getCurrentBag.output.cachedResp=null;
				}
			};
		}
	},
	_setupAddToRegistryModal:function(){
		if (!belk.web.shop.inited) {
			// add the container div for the modal to the dom
			$('<div id="modal_add_to_registry" class="modal_added" style="display:none;"></div>').appendTo('#page');
			belk.web.config.ajax_methods.addToRegistryMultiProduct.handlers.onAjaxReturn =
				belk.web.config.ajax_methods.addToRegistry.handlers.onAjaxReturn = function(data){
					if (!data.success && data.error_code && data.error_code=="LOGIN" && data.redirect_url) {
						document.location = data.redirect_url;
						return false;
					}
					return true;
				};
			belk.web.config.ajax_methods.addToRegistryMultiProduct.handlers.onComplete=
			belk.web.config.ajax_methods.addToRegistry.handlers.onComplete = function(){
				$('#modal_quickview').fadeOut();
				$('#modal_add_to_registry').modal({
					close:false,
					closeClass:'close',
					onClose:function(external){
					$.modal.close();
					$("ul.stripeMe ul li.quantity select[@name='ADD_CART_ITEM_ARRAY<>quantity'] option[@value='0']").attr("selected","selected");
					},
					persist:true,
					containerId:'modal_added_container'
				});
			};
		}
	},
	_setupAddToWishlistModal:function(){
		if (!belk.web.shop.inited) {
			// add the container div for the modal to the dom
			$('<div id="modal_add_to_wishlist" class="modal_added" style="display:none;"></div>').appendTo('#page');
			belk.web.config.ajax_methods.addToWishlistMultiProduct.handlers.onAjaxReturn =
			belk.web.config.ajax_methods.addToWishlist.handlers.onAjaxReturn = function(data){
				if (!data.success && data.error_code && data.error_code=="LOGIN" && data.redirect_url) {
					/*$('#modal_sign_in').modal({
						close:false,
						closeClass:'close',
						persist:true,
						containerId:'modal_added_container'
					});*/
					document.location = data.redirect_url;
					return false;
				}
				return true;
			};
			belk.web.config.ajax_methods.addToWishlistMultiProduct.handlers.onComplete =
			belk.web.config.ajax_methods.addToWishlist.handlers.onComplete = function(){
				$('#modal_quickview').fadeOut();
				$('#modal_add_to_wishlist').modal({
					close:false,
					closeClass:'close',
					persist:true,
					containerId:'modal_added_container'
				});
			};
		}
	},
	_setupQuickViews:function(){
		// show quickview link on top of images in results pages
		$('div.qv_image').hover(
			function(){ $(this).addClass('hover'); },
			function(){	$(this).removeClass('hover'); }
		);
		
		if (!belk.web.shop.inited) {
			$('<div id="modal_quickview" style="display:none;"></div>').appendTo('#page');
		}
		
		// handle click event
		// TODO: Hide bag? Hide add to bag modal?
		// TODO: remove magic numbers
		var loadingHTML='<div class="ajaxLoading"><div class="prod_hd"><h4>Loading Quick View...</h4></div></div>';
		$('#content a.quickedit,#content a.quickview,#content a.qv_link, #content a.promoview').click(function(){
			var $this=$(this);
			// figure out what top position should be
			var thisOffset=$this.offset();
			var pageOffset=$('#page').offset();
			var top=thisOffset.top-250;
			if(top<$(window).scrollTop()){
				top=$(window).scrollTop()+5;
			}
			// figure out what left position should be
			var left=thisOffset.left-pageOffset.left+160;
			if(left+$('#modal_quickview').width()>$('#content').width()){
				var newleft=thisOffset.left-pageOffset.left-50-$('#modal_quickview').width();
				if(newleft>0){
					left=newleft;
				}
			}
			
			var $modal=$('#modal_quickview').css({'top':top,'left':left}).html(loadingHTML);
			if ($.browser.msie&&$.browser.version=='6.0') {
				$modal.append('<iframe></iframe>');
			}
			$modal.show();
		});

		var _fixQuickTabs = function(){
			var ht = $('#options_tab_qv').height();
			$('#overview_tab_qv').height(ht).css('overflow','hidden');
		};
		
		if (!belk.web.shop.inited) {
			belk.web.config.ajax_methods.getQuickView.handlers.onComplete = 
			belk.web.config.ajax_methods.getRegistryQuickView.handlers.onComplete =
			belk.web.config.ajax_methods.getQuickEdit.handlers.onComplete =
			belk.web.config.ajax_methods.getShoppingBagQuickEdit.handlers.onComplete = function(){
				var $modal = $('#modal_quickview');
				$('button',$modal).attr('disabled','disabled');
				if ($.browser.msie&&$.browser.version=='6.0') {
					$modal.append('<iframe></iframe>');
					belk.web.common.fixIE6Buttons($modal);
				}
				belk.web.shop._sortSizeDropdown($('#modal_quickview #sel_size'));
				belk.web.shop._disableSizeSelectors($modal);
				belk.web.shop._disableColorSelectors($modal);
				belk.web.shop._setupTabs($modal);
				_fixQuickTabs();
				
				belk.web.shop._setRecentlyViewedCookie($modal);

				belk.web.config.ajax_methods.getProductOptions.handlers.onAjaxReturn = function(resp){
					belk.web.shop._enableSizeSelectors($modal);
					belk.web.shop._enableColorSelectors($modal);
					belk.web.shop._setupSizeSelectors($modal, resp.product_options);
					belk.web.shop._setupColorSelectors($modal, resp.product_options);
					ezAjax.init([belk.web.config.ajax_methods.addToBag], $modal);
					ezAjax.init([belk.web.config.ajax_methods.addToWishlist], $modal);
					ezAjax.init([belk.web.config.ajax_methods.addToRegistry], $modal);
					$('button',$modal).removeAttr('disabled');
				};
				ezAjax.trigger("getProductOptions");
			};
			
			belk.web.config.ajax_methods.getPromoQuickView.handlers.onComplete = function(){
				var $modal = $('#modal_quickview');
				$('button',$modal).attr('disabled','disabled');
				//belk.web.shop._setupSizeSelectors($modal);
				//belk.web.shop._setupColorSelectors($modal);
				
				belk.web.shop._sortSizeDropdown($('#modal_quickview #sel_size'));
				belk.web.shop._disableSizeSelectors($modal);
				belk.web.shop._disableColorSelectors($modal);
				belk.web.shop._setupTabs($modal);
				_fixQuickTabs();

				belk.web.config.ajax_methods.getProductOptions.handlers.onAjaxReturn = function(resp){
					belk.web.shop._enableSizeSelectors($modal);
					belk.web.shop._enableColorSelectors($modal);
					belk.web.shop._setupSizeSelectors($modal, resp.product_options);
					belk.web.shop._setupColorSelectors($modal, resp.product_options);
					$('button',$modal).removeAttr('disabled');
				};
				ezAjax.trigger("getProductOptions");
			};
		}
	},
	_setupGiftPanel:function(){
		//show and hide gift panel based on gift checkbox
		$('input.chk_gift_item').each(function(){
			if($(this).attr('checked')){
				var $div = $(this).parent().parent();
				$('img.gift_box_toggle',$div).css('display','none');
				$(this).parent().parent().addClass('checked');
			}
		});
		/*
		$('input.chk_gift_item').click(function(){
			var $div=$(this).parent().parent()
			if ($(this).attr('checked')){
				$div.addClass('checked');
			}
			else{
				$div.removeClass('checked');
			}
		});
		*/
	},
	_setupPatternCollapsibles: function(){
		$('div.pattern1 li.row > ul,div.pattern6 li.row > ul').collapsible({
			clickSel: 'li.item a',
			collapseSel: 'li.details',
			className: 'active',
			mouseActivate: true
		});
	},
	_setupModalFindInStore:function(){
		if (!belk.web.shop.inited) {
			//$('body.pattern #page').append('<div id="modal_find_in_store" style="display:none;"></div>');
			belk.web.config.ajax_methods.getFindInStoreModal.handlers.onComplete = function(){
				
				$('#modal_find_in_store').modal({
					close:false,
					closeClass:'fis_close',
					persist:true,
					containerId:'modal_fis_container'
				});
				
				ezAjax.init([belk.web.config.ajax_methods.findInStore]);
				belk.web.common.fixIE6Buttons($('div#modal_find_in_store'));
				
				$('div.search_input input[name="STORE_SEARCH<>zipcode"]').keyup(function(){
					
					var fisZipCode=$('div.search_input input[name="STORE_SEARCH<>zipcode"]').val();
					if(fisZipCode && fisZipCode.length > 0){
						$('div.search_input button.btn_find_in_store').removeAttr('disabled');
					} else{
						$('div.search_input button.btn_find_in_store').attr('disabled','disabled');
					}
					
				});
				
				$('div.search_input input[name="STORE_SEARCH<>zipcode"]').keydown(function(ev){
					
					if (ev.keyCode === 13) {
						ev.preventDefault();
						$('button.btn_find_in_store').click();
						return false;
					}
				});
			};
		}
	},
	_setupModalWebsiteFindInStore:function(){ 
		if (!belk.web.shop.inited) {
			$('<div id="modal_find_in_store" class="modal_added modalData" style="display:none;"></div>').appendTo('body #page');
			$('<div id="modal_find_in_store_hidden" class="modal_added modalData" style="display:none;"></div>').appendTo('body #page');
						
			belk.web.config.ajax_methods.getFindInStoreWebsiteModal.handlers.onPreAjax=function(){
				var retVal=false;
				var color=$('#sel_color').val();
				var size=$('#sel_size').val();
				//TODO : validate zip code?
				if(color && color!='' && color!='-1'){
					if(size && size!='' && size!='-1'){
						retVal=true; 
					}
					else if(size){
						belk.util.alert('Please select Size', 'Size is Required')
					}
				}
				else if(color){
					belk.util.alert('Please select Color', 'Color is Required')
				}
				else{
					retVal=true;
				}
				return retVal;
			};
			
			
			belk.web.config.ajax_methods.getFindInStoreWebsiteModal.handlers.onComplete = function(){
				$('#modal_find_in_store').modal({
					close:false,
					closeClass:'fis_close',
					persist:true,
					containerId:'modal_fis_container'
				});
				$('#modal_find_in_store_hidden').modal({
					close:false,
					closeClass:'fis_close',
					persist:true,
					containerId:'modal_fis_container'
				});
				$('#modal_find_in_store_hidden').hide();
				ezAjax.init([belk.web.config.ajax_methods.findInStore]);
				
				belk.web.common.fixIE6Buttons($('div#modal_find_in_store'));
				
				$('div.search_input input[name="STORE_SEARCH<>zipcode"]').keyup(function(){
					
					var fisZipCode=$('#modal_find_in_store div.search_input input[name="STORE_SEARCH<>zipcode"]').val();
					
					if(fisZipCode && fisZipCode.length > 0){
						$('div.search_input button.btn_find_in_store').removeAttr('disabled');
					} else{
						$('div.search_input button.btn_find_in_store').attr('disabled','disabled');
					}
					$('#modal_find_in_store_hidden div.search_input input[name="STORE_SEARCH<>zipcode"]').val(fisZipCode); //try this.
				});
				
				$('div.search_input input[name="STORE_SEARCH<>zipcode"]').keydown(function(ev){
					
					if (ev.keyCode === 13) {
						ev.preventDefault();
						$('button.btn_find_in_store').click();
						return false;
					}
				});
			};
			
		}
	},
	_setupCatLandingTips:function(){
		if ($('body').is('.category.landing')) {
			var counter = 1;
			var $curLi = null;
			var time=2000;
			var $resLi = $('div.product_results > ul > li:nth-child(' + 4 + ')');
			if ($resLi.length > 0) {
				var offs = $resLi.offset();//(((counter+2)%5)+1)
				var pgOffs = $('#page').offset();
				var mouseOver = false;
				var showIt = function(){
					if (!mouseOver) {
						$curLi = $('#fade_over_images li:nth-child(' + counter + ')');
						$curLi.css({
							'top': offs.top - pgOffs.top,
							'left': offs.left - pgOffs.left
						}).fadeIn(time);
						counter = (counter % $('#fade_over_images li').length) + 1;
					}
					setTimeout(overlayIt, 7000);
				};
				var overlayIt = function(){
					if ($curLi) {
						$curLi.fadeOut(time, function(){
							setTimeout(function(){
								showIt();
							}, 6000);
						});
					}
					else {
						showIt();
					}
				};
				
				$('#fade_over_images').mouseover(function(){
					mouseOver = true;
					$curLi.hide();
				});
				$resLi.hover(function(){
				}, function(){
					mouseOver = false;
				});
				overlayIt();
			}
		}
	},
	_setupZipEnter:function(){
		$('body.shopping_bag li.sales_taxes input.zip').keydown(function(ev){
			if (ev.keyCode == 13) {
				$('button[name="postal_go"]').click();
				ev.preventDefault();
				return false;
			}
		});
	},
	_setupBreadcrumbDropdown:function(){
		var $subcatA = $('#bread_crumb > ul > li:nth-child(4) a');
		var subcatText = $subcatA.html();
		if (subcatText && subcatText.toLowerCase && subcatText.toLowerCase()!='shop by brand') {
			var $subnavCatLi = $('#subnav a:textEquals("' + subcatText + '")').parent().parent().parent();
			var $subCatLis = $('ul:first', $subnavCatLi).children();
			if ($subCatLis.length > 0) {
				var html = '<div class="linkdd"><h5>' + subcatText + '</h5><ul>';
				$subCatLis.each(function(){
					var $this = $(this);
					if ($this.is('li')) {
						var $a = $('a', $this);
						html += '<li><a href="' + $a.attr('href') + '">' + $a.html() + '</a></li>'
					}
				});
				html += '</ul></div>';
				$subcatA.parent().html(html);
				belk.web.common.setupLinkDDs();
			}
		}
	},
	/* example breadcrumb dropdown
<div class="linkdd">
	<h5>All Sizes</h5>
	<ul>
		<li><a href="">Small</a></li>
		<li><a href="">Medium</a></li>
		<li><a href="">Large</a></li>
		<li><a href="">X-Large</a></li>
		<li><a href="">XX-Large</a></li>
	</ul>
</div>
	 */
	_setupZoomViewer:function(){
		var currentShot = 0;
		var currentColor = 0;
		var currentProduct = 0;
		var counter=0;
		var defaultSwf='';
		var showFlash = function(){
			$('#zoom_holder').html('<div id="swf_div_'+counter+'"></div>');
			var swfUrl = defaultSwf;
			if(product_options[currentProduct]
				&& product_options[currentProduct].colors[currentColor]
				&& product_options[currentProduct].colors[currentColor].viewerURL[currentShot]
				&& product_options[currentProduct].colors[currentColor].viewerURL[currentShot]!='' ) {
				swfUrl = product_options[currentProduct].colors[currentColor].viewerURL[currentShot];
			}
			swfobject.embedSWF(swfUrl+'&serverUrl=http://s7d4.scene7.com/is/image', 'swf_div_'+counter, "376", "578", "6.0.0");
			setTimeout(function(){
				$('#modalOverlay').css('z-index',3001);
			},500);
			counter++;
		};
		
		/*** set current product ***/
		// get preview image url
		var imgUrl = $('#prod_preview div.image_wrap img').attr('src');
		// find the preview url in the product_options
		var setParams = function(){
			if(imgUrl && imgUrl!='' && product_options) {
			var found = false;
			for(var i=0,l1=product_options.length; i<l1; i++) {
				var p = product_options[i];
				for(var j=0,l2=p.colors.length; j<l2; j++) {
					var c = p.colors[j];
					for(var k=0,l3=c.imageURL.length; k<l3; k++) {
						if(c.imageURL[k]===imgUrl) {
							found=true;
							currentProduct = i;
							currentColor = j;
							currentShot = k;
							break;
						}
					}
					if(found){
						break;
					}
				}
				if(found) {
					break;
				}
			}
		}
		};
		
		var createZoomViewerHTML = function(){
			var currentColorVal = $('#sel_color').val();
			var currentSet = false;
			if($('#modal_zoom_view_container').length<1) {
				var html=[];
				html.push(
					'<div id="modal_zoom_view_container" style="display:none;">',
					'<div id="zoom_view">',
					'<a id="zoom_close" class="zoom_close"></a>',
					'<div id="zoom_nav">',
					'<h3>Alternate Views</h3>',
					'<ul id="nav_shots_list">'
				);
				var imageUrls = product_options[currentProduct].colors[currentColor].imageURL;
				for(var i=0,l=imageUrls.length; i<l; i++){
					if (imageUrls[i]) {
						html.push('<li class="', (i == 0) ? 'current' : '', '" data-index="', i, '"><img src="', imageUrls[i].replace('$P_PROD$', '$P_ZOOM$'), '" width="66px" height="99px" /></li>');
					}
				}
				html.push(
					'</ul>',
					'<div id="zoom_color">',
                	'<div id="zoom_up" class="disabled"></div>',
                	'<div id="nav_color_wrap"><ul id="nav_colors_list">'
				);
				var colors = product_options[currentProduct].colors;
				for(var i=0,l=colors.length; i<l; i++) {
					var cssclass='';
					if(!currentSet && (colors[i].name==currentColorVal || (currentColorVal==-1 && i==0))){
						cssclass='current';
						currentColor=i;
						currentSet=true;
					}
					if (colors[i]) {
						html.push('<li class="', cssclass, '" data-index="', i, '"><img src="', colors[i].swatchImageURL.replace('$P_SWATCH$', '$P_Z_SWATCH$'), '" height="28px" width="28px" /></li>');
					}
				}
				html.push(
					'</ul></div>',
					'<div id="zoom_down" class="disabled"></div></div></div>',
            		'<div id="zoom_holder"></div>',
					'</div></div>'
				);
				$('body').append(html.join(''));
				
				if(colors.length>8){
					var currentPage=1;
					var totalPages= Math.ceil(colors.length/8);
					$('#zoom_down').removeClass("disabled").click(function(){
						if(currentPage>=totalPages){
							return false;
						}
						var $t = $('#nav_colors_list');
						$t.animate({'top':parseInt($t.css('top'))-170});
						currentPage++;
						if(currentPage>=totalPages){
							$('#zoom_down').addClass('disabled');
						}
						$('#zoom_up').removeClass('disabled'); 
					});
					$('#zoom_up').click(function(){
						if(currentPage<=1){
							return false;
						}
						var $t = $('#nav_colors_list');
						$t.animate({'top':parseInt($t.css('top'))+170});
						currentPage--;
						if(currentPage<=1){
							$('#zoom_up').addClass('disabled');
						}
						$('#zoom_down').removeClass("disabled");
					});
				}
				
				$("#nav_shots_list > li").click(function(){
					$("#nav_shots_list > li").removeClass('current');
					$(this).addClass('current');
					currentShot = parseInt($(this).attr('data-index'));
					showFlash();
				});
				$("#nav_colors_list > li").click(function(){
					$("#nav_colors_list > li").removeClass('current');
					$(this).addClass('current');
					currentColor = parseInt($(this).attr('data-index'));
					showFlash();
				});
			}
		};
		/*fix to make zoom on + image--not working on IE
		$('#prod_preview div.zoom_overlay span').click(function(ev){
			alert('clicked');
			ev.preventDefault();
			$('#prod_preview div.zoom_overlay a').click();
		});*/
		$('#prod_preview div.zoom_overlay a,#prod_preview div.zoom_overlay').click(function(ev){
			defaultSwf = $(this).attr('href');
			ev.preventDefault();
			setParams();
			createZoomViewerHTML();
			setParams();
			$('#zoom_view').modal({
				close:false,
				closeClass:'zoom_close',
				persist:true,
				containerId:'modal_zoom_view_container',
				onShow:function(){
					showFlash();
				}
			});
			return false;
		});
		$('#prod_preview div.image_wrap a').click(function(ev){
			defaultSwf = $(this).attr('href');
			ev.preventDefault();
			setParams();
			createZoomViewerHTML();
			setParams();
			$('#zoom_view').modal({
				close:false,
				closeClass:'zoom_close',
				persist:true,
				containerId:'modal_zoom_view_container',
				onShow:function(){
					showFlash();
				}
			});
			return false;
		});
	},
	_setupQuickSets:function(){
		var quicksets = {
			"8":{
				"main":"8",
				"primary":"2",
				"secondary":"1"
			},
			"12":{
				"main":"12",
				"primary":"2",
				"secondary":"1"
			},
			"16":{
				"main":"16",
				"primary":"3",
				"secondary":"1"
			}
		}
		$('#sel_quick_sets').change(function(){
			var val = $(this).val();
			if (val != '') {
				for(var key in quicksets[val]) {
					$('div.set li.row.'+key+' li.quantity select').val(quicksets[val][key]);
				}
			}
		});
	},
	_setupProdResultsClear:function(){
		$('ul.product_results > li:nth-child(5n+1)').addClass('clearLeft');
		
		var $lis = $('ul.product_results > li');
		if($lis.length>0){
			var maxHeight=310;
			$lis.each(function(){
				if(this.scrollHeight>310){
					maxHeight = this.scrollHeight+10;
				}
			});
			if(maxHeight>310){
				$lis.css('height',maxHeight+'px');
			}
		}
	},
	_sortSizeDropdown: function($select){
		var $dd = $select || $('#sel_size');
		if ($dd.length > 0) {
			var selectedVal = $dd.val();
			var arrVals = [];
			var $options = $('option', $dd);
			$options.each(function(){
				arrVals.push({
					val: $(this).val(),
					text: $(this).text()
				});
			});
			arrVals.sort(function(a, b){
				return a.val - b.val;
			});
			for (var i = 0, l = arrVals.length; i < l; i++) {
				$($options[i]).val(arrVals[i].val).text(arrVals[i].text);
			}
			$dd.val(selectedVal);
		}
	},
	_setupSizingGuide:function(){
		$('#content a.sizing_guide_modal_a').click(function(ev){
			ev.preventDefault();
			var $this = $(this);
			$('div.sizing_guide_modal_div',$this.parent()).modal({
				close:false,
				closeClass:'modal_close',
				persist:true,
				containerId:'sizing_guide_modal_container'
			});
			
			return false;
		});
	},
	_setRecentlyViewedCookie:function($container){
		if($container.length>0){
			var val = $('form[name="form_product_detail"] input[name="ADD_CART_ITEM<>prd_id"]',$container).val();
			if(!val || val == '') {
				val = $('form[name="form_product_detail"] input[name="PRODUCT<>prd_id"]',$container).val();
			}
			if (val && val != '') {
				var U = belk.util;
				var S = belk.web.shop;
				var recent = U.readCookie(S.recentProductsCookieName) || '';
				if (recent != '') {
					var prods = recent.split(',');
					var index = $.inArray(val, prods);
					if(index>=0){
						prods.splice(index,1);
					}
					if(prods.length>S.recentProductsMaxSize-1){
						recent = prods.slice(0,S.recentProductsMaxSize-1).join(',');
					}
					else{
						recent = prods.join(',');
					}
				}
				recent = val + ((recent!='')?','+recent:'');
				U.createCookie(S.recentProductsCookieName,recent,365);
			}
		}
	}
}

$(document).ready(belk.web.shop.init);