(function(n){n.fn.extend({popin:function(t){var i=this,t;return typeof t=="string"&&(t=n.fn.popin[t.toLowerCase()],n.isFunction(t)&&i.each(function(){t(n(this))})),i}});n.extend(n.fn.popin,{opened:[],dataKeys:{opened:"opened",center:"center",overlay:"overlay"},cssClasses:{overlay:"popin-overlay"},center:function(t){var i=n(window);t.css({left:(i.width()-t.outerWidth())/2,top:(i.height()-t.outerHeight())/2})},open:function(t){if(!t.data(n.fn.popin.dataKeys.opened)){var i=function(){n.fn.popin.center(t)},r=n("<div/>").addClass(n.fn.popin.cssClasses.overlay).appendTo(document.body);t.show().data(n.fn.popin.dataKeys.center,i).data(n.fn.popin.dataKeys.overlay,r).data(n.fn.popin.dataKeys.opened,!0);n(window).resize(i);i();n.fn.popin.opened.push(t)}},close:function(t){t.data(n.fn.popin.dataKeys.opened)&&(t.hide().data(n.fn.popin.dataKeys.opened,!1).data(n.fn.popin.dataKeys.overlay).remove(),n(window).unbind("resize",t.data(n.fn.popin.dataKeys.center)),n.fn.popin.opened.splice(n.fn.popin.opened.length-1,1))}})})(jQuery);Yosemite.Basket=function(){this.promoCode=ko.observable()};Yosemite.Basket.prototype={refresh:function(){this.url&&$.get(this.url,{editable:this.editable,promoCode:this.promoCode()},$.proxy(function(n){this.element.replaceWith(n)},this))},estimate:function(n){this.estimateShippingUrl&&this.estimateShipping&&$.get(this.estimateShippingUrl,{orderSubSetId:n},$.proxy(function(n){this.showPopin(this.estimateShipping,n)},this))},modifyProduct:function(n,t,i){this.modifyUrl&&this.modify&&$.post(this.modifyUrl,{orderSubsetId:n,productId:t,quantity:i},$.proxy(function(n){this.showPopin(this.modify,n)},this))},basketChanged:function(){this.refresh();Yosemite.basketChanged()},addPromoCode:function(){var n=this.promoCode();n&&this.addPromocodeUrl&&$.post(this.addPromocodeUrl,{promoCode:n},$.proxy(this.basketChanged,this))},handlePromoCode:function(n,t){return t.which==13&&this.addPromoCode(),!0},removePromoCode:function(n){n&&this.removePromocodeUrl&&$.post(this.removePromocodeUrl,{promoCode:n},$.proxy(this.basketChanged,this))},showPopin:function(n,t){n.find("section.content").html(t);n.popin("open")}};Yosemite.BasketRemove=function(){};Yosemite.BasketRemove.prototype={remove:function(){this.url&&this.productId&&this.ordersubsetId&&$.post(this.url,{productId:this.productId,orderSubsetId:this.ordersubsetId},$.proxy(this.updateBasket,this))},updateBasket:function(){var t=this.element.parents("[data-model='Yosemite.Basket']").first(),n;t.length==1&&(n=ko.dataFor(t.get(0)),n instanceof Yosemite.Basket&&n.refresh());Yosemite.basketChanged()}};Yosemite.BasketQuantity=function(){this.quantity=ko.observable()};Yosemite.BasketQuantity.prototype={afterInit:function(){this.initialQuantity=this.quantity();this.quantity.subscribe($.proxy(this.quantityChanged,this))},quantityChanged:function(n){!$.isNumeric(n)||n<0?this.quantity(this.initialQuantity):this.url&&this.productId&&this.ordersubsetId&&n!=this.initialQuantity&&$.post(this.url,{quantity:n,productId:this.productId,orderSubsetId:this.ordersubsetId},$.proxy(this.updateBasket,this))},updateBasket:function(){var t=this.element.parents("[data-model='Yosemite.Basket']").first(),n;t.length==1&&(n=ko.dataFor(t.get(0)),n instanceof Yosemite.Basket&&n.refresh());Yosemite.basketChanged()}};Yosemite.EstimateShipping=function(){this.regionId=ko.observable();this.countryId=ko.observable();this.regions=ko.observableArray();this.previousCountryId=ko.observable()};Yosemite.EstimateShipping.prototype={afterInit:function(){this.countryId.subscribe($.proxy(this.countryChanged,this));this.countryChanged()},countryChanged:function(){if(this.getRegionsUrl){var n=this.countryId();n?$.get(this.getRegionsUrl,{countryId:n},$.proxy(this.setRegions,this)):this.regions.removeAll()}},setRegions:function(n){var t=this;this.regions.removeAll();n.each(function(){t.regions.push(this)});this.initialized||(this.regionId(this.initialRegionId),this.initialized=!0)},cancel:function(){this.previousCountryId()?this.cancelUrl?$.post(this.cancelUrl,{previousCountryId:this.previousCountryId()}):window.location.reload():this.element.parents(".popin").first().popin("close")},change:function(){this.startUrl&&$.get(this.startUrl,$.proxy(function(n){this.element.replaceWith(n)},this))}};Yosemite.ProductViewer=function(){this.index=ko.observable();this.open=ko.observable(!1)};Yosemite.ProductViewer.prototype={afterInit:function(){this.open.subscribe($.proxy(this.zoom,this));this.index.subscribe($.proxy(this.indexChanged,this));$(window).resize($.proxy(function(){clearTimeout(this.timeout);this.timeout=setTimeout($.proxy(function(){this.setThumbsWidth();this.centerCurrentImage();this.goToIndex()},this),500)},this));this.setThumbsWidth();this.refreshLinksVisibility();this.index(0)},removeLargeImage:function(){this.largeImage&&(this.largeImage.remove(),this.largeImage=null)},zoom:function(){this.currentImage&&(this.removeLargeImage(),this.open()?(this.currentImage.hide(),this.largeImage=$("<img/>").attr({src:this.currentImage.data("large"),alt:this.currentImage.attr("alt")}).insertAfter(this.currentImage)):this.currentImage.show())},toggleZoom:function(){this.open(!this.open());this.setThumbsWidth();this.goToIndex();this.centerCurrentImage();Yosemite.centerOpenedPopin()},goToIndex:function(){var t=this.thumbs.children().length,n;for(this.thumbs.css({marginLeft:0}),n=0;n<t;n++)if(this.indexVisible())break;else this.move(-1,!0);this.refreshLinksVisibility()},indexVisible:function(){for(var t=this.getMargingLeft(),i=this.thumbs.parent().width(),n=0;n<this.index();n++)t+=this.thumbs.children().eq(n).outerWidth();return t>=0&&t<i},removeCurrentImage:function(){this.currentImage&&this.currentImage.remove()},indexChanged:function(){this.removeCurrentImage();this.currentImage=this.thumbs.children().eq(this.index()).find("img").first().clone();this.currentImage.appendTo(this.current);this.centerCurrentImage();Yosemite.centerOpenedPopin();this.open()&&this.zoom()},setThumbsWidth:function(){var n=0;this.thumbs.children().each(function(){n+=$(this).outerWidth()});this.thumbs.css({width:n})},getVisibleRange:function(){var t=this.thumbs.parent().width(),n=parseInt(this.thumbs.css("marginLeft"))*-1;return{min:n,max:n+t}},previous:function(){this.move(1)},next:function(){this.move(-1)},move:function(n,t){if(!this.thumbs.is(":animated")){var i={marginLeft:this.getMargingLeft()+this.thumbs.children().first().outerWidth()*n};this.refreshLinksVisibility(i.marginLeft);t?this.thumbs.css(i):(!this.currentImage||this.currentImage.is(":visible")||this.largeImage||this.index(this.index()-n),this.thumbs.animate(i,"fast"))}},getMargingLeft:function(){return parseInt(this.thumbs.css("marginLeft"))},refreshLinksVisibility:function(n){n==undefined&&(n=this.getMargingLeft());this.nextLink.css({visibility:n>this.thumbs.width()*-1+this.thumbs.parent().width()?"visible":"hidden"});this.previousLink.css({visibility:n==0?"hidden":"visible"})},centerCurrentImage:function(){this.currentImage.center()}};Yosemite.ProductDefinition=function(){this.selectors=[]};Yosemite.ProductDefinition.prototype={defaultConfig:{skuPattern:"{sku}",quantityPattern:"{quantity}"},afterInit:function(){var n=this;this.selectors.each(function(){this.change(function(){n.skuChanged($(this).val())})})},skuChanged:function(n){if(this.updateUrl&&n){var t=this.element.find("[name=quantity]").first().val(),i=this.updateUrl.replace(this.skuPattern,n).replace(this.quantityPattern,t);$.get(i,$.proxy(function(n){this.element.replaceWith(n)},this))}},cancel:function(){this.element.parents(".popin").first().popin("close")}}