/**
 * CNSlider
 *
 * Required settings:
 *  display   - provide number of items displayed at once
 *
 * Other settings:
 *  time      - transition time
 *  easing    - easing for the transition
 *  width     - width of the scrolled area (by default visible area + right margin on the last visible item)
 *  previous  - previous link text
 *  next      - next link text
 *  wrap      - wrap container selector
 *  slider    - items container selector
 *  items     - items selector
 */ 
(function($){
	var defaultOptions = {preloadImg:true};
	var jqTransformImgPreloaded = false;

	var jqTransformPreloadHoverFocusImg = function(strImgUrl) {
		//guillemets to remove for ie
		strImgUrl = strImgUrl.replace(/^url\((.*)\)/,'$1').replace(/^\"(.*)\"$/,'$1');
		var imgHover = new Image();
		imgHover.src = strImgUrl.replace(/\.([a-zA-Z]*)$/,'-hover.$1');
		var imgFocus = new Image();
		imgFocus.src = strImgUrl.replace(/\.([a-zA-Z]*)$/,'-focus.$1');				
	};

	
	/***************************
	  Labels
	***************************/
	var jqTransformGetLabel = function(objfield){
		var selfForm = $(objfield.get(0).form);
		var oLabel = objfield.next();
		if(!oLabel.is('label')) {
			oLabel = objfield.prev();
			if(oLabel.is('label')){
				var inputname = objfield.attr('id');
				if(inputname){
					oLabel = selfForm.find('label[for="'+inputname+'"]');
				} 
			}
		}
		if(oLabel.is('label')){return oLabel.css('cursor','pointer');}
		return false;
	};
	
	/* Hide all open selects */
	var jqTransformHideSelect = function(oTarget){
		var ulVisible = $('.jqTransformSelectWrapper ul:visible');
		ulVisible.each(function(){
			var oSelect = $(this).parents(".jqTransformSelectWrapper:first").find("select").get(0);
			//do not hide if click on the label object associated to the select
			if( !(oTarget && oSelect.oLabel && oSelect.oLabel.get(0) == oTarget.get(0)) ){$(this).hide();}
		});
	};
	/* Check for an external click */
	var jqTransformCheckExternalClick = function(event) {
		if ($(event.target).parents('.jqTransformSelectWrapper').length === 0) { jqTransformHideSelect($(event.target)); }
	};

	/* Apply document listener */
	var jqTransformAddDocumentListener = function (){
		$(document).mousedown(jqTransformCheckExternalClick);
	};	
			
	/* Add a new handler for the reset action */
	var jqTransformReset = function(f){
		var sel;
		$('.jqTransformSelectWrapper select', f).each(function(){sel = (this.selectedIndex<0) ? 0 : this.selectedIndex; $('ul', $(this).parent()).each(function(){$('a:eq('+ sel +')', this).click();});});
		$('a.jqTransformCheckbox, a.jqTransformRadio', f).removeClass('jqTransformChecked');
		$('input:checkbox, input:radio', f).each(function(){if(this.checked){$('a', $(this).parent()).addClass('jqTransformChecked');}});
	};

	/***************************
	  Buttons
	 ***************************/
	$.fn.jqTransInputButton = function(){
		return this.each(function(){
			var newBtn = $('<button id="'+ this.id +'" name="'+ this.name +'" type="'+ this.type +'" class="'+ this.className +' jqTransformButton"><span><span>'+ $(this).attr('value') +'</span></span>')
				.hover(function(){newBtn.addClass('jqTransformButton_hover');},function(){newBtn.removeClass('jqTransformButton_hover')})
				.mousedown(function(){newBtn.addClass('jqTransformButton_click')})
				.mouseup(function(){newBtn.removeClass('jqTransformButton_click')})
			;
			$(this).replaceWith(newBtn);
		});
	};
	
	/***************************
	  Text Fields 
	 ***************************/
	$.fn.jqTransInputText = function(){
		return this.each(function(){
			var $input = $(this);
	
			if($input.hasClass('jqtranformdone') || !$input.is('input')) {return;}
			$input.addClass('jqtranformdone');
	
			var oLabel = jqTransformGetLabel($(this));
			oLabel && oLabel.bind('click',function(){$input.focus();});
	
			var inputSize=$input.width();
			if($input.attr('size')){
				inputSize = $input.attr('size')*10;
				$input.css('width',inputSize);
			}
			
			$input.addClass("jqTransformInput").wrap('<div class="jqTransformInputWrapper"><div class="jqTransformInputInner"><div></div></div></div>');
			var $wrapper = $input.parent().parent().parent();
			$wrapper.css("width", inputSize+10);
			$input
				.focus(function(){$wrapper.addClass("jqTransformInputWrapper_focus");})
				.blur(function(){$wrapper.removeClass("jqTransformInputWrapper_focus");})
				.hover(function(){$wrapper.addClass("jqTransformInputWrapper_hover");},function(){$wrapper.removeClass("jqTransformInputWrapper_hover");})
			;
	
			/* If this is safari we need to add an extra class */
			$.browser.safari && $wrapper.addClass('jqTransformSafari');
			$.browser.safari && $input.css('width',$wrapper.width()+16);
			this.wrapper = $wrapper;
			
		});
	};
	
	/***************************
	  Check Boxes 
	 ***************************/	
	$.fn.jqTransCheckBox = function(){
		return this.each(function(){
			if($(this).hasClass('jqTransformHidden')) {return;}

			var $input = $(this);
			var inputSelf = this;

			//set the click on the label
			var oLabel=jqTransformGetLabel($input);
			oLabel && oLabel.click(function(){aLink.trigger('click');});
			
			var aLink = $('<a href="#" class="jqTransformCheckbox"></a>');
			//wrap and add the link
			$input.addClass('jqTransformHidden').wrap('<span class="jqTransformCheckboxWrapper"></span>').parent().prepend(aLink);
			//on change, change the class of the link
			$input.change(function(){
				this.checked && aLink.addClass('jqTransformChecked') || aLink.removeClass('jqTransformChecked');
				return true;
			});
			// Click Handler, trigger the click and change event on the input
			aLink.click(function(){
				//do nothing if the original input is disabled
				if($input.attr('disabled')){return false;}
				//trigger the envents on the input object
				$input.trigger('click').trigger("change");	
				return false;
			});

			// set the default state
			this.checked && aLink.addClass('jqTransformChecked');		
		});
	};
	/***************************
	  Radio Buttons 
	 ***************************/	
	$.fn.jqTransRadio = function(){
		return this.each(function(){
			if($(this).hasClass('jqTransformHidden')) {return;}

			var $input = $(this);
			var inputSelf = this;
				
			oLabel = jqTransformGetLabel($input);
			oLabel && oLabel.click(function(){aLink.trigger('click');});
	
			var aLink = $('<a href="#" class="jqTransformRadio" rel="'+ this.name +'"></a>');
			$input.addClass('jqTransformHidden').wrap('<span class="jqTransformRadioWrapper"></span>').parent().prepend(aLink);
			
			$input.change(function(){
				inputSelf.checked && aLink.addClass('jqTransformChecked') || aLink.removeClass('jqTransformChecked');
				return true;
			});
			// Click Handler
			aLink.click(function(){
				if($input.attr('disabled')){return false;}
				$input.trigger('click').trigger('change');
	
				// uncheck all others of same name input radio elements
				$('input[name="'+$input.attr('name')+'"]',inputSelf.form).not($input).each(function(){
					$(this).attr('type')=='radio' && $(this).trigger('change');
				});
	
				return false;					
			});
			// set the default state
			inputSelf.checked && aLink.addClass('jqTransformChecked');
		});
	};
	
	/***************************
	  TextArea 
	 ***************************/	
	$.fn.jqTransTextarea = function(){
		return this.each(function(){
			var textarea = $(this);
	
			if(textarea.hasClass('jqtransformdone')) {return;}
			textarea.addClass('jqtransformdone');
	
			oLabel = jqTransformGetLabel(textarea);
			oLabel && oLabel.click(function(){textarea.focus();});
			
			var strTable = '<table cellspacing="0" cellpadding="0" border="0" class="jqTransformTextarea">';
			strTable +='<tr><td id="jqTransformTextarea-tl"></td><td id="jqTransformTextarea-tm"></td><td id="jqTransformTextarea-tr"></td></tr>';
			strTable +='<tr><td id="jqTransformTextarea-ml">&nbsp;</td><td id="jqTransformTextarea-mm"><div></div></td><td id="jqTransformTextarea-mr">&nbsp;</td></tr>';	
			strTable +='<tr><td id="jqTransformTextarea-bl"></td><td id="jqTransformTextarea-bm"></td><td id="jqTransformTextarea-br"></td></tr>';
			strTable +='</table>';					
			var oTable = $(strTable)
					.insertAfter(textarea)
					.hover(function(){
						!oTable.hasClass('jqTransformTextarea-focus') && oTable.addClass('jqTransformTextarea-hover');
					},function(){
						oTable.removeClass('jqTransformTextarea-hover');					
					})
				;
				
			textarea
				.focus(function(){oTable.removeClass('jqTransformTextarea-hover').addClass('jqTransformTextarea-focus');})
				.blur(function(){oTable.removeClass('jqTransformTextarea-focus');})
				.appendTo($('#jqTransformTextarea-mm div',oTable))
			;
			this.oTable = oTable;
			if($.browser.safari){
				$('#jqTransformTextarea-mm',oTable)
					.addClass('jqTransformSafariTextarea')
					.find('div')
						.css('height',textarea.height())
						.css('width',textarea.width())
				;
			}
		});
	};
	
	/***************************
	  Select 
	 ***************************/	
	$.fn.jqTransSelect = function(){
		return this.each(function(index){
			var $select = $(this);

			if($select.hasClass('jqTransformHidden')) {return;}
			if($select.attr('multiple')) {return;}

			var oLabel  =  jqTransformGetLabel($select);
			/* First thing we do is Wrap it */
			var $wrapper = $select
				.addClass('jqTransformHidden')
				.wrap('<div class="jqTransformSelectWrapper"></div>')
				.parent()
				.css({zIndex: 80-index});
			
			/* Now add the html for the select */
			$wrapper.prepend('<div><span></span><a href="#" class="jqTransformSelectOpen"></a></div><ul></ul>');
			var $ul = $('ul', $wrapper).css('width',$select.width()).hide();
			/* Now we add the options */
			$('option', this).each(function(i){
				var oLi = $('<li><a href="#" index="'+ i +'">'+ $(this).html() +'</a></li>');
				$ul.append(oLi);
			});
			
			/* Add click handler to the a */
			$ul.find('a').click(function(){
					$('a.selected', $wrapper).removeClass('selected');
					$(this).addClass('selected');	
					/* Fire the onchange event */
					if ($select[0].selectedIndex != $(this).attr('index') && $select[0].onchange) { $select[0].selectedIndex = $(this).attr('index'); $select[0].onchange(); }
					$select[0].selectedIndex = $(this).attr('index');
					$('span:eq(0)', $wrapper).html($(this).html());
					$ul.hide();
					return false;
			});
			/* Set the default */
			$('a:eq('+ this.selectedIndex +')', $ul).click();
			$('span:first', $wrapper).click(function(){$("a.jqTransformSelectOpen",$wrapper).trigger('click');});
			oLabel && oLabel.click(function(){$("a.jqTransformSelectOpen",$wrapper).trigger('click');});
			this.oLabel = oLabel;
			
			/* Apply the click handler to the Open */
			var oLinkOpen = $('a.jqTransformSelectOpen', $wrapper)
				.click(function(){
					//Check if box is already open to still allow toggle, but close all other selects
					if( $ul.css('display') == 'none' ) {jqTransformHideSelect();} 
					if($select.attr('disabled')){return false;}

					$ul.slideToggle('fast', function(){					
						var offSet = ($('a.selected', $ul).offset().top - $ul.offset().top);
						$ul.animate({scrollTop: offSet});
					});
					return false;
				});

			// Set the new width
			var iSelectWidth = $select.outerWidth();
			var oSpan = $('span:first',$wrapper);
			var newWidth = (iSelectWidth > oSpan.innerWidth())?iSelectWidth+oLinkOpen.outerWidth():$wrapper.width();
			$wrapper.css('width',newWidth);
			$ul.css('width',newWidth-2);
			oSpan.css({width:iSelectWidth});
		
			// Calculate the height if necessary, less elements that the default height
			//show the ul to calculate the block, if ul is not displayed li height value is 0
			$ul.css({display:'block',visibility:'hidden'});
			var iSelectHeight = ($('li',$ul).length)*($('li:first',$ul).height());//+1 else bug ff
			(iSelectHeight < $ul.height()) && $ul.css({height:iSelectHeight,'overflow':'hidden'});//hidden else bug with ff
			$ul.css({display:'none',visibility:'visible'});
			
		});
	};
	$.fn.jqTransform = function(options){
		var opt = $.extend({},defaultOptions,options);
		
		/* each form */
		 return this.each(function(){
			var selfForm = $(this);
			if(selfForm.hasClass('jqtransformdone')) {return;}
			selfForm.addClass('jqtransformdone');
			
			$('input:submit, input:reset, input[type="button"]', this).jqTransInputButton();			
			$('input:text, input:password', this).jqTransInputText();			
			$('input:checkbox', this).jqTransCheckBox();
			$('input:radio', this).jqTransRadio();
			$('textarea', this).jqTransTextarea();
			
			if( $('select', this).jqTransSelect().length > 0 ){jqTransformAddDocumentListener();}
			selfForm.bind('reset',function(){var action = function(){jqTransformReset(this);}; window.setTimeout(action, 10);});
			
			//preloading dont needed anymore since normal, focus and hover image are the same one
			/*if(opt.preloadImg && !jqTransformImgPreloaded){
				jqTransformImgPreloaded = true;
				var oInputText = $('input:text:first', selfForm);
				if(oInputText.length > 0){
					//pour ie on eleve les ""
					var strWrapperImgUrl = oInputText.get(0).wrapper.css('background-image');
					jqTransformPreloadHoverFocusImg(strWrapperImgUrl);					
					var strInnerImgUrl = $('div.jqTransformInputInner',$(oInputText.get(0).wrapper)).css('background-image');
					jqTransformPreloadHoverFocusImg(strInnerImgUrl);
				}
				
				var oTextarea = $('textarea',selfForm);
				if(oTextarea.length > 0){
					var oTable = oTextarea.get(0).oTable;
					$('td',oTable).each(function(){
						var strImgBack = $(this).css('background-image');
						jqTransformPreloadHoverFocusImg(strImgBack);
					});
				}
			}*/
			
			
		}); /* End Form each */
				
	};/* End the Plugin */

})(jQuery);

/**
 * loupe - an image magnifier for jQuery
 * http://github.com/jdbartlett/loupe
 */
(function($) {
	$.fn.loupe = function(options) {
		if (!this.length) { return this; }
		options = $.extend({ 'loupe':'loupe', 'width':200, 'height':150 }, options || {});

		this.each(function() {
			var $this = $(this), loupe = null, big, small = null, time = null,
			hide = function() { loupe.hide(); },
			move = function(e) {
				var os = small.offset(), sW = small.outerWidth(), sH = small.outerHeight(), oW = options.width/2, oH = options.height/2;

				if (e.pageX > sW + os.left + 10 || e.pageX < os.left - 10 ||
					e.pageY > sH + os.top + 10 || e.pageY < os.top - 10) {
					return hide();
				}
				if (time && clearTimeout(time)) { time = null; }
				loupe.css({ 'left':e.pageX - oW, 'top':e.pageY - oH });
				big.css({
					'left':-(((e.pageX - os.left) / sW) * big.width() - oW)|0,
					'top':-(((e.pageY - os.top) / sH) * big.height() - oH)|0
				});
			};

			$this.mouseenter(function(e) {
				if (!small) { small = $this.is('img') ? $this : $this.find('img:first'); }
				loupe = (loupe || (loupe = $('<div></div>').addClass(options.loupe)
					.css({
						width:options.width, height:options.height,
						position:'absolute', overflow:'hidden'
					})
					.append(big = $('<img src="' + $this.attr($this.is('img') ? 'src' : 'href') +'" rel="'+$this.attr($this.is('img') ? 'src' : 'rel')+'"/>').css({position:'absolute'}))//For making cool new design clickable
					.mousemove(move).appendTo('body')
				)).show(); move(e);
			}).mouseout(function() { time = setTimeout(hide, 10); });
		});

		return this;
	};
})(jQuery);

(function($) {
	jQuery.fn.CNSlider = function(options){
		var defaults = {
			width     : 0,
			display   : 6,			
			time      : 500,
			easing    : 'swing',			
			previous  : 'Previous',
			next      : 'Next',
			wrap      : 'div.wrapper',
			slider    : 'ul.items',
			items     : 'ul.items li'
		};
		
		var settings = $.extend({}, defaults, options);
		
		return this.each(function(){
			var $root     = $(this);
			var $wrap     = $root.find(settings.wrap);
			var $slider   = $root.find(settings.slider);
			var $items    = $root.find(settings.items);
			
			var all     = $items.size();
			var pages   = Math.ceil(all/settings.display);
			
			// check is there enough items for paging
			if($items.size() <= settings.display) {
				return false;
			}
			
			// try to estimate visible area width if not set
			var width = settings.width;
			if(settings.width === 0) {
				width = $wrap.width() + parseInt($items.css('margin-right'),10);
			}
			
			// defaults
			var current = 1;
			
			// insert paging links
			$root.append('<ul class="index"><li class="prev"><a href="#previous" class="off">'+settings.previous+'</a></li><li class="next"><a href="#next">'+settings.next+'</a></li></ul>');
			var $controls = $root.find('ul.index');

			// check for first/last page and indicate that in controls
			var check = function(){
				if(current === 1){
					$controls.find('li.prev a').addClass('off');
				} else {
					$controls.find('li.prev a').removeClass('off');
				}
				
				if(current === pages){
					$controls.find('li.next a').addClass('off');
				} else {
					$controls.find('li.next a').removeClass('off');
				}
			};
			
			// add events
			$controls.find('a').click(function(){
				var 
					move,
					direction = $(this).parent().attr('class');
					
				if($slider.is(':animated') || (current == 1 && direction == 'prev') || (current == pages && direction == 'next')) {
					return false;
				}
				
				if(direction == 'next'){
					move = '-='+width+'px';
					current++;
				} 
				else {
					move = '+='+width+'px';
					current--;
				}					
				
				$slider.animate({'marginLeft': move}, settings.time, settings.easing);
				check();
				
				return false;
			});
		});
	};
})(jQuery);

/**
 * Compact labels plugin
 */
(function($){$.fn.compactize=function(inputField){return this.each(function(){var label=$(this),input=inputField||$('#'+label.attr('for'));input.focus(function(){label.hide();}).blur(function(){if(input.val()===''){label.show();}});window.setTimeout(function(){if(input.val()!==''){label.hide();}},50);});};})(jQuery);

/*
 * hrefID jQuery extention - returns a valid #hash string from link href attribute in Internet Explorer
 */
(function($){$.fn.extend({hrefId:function(){return $(this).attr('href').substr($(this).attr('href').indexOf('#'));}});})(jQuery);

/*
 * Scripts
 *
 */
var Engine = {
	utils : {
		links : function(){
			$('a[rel*=external]').click(function(e){
				e.preventDefault();
				window.open($(this).attr('href'));						  
			});
		},
		mails : function(){
			$('a[href^="mailto:"]').each(function(){
				var mail = $(this).attr('href').replace('mailto:','');
				var replaced = mail.replace('/at/','@');
				$(this).attr('href','mailto:'+replaced);
				if($(this).text() == mail) {
					$(this).text(replaced);
				}
			});
		},
		labels : function(){
			$('.newsletter form label, .shopping-cart-form .shipping-wrapper label, .checkout-intro form label, .checkout .customers form p label, .access-ab form p label,.quantity_list label,#calculateShipForm label,.shipping_list label,#forgot-password .lightbox-inner label').compactize();
		},
		/**
		 * Creates a new lightbox. 
		 * In case another lightbox already exists, it is being pushed under the overlay
		 */
		lightbox : function(options){
			var overlay = $('#byb-overlay');
			
			options.callback = options.callback || function(){};
			
			if (overlay.length > 0) {
				//move the last lightbox under the overlay
				var lb = $('.byb-lightbox:last').css('z-index',900);
				
				if ($.browser.msie === true && $.browser.version === '6.0') {
					lb.find('select').css('visibility','hidden');
				}																								
			}
			else {
				//create new overlay
				overlay = $('<div id="byb-overlay"/>').css('opacity',0);				
				$('body').append(overlay);
				overlay.animate({ opacity : 0.35 });				
			}		

			//IE6 requires hiding selects and manual resizing of overlay
			if ($.browser.msie === true && $.browser.version === '6.0') {
				$('#root select').css('visibility','hidden');
								
				$(window).resize(function(){
					$(overlay).height($(document).height());					
				}).triggerHandler('resize');
			}
			
			//we create the lightbox wrapper in a hidden state
			var wrapper = $('<div class="byb-lightbox"/>').hide();
			if (options.additionalClass) {
				wrapper.addClass(options.additionalClass);
			}
			if (options.id) {
				wrapper.attr('id',options.id);
			}
		
			var innerWrap = $('<div class="byb-wrapper"/>');
			wrapper.append(innerWrap);
			$('body').append(wrapper);	
			
			innerWrap.html(options.html);
			
			//that's the close button
			wrapper.find('.close a').click(function(e){
				e.preventDefault();
				Engine.utils.closeLightbox(wrapper);
			});								
			
			options.callback.apply(innerWrap);
			wrapper.draggable({ handle : 'form' });
			wrapper.fadeIn();
		},
		//close provided lightbox , can be used with #id
		closeLightbox : function(el) {
			el = $(el);
			
			el.fadeOut(function(){
				$(this).remove();
				
				//we check if there are any lightboxes underneath
				if ($('.byb-lightbox').length > 0) {
					//if so, we move it above the overlay
					var lb = $('.byb-lightbox:last').css('z-index','1100');
					if ($.browser.msie === true && $.browser.version === '6.0') {
						lb.find('select').css('visibility','visible');
					}																
				}
				else {
					$('#byb-overlay').fadeOut(function(){
						$(this).remove();
					});
					if ($.browser.msie === true && $.browser.version === '6.0') {
						$('#root select').css('visibility','visible');
					}											
				}
			});			
		}	
	},
	enhancements : {
		sliders : function(){
			$('.slider-a .slider-wrap').CNSlider({
				'display' : 4,
				'width' : 710
			});
			
			$('.slider-b .slider-wrap').CNSlider({
				'display' : 1,
				'width' : 692,
				'slider' : '.inner',
				'items' : '.inner ul'
			});		
			
			$('.slider-c .slider-wrap').CNSlider({
				'display' : 4,
				'width' : 410
			});	
			
		},
		configurator : function(){
			var options = $('.configurator .product-options');
			var btn = $('.configurator .submit');
			
			$('.slider-c .items a').click(function(e){
				e.preventDefault();
				$('.slider-c .items a').removeClass();
				$(this).addClass('active');
				var target = $(this).hrefId();
			    var productId = target.substring(target.lastIndexOf('~')+1,target.length);
			    target = $(target.substring(0,target.lastIndexOf('~')));
			    $.ajax({
			        url: "/byb/control/productFeature",
			        cache: false,
			        global: false,
			        type: "POST",
			        data: 'virtualProduct_id='+ productId,
			        dataType: "html",
			        success: function(msg){
					    	 options.show();
					    	 $('div#options-feature').html(msg);
							 btn.hide().show(); //hide show to fix IE no redraw bug
							 if($("select#sizeId option").length==1){								 		 
								 getMaterial();
							 }
			        }
			    });
			});
		},
		comments : function(){
			$('.comments-a h2').click(function(){
				$(this).parent().toggleClass('comments-a-active');
			});
		},
		userSettings : function(){
			$('.user-settings h2').click(function(){
				$(this).toggleClass('active');
				$(this).next('.foldable').toggleClass('foldable-active');
			});
		},
		orderSummary : function(){

			//check if we are on the right page				
			if ( $('.checkout-form').length  === 0 ) {
				return;	
			}
			
			var summary = $('.checkout-form > .col-2'),
			    form = $('.checkout-form > .col-1');

			//check if summary is actualy longer than the form on the left side
			var diff = form.height() - summary.height();

			//order summary is actualy higher than details form (loads of items in cart)
			if (diff < 0) {
				return;
			}
			
			//check what the initial offset of summary is
			if(summary.length>0){
				var baseOffset = summary.offset().top;
			}
			
			var scrollIt = function(e){
				var offset = $(window).scrollTop() - baseOffset;	
				
				//offset cannot be negative
				if (offset < 0) {
					offset = 0;
				}
				
				//don't slide it too far
				if (offset > diff) {
					offset = diff;
				}
				
				summary.stop().animate({ 'marginTop' : offset });
			};
			
			$(window).scroll(scrollIt);
			
			//do the initial scrolling in case page is being refreshed
			scrollIt();
		},
		listing : function(){
			$('form.listing-options').each(function(){
				var 
					wrapper = $('<p class="options-a"/>'),
					selectNone,upload,selectAll, deleteSelected;

				var items = $(this).parent('.listing-a').find('.listing-items input[type=checkbox]');	
				var allMyImagesItems = $(this).parent('.allmyimages').find('.listing-items input[type=checkbox]');

				$(document).bind('listing.selectionChange',function(e){
					if($('.listing-items input[type=checkbox]:checked').length === 0) {
						selectNone.add(deleteSelected).addClass('disabled');
						return;
					}
					selectNone.add(deleteSelected).removeClass('disabled');
				});
				
				items.click(function(e){
					$(document).trigger('listing.selectionChange');
				});
				
				allMyImagesItems.click(function(e){
					$(document).trigger('listing.selectionChange');
				});
				
				upload = $('<a href="/byb/control/uploadImage" id="upload-trigger">Upload</a>').click(function(e){
					e.preventDefault();
					$.get($(this).attr('href'),function(data){
						Engine.utils.lightbox({
							'html' : data,
							'additionalClass' : 'byb-lightbox-b byb-lightbox-b-narrow'
						});						
					});
				});
				
				selectAll = $('<a href="#">Select all</a>').click(function(e){
					e.preventDefault();
					items.attr('checked','checked');		
					allMyImagesItems.attr('checked','checked');
					$(document).trigger('listing.selectionChange');
				});
				
				selectNone = $('<a href="#" class="disabled">Select none</a>').click(function(e){
					e.preventDefault();						
					if ($(this).hasClass('disabled')) {
						return;
					}
					items.attr('checked','');
					allMyImagesItems.attr('checked','');
					$(document).trigger('listing.selectionChange');					
				});

				deleteSelected = $('<a href="#" class="disabled">Delete selected</a>').click(function(e){
					e.preventDefault();						
					if ($(this).hasClass('disabled')) {
						return;
					}												
					$('form.listing-items').get(0).submit();						
				});
				
				$(document).triggerHandler('listing.selectionChange'); //we want to take possible page refresh with checked boxes into account
				if($('#upload-trigger').html()!=null){
					wrapper.append(upload,document.createTextNode(' | '))
				}
				wrapper.append(selectAll, document.createTextNode(' | '), selectNone, document.createTextNode(' | '), deleteSelected);

				$(this).prepend(wrapper);
			});			
		},
		forgotPassword : function(){
			$('a.forgot').click(function(e){
				e.preventDefault();
				
				Engine.utils.lightbox({
					'html' : $('#forgot-password-form').html(),
					'additionalClass' : 'byb-lightbox-a',
					'callback' : function(){ //this keyword relates always to lightbox wrapper in the callback function 
						$(this).find('label').compactize($(this).find('input'));
					}
				});
			});												
		},
		/*
		 * Displays a lightbox with edit options
		 */
		
	  imagesUpload : function(){
		$('#upload-trigger').click(function(e){
			e.preventDefault();
			$.get($(this).attr('href'),function(data){
				Engine.utils.lightbox({
					'html' : data,
					'additionalClass' : 'byb-lightbox-b byb-lightbox-b-narrow'
				});						
			});
		  });
		},
		shareItem : function(){
			$("#content .product-share .email-item a").click(function(e){
				e.preventDefault();
				$.get($(this).attr('href'),function(data){
					Engine.utils.lightbox({
						'html' : data,
						'additionalClass' : 'byb-lightbox-b sharing-box'
					});
				});
				
				//form dragging
				$(".sharing-box").easydrag(true);
			});
		},
		/*
		 * Displays a lightbox with edit options
		 */
		editDetails : function(){
			
			//this is only run on the listings page
			if ($('.listing-items').length === 0){
				return;
			}
			
			//fetch the edit details form and open it in a lightbox
			$('.listing-items .o .edit').click(function(e){
				e.preventDefault();
				$.get($(this).attr('rel'),function(data){
					Engine.utils.lightbox({
						'html' : data,
						'additionalClass' : 'byb-lightbox-b'
					});
				});
			});
		},
	  imagesUpload : function(){
		$('#upload-trigger').click(function(e){
			e.preventDefault();
			$.get($(this).attr('href'),function(data){
				Engine.utils.lightbox({
					'html' : data,
					'additionalClass' : 'byb-lightbox-b byb-lightbox-b-narrow'
				});
			});
		  });
		},
		zoom : function(){
			$('div.product-img p.workspace a').loupe({
				'width' : 400,
				'height' : 300
			});

			$('a.shopping_cart_zoom').loupe({
			    'width' : 400,
			    'height' : 300
			   });
			
		},
		tabs : function(){
			//tabs
			var tabList = $("#content .tabs-area ul.tab-list");
			var singleTab = $("#content .tabs-area .single-tab");
			// singleTab.hide();
			tabList.find("li:last").addClass('active');
			$("#content .tabs-area .single-tab:last").addClass('single-tab-active');
			tabList.find('li').click(function(){
				tabList.find('li').removeClass("active");
				$(this).addClass('active');
				singleTab.removeClass('single-tab-active');
				var activeTab = $(this).find('a').attr('href');
				$(activeTab).css('opacity',0).addClass('single-tab-active').fadeTo('normal',1);
				return false;
			});
			$("#content .show-review a").click(function(){
				tabList.find('li').removeClass("active");
				singleTab.removeClass('single-tab-active');
				var activeTab = $(this).attr('href');
				$(activeTab).css('opacity',0).addClass('single-tab-active').fadeTo('normal',1);
				var activeLink = $(activeTab).attr('id');
				tabList.find('li.'+activeLink).addClass('active');
				return false;
			});			
		},
		zebra : function(){
			$(".access-a .tabs-area .single-tab table tr:nth-child(odd)").css('background-color','#EFF4FD');			
		},
		combobox : function(){

			//other combos
			$('div.form-section-selects').jqTransform();
			//$('.search-filter-b').jqTransform();
			if($("ul.combo").length==0){
				$("#content .quantity input#quantity1").after("<ul class='combo'><li><strong id='combo-box'>Choose:</strong><ul /></li></ul>");
			}
			$("#content #hidden-select option").each(function(){
				var hiddenOpt = $(this).clone();
				hiddenOpt.prependTo("#content .quantity .combo ul").wrap('<li />');
			});
			var comboLi = $("#content .quantity .combo ul li");
			comboLi.each(function(){$(this).prependTo( $(this).parent() );});
			comboLi.each(function(){
				
				var newVal = $(this).find('option').html().replace(/<\/?[^>]+>/gi, '');
				var save="";
				var value="";
				if(newVal.indexOf('(')==-1){
					save="";
					value=newVal;
				}
				else{
				save = newVal.substring(newVal.indexOf('('), newVal.indexOf(')'))
				value = newVal.substring(0,newVal.indexOf('('));
				}
				//alert(save+"   as " + value);
				var space = "";
				
				value = $.trim(value);
				if(value.length==4){
					space = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
				}
				if(value.length==3){
					space = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
				}
				if(value.length==2){
					space = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
				}
				if(value.length==1){
					space = "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
				}
				if(newVal.indexOf('(')==-1){
				finalValue  = value+ space + save;
				}else{
					finalValue  = value+ space + save+")";
				}
				//alert(finalValue)
				$(this).html(finalValue);
			});

			var comboList = $('#combo-box').parent().find('ul');

			var close = function(){
				comboList.hide();
			};
			
			comboList.click(function(e){

				var comboVal = $(e.target).clone().text();
				if(comboVal.indexOf('(')==-1)
					var value = comboVal;
				else
					var value = comboVal.substring(0,comboVal.indexOf('('));
				value = parseInt(value);
				//value = jQuery.trim(value);
				
				$("#content .quantity input#quantity").attr('value',value);

				productPriceValidation();
				close();
				$(document).unbind('click',close);
			});
			$("#combo-box").click(function(){
				var comboList = $(this).parent().find('ul');
				comboList.stop().slideDown('fast');				
				$(document).bind('click',close);
			});			
		}
   },	
	fixes : {
		inputs : function(){
			if ($.browser.msie === false || $.browser.version !== '6.0') {
				return ;
			}
			$('input[type=text], input[type=password]').addClass('inputfield');
		}
	}
};
	
//functions initialized on document ready
jQuery(function($) {
	
	Engine.utils.mails();
	Engine.utils.labels();

	Engine.enhancements.forgotPassword();
	Engine.enhancements.sliders();	
	Engine.enhancements.configurator();
	Engine.enhancements.comments();
	Engine.enhancements.userSettings();
	Engine.enhancements.orderSummary();

	Engine.enhancements.listing();

	//edit details popup
	Engine.enhancements.editDetails();
	
	//upload trigger
	Engine.enhancements.imagesUpload();
	//Engine.enhancements.shareItem();
	
	//edit details popup
	
	//upload trigger
	Engine.enhancements.imagesUpload();
		
	Engine.enhancements.zoom();
	Engine.enhancements.tabs();
	Engine.enhancements.zebra();
	Engine.enhancements.combobox();
	Engine.fixes.inputs();	
	$('.close a').click(function(e){
		e.preventDefault();
		$('#tellafriend-form').addClass('hidden');
		$('#tellafriend-form input[type="text"]').val("");
		$('#tellafriend-form textarea').val("");
	});	
	$('.pr-snippet-read-reviews a').click(function(event){
		/*$('.tab03').trigger('click');*/
		var tabList = $("#content .tabs-area ul.tab-list");
		var singleTab = $("#content .tabs-area .single-tab");
		tabList.find('li').removeClass("active");
		$('.tab03').addClass('active');
		singleTab.removeClass('single-tab-active');
		var activeTab = $('.tab03').find('a').attr('href');
		$(activeTab).css('opacity',0).addClass('single-tab-active').fadeTo('normal',1);
		return false;
	});
	//For making cool new design clickable one more change is in loupe function.
	$(".loupe").live('click',function(){
		clickLink = $(this).children("img").attr("rel");
		if(clickLink!="")
			location.href=clickLink;
		
	});
	$(".shipping_list .shipping_details").hide();	
	$(".quantity_list .details").hide();
	$("input[name='quantity_option']").live('click',function(){
		if($(this).parent("td").parent("tr").parent("tbody").parent("table").parent("li.first").length>0){
		}
		else{
		$("#quantity").val($(this).val());
		$(".quantity_list .details").hide();
		//alert($(this).parent("td").parent("tr").parent("tbody").parent("table").parent("li").children(".details").length);
		$(this).parent("td").parent("tr").parent("tbody").parent("table").parent("li").children(".details").show(600);
		$("#option_quantity").val($(this).val());
		
		}
	});
	
	$(".quantity_list li").live('click',function(){	
		$(this).find("input[name='quantity_option']").attr("checked","checked");		
		$(".quantity_list li").removeClass("live");
		$(this).addClass("live");		
		if(!($(this).hasClass("first"))){			
			$(".quantity_list .details").hide();
			$(this).find(".details").show(600);				
			$("#quantity").val($(this).find("input[name='quantity_option']").val());
			$("#price_list1").val($(this).find(".quote_price").val());
			var price = $(this).find(".quote_price").val();
			var qty = $("#quantity").val();
			var variantProductId = $("#variantProductId").val();
				if($(".quotes").length>0){
				//for differentiating between quotes page and dlp	
				//var shippingEstimate = $("#shippingEstimate1").val();
					
					setTimeout(function(){addToQuoteCart(variantProductId,qty)},1000);
					setTimeout(function(){updateQuoteOrderSummary(qty,price)},2000);
					
					//addToQuoteCart(variantProductId,qty);
					//updateQuoteOrderSummary(qty,price);
				}
			}
		else{
			if($(this).find(".price_desc").length>0){
				$(".quantity_list .details").hide();
				$(this).find(".details").show(600);
			}else{
				$(".quantity_list .details").hide();				
			}
			$("#equantity").focus();			
		}
	});
	//For Shipping List events
	$(".shipping_list li").live('click',function(){  
		    
		  
		  if(!($(this).hasClass("first"))){ 
			  $(".shipping_list li").removeClass("live");
			  $(this).addClass("live");  
		   $(this).find("input[class='calculate_option']").attr("checked","checked");
		   $(".shipping_list .shipping_details").hide();
		   $(this).find(".shipping_details").show(600);   
		   var shippingEstimate = $(this).find(".shippingEstimate").val();
		   var shipping_method = $(this).find(".shipping_method").val();
		   var postalCode = $(this).find(".postalCode").val();
		   $("#shippingEstimate1").val(shippingEstimate);
		   shipping_type = $(this).find("input[class='calculate_option']").attr("rel");
		   //alert(shipping_type + "is"+ $(".shipping_type1").length +"val"+$(".shipping_type1").val());
		   $("#shipping_type1").val(shipping_type);
		   //alert(shippingEstimate);
		   setTimeout(function(){calculateQuoteShipping(shipping_method,postalCode)},1000);
		   setTimeout(function(){updateQuoteTotal(shippingEstimate)},2000);
		   
		   //$("#quantity").val($(this).find("input[name='quantity_option']").val());
		   
		  }
		  else{			
			  $(this).addClass("live");  
		   
		   //$("#equantity").focus();   
		  }
		 });
	/*$('.sort').each(function(){
		//$(this).change(ajaxSort);		
	})*/
			
		$('.shapeList input').click(function(){
			if($('.shapeList '+ this+':checked').length>0){
				if($('.shapeList '+this+':checked').length>1){
					//alert($(this).val()+"hi");
					getProductFeature($(this).val(),'append');
						//alert("apend");
					
				}
				else{
					//alert("refresh");
					getProductFeature($('.shapeList '+this+':checked').val(),'refresh')
				}
			}
			else{				
				//alert("remove");
				getProductFeature($('.shapeList '+this+':checked').val(),'remove');
				
			}
		});
		
	});
		

function updateQuoteOrderSummary(quantity,price){
	var virtualProductId = $("#virtualProductId").val();
	var variantProductId  = $("#variantProductId").val();
	var sizeId =  $("#sizeId").val();
	var shapeId = $("#shapeId").val();
	var materialId =  $("#materialId").val();
	var params = {virtualProductId :virtualProductId,
				  variantProductId : variantProductId,
				  quantity : quantity,
				  price : price,
				  sizeId:sizeId,
				  shapeId:shapeId,
				  materialId:materialId
               };


	   $.ajax({
		        url: "/byb/control/updateQuoteOrderSummary",
		        cache: false,
		        global: false,
		        type: "POST",
		        data: params,
		        dataType: "html",
		        success: function(msg){
		   $('div#order-summary').html(msg);
		 
		  if($(".shipping_list li").length>=1){
				   validateZip();
		   }
		   else if($(".shipping_list li").length == 0) {
			   $.ajax({
			   url: "/byb/control/showQuoteEnterPin",
		        cache: false,
		        global: false,
		        type: "POST",
		        dataType: "html",
		        success: function(msg){
			   	$('div#enterPin').html(msg);			   
		   }
			   });
		        }
		        }
		});
	   
	  
}

function addToQuoteCart(variantProductId,quantity){
	var params = {
			      add_product_id : variantProductId,
			      product_id : variantProductId,
			      quantity : quantity,
				  quotecart :"Y"
	           };
	$.ajax({
        url: "/byb/control/addToQuoteCart",
        cache: false,
        global: false,
        type: "POST",
        data: params,
        dataType: "html",
        async:false,
        success: function(msg){
       // $('div#order-summary').html(msg);
        }
   });
}

function updateQuoteTotal(shippingEstimate){
	var finalsubTotal = "" ;
	finalsubTotal =$("#price_list1").val();

	var params = {
					shippingEstimate : shippingEstimate,
					finalsubTotal : finalsubTotal
				  
               };


	   $.ajax({
		        url: "/byb/control/updateQuoteTotal",
		        cache: false,
		        global: false,
		        type: "POST",
		        data: params,
		        dataType: "html",
		        async:false,
		        success: function(msg){
		   $('#subtotal').html(msg);
		        }
		});
}

function tellAFriend(){
 	//var productId = $("#productId").val();
	var sendFrom  = $("#send-from").val();
	var sendTo =  $("#send-to").val();
	var quickView  = $("#quickView").val();
	var sendersName =  $("#senders-name").val();
	var friendsName =  $("#friends-name").val();
	var message =  $("#send-msg").val();
	var pageUrl =  $("#pageUrl").val();
	var imageUrl =  $("#imageUrl").val();
	var sizeMapHeight =  $("#sizeMapHeight").val();
	var sizeMapWidth =  $("#sizeMapWidth").val();
	var designTitle =  $("#designTitle").val();
	var designDescription =  $("#designDescription").val();
	message = message;
  	message = message.replace(/(\r\n)|(\n)/g,"newLine");
  	
	if(sendFrom == "" || sendFrom == null){
		alert('Please enter your e-mail address');
		return;
	}
	else if(sendTo == "" || sendTo == null){
		 alert("Please enter your friend's e-mail address");
		 return;
	}
	
	if(!(echeck(sendFrom))){
		 alert("Invalid E-mail ID");
		 return;
	}	
	if(!(echeck(sendTo))){
		 alert("Invalid E-mail ID");
		 return;
	}	
  	var params = {  
  			sendFrom : sendFrom,
  			sendTo : sendTo,
  			sendersName : sendersName,
  			friendsName : friendsName,
  			message : message,
  			pageUrl : pageUrl,
  			imageUrl:imageUrl,
  			sizeMapHeight:sizeMapHeight,
  			sizeMapWidth:sizeMapWidth,
  			designTitle:designTitle,
  			designDescription:designDescription
  		  			
  			
               };
  	if(quickView == undefined){
  		url = "/byb/control/emailFriend";
  	}else{
  		url = "/byb/control/quickViewEmailFriend";
  	}
  	
		   $.ajax({
			        url: url,
			        cache: false,
			        global: false,
			        type: "POST",
			        data: params,
			        dataType: "html",
			        success: function(msg){
			   			$('#tellafriend-form').addClass('hidden');
			   			lbox = $("#email-to-friend");
						lbox.hide().css({
							'left' : '50%',
							'right' : '50%'
						});				
						$("#byb-overlay-etf").fadeOut();
			   			$('#tellafriend-form input[type="text"]').val("");
		
			   			$('#tellafriend-form textarea').val("");
			        }
			});
  
  		
  		
  	}



function echeck(str) {
		
		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return false
		 }

 		 return true					
	}


function ajaxSort(sort){
		
		var sortType = $(sort).val();
		var categoryId = $("#categoryId").val();		
		var productId = $("#productId").val();
		var subcat = $('#subCategoryId').val();
		var catTitle = $('#categoryTitle').val();
		var sizeIdList =  new Array(10);
		var shapeIdList = new Array(2);
		var i = 0;
	
			$('#sizeList input:checked').each(function(){	
				
				sizeIdList[i] = $(this).val();
				i++
			});		
		i=0;				
		$('.shapeList input:checked').each(function(){	
			
			shapeIdList[i] = $(this).val();
			i++
		});
		$('body').append("<div id='no-indicator1' style='display: block;'> <p>Updating Product Selection...</p></div>");	
	    params = {	"action":"sort",
		    		"sortType":sortType,
		    		"category_id":categoryId,
		    		"productId":productId,
		    		"subcat" : subcat,
		    		"catTitle":catTitle,
		    		"sizeIdList" : sizeIdList,
			    	"shapeIdList" : shapeIdList
	    		}
	$.ajax({
		   type: "GET",
		   url: "/byb/control/sortCategoryDetail",
		   data: params,
		   success: function(data){
			$('.listing-b').html(data);
			$('#no-indicator1').remove();			
			
		   }
		});
}

function ajaxScroll(productId){
	var sortType = $("#sort").val();
	var categoryId = $("#categoryId").val();
	var viewIndex = $("#viewIndex").val();
	var viewSize =	$("#viewSize").val();
	var subcat = $('#subCategoryId').val();
	var catTitle = $('#categoryTitle').val();
	
	var sizeIdList =  new Array(10);
	var shapeIdList = new Array(2);
	var i = 0;

		$('#sizeList input:checked').each(function(){	
			
			sizeIdList[i] = $(this).val();
			i++
		});
	
	i=0;				
	$('.shapeList input:checked').each(function(){	
		
		shapeIdList[i] = $(this).val();
		i++
	});
	
    params = {	"action":"scroll",
	    		"sortType":sortType,
	    		"category_id":categoryId,
	    		"productId":productId,
	    		"VIEW_INDEX":viewIndex,
	    		"VIEW_SIZE":viewSize,
	    		"subcat" : subcat,
	    		"catTitle":catTitle,
	    		"sizeIdList" : sizeIdList,
		    	"shapeIdList" : shapeIdList	    		
	    	}
    if(!$('.listing-b ul').hasClass('pending')){
    	$('.listing-b ul').addClass('pending');
    	
		$.ajax({
			   type: "GET",
			   url: "/byb/control/scrollDesigns",
			   
			   data: params,
			   success: function(data){
				$('#viewIndex').remove();
				$('#viewSize').remove();
				$('.listing-b ul.items').append(data);
				$('.scroll-loader').hide();
				$('.listing-b ul').removeClass('pending');
			   }
			});
    }
}



function findSubcatDesigns(categoryId,productId,subCat){
	$('ul.sub li a').removeClass('active');
	if(subCat == ""){
		$("#other").addClass('active');
	}	
	else{
		$("#"+subCat).addClass('active');
	}		
	  params = {
			  	"action":"subCat",
	    		"category_Id":categoryId,
	    		"productId":productId,
	    		"subCatId":subCat
	  			}
	 // alert("categoryId"+categoryId);
	  $.ajax({
		   type: "Post",
		   url: "/byb/control/categorySearchFilter",
		   async:false,
		   data: params,
		   success: function(data){
		  $('.listing-b').html(data);
		  $('#no-indicator').hide();
		  if(subCat == ""){
			  subCat = "others";
			}
		  $('#subCategoryId').val(subCat);
		   }
		});
}



// Read and write cookies
// http://wiki.script.aculo.us/scriptaculous/show/Cookie
var Cookie = {
	set: function(name, value, daysToExpire) {
		var expire = '';
		if (daysToExpire != undefined) {
			var d = new Date();
			d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
			expire = '; expires=' + d.toGMTString();
		}
		return (document.cookie = escape(name) + '=' + escape(value || '') + expire + '; path=/');
	},
	get: function(name) {
		var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
		return (cookie ? unescape(cookie[2]) : null);
	},
	erase: function(name) {
		var cookie = Cookie.get(name) || true;
		Cookie.set(name, '', -1);
		return cookie;
	},
	accept: function() {
		if (typeof navigator.cookieEnabled == 'boolean') {
			return navigator.cookieEnabled;
		}
		Cookie.set('_test', '1');
		return (Cookie.erase('_test') === '1');
	}
}
